[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"$fGCo9l1hMtNdUiA6QzdUX5X3kLqaWcC5t2kdz4LrvCvc":3,"module-api-shield":3007,"versions":10722},[4,1124,1971,2805],{"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,1419,1801,1878,1900,1934],{"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,1327,1337,1365,1381],{"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,1321,1324],{"title":1314,"path":1315,"stem":1316,"titleTemplate":6},"Dev Containers","\u002Fdocs\u002F4.x\u002Fguide\u002Fbest-practices\u002Fdevcontainers","docs\u002F4.x\u002F3.guide\u002F2.best-practices\u002Fdevcontainers",{"title":1318,"path":1319,"stem":1320,"titleTemplate":6},"Nuxt and Hydration","\u002Fdocs\u002F4.x\u002Fguide\u002Fbest-practices\u002Fhydration","docs\u002F4.x\u002F3.guide\u002F2.best-practices\u002Fhydration",{"title":299,"path":1322,"stem":1323,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fguide\u002Fbest-practices\u002Fperformance","docs\u002F4.x\u002F3.guide\u002F2.best-practices\u002Fperformance",{"title":303,"path":1325,"stem":1326,"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":1328,"stem":1329,"children":1330,"page":108},"\u002Fdocs\u002F4.x\u002Fguide\u002Fai","docs\u002F4.x\u002F3.guide\u002F3.ai",[1331,1334],{"title":314,"path":1332,"stem":1333,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fguide\u002Fai\u002Fmcp","docs\u002F4.x\u002F3.guide\u002F3.ai\u002F1.mcp",{"title":318,"path":1335,"stem":1336,"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":1338,"stem":1339,"children":1340,"page":108},"\u002Fdocs\u002F4.x\u002Fguide\u002Fmodules","docs\u002F4.x\u002F3.guide\u002F4.modules",[1341,1344,1347,1350,1353,1356,1359,1362],{"title":329,"path":1342,"stem":1343,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fguide\u002Fmodules\u002Fgetting-started","docs\u002F4.x\u002F3.guide\u002F4.modules\u002F1.getting-started",{"title":333,"path":1345,"stem":1346,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fguide\u002Fmodules\u002Fmodule-anatomy","docs\u002F4.x\u002F3.guide\u002F4.modules\u002F2.module-anatomy",{"title":337,"path":1348,"stem":1349,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fguide\u002Fmodules\u002Frecipes-basics","docs\u002F4.x\u002F3.guide\u002F4.modules\u002F3.recipes-basics",{"title":341,"path":1351,"stem":1352,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fguide\u002Fmodules\u002Fmodule-dependencies","docs\u002F4.x\u002F3.guide\u002F4.modules\u002F4.module-dependencies",{"title":345,"path":1354,"stem":1355,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fguide\u002Fmodules\u002Frecipes-advanced","docs\u002F4.x\u002F3.guide\u002F4.modules\u002F5.recipes-advanced",{"title":349,"path":1357,"stem":1358,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fguide\u002Fmodules\u002Ftesting","docs\u002F4.x\u002F3.guide\u002F4.modules\u002F6.testing",{"title":353,"path":1360,"stem":1361,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fguide\u002Fmodules\u002Fbest-practices","docs\u002F4.x\u002F3.guide\u002F4.modules\u002F7.best-practices",{"title":357,"path":1363,"stem":1364,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fguide\u002Fmodules\u002Fecosystem","docs\u002F4.x\u002F3.guide\u002F4.modules\u002F8.ecosystem",{"title":361,"titleTemplate":362,"icon":363,"path":1366,"stem":1367,"children":1368,"page":108},"\u002Fdocs\u002F4.x\u002Fguide\u002Frecipes","docs\u002F4.x\u002F3.guide\u002F5.recipes",[1369,1372,1375,1378],{"title":368,"path":1370,"stem":1371,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fguide\u002Frecipes\u002Fcustom-routing","docs\u002F4.x\u002F3.guide\u002F5.recipes\u002F1.custom-routing",{"title":372,"path":1373,"stem":1374,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fguide\u002Frecipes\u002Fvite-plugin","docs\u002F4.x\u002F3.guide\u002F5.recipes\u002F2.vite-plugin",{"title":376,"path":1376,"stem":1377,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fguide\u002Frecipes\u002Fcustom-usefetch","docs\u002F4.x\u002F3.guide\u002F5.recipes\u002F3.custom-usefetch",{"title":380,"path":1379,"stem":1380,"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":1382,"stem":1383,"children":1384,"page":108},"\u002Fdocs\u002F4.x\u002Fguide\u002Fgoing-further","docs\u002F4.x\u002F3.guide\u002F6.going-further",[1385,1388,1391,1394,1397,1400,1403,1406,1409,1412,1416],{"title":391,"path":1386,"stem":1387,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fguide\u002Fgoing-further\u002Fevents","docs\u002F4.x\u002F3.guide\u002F6.going-further\u002F1.events",{"title":395,"path":1389,"stem":1390,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fguide\u002Fgoing-further\u002Fexperimental-features","docs\u002F4.x\u002F3.guide\u002F6.going-further\u002F1.experimental-features",{"title":399,"path":1392,"stem":1393,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fguide\u002Fgoing-further\u002Ffeatures","docs\u002F4.x\u002F3.guide\u002F6.going-further\u002F1.features",{"title":403,"path":1395,"stem":1396,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fguide\u002Fgoing-further\u002Fruntime-config","docs\u002F4.x\u002F3.guide\u002F6.going-further\u002F10.runtime-config",{"title":407,"path":1398,"stem":1399,"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":1401,"stem":1402,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fguide\u002Fgoing-further\u002Fhooks","docs\u002F4.x\u002F3.guide\u002F6.going-further\u002F2.hooks",{"title":415,"path":1404,"stem":1405,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fguide\u002Fgoing-further\u002Fkit","docs\u002F4.x\u002F3.guide\u002F6.going-further\u002F4.kit",{"title":419,"path":1407,"stem":1408,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fguide\u002Fgoing-further\u002Fnuxt-app","docs\u002F4.x\u002F3.guide\u002F6.going-further\u002F6.nuxt-app",{"title":423,"path":1410,"stem":1411,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fguide\u002Fgoing-further\u002Flayers","docs\u002F4.x\u002F3.guide\u002F6.going-further\u002F7.layers",{"title":1413,"path":1414,"stem":1415,"titleTemplate":6},"Creating a Builder","\u002Fdocs\u002F4.x\u002Fguide\u002Fgoing-further\u002Fbuilders","docs\u002F4.x\u002F3.guide\u002F6.going-further\u002F8.builders",{"title":427,"path":1417,"stem":1418,"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":1420,"stem":1421,"children":1422,"page":108},"\u002Fdocs\u002F4.x\u002Fapi","docs\u002F4.x\u002F4.api",[1423,1476,1583,1674,1726,1788,1798],{"title":438,"titleTemplate":439,"icon":324,"path":1424,"stem":1425,"children":1426,"page":108},"\u002Fdocs\u002F4.x\u002Fapi\u002Fcomponents","docs\u002F4.x\u002F4.api\u002F1.components",[1427,1430,1433,1436,1439,1442,1445,1448,1452,1455,1458,1461,1464,1467,1470,1473],{"title":444,"path":1428,"stem":1429,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fapi\u002Fcomponents\u002Fclient-only","docs\u002F4.x\u002F4.api\u002F1.components\u002F1.client-only",{"title":448,"path":1431,"stem":1432,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fapi\u002Fcomponents\u002Fdev-only","docs\u002F4.x\u002F4.api\u002F1.components\u002F1.dev-only",{"title":452,"path":1434,"stem":1435,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fapi\u002Fcomponents\u002Fnuxt-client-fallback","docs\u002F4.x\u002F4.api\u002F1.components\u002F1.nuxt-client-fallback",{"title":456,"path":1437,"stem":1438,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fapi\u002Fcomponents\u002Fnuxt-picture","docs\u002F4.x\u002F4.api\u002F1.components\u002F10.nuxt-picture",{"title":460,"path":1440,"stem":1441,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fapi\u002Fcomponents\u002Fteleports","docs\u002F4.x\u002F4.api\u002F1.components\u002F11.teleports",{"title":464,"path":1443,"stem":1444,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fapi\u002Fcomponents\u002Fnuxt-route-announcer","docs\u002F4.x\u002F4.api\u002F1.components\u002F12.nuxt-route-announcer",{"title":468,"path":1446,"stem":1447,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fapi\u002Fcomponents\u002Fnuxt-time","docs\u002F4.x\u002F4.api\u002F1.components\u002F13.nuxt-time",{"title":1449,"path":1450,"stem":1451,"titleTemplate":6},"\u003CNuxtAnnouncer>","\u002Fdocs\u002F4.x\u002Fapi\u002Fcomponents\u002Fnuxt-announcer","docs\u002F4.x\u002F4.api\u002F1.components\u002F14.nuxt-announcer",{"title":472,"path":1453,"stem":1454,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fapi\u002Fcomponents\u002Fnuxt-page","docs\u002F4.x\u002F4.api\u002F1.components\u002F2.nuxt-page",{"title":476,"path":1456,"stem":1457,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fapi\u002Fcomponents\u002Fnuxt-layout","docs\u002F4.x\u002F4.api\u002F1.components\u002F3.nuxt-layout",{"title":480,"path":1459,"stem":1460,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fapi\u002Fcomponents\u002Fnuxt-link","docs\u002F4.x\u002F4.api\u002F1.components\u002F4.nuxt-link",{"title":484,"path":1462,"stem":1463,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fapi\u002Fcomponents\u002Fnuxt-loading-indicator","docs\u002F4.x\u002F4.api\u002F1.components\u002F5.nuxt-loading-indicator",{"title":488,"path":1465,"stem":1466,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fapi\u002Fcomponents\u002Fnuxt-error-boundary","docs\u002F4.x\u002F4.api\u002F1.components\u002F6.nuxt-error-boundary",{"title":492,"path":1468,"stem":1469,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fapi\u002Fcomponents\u002Fnuxt-welcome","docs\u002F4.x\u002F4.api\u002F1.components\u002F7.nuxt-welcome",{"title":496,"path":1471,"stem":1472,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fapi\u002Fcomponents\u002Fnuxt-island","docs\u002F4.x\u002F4.api\u002F1.components\u002F8.nuxt-island",{"title":500,"path":1474,"stem":1475,"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":1477,"stem":1478,"children":1479,"page":108},"\u002Fdocs\u002F4.x\u002Fapi\u002Fcomposables","docs\u002F4.x\u002F4.api\u002F2.composables",[1480,1484,1488,1491,1495,1498,1501,1504,1507,1510,1513,1516,1519,1523,1526,1529,1532,1535,1538,1541,1544,1547,1550,1553,1556,1559,1562,1565,1568,1571,1574,1577,1580],{"title":1481,"path":1482,"stem":1483,"titleTemplate":6},"createUseAsyncData","\u002Fdocs\u002F4.x\u002Fapi\u002Fcomposables\u002Fcreate-use-async-data","docs\u002F4.x\u002F4.api\u002F2.composables\u002Fcreate-use-async-data",{"title":1485,"path":1486,"stem":1487,"titleTemplate":6},"createUseFetch","\u002Fdocs\u002F4.x\u002Fapi\u002Fcomposables\u002Fcreate-use-fetch","docs\u002F4.x\u002F4.api\u002F2.composables\u002Fcreate-use-fetch",{"title":511,"path":1489,"stem":1490,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fapi\u002Fcomposables\u002Fon-prehydrate","docs\u002F4.x\u002F4.api\u002F2.composables\u002Fon-prehydrate",{"title":1492,"path":1493,"stem":1494,"titleTemplate":6},"useAnnouncer","\u002Fdocs\u002F4.x\u002Fapi\u002Fcomposables\u002Fuse-announcer","docs\u002F4.x\u002F4.api\u002F2.composables\u002Fuse-announcer",{"title":515,"path":1496,"stem":1497,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fapi\u002Fcomposables\u002Fuse-app-config","docs\u002F4.x\u002F4.api\u002F2.composables\u002Fuse-app-config",{"title":519,"path":1499,"stem":1500,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fapi\u002Fcomposables\u002Fuse-async-data","docs\u002F4.x\u002F4.api\u002F2.composables\u002Fuse-async-data",{"title":523,"path":1502,"stem":1503,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fapi\u002Fcomposables\u002Fuse-cookie","docs\u002F4.x\u002F4.api\u002F2.composables\u002Fuse-cookie",{"title":527,"path":1505,"stem":1506,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fapi\u002Fcomposables\u002Fuse-error","docs\u002F4.x\u002F4.api\u002F2.composables\u002Fuse-error",{"title":531,"path":1508,"stem":1509,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fapi\u002Fcomposables\u002Fuse-fetch","docs\u002F4.x\u002F4.api\u002F2.composables\u002Fuse-fetch",{"title":535,"path":1511,"stem":1512,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fapi\u002Fcomposables\u002Fuse-head","docs\u002F4.x\u002F4.api\u002F2.composables\u002Fuse-head",{"title":539,"path":1514,"stem":1515,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fapi\u002Fcomposables\u002Fuse-head-safe","docs\u002F4.x\u002F4.api\u002F2.composables\u002Fuse-head-safe",{"title":543,"path":1517,"stem":1518,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fapi\u002Fcomposables\u002Fuse-hydration","docs\u002F4.x\u002F4.api\u002F2.composables\u002Fuse-hydration",{"title":1520,"path":1521,"stem":1522,"titleTemplate":6},"useLayout","\u002Fdocs\u002F4.x\u002Fapi\u002Fcomposables\u002Fuse-layout","docs\u002F4.x\u002F4.api\u002F2.composables\u002Fuse-layout",{"title":547,"path":1524,"stem":1525,"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":1527,"stem":1528,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fapi\u002Fcomposables\u002Fuse-lazy-fetch","docs\u002F4.x\u002F4.api\u002F2.composables\u002Fuse-lazy-fetch",{"title":555,"path":1530,"stem":1531,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fapi\u002Fcomposables\u002Fuse-loading-indicator","docs\u002F4.x\u002F4.api\u002F2.composables\u002Fuse-loading-indicator",{"title":559,"path":1533,"stem":1534,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fapi\u002Fcomposables\u002Fuse-nuxt-app","docs\u002F4.x\u002F4.api\u002F2.composables\u002Fuse-nuxt-app",{"title":563,"path":1536,"stem":1537,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fapi\u002Fcomposables\u002Fuse-nuxt-data","docs\u002F4.x\u002F4.api\u002F2.composables\u002Fuse-nuxt-data",{"title":567,"path":1539,"stem":1540,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fapi\u002Fcomposables\u002Fuse-preview-mode","docs\u002F4.x\u002F4.api\u002F2.composables\u002Fuse-preview-mode",{"title":571,"path":1542,"stem":1543,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fapi\u002Fcomposables\u002Fuse-request-event","docs\u002F4.x\u002F4.api\u002F2.composables\u002Fuse-request-event",{"title":575,"path":1545,"stem":1546,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fapi\u002Fcomposables\u002Fuse-request-fetch","docs\u002F4.x\u002F4.api\u002F2.composables\u002Fuse-request-fetch",{"title":579,"path":1548,"stem":1549,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fapi\u002Fcomposables\u002Fuse-request-header","docs\u002F4.x\u002F4.api\u002F2.composables\u002Fuse-request-header",{"title":583,"path":1551,"stem":1552,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fapi\u002Fcomposables\u002Fuse-request-headers","docs\u002F4.x\u002F4.api\u002F2.composables\u002Fuse-request-headers",{"title":587,"path":1554,"stem":1555,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fapi\u002Fcomposables\u002Fuse-request-url","docs\u002F4.x\u002F4.api\u002F2.composables\u002Fuse-request-url",{"title":591,"path":1557,"stem":1558,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fapi\u002Fcomposables\u002Fuse-response-header","docs\u002F4.x\u002F4.api\u002F2.composables\u002Fuse-response-header",{"title":595,"path":1560,"stem":1561,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fapi\u002Fcomposables\u002Fuse-route","docs\u002F4.x\u002F4.api\u002F2.composables\u002Fuse-route",{"title":599,"path":1563,"stem":1564,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fapi\u002Fcomposables\u002Fuse-route-announcer","docs\u002F4.x\u002F4.api\u002F2.composables\u002Fuse-route-announcer",{"title":603,"path":1566,"stem":1567,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fapi\u002Fcomposables\u002Fuse-router","docs\u002F4.x\u002F4.api\u002F2.composables\u002Fuse-router",{"title":607,"path":1569,"stem":1570,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fapi\u002Fcomposables\u002Fuse-runtime-config","docs\u002F4.x\u002F4.api\u002F2.composables\u002Fuse-runtime-config",{"title":611,"path":1572,"stem":1573,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fapi\u002Fcomposables\u002Fuse-runtime-hook","docs\u002F4.x\u002F4.api\u002F2.composables\u002Fuse-runtime-hook",{"title":615,"path":1575,"stem":1576,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fapi\u002Fcomposables\u002Fuse-seo-meta","docs\u002F4.x\u002F4.api\u002F2.composables\u002Fuse-seo-meta",{"title":619,"path":1578,"stem":1579,"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":1581,"stem":1582,"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":1584,"stem":1585,"children":1586,"page":108},"\u002Fdocs\u002F4.x\u002Fapi\u002Futils","docs\u002F4.x\u002F4.api\u002F3.utils",[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,1662,1665,1668,1671],{"title":634,"path":1588,"stem":1589,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fapi\u002Futils\u002Fdollarfetch","docs\u002F4.x\u002F4.api\u002F3.utils\u002F$fetch",{"title":638,"path":1591,"stem":1592,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fapi\u002Futils\u002Fabort-navigation","docs\u002F4.x\u002F4.api\u002F3.utils\u002Fabort-navigation",{"title":642,"path":1594,"stem":1595,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fapi\u002Futils\u002Fadd-route-middleware","docs\u002F4.x\u002F4.api\u002F3.utils\u002Fadd-route-middleware",{"title":646,"path":1597,"stem":1598,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fapi\u002Futils\u002Fcall-once","docs\u002F4.x\u002F4.api\u002F3.utils\u002Fcall-once",{"title":650,"path":1600,"stem":1601,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fapi\u002Futils\u002Fclear-error","docs\u002F4.x\u002F4.api\u002F3.utils\u002Fclear-error",{"title":654,"path":1603,"stem":1604,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fapi\u002Futils\u002Fclear-nuxt-data","docs\u002F4.x\u002F4.api\u002F3.utils\u002Fclear-nuxt-data",{"title":658,"path":1606,"stem":1607,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fapi\u002Futils\u002Fclear-nuxt-state","docs\u002F4.x\u002F4.api\u002F3.utils\u002Fclear-nuxt-state",{"title":662,"path":1609,"stem":1610,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fapi\u002Futils\u002Fcreate-error","docs\u002F4.x\u002F4.api\u002F3.utils\u002Fcreate-error",{"title":666,"path":1612,"stem":1613,"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":1615,"stem":1616,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fapi\u002Futils\u002Fdefine-nuxt-component","docs\u002F4.x\u002F4.api\u002F3.utils\u002Fdefine-nuxt-component",{"title":674,"path":1618,"stem":1619,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fapi\u002Futils\u002Fdefine-nuxt-plugin","docs\u002F4.x\u002F4.api\u002F3.utils\u002Fdefine-nuxt-plugin",{"title":678,"path":1621,"stem":1622,"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":1624,"stem":1625,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fapi\u002Futils\u002Fdefine-page-meta","docs\u002F4.x\u002F4.api\u002F3.utils\u002Fdefine-page-meta",{"title":686,"path":1627,"stem":1628,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fapi\u002Futils\u002Fdefine-route-rules","docs\u002F4.x\u002F4.api\u002F3.utils\u002Fdefine-route-rules",{"title":690,"path":1630,"stem":1631,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fapi\u002Futils\u002Fnavigate-to","docs\u002F4.x\u002F4.api\u002F3.utils\u002Fnavigate-to",{"title":694,"path":1633,"stem":1634,"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":1636,"stem":1637,"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":1639,"stem":1640,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fapi\u002Futils\u002Fon-nuxt-ready","docs\u002F4.x\u002F4.api\u002F3.utils\u002Fon-nuxt-ready",{"title":706,"path":1642,"stem":1643,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fapi\u002Futils\u002Fprefetch-components","docs\u002F4.x\u002F4.api\u002F3.utils\u002Fprefetch-components",{"title":710,"path":1645,"stem":1646,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fapi\u002Futils\u002Fpreload-components","docs\u002F4.x\u002F4.api\u002F3.utils\u002Fpreload-components",{"title":714,"path":1648,"stem":1649,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fapi\u002Futils\u002Fpreload-route-components","docs\u002F4.x\u002F4.api\u002F3.utils\u002Fpreload-route-components",{"title":718,"path":1651,"stem":1652,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fapi\u002Futils\u002Fprerender-routes","docs\u002F4.x\u002F4.api\u002F3.utils\u002Fprerender-routes",{"title":722,"path":1654,"stem":1655,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fapi\u002Futils\u002Frefresh-cookie","docs\u002F4.x\u002F4.api\u002F3.utils\u002Frefresh-cookie",{"title":726,"path":1657,"stem":1658,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fapi\u002Futils\u002Frefresh-nuxt-data","docs\u002F4.x\u002F4.api\u002F3.utils\u002Frefresh-nuxt-data",{"title":730,"path":1660,"stem":1661,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fapi\u002Futils\u002Freload-nuxt-app","docs\u002F4.x\u002F4.api\u002F3.utils\u002Freload-nuxt-app",{"title":734,"path":1663,"stem":1664,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fapi\u002Futils\u002Fset-page-layout","docs\u002F4.x\u002F4.api\u002F3.utils\u002Fset-page-layout",{"title":738,"path":1666,"stem":1667,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fapi\u002Futils\u002Fset-response-status","docs\u002F4.x\u002F4.api\u002F3.utils\u002Fset-response-status",{"title":742,"path":1669,"stem":1670,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fapi\u002Futils\u002Fshow-error","docs\u002F4.x\u002F4.api\u002F3.utils\u002Fshow-error",{"title":746,"path":1672,"stem":1673,"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":1675,"stem":1676,"children":1677,"page":108},"\u002Fdocs\u002F4.x\u002Fapi\u002Fcommands","docs\u002F4.x\u002F4.api\u002F4.commands",[1678,1681,1684,1687,1690,1693,1696,1699,1702,1705,1708,1711,1714,1717,1720,1723],{"title":757,"path":1679,"stem":1680,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fapi\u002Fcommands\u002Fadd","docs\u002F4.x\u002F4.api\u002F4.commands\u002Fadd",{"title":761,"path":1682,"stem":1683,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fapi\u002Fcommands\u002Fanalyze","docs\u002F4.x\u002F4.api\u002F4.commands\u002Fanalyze",{"title":765,"path":1685,"stem":1686,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fapi\u002Fcommands\u002Fbuild","docs\u002F4.x\u002F4.api\u002F4.commands\u002Fbuild",{"title":769,"path":1688,"stem":1689,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fapi\u002Fcommands\u002Fbuild-module","docs\u002F4.x\u002F4.api\u002F4.commands\u002Fbuild-module",{"title":773,"path":1691,"stem":1692,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fapi\u002Fcommands\u002Fcleanup","docs\u002F4.x\u002F4.api\u002F4.commands\u002Fcleanup",{"title":777,"path":1694,"stem":1695,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fapi\u002Fcommands\u002Fdev","docs\u002F4.x\u002F4.api\u002F4.commands\u002Fdev",{"title":781,"path":1697,"stem":1698,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fapi\u002Fcommands\u002Fdevtools","docs\u002F4.x\u002F4.api\u002F4.commands\u002Fdevtools",{"title":785,"path":1700,"stem":1701,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fapi\u002Fcommands\u002Fgenerate","docs\u002F4.x\u002F4.api\u002F4.commands\u002Fgenerate",{"title":789,"path":1703,"stem":1704,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fapi\u002Fcommands\u002Finfo","docs\u002F4.x\u002F4.api\u002F4.commands\u002Finfo",{"title":793,"path":1706,"stem":1707,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fapi\u002Fcommands\u002Finit","docs\u002F4.x\u002F4.api\u002F4.commands\u002Finit",{"title":797,"path":1709,"stem":1710,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fapi\u002Fcommands\u002Fmodule","docs\u002F4.x\u002F4.api\u002F4.commands\u002Fmodule",{"title":801,"path":1712,"stem":1713,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fapi\u002Fcommands\u002Fprepare","docs\u002F4.x\u002F4.api\u002F4.commands\u002Fprepare",{"title":805,"path":1715,"stem":1716,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fapi\u002Fcommands\u002Fpreview","docs\u002F4.x\u002F4.api\u002F4.commands\u002Fpreview",{"title":809,"path":1718,"stem":1719,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fapi\u002Fcommands\u002Ftest","docs\u002F4.x\u002F4.api\u002F4.commands\u002Ftest",{"title":813,"path":1721,"stem":1722,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fapi\u002Fcommands\u002Ftypecheck","docs\u002F4.x\u002F4.api\u002F4.commands\u002Ftypecheck",{"title":817,"path":1724,"stem":1725,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fapi\u002Fcommands\u002Fupgrade","docs\u002F4.x\u002F4.api\u002F4.commands\u002Fupgrade",{"title":415,"titleTemplate":821,"icon":822,"path":1727,"stem":1728,"children":1729,"page":108},"\u002Fdocs\u002F4.x\u002Fapi\u002Fkit","docs\u002F4.x\u002F4.api\u002F5.kit",[1730,1733,1736,1739,1743,1746,1749,1752,1755,1758,1761,1764,1767,1770,1773,1776,1779,1782,1785],{"title":276,"path":1731,"stem":1732,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fapi\u002Fkit\u002Fmodules","docs\u002F4.x\u002F4.api\u002F5.kit\u002F1.modules",{"title":403,"path":1734,"stem":1735,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fapi\u002Fkit\u002Fruntime-config","docs\u002F4.x\u002F4.api\u002F5.kit\u002F10.runtime-config",{"title":833,"path":1737,"stem":1738,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fapi\u002Fkit\u002Ftemplates","docs\u002F4.x\u002F4.api\u002F5.kit\u002F10.templates",{"title":1740,"path":1741,"stem":1742,"titleTemplate":6},"App Config","\u002Fdocs\u002F4.x\u002Fapi\u002Fkit\u002Fapp-config","docs\u002F4.x\u002F4.api\u002F5.kit\u002F11.app-config",{"title":837,"path":1744,"stem":1745,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fapi\u002Fkit\u002Fnitro","docs\u002F4.x\u002F4.api\u002F5.kit\u002F12.nitro",{"title":841,"path":1747,"stem":1748,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fapi\u002Fkit\u002Fresolving","docs\u002F4.x\u002F4.api\u002F5.kit\u002F13.resolving",{"title":845,"path":1750,"stem":1751,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fapi\u002Fkit\u002Flogging","docs\u002F4.x\u002F4.api\u002F5.kit\u002F14.logging",{"title":849,"path":1753,"stem":1754,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fapi\u002Fkit\u002Fbuilder","docs\u002F4.x\u002F4.api\u002F5.kit\u002F15.builder",{"title":853,"path":1756,"stem":1757,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fapi\u002Fkit\u002Fexamples","docs\u002F4.x\u002F4.api\u002F5.kit\u002F16.examples",{"title":84,"path":1759,"stem":1760,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fapi\u002Fkit\u002Flayers","docs\u002F4.x\u002F4.api\u002F5.kit\u002F17.layers",{"title":860,"path":1762,"stem":1763,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fapi\u002Fkit\u002Fprogrammatic","docs\u002F4.x\u002F4.api\u002F5.kit\u002F2.programmatic",{"title":864,"path":1765,"stem":1766,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fapi\u002Fkit\u002Fcompatibility","docs\u002F4.x\u002F4.api\u002F5.kit\u002F3.compatibility",{"title":268,"path":1768,"stem":1769,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fapi\u002Fkit\u002Fautoimports","docs\u002F4.x\u002F4.api\u002F5.kit\u002F4.autoimports",{"title":438,"path":1771,"stem":1772,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fapi\u002Fkit\u002Fcomponents","docs\u002F4.x\u002F4.api\u002F5.kit\u002F5.components",{"title":874,"path":1774,"stem":1775,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fapi\u002Fkit\u002Fcontext","docs\u002F4.x\u002F4.api\u002F5.kit\u002F6.context",{"title":878,"path":1777,"stem":1778,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fapi\u002Fkit\u002Fpages","docs\u002F4.x\u002F4.api\u002F5.kit\u002F7.pages",{"title":882,"path":1780,"stem":1781,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fapi\u002Fkit\u002Flayout","docs\u002F4.x\u002F4.api\u002F5.kit\u002F8.layout",{"title":886,"path":1783,"stem":1784,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fapi\u002Fkit\u002Fhead","docs\u002F4.x\u002F4.api\u002F5.kit\u002F9.head",{"title":890,"path":1786,"stem":1787,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fapi\u002Fkit\u002Fplugins","docs\u002F4.x\u002F4.api\u002F5.kit\u002F9.plugins",{"title":894,"titleTemplate":6,"icon":895,"path":1789,"stem":1790,"children":1791,"page":108},"\u002Fdocs\u002F4.x\u002Fapi\u002Fadvanced","docs\u002F4.x\u002F4.api\u002F6.advanced",[1792,1795],{"title":411,"path":1793,"stem":1794,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fapi\u002Fadvanced\u002Fhooks","docs\u002F4.x\u002F4.api\u002F6.advanced\u002F1.hooks",{"title":903,"path":1796,"stem":1797,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fapi\u002Fadvanced\u002Fimport-meta","docs\u002F4.x\u002F4.api\u002F6.advanced\u002F2.import-meta",{"title":907,"path":1799,"stem":1800,"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":1802,"stem":1803,"children":1804,"page":108},"\u002Fdocs\u002F4.x\u002Fexamples","docs\u002F4.x\u002F4.examples",[1805,1808,1827,1840,1871],{"title":918,"path":1806,"stem":1807,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fexamples\u002Fhello-world","docs\u002F4.x\u002F4.examples\u002F0.hello-world",{"title":399,"path":1809,"stem":1810,"children":1811,"page":108},"\u002Fdocs\u002F4.x\u002Fexamples\u002Ffeatures","docs\u002F4.x\u002F4.examples\u002F1.features",[1812,1815,1818,1821,1824],{"title":926,"path":1813,"stem":1814,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fexamples\u002Ffeatures\u002Fauto-imports","docs\u002F4.x\u002F4.examples\u002F1.features\u002F1.auto-imports",{"title":64,"path":1816,"stem":1817,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fexamples\u002Ffeatures\u002Fdata-fetching","docs\u002F4.x\u002F4.examples\u002F1.features\u002F2.data-fetching",{"title":69,"path":1819,"stem":1820,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fexamples\u002Ffeatures\u002Fstate-management","docs\u002F4.x\u002F4.examples\u002F1.features\u002F3.state-management",{"title":936,"path":1822,"stem":1823,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fexamples\u002Ffeatures\u002Fmeta-tags","docs\u002F4.x\u002F4.examples\u002F1.features\u002F4.meta-tags",{"title":940,"path":1825,"stem":1826,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fexamples\u002Ffeatures\u002Flayouts","docs\u002F4.x\u002F4.examples\u002F1.features\u002F5.layouts",{"title":49,"path":1828,"stem":1829,"children":1830,"page":108},"\u002Fdocs\u002F4.x\u002Fexamples\u002Frouting","docs\u002F4.x\u002F4.examples\u002F2.routing",[1831,1834,1837],{"title":948,"path":1832,"stem":1833,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fexamples\u002Frouting\u002Fmiddleware","docs\u002F4.x\u002F4.examples\u002F2.routing\u002Fmiddleware",{"title":878,"path":1835,"stem":1836,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fexamples\u002Frouting\u002Fpages","docs\u002F4.x\u002F4.examples\u002F2.routing\u002Fpages",{"title":955,"path":1838,"stem":1839,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fexamples\u002Frouting\u002Funiversal-router","docs\u002F4.x\u002F4.examples\u002F2.routing\u002Funiversal-router",{"title":894,"path":1841,"stem":1842,"children":1843,"page":108},"\u002Fdocs\u002F4.x\u002Fexamples\u002Fadvanced","docs\u002F4.x\u002F4.examples\u002F4.advanced",[1844,1847,1850,1853,1856,1859,1862,1865,1868],{"title":84,"path":1845,"stem":1846,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fexamples\u002Fadvanced\u002Fconfig-extends","docs\u002F4.x\u002F4.examples\u002F4.advanced\u002Fconfig-extends",{"title":74,"path":1848,"stem":1849,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fexamples\u002Fadvanced\u002Ferror-handling","docs\u002F4.x\u002F4.examples\u002F4.advanced\u002Ferror-handling",{"title":969,"path":1851,"stem":1852,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fexamples\u002Fadvanced\u002Fjsx","docs\u002F4.x\u002F4.examples\u002F4.advanced\u002Fjsx",{"title":973,"path":1854,"stem":1855,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fexamples\u002Fadvanced\u002Flocale","docs\u002F4.x\u002F4.examples\u002F4.advanced\u002Flocale",{"title":977,"path":1857,"stem":1858,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fexamples\u002Fadvanced\u002Fmodule-extend-pages","docs\u002F4.x\u002F4.examples\u002F4.advanced\u002Fmodule-extend-pages",{"title":981,"path":1860,"stem":1861,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fexamples\u002Fadvanced\u002Fteleport","docs\u002F4.x\u002F4.examples\u002F4.advanced\u002Fteleport",{"title":99,"path":1863,"stem":1864,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fexamples\u002Fadvanced\u002Ftesting","docs\u002F4.x\u002F4.examples\u002F4.advanced\u002Ftesting",{"title":523,"path":1866,"stem":1867,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fexamples\u002Fadvanced\u002Fuse-cookie","docs\u002F4.x\u002F4.examples\u002F4.advanced\u002Fuse-cookie",{"title":991,"path":1869,"stem":1870,"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":1872,"stem":1873,"children":1874,"page":108},"\u002Fdocs\u002F4.x\u002Fexamples\u002Fexperimental","docs\u002F4.x\u002F4.examples\u002F7.experimental",[1875],{"title":1000,"path":1876,"stem":1877,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fexamples\u002Fexperimental\u002Fwasm","docs\u002F4.x\u002F4.examples\u002F7.experimental\u002Fwasm",{"title":1004,"titleTemplate":1005,"icon":1006,"path":1879,"stem":1880,"children":1881,"page":108},"\u002Fdocs\u002F4.x\u002Fcommunity","docs\u002F4.x\u002F5.community",[1882,1885,1888,1891,1894,1897],{"title":1011,"path":1883,"stem":1884,"titleTemplate":6,"icon":1014},"\u002Fdocs\u002F4.x\u002Fcommunity\u002Fgetting-help","docs\u002F4.x\u002F5.community\u002F2.getting-help",{"title":1016,"path":1886,"stem":1887,"titleTemplate":6,"icon":1019},"\u002Fdocs\u002F4.x\u002Fcommunity\u002Freporting-bugs","docs\u002F4.x\u002F5.community\u002F3.reporting-bugs",{"title":1021,"path":1889,"stem":1890,"titleTemplate":6,"icon":1024},"\u002Fdocs\u002F4.x\u002Fcommunity\u002Fcontribution","docs\u002F4.x\u002F5.community\u002F4.contribution",{"title":1026,"path":1892,"stem":1893,"titleTemplate":6,"icon":1029},"\u002Fdocs\u002F4.x\u002Fcommunity\u002Fframework-contribution","docs\u002F4.x\u002F5.community\u002F5.framework-contribution",{"title":1031,"path":1895,"stem":1896,"titleTemplate":6,"icon":1034},"\u002Fdocs\u002F4.x\u002Fcommunity\u002Froadmap","docs\u002F4.x\u002F5.community\u002F6.roadmap",{"title":1036,"path":1898,"stem":1899,"titleTemplate":6,"icon":1039},"\u002Fdocs\u002F4.x\u002Fcommunity\u002Fchangelog","docs\u002F4.x\u002F5.community\u002F7.changelog",{"title":1041,"titleTemplate":1042,"icon":1043,"path":1901,"stem":1902,"children":1903,"page":108},"\u002Fdocs\u002F4.x\u002Fbridge","docs\u002F4.x\u002F6.bridge",[1904,1907,1910,1913,1916,1919,1922,1925,1928,1931],{"title":1048,"path":1905,"stem":1906,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fbridge\u002Foverview","docs\u002F4.x\u002F6.bridge\u002F1.overview",{"title":29,"path":1908,"stem":1909,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fbridge\u002Fconfiguration","docs\u002F4.x\u002F6.bridge\u002F10.configuration",{"title":280,"path":1911,"stem":1912,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fbridge\u002Ftypescript","docs\u002F4.x\u002F6.bridge\u002F2.typescript",{"title":1058,"path":1914,"stem":1915,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fbridge\u002Fbridge-composition-api","docs\u002F4.x\u002F6.bridge\u002F3.bridge-composition-api",{"title":1062,"path":1917,"stem":1918,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fbridge\u002Fplugins-and-middleware","docs\u002F4.x\u002F6.bridge\u002F4.plugins-and-middleware",{"title":1066,"path":1920,"stem":1921,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fbridge\u002Fnuxt3-compatible-api","docs\u002F4.x\u002F6.bridge\u002F5.nuxt3-compatible-api",{"title":936,"path":1923,"stem":1924,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fbridge\u002Fmeta","docs\u002F4.x\u002F6.bridge\u002F6.meta",{"title":403,"path":1926,"stem":1927,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fbridge\u002Fruntime-config","docs\u002F4.x\u002F6.bridge\u002F7.runtime-config",{"title":837,"path":1929,"stem":1930,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fbridge\u002Fnitro","docs\u002F4.x\u002F6.bridge\u002F8.nitro",{"title":1079,"path":1932,"stem":1933,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fbridge\u002Fvite","docs\u002F4.x\u002F6.bridge\u002F9.vite",{"title":1083,"titleTemplate":1084,"icon":107,"path":1935,"stem":1936,"children":1937,"page":108},"\u002Fdocs\u002F4.x\u002Fmigration","docs\u002F4.x\u002F7.migration",[1938,1941,1944,1947,1950,1953,1956,1959,1962,1965,1968],{"title":1048,"path":1939,"stem":1940,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fmigration\u002Foverview","docs\u002F4.x\u002F7.migration\u002F1.overview",{"title":1092,"path":1942,"stem":1943,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fmigration\u002Fbundling","docs\u002F4.x\u002F7.migration\u002F10.bundling",{"title":79,"path":1945,"stem":1946,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fmigration\u002Fserver","docs\u002F4.x\u002F7.migration\u002F11.server",{"title":29,"path":1948,"stem":1949,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fmigration\u002Fconfiguration","docs\u002F4.x\u002F7.migration\u002F2.configuration",{"title":276,"path":1951,"stem":1952,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fmigration\u002Fmodule-authors","docs\u002F4.x\u002F7.migration\u002F20.module-authors",{"title":926,"path":1954,"stem":1955,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fmigration\u002Fauto-imports","docs\u002F4.x\u002F7.migration\u002F3.auto-imports",{"title":936,"path":1957,"stem":1958,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fmigration\u002Fmeta","docs\u002F4.x\u002F7.migration\u002F4.meta",{"title":1062,"path":1960,"stem":1961,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fmigration\u002Fplugins-and-middleware","docs\u002F4.x\u002F7.migration\u002F5.plugins-and-middleware",{"title":1114,"path":1963,"stem":1964,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fmigration\u002Fpages-and-layouts","docs\u002F4.x\u002F7.migration\u002F6.pages-and-layouts",{"title":1118,"path":1966,"stem":1967,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fmigration\u002Fcomponent-options","docs\u002F4.x\u002F7.migration\u002F7.component-options",{"title":403,"path":1969,"stem":1970,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fmigration\u002Fruntime-config","docs\u002F4.x\u002F7.migration\u002F8.runtime-config",{"title":5,"titleTemplate":6,"icon":7,"path":1972,"stem":1973,"children":1974,"page":108},"\u002Fdocs\u002F5.x","docs\u002F5.x",[1975,2033,2123,2259,2635,2712,2734,2768],{"title":12,"titleTemplate":13,"icon":14,"path":1976,"stem":1977,"children":1978,"page":108},"\u002Fdocs\u002F5.x\u002Fgetting-started","docs\u002F5.x\u002F1.getting-started",[1979,1982,1985,1988,1991,1994,1997,2000,2003,2006,2009,2012,2015,2018,2021,2024,2027,2030],{"title":19,"path":1980,"stem":1981,"titleTemplate":6,"icon":22},"\u002Fdocs\u002F5.x\u002Fgetting-started\u002Fintroduction","docs\u002F5.x\u002F1.getting-started\u002F01.introduction",{"title":24,"path":1983,"stem":1984,"titleTemplate":6,"icon":27},"\u002Fdocs\u002F5.x\u002Fgetting-started\u002Finstallation","docs\u002F5.x\u002F1.getting-started\u002F02.installation",{"title":29,"path":1986,"stem":1987,"titleTemplate":6,"icon":32},"\u002Fdocs\u002F5.x\u002Fgetting-started\u002Fconfiguration","docs\u002F5.x\u002F1.getting-started\u002F03.configuration",{"title":34,"path":1989,"stem":1990,"titleTemplate":6,"icon":37},"\u002Fdocs\u002F5.x\u002Fgetting-started\u002Fviews","docs\u002F5.x\u002F1.getting-started\u002F04.views",{"title":39,"path":1992,"stem":1993,"titleTemplate":6,"icon":42},"\u002Fdocs\u002F5.x\u002Fgetting-started\u002Fassets","docs\u002F5.x\u002F1.getting-started\u002F05.assets",{"title":44,"path":1995,"stem":1996,"titleTemplate":6,"icon":47},"\u002Fdocs\u002F5.x\u002Fgetting-started\u002Fstyling","docs\u002F5.x\u002F1.getting-started\u002F06.styling",{"title":49,"path":1998,"stem":1999,"titleTemplate":6,"icon":52},"\u002Fdocs\u002F5.x\u002Fgetting-started\u002Frouting","docs\u002F5.x\u002F1.getting-started\u002F07.routing",{"title":54,"path":2001,"stem":2002,"titleTemplate":6,"icon":57},"\u002Fdocs\u002F5.x\u002Fgetting-started\u002Fseo-meta","docs\u002F5.x\u002F1.getting-started\u002F08.seo-meta",{"title":59,"path":2004,"stem":2005,"titleTemplate":6,"icon":62},"\u002Fdocs\u002F5.x\u002Fgetting-started\u002Ftransitions","docs\u002F5.x\u002F1.getting-started\u002F09.transitions",{"title":64,"path":2007,"stem":2008,"titleTemplate":6,"icon":67},"\u002Fdocs\u002F5.x\u002Fgetting-started\u002Fdata-fetching","docs\u002F5.x\u002F1.getting-started\u002F10.data-fetching",{"title":69,"path":2010,"stem":2011,"titleTemplate":6,"icon":72},"\u002Fdocs\u002F5.x\u002Fgetting-started\u002Fstate-management","docs\u002F5.x\u002F1.getting-started\u002F11.state-management",{"title":74,"path":2013,"stem":2014,"titleTemplate":6,"icon":77},"\u002Fdocs\u002F5.x\u002Fgetting-started\u002Ferror-handling","docs\u002F5.x\u002F1.getting-started\u002F12.error-handling",{"title":79,"path":2016,"stem":2017,"titleTemplate":6,"icon":82},"\u002Fdocs\u002F5.x\u002Fgetting-started\u002Fserver","docs\u002F5.x\u002F1.getting-started\u002F13.server",{"title":84,"path":2019,"stem":2020,"titleTemplate":6,"icon":87},"\u002Fdocs\u002F5.x\u002Fgetting-started\u002Flayers","docs\u002F5.x\u002F1.getting-started\u002F14.layers",{"title":89,"path":2022,"stem":2023,"titleTemplate":6,"icon":92},"\u002Fdocs\u002F5.x\u002Fgetting-started\u002Fprerendering","docs\u002F5.x\u002F1.getting-started\u002F15.prerendering",{"title":94,"path":2025,"stem":2026,"titleTemplate":6,"icon":97},"\u002Fdocs\u002F5.x\u002Fgetting-started\u002Fdeployment","docs\u002F5.x\u002F1.getting-started\u002F16.deployment",{"title":99,"path":2028,"stem":2029,"titleTemplate":6,"icon":102},"\u002Fdocs\u002F5.x\u002Fgetting-started\u002Ftesting","docs\u002F5.x\u002F1.getting-started\u002F17.testing",{"title":104,"path":2031,"stem":2032,"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":2034,"stem":2035,"children":2036,"page":108},"\u002Fdocs\u002F5.x\u002Fdirectory-structure","docs\u002F5.x\u002F2.directory-structure",[2037,2040,2043,2081,2084,2087,2090,2093,2096,2099,2102,2105,2108,2111,2114,2117,2120],{"title":117,"path":2038,"stem":2039,"titleTemplate":6,"icon":120},"\u002Fdocs\u002F5.x\u002Fdirectory-structure\u002Fnuxt","docs\u002F5.x\u002F2.directory-structure\u002F0.nuxt",{"title":122,"path":2041,"stem":2042,"titleTemplate":6,"icon":125},"\u002Fdocs\u002F5.x\u002Fdirectory-structure\u002Foutput","docs\u002F5.x\u002F2.directory-structure\u002F0.output",{"title":1197,"titleTemplate":111,"head":2044,"defaultOpen":1200,"icon":1201,"path":2045,"stem":2046,"children":2047,"page":108},{"title":1199},"\u002Fdocs\u002F5.x\u002Fdirectory-structure\u002Fapp","docs\u002F5.x\u002F2.directory-structure\u002F1.app",[2048,2051,2054,2057,2060,2063,2066,2069,2072,2075,2078],{"title":127,"path":2049,"stem":2050,"titleTemplate":6,"icon":130},"\u002Fdocs\u002F5.x\u002Fdirectory-structure\u002Fapp\u002Fassets","docs\u002F5.x\u002F2.directory-structure\u002F1.app\u002F1.assets",{"title":132,"path":2052,"stem":2053,"titleTemplate":6,"icon":135},"\u002Fdocs\u002F5.x\u002Fdirectory-structure\u002Fapp\u002Fcomponents","docs\u002F5.x\u002F2.directory-structure\u002F1.app\u002F1.components",{"title":137,"path":2055,"stem":2056,"titleTemplate":6,"icon":140},"\u002Fdocs\u002F5.x\u002Fdirectory-structure\u002Fapp\u002Fcomposables","docs\u002F5.x\u002F2.directory-structure\u002F1.app\u002F1.composables",{"title":152,"path":2058,"stem":2059,"titleTemplate":6,"icon":155},"\u002Fdocs\u002F5.x\u002Fdirectory-structure\u002Fapp\u002Flayouts","docs\u002F5.x\u002F2.directory-structure\u002F1.app\u002F1.layouts",{"title":157,"path":2061,"stem":2062,"titleTemplate":6,"icon":160},"\u002Fdocs\u002F5.x\u002Fdirectory-structure\u002Fapp\u002Fmiddleware","docs\u002F5.x\u002F2.directory-structure\u002F1.app\u002F1.middleware",{"title":171,"path":2064,"stem":2065,"titleTemplate":6,"icon":155},"\u002Fdocs\u002F5.x\u002Fdirectory-structure\u002Fapp\u002Fpages","docs\u002F5.x\u002F2.directory-structure\u002F1.app\u002F1.pages",{"title":175,"path":2067,"stem":2068,"titleTemplate":6,"icon":178},"\u002Fdocs\u002F5.x\u002Fdirectory-structure\u002Fapp\u002Fplugins","docs\u002F5.x\u002F2.directory-structure\u002F1.app\u002F1.plugins",{"title":195,"path":2070,"stem":2071,"titleTemplate":6,"icon":198},"\u002Fdocs\u002F5.x\u002Fdirectory-structure\u002Fapp\u002Futils","docs\u002F5.x\u002F2.directory-structure\u002F1.app\u002F1.utils",{"title":219,"path":2073,"stem":2074,"titleTemplate":6,"icon":222},"\u002Fdocs\u002F5.x\u002Fdirectory-structure\u002Fapp\u002Fapp","docs\u002F5.x\u002F2.directory-structure\u002F1.app\u002F3.app",{"title":224,"path":2076,"stem":2077,"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":2079,"stem":2080,"titleTemplate":6,"icon":222},"\u002Fdocs\u002F5.x\u002Fdirectory-structure\u002Fapp\u002Ferror","docs\u002F5.x\u002F2.directory-structure\u002F1.app\u002F3.error",{"title":142,"path":2082,"stem":2083,"titleTemplate":6,"icon":145},"\u002Fdocs\u002F5.x\u002Fdirectory-structure\u002Fcontent","docs\u002F5.x\u002F2.directory-structure\u002F1.content",{"title":147,"path":2085,"stem":2086,"titleTemplate":6,"icon":150},"\u002Fdocs\u002F5.x\u002Fdirectory-structure\u002Flayers","docs\u002F5.x\u002F2.directory-structure\u002F1.layers",{"title":162,"path":2088,"stem":2089,"titleTemplate":6,"icon":150},"\u002Fdocs\u002F5.x\u002Fdirectory-structure\u002Fmodules","docs\u002F5.x\u002F2.directory-structure\u002F1.modules",{"title":166,"path":2091,"stem":2092,"titleTemplate":6,"icon":169},"\u002Fdocs\u002F5.x\u002Fdirectory-structure\u002Fnode_modules","docs\u002F5.x\u002F2.directory-structure\u002F1.node_modules",{"title":180,"path":2094,"stem":2095,"titleTemplate":6,"icon":183},"\u002Fdocs\u002F5.x\u002Fdirectory-structure\u002Fpublic","docs\u002F5.x\u002F2.directory-structure\u002F1.public",{"title":185,"path":2097,"stem":2098,"titleTemplate":6,"icon":188},"\u002Fdocs\u002F5.x\u002Fdirectory-structure\u002Fserver","docs\u002F5.x\u002F2.directory-structure\u002F1.server",{"title":190,"path":2100,"stem":2101,"titleTemplate":6,"icon":193},"\u002Fdocs\u002F5.x\u002Fdirectory-structure\u002Fshared","docs\u002F5.x\u002F2.directory-structure\u002F1.shared",{"title":200,"path":2103,"stem":2104,"titleTemplate":6,"icon":203},"\u002Fdocs\u002F5.x\u002Fdirectory-structure\u002Fenv","docs\u002F5.x\u002F2.directory-structure\u002F2.env",{"title":205,"path":2106,"stem":2107,"titleTemplate":6,"icon":208},"\u002Fdocs\u002F5.x\u002Fdirectory-structure\u002Fgitignore","docs\u002F5.x\u002F2.directory-structure\u002F2.gitignore",{"title":210,"path":2109,"stem":2110,"titleTemplate":6,"icon":213},"\u002Fdocs\u002F5.x\u002Fdirectory-structure\u002Fnuxtignore","docs\u002F5.x\u002F2.directory-structure\u002F2.nuxtignore",{"title":215,"path":2112,"stem":2113,"titleTemplate":6,"icon":213},"\u002Fdocs\u002F5.x\u002Fdirectory-structure\u002Fnuxtrc","docs\u002F5.x\u002F2.directory-structure\u002F2.nuxtrc",{"title":233,"path":2115,"stem":2116,"titleTemplate":6,"icon":213},"\u002Fdocs\u002F5.x\u002Fdirectory-structure\u002Fnuxt-config","docs\u002F5.x\u002F2.directory-structure\u002F3.nuxt-config",{"title":237,"path":2118,"stem":2119,"titleTemplate":6,"icon":240},"\u002Fdocs\u002F5.x\u002Fdirectory-structure\u002Fpackage","docs\u002F5.x\u002F2.directory-structure\u002F3.package",{"title":242,"path":2121,"stem":2122,"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":2124,"stem":2125,"children":2126,"page":108},"\u002Fdocs\u002F5.x\u002Fguide","docs\u002F5.x\u002F3.guide",[2127,2152,2168,2178,2206,2222],{"title":253,"titleTemplate":254,"icon":255,"path":2128,"stem":2129,"children":2130,"page":108},"\u002Fdocs\u002F5.x\u002Fguide\u002Fconcepts","docs\u002F5.x\u002F3.guide\u002F1.concepts",[2131,2134,2137,2140,2143,2146,2149],{"title":260,"path":2132,"stem":2133,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fguide\u002Fconcepts\u002Frendering","docs\u002F5.x\u002F3.guide\u002F1.concepts\u002F1.rendering",{"title":264,"path":2135,"stem":2136,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fguide\u002Fconcepts\u002Fnuxt-lifecycle","docs\u002F5.x\u002F3.guide\u002F1.concepts\u002F2.nuxt-lifecycle",{"title":268,"path":2138,"stem":2139,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fguide\u002Fconcepts\u002Fauto-imports","docs\u002F5.x\u002F3.guide\u002F1.concepts\u002F3.auto-imports",{"title":272,"path":2141,"stem":2142,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fguide\u002Fconcepts\u002Fserver-engine","docs\u002F5.x\u002F3.guide\u002F1.concepts\u002F4.server-engine",{"title":276,"path":2144,"stem":2145,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fguide\u002Fconcepts\u002Fmodules","docs\u002F5.x\u002F3.guide\u002F1.concepts\u002F5.modules",{"title":280,"path":2147,"stem":2148,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fguide\u002Fconcepts\u002Ftypescript","docs\u002F5.x\u002F3.guide\u002F1.concepts\u002F8.typescript",{"title":284,"path":2150,"stem":2151,"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":2153,"stem":2154,"children":2155,"page":108},"\u002Fdocs\u002F5.x\u002Fguide\u002Fbest-practices","docs\u002F5.x\u002F3.guide\u002F2.best-practices",[2156,2159,2162,2165],{"title":1314,"path":2157,"stem":2158,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fguide\u002Fbest-practices\u002Fdevcontainers","docs\u002F5.x\u002F3.guide\u002F2.best-practices\u002Fdevcontainers",{"title":1318,"path":2160,"stem":2161,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fguide\u002Fbest-practices\u002Fhydration","docs\u002F5.x\u002F3.guide\u002F2.best-practices\u002Fhydration",{"title":299,"path":2163,"stem":2164,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fguide\u002Fbest-practices\u002Fperformance","docs\u002F5.x\u002F3.guide\u002F2.best-practices\u002Fperformance",{"title":303,"path":2166,"stem":2167,"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":2169,"stem":2170,"children":2171,"page":108},"\u002Fdocs\u002F5.x\u002Fguide\u002Fai","docs\u002F5.x\u002F3.guide\u002F3.ai",[2172,2175],{"title":314,"path":2173,"stem":2174,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fguide\u002Fai\u002Fmcp","docs\u002F5.x\u002F3.guide\u002F3.ai\u002F1.mcp",{"title":318,"path":2176,"stem":2177,"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":2179,"stem":2180,"children":2181,"page":108},"\u002Fdocs\u002F5.x\u002Fguide\u002Fmodules","docs\u002F5.x\u002F3.guide\u002F4.modules",[2182,2185,2188,2191,2194,2197,2200,2203],{"title":329,"path":2183,"stem":2184,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fguide\u002Fmodules\u002Fgetting-started","docs\u002F5.x\u002F3.guide\u002F4.modules\u002F1.getting-started",{"title":333,"path":2186,"stem":2187,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fguide\u002Fmodules\u002Fmodule-anatomy","docs\u002F5.x\u002F3.guide\u002F4.modules\u002F2.module-anatomy",{"title":337,"path":2189,"stem":2190,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fguide\u002Fmodules\u002Frecipes-basics","docs\u002F5.x\u002F3.guide\u002F4.modules\u002F3.recipes-basics",{"title":341,"path":2192,"stem":2193,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fguide\u002Fmodules\u002Fmodule-dependencies","docs\u002F5.x\u002F3.guide\u002F4.modules\u002F4.module-dependencies",{"title":345,"path":2195,"stem":2196,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fguide\u002Fmodules\u002Frecipes-advanced","docs\u002F5.x\u002F3.guide\u002F4.modules\u002F5.recipes-advanced",{"title":349,"path":2198,"stem":2199,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fguide\u002Fmodules\u002Ftesting","docs\u002F5.x\u002F3.guide\u002F4.modules\u002F6.testing",{"title":353,"path":2201,"stem":2202,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fguide\u002Fmodules\u002Fbest-practices","docs\u002F5.x\u002F3.guide\u002F4.modules\u002F7.best-practices",{"title":357,"path":2204,"stem":2205,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fguide\u002Fmodules\u002Fecosystem","docs\u002F5.x\u002F3.guide\u002F4.modules\u002F8.ecosystem",{"title":361,"titleTemplate":362,"icon":363,"path":2207,"stem":2208,"children":2209,"page":108},"\u002Fdocs\u002F5.x\u002Fguide\u002Frecipes","docs\u002F5.x\u002F3.guide\u002F5.recipes",[2210,2213,2216,2219],{"title":368,"path":2211,"stem":2212,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fguide\u002Frecipes\u002Fcustom-routing","docs\u002F5.x\u002F3.guide\u002F5.recipes\u002F1.custom-routing",{"title":372,"path":2214,"stem":2215,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fguide\u002Frecipes\u002Fvite-plugin","docs\u002F5.x\u002F3.guide\u002F5.recipes\u002F2.vite-plugin",{"title":376,"path":2217,"stem":2218,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fguide\u002Frecipes\u002Fcustom-usefetch","docs\u002F5.x\u002F3.guide\u002F5.recipes\u002F3.custom-usefetch",{"title":380,"path":2220,"stem":2221,"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":2223,"stem":2224,"children":2225,"page":108},"\u002Fdocs\u002F5.x\u002Fguide\u002Fgoing-further","docs\u002F5.x\u002F3.guide\u002F6.going-further",[2226,2229,2232,2235,2238,2241,2244,2247,2250,2253,2256],{"title":391,"path":2227,"stem":2228,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fguide\u002Fgoing-further\u002Fevents","docs\u002F5.x\u002F3.guide\u002F6.going-further\u002F1.events",{"title":395,"path":2230,"stem":2231,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fguide\u002Fgoing-further\u002Fexperimental-features","docs\u002F5.x\u002F3.guide\u002F6.going-further\u002F1.experimental-features",{"title":399,"path":2233,"stem":2234,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fguide\u002Fgoing-further\u002Ffeatures","docs\u002F5.x\u002F3.guide\u002F6.going-further\u002F1.features",{"title":403,"path":2236,"stem":2237,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fguide\u002Fgoing-further\u002Fruntime-config","docs\u002F5.x\u002F3.guide\u002F6.going-further\u002F10.runtime-config",{"title":407,"path":2239,"stem":2240,"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":2242,"stem":2243,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fguide\u002Fgoing-further\u002Fhooks","docs\u002F5.x\u002F3.guide\u002F6.going-further\u002F2.hooks",{"title":415,"path":2245,"stem":2246,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fguide\u002Fgoing-further\u002Fkit","docs\u002F5.x\u002F3.guide\u002F6.going-further\u002F4.kit",{"title":419,"path":2248,"stem":2249,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fguide\u002Fgoing-further\u002Fnuxt-app","docs\u002F5.x\u002F3.guide\u002F6.going-further\u002F6.nuxt-app",{"title":423,"path":2251,"stem":2252,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fguide\u002Fgoing-further\u002Flayers","docs\u002F5.x\u002F3.guide\u002F6.going-further\u002F7.layers",{"title":1413,"path":2254,"stem":2255,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fguide\u002Fgoing-further\u002Fbuilders","docs\u002F5.x\u002F3.guide\u002F6.going-further\u002F8.builders",{"title":427,"path":2257,"stem":2258,"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":2260,"stem":2261,"children":2262,"page":108},"\u002Fdocs\u002F5.x\u002Fapi","docs\u002F5.x\u002F4.api",[2263,2315,2418,2509,2561,2622,2632],{"title":438,"titleTemplate":439,"icon":324,"path":2264,"stem":2265,"children":2266,"page":108},"\u002Fdocs\u002F5.x\u002Fapi\u002Fcomponents","docs\u002F5.x\u002F4.api\u002F1.components",[2267,2270,2273,2276,2279,2282,2285,2288,2291,2294,2297,2300,2303,2306,2309,2312],{"title":444,"path":2268,"stem":2269,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fapi\u002Fcomponents\u002Fclient-only","docs\u002F5.x\u002F4.api\u002F1.components\u002F1.client-only",{"title":448,"path":2271,"stem":2272,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fapi\u002Fcomponents\u002Fdev-only","docs\u002F5.x\u002F4.api\u002F1.components\u002F1.dev-only",{"title":452,"path":2274,"stem":2275,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fapi\u002Fcomponents\u002Fnuxt-client-fallback","docs\u002F5.x\u002F4.api\u002F1.components\u002F1.nuxt-client-fallback",{"title":456,"path":2277,"stem":2278,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fapi\u002Fcomponents\u002Fnuxt-picture","docs\u002F5.x\u002F4.api\u002F1.components\u002F10.nuxt-picture",{"title":460,"path":2280,"stem":2281,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fapi\u002Fcomponents\u002Fteleports","docs\u002F5.x\u002F4.api\u002F1.components\u002F11.teleports",{"title":464,"path":2283,"stem":2284,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fapi\u002Fcomponents\u002Fnuxt-route-announcer","docs\u002F5.x\u002F4.api\u002F1.components\u002F12.nuxt-route-announcer",{"title":468,"path":2286,"stem":2287,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fapi\u002Fcomponents\u002Fnuxt-time","docs\u002F5.x\u002F4.api\u002F1.components\u002F13.nuxt-time",{"title":1449,"path":2289,"stem":2290,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fapi\u002Fcomponents\u002Fnuxt-announcer","docs\u002F5.x\u002F4.api\u002F1.components\u002F14.nuxt-announcer",{"title":472,"path":2292,"stem":2293,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fapi\u002Fcomponents\u002Fnuxt-page","docs\u002F5.x\u002F4.api\u002F1.components\u002F2.nuxt-page",{"title":476,"path":2295,"stem":2296,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fapi\u002Fcomponents\u002Fnuxt-layout","docs\u002F5.x\u002F4.api\u002F1.components\u002F3.nuxt-layout",{"title":480,"path":2298,"stem":2299,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fapi\u002Fcomponents\u002Fnuxt-link","docs\u002F5.x\u002F4.api\u002F1.components\u002F4.nuxt-link",{"title":484,"path":2301,"stem":2302,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fapi\u002Fcomponents\u002Fnuxt-loading-indicator","docs\u002F5.x\u002F4.api\u002F1.components\u002F5.nuxt-loading-indicator",{"title":488,"path":2304,"stem":2305,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fapi\u002Fcomponents\u002Fnuxt-error-boundary","docs\u002F5.x\u002F4.api\u002F1.components\u002F6.nuxt-error-boundary",{"title":492,"path":2307,"stem":2308,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fapi\u002Fcomponents\u002Fnuxt-welcome","docs\u002F5.x\u002F4.api\u002F1.components\u002F7.nuxt-welcome",{"title":496,"path":2310,"stem":2311,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fapi\u002Fcomponents\u002Fnuxt-island","docs\u002F5.x\u002F4.api\u002F1.components\u002F8.nuxt-island",{"title":500,"path":2313,"stem":2314,"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":2316,"stem":2317,"children":2318,"page":108},"\u002Fdocs\u002F5.x\u002Fapi\u002Fcomposables","docs\u002F5.x\u002F4.api\u002F2.composables",[2319,2322,2325,2328,2331,2334,2337,2340,2343,2346,2349,2352,2355,2358,2361,2364,2367,2370,2373,2376,2379,2382,2385,2388,2391,2394,2397,2400,2403,2406,2409,2412,2415],{"title":1481,"path":2320,"stem":2321,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fapi\u002Fcomposables\u002Fcreate-use-async-data","docs\u002F5.x\u002F4.api\u002F2.composables\u002Fcreate-use-async-data",{"title":1485,"path":2323,"stem":2324,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fapi\u002Fcomposables\u002Fcreate-use-fetch","docs\u002F5.x\u002F4.api\u002F2.composables\u002Fcreate-use-fetch",{"title":511,"path":2326,"stem":2327,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fapi\u002Fcomposables\u002Fon-prehydrate","docs\u002F5.x\u002F4.api\u002F2.composables\u002Fon-prehydrate",{"title":1492,"path":2329,"stem":2330,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fapi\u002Fcomposables\u002Fuse-announcer","docs\u002F5.x\u002F4.api\u002F2.composables\u002Fuse-announcer",{"title":515,"path":2332,"stem":2333,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fapi\u002Fcomposables\u002Fuse-app-config","docs\u002F5.x\u002F4.api\u002F2.composables\u002Fuse-app-config",{"title":519,"path":2335,"stem":2336,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fapi\u002Fcomposables\u002Fuse-async-data","docs\u002F5.x\u002F4.api\u002F2.composables\u002Fuse-async-data",{"title":523,"path":2338,"stem":2339,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fapi\u002Fcomposables\u002Fuse-cookie","docs\u002F5.x\u002F4.api\u002F2.composables\u002Fuse-cookie",{"title":527,"path":2341,"stem":2342,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fapi\u002Fcomposables\u002Fuse-error","docs\u002F5.x\u002F4.api\u002F2.composables\u002Fuse-error",{"title":531,"path":2344,"stem":2345,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fapi\u002Fcomposables\u002Fuse-fetch","docs\u002F5.x\u002F4.api\u002F2.composables\u002Fuse-fetch",{"title":535,"path":2347,"stem":2348,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fapi\u002Fcomposables\u002Fuse-head","docs\u002F5.x\u002F4.api\u002F2.composables\u002Fuse-head",{"title":539,"path":2350,"stem":2351,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fapi\u002Fcomposables\u002Fuse-head-safe","docs\u002F5.x\u002F4.api\u002F2.composables\u002Fuse-head-safe",{"title":543,"path":2353,"stem":2354,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fapi\u002Fcomposables\u002Fuse-hydration","docs\u002F5.x\u002F4.api\u002F2.composables\u002Fuse-hydration",{"title":1520,"path":2356,"stem":2357,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fapi\u002Fcomposables\u002Fuse-layout","docs\u002F5.x\u002F4.api\u002F2.composables\u002Fuse-layout",{"title":547,"path":2359,"stem":2360,"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":2362,"stem":2363,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fapi\u002Fcomposables\u002Fuse-lazy-fetch","docs\u002F5.x\u002F4.api\u002F2.composables\u002Fuse-lazy-fetch",{"title":555,"path":2365,"stem":2366,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fapi\u002Fcomposables\u002Fuse-loading-indicator","docs\u002F5.x\u002F4.api\u002F2.composables\u002Fuse-loading-indicator",{"title":559,"path":2368,"stem":2369,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fapi\u002Fcomposables\u002Fuse-nuxt-app","docs\u002F5.x\u002F4.api\u002F2.composables\u002Fuse-nuxt-app",{"title":563,"path":2371,"stem":2372,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fapi\u002Fcomposables\u002Fuse-nuxt-data","docs\u002F5.x\u002F4.api\u002F2.composables\u002Fuse-nuxt-data",{"title":567,"path":2374,"stem":2375,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fapi\u002Fcomposables\u002Fuse-preview-mode","docs\u002F5.x\u002F4.api\u002F2.composables\u002Fuse-preview-mode",{"title":571,"path":2377,"stem":2378,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fapi\u002Fcomposables\u002Fuse-request-event","docs\u002F5.x\u002F4.api\u002F2.composables\u002Fuse-request-event",{"title":575,"path":2380,"stem":2381,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fapi\u002Fcomposables\u002Fuse-request-fetch","docs\u002F5.x\u002F4.api\u002F2.composables\u002Fuse-request-fetch",{"title":579,"path":2383,"stem":2384,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fapi\u002Fcomposables\u002Fuse-request-header","docs\u002F5.x\u002F4.api\u002F2.composables\u002Fuse-request-header",{"title":583,"path":2386,"stem":2387,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fapi\u002Fcomposables\u002Fuse-request-headers","docs\u002F5.x\u002F4.api\u002F2.composables\u002Fuse-request-headers",{"title":587,"path":2389,"stem":2390,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fapi\u002Fcomposables\u002Fuse-request-url","docs\u002F5.x\u002F4.api\u002F2.composables\u002Fuse-request-url",{"title":591,"path":2392,"stem":2393,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fapi\u002Fcomposables\u002Fuse-response-header","docs\u002F5.x\u002F4.api\u002F2.composables\u002Fuse-response-header",{"title":595,"path":2395,"stem":2396,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fapi\u002Fcomposables\u002Fuse-route","docs\u002F5.x\u002F4.api\u002F2.composables\u002Fuse-route",{"title":599,"path":2398,"stem":2399,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fapi\u002Fcomposables\u002Fuse-route-announcer","docs\u002F5.x\u002F4.api\u002F2.composables\u002Fuse-route-announcer",{"title":603,"path":2401,"stem":2402,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fapi\u002Fcomposables\u002Fuse-router","docs\u002F5.x\u002F4.api\u002F2.composables\u002Fuse-router",{"title":607,"path":2404,"stem":2405,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fapi\u002Fcomposables\u002Fuse-runtime-config","docs\u002F5.x\u002F4.api\u002F2.composables\u002Fuse-runtime-config",{"title":611,"path":2407,"stem":2408,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fapi\u002Fcomposables\u002Fuse-runtime-hook","docs\u002F5.x\u002F4.api\u002F2.composables\u002Fuse-runtime-hook",{"title":615,"path":2410,"stem":2411,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fapi\u002Fcomposables\u002Fuse-seo-meta","docs\u002F5.x\u002F4.api\u002F2.composables\u002Fuse-seo-meta",{"title":619,"path":2413,"stem":2414,"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":2416,"stem":2417,"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":2419,"stem":2420,"children":2421,"page":108},"\u002Fdocs\u002F5.x\u002Fapi\u002Futils","docs\u002F5.x\u002F4.api\u002F3.utils",[2422,2425,2428,2431,2434,2437,2440,2443,2446,2449,2452,2455,2458,2461,2464,2467,2470,2473,2476,2479,2482,2485,2488,2491,2494,2497,2500,2503,2506],{"title":634,"path":2423,"stem":2424,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fapi\u002Futils\u002Fdollarfetch","docs\u002F5.x\u002F4.api\u002F3.utils\u002F$fetch",{"title":638,"path":2426,"stem":2427,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fapi\u002Futils\u002Fabort-navigation","docs\u002F5.x\u002F4.api\u002F3.utils\u002Fabort-navigation",{"title":642,"path":2429,"stem":2430,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fapi\u002Futils\u002Fadd-route-middleware","docs\u002F5.x\u002F4.api\u002F3.utils\u002Fadd-route-middleware",{"title":646,"path":2432,"stem":2433,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fapi\u002Futils\u002Fcall-once","docs\u002F5.x\u002F4.api\u002F3.utils\u002Fcall-once",{"title":650,"path":2435,"stem":2436,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fapi\u002Futils\u002Fclear-error","docs\u002F5.x\u002F4.api\u002F3.utils\u002Fclear-error",{"title":654,"path":2438,"stem":2439,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fapi\u002Futils\u002Fclear-nuxt-data","docs\u002F5.x\u002F4.api\u002F3.utils\u002Fclear-nuxt-data",{"title":658,"path":2441,"stem":2442,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fapi\u002Futils\u002Fclear-nuxt-state","docs\u002F5.x\u002F4.api\u002F3.utils\u002Fclear-nuxt-state",{"title":662,"path":2444,"stem":2445,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fapi\u002Futils\u002Fcreate-error","docs\u002F5.x\u002F4.api\u002F3.utils\u002Fcreate-error",{"title":666,"path":2447,"stem":2448,"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":2450,"stem":2451,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fapi\u002Futils\u002Fdefine-nuxt-component","docs\u002F5.x\u002F4.api\u002F3.utils\u002Fdefine-nuxt-component",{"title":674,"path":2453,"stem":2454,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fapi\u002Futils\u002Fdefine-nuxt-plugin","docs\u002F5.x\u002F4.api\u002F3.utils\u002Fdefine-nuxt-plugin",{"title":678,"path":2456,"stem":2457,"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":2459,"stem":2460,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fapi\u002Futils\u002Fdefine-page-meta","docs\u002F5.x\u002F4.api\u002F3.utils\u002Fdefine-page-meta",{"title":686,"path":2462,"stem":2463,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fapi\u002Futils\u002Fdefine-route-rules","docs\u002F5.x\u002F4.api\u002F3.utils\u002Fdefine-route-rules",{"title":690,"path":2465,"stem":2466,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fapi\u002Futils\u002Fnavigate-to","docs\u002F5.x\u002F4.api\u002F3.utils\u002Fnavigate-to",{"title":694,"path":2468,"stem":2469,"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":2471,"stem":2472,"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":2474,"stem":2475,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fapi\u002Futils\u002Fon-nuxt-ready","docs\u002F5.x\u002F4.api\u002F3.utils\u002Fon-nuxt-ready",{"title":706,"path":2477,"stem":2478,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fapi\u002Futils\u002Fprefetch-components","docs\u002F5.x\u002F4.api\u002F3.utils\u002Fprefetch-components",{"title":710,"path":2480,"stem":2481,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fapi\u002Futils\u002Fpreload-components","docs\u002F5.x\u002F4.api\u002F3.utils\u002Fpreload-components",{"title":714,"path":2483,"stem":2484,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fapi\u002Futils\u002Fpreload-route-components","docs\u002F5.x\u002F4.api\u002F3.utils\u002Fpreload-route-components",{"title":718,"path":2486,"stem":2487,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fapi\u002Futils\u002Fprerender-routes","docs\u002F5.x\u002F4.api\u002F3.utils\u002Fprerender-routes",{"title":722,"path":2489,"stem":2490,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fapi\u002Futils\u002Frefresh-cookie","docs\u002F5.x\u002F4.api\u002F3.utils\u002Frefresh-cookie",{"title":726,"path":2492,"stem":2493,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fapi\u002Futils\u002Frefresh-nuxt-data","docs\u002F5.x\u002F4.api\u002F3.utils\u002Frefresh-nuxt-data",{"title":730,"path":2495,"stem":2496,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fapi\u002Futils\u002Freload-nuxt-app","docs\u002F5.x\u002F4.api\u002F3.utils\u002Freload-nuxt-app",{"title":734,"path":2498,"stem":2499,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fapi\u002Futils\u002Fset-page-layout","docs\u002F5.x\u002F4.api\u002F3.utils\u002Fset-page-layout",{"title":738,"path":2501,"stem":2502,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fapi\u002Futils\u002Fset-response-status","docs\u002F5.x\u002F4.api\u002F3.utils\u002Fset-response-status",{"title":742,"path":2504,"stem":2505,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fapi\u002Futils\u002Fshow-error","docs\u002F5.x\u002F4.api\u002F3.utils\u002Fshow-error",{"title":746,"path":2507,"stem":2508,"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":2510,"stem":2511,"children":2512,"page":108},"\u002Fdocs\u002F5.x\u002Fapi\u002Fcommands","docs\u002F5.x\u002F4.api\u002F4.commands",[2513,2516,2519,2522,2525,2528,2531,2534,2537,2540,2543,2546,2549,2552,2555,2558],{"title":757,"path":2514,"stem":2515,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fapi\u002Fcommands\u002Fadd","docs\u002F5.x\u002F4.api\u002F4.commands\u002Fadd",{"title":761,"path":2517,"stem":2518,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fapi\u002Fcommands\u002Fanalyze","docs\u002F5.x\u002F4.api\u002F4.commands\u002Fanalyze",{"title":765,"path":2520,"stem":2521,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fapi\u002Fcommands\u002Fbuild","docs\u002F5.x\u002F4.api\u002F4.commands\u002Fbuild",{"title":769,"path":2523,"stem":2524,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fapi\u002Fcommands\u002Fbuild-module","docs\u002F5.x\u002F4.api\u002F4.commands\u002Fbuild-module",{"title":773,"path":2526,"stem":2527,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fapi\u002Fcommands\u002Fcleanup","docs\u002F5.x\u002F4.api\u002F4.commands\u002Fcleanup",{"title":777,"path":2529,"stem":2530,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fapi\u002Fcommands\u002Fdev","docs\u002F5.x\u002F4.api\u002F4.commands\u002Fdev",{"title":781,"path":2532,"stem":2533,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fapi\u002Fcommands\u002Fdevtools","docs\u002F5.x\u002F4.api\u002F4.commands\u002Fdevtools",{"title":785,"path":2535,"stem":2536,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fapi\u002Fcommands\u002Fgenerate","docs\u002F5.x\u002F4.api\u002F4.commands\u002Fgenerate",{"title":789,"path":2538,"stem":2539,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fapi\u002Fcommands\u002Finfo","docs\u002F5.x\u002F4.api\u002F4.commands\u002Finfo",{"title":793,"path":2541,"stem":2542,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fapi\u002Fcommands\u002Finit","docs\u002F5.x\u002F4.api\u002F4.commands\u002Finit",{"title":797,"path":2544,"stem":2545,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fapi\u002Fcommands\u002Fmodule","docs\u002F5.x\u002F4.api\u002F4.commands\u002Fmodule",{"title":801,"path":2547,"stem":2548,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fapi\u002Fcommands\u002Fprepare","docs\u002F5.x\u002F4.api\u002F4.commands\u002Fprepare",{"title":805,"path":2550,"stem":2551,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fapi\u002Fcommands\u002Fpreview","docs\u002F5.x\u002F4.api\u002F4.commands\u002Fpreview",{"title":809,"path":2553,"stem":2554,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fapi\u002Fcommands\u002Ftest","docs\u002F5.x\u002F4.api\u002F4.commands\u002Ftest",{"title":813,"path":2556,"stem":2557,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fapi\u002Fcommands\u002Ftypecheck","docs\u002F5.x\u002F4.api\u002F4.commands\u002Ftypecheck",{"title":817,"path":2559,"stem":2560,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fapi\u002Fcommands\u002Fupgrade","docs\u002F5.x\u002F4.api\u002F4.commands\u002Fupgrade",{"title":415,"titleTemplate":821,"icon":822,"path":2562,"stem":2563,"children":2564,"page":108},"\u002Fdocs\u002F5.x\u002Fapi\u002Fkit","docs\u002F5.x\u002F4.api\u002F5.kit",[2565,2568,2571,2574,2577,2580,2583,2586,2589,2592,2595,2598,2601,2604,2607,2610,2613,2616,2619],{"title":276,"path":2566,"stem":2567,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fapi\u002Fkit\u002Fmodules","docs\u002F5.x\u002F4.api\u002F5.kit\u002F1.modules",{"title":403,"path":2569,"stem":2570,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fapi\u002Fkit\u002Fruntime-config","docs\u002F5.x\u002F4.api\u002F5.kit\u002F10.runtime-config",{"title":833,"path":2572,"stem":2573,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fapi\u002Fkit\u002Ftemplates","docs\u002F5.x\u002F4.api\u002F5.kit\u002F10.templates",{"title":1740,"path":2575,"stem":2576,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fapi\u002Fkit\u002Fapp-config","docs\u002F5.x\u002F4.api\u002F5.kit\u002F11.app-config",{"title":837,"path":2578,"stem":2579,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fapi\u002Fkit\u002Fnitro","docs\u002F5.x\u002F4.api\u002F5.kit\u002F12.nitro",{"title":841,"path":2581,"stem":2582,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fapi\u002Fkit\u002Fresolving","docs\u002F5.x\u002F4.api\u002F5.kit\u002F13.resolving",{"title":845,"path":2584,"stem":2585,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fapi\u002Fkit\u002Flogging","docs\u002F5.x\u002F4.api\u002F5.kit\u002F14.logging",{"title":849,"path":2587,"stem":2588,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fapi\u002Fkit\u002Fbuilder","docs\u002F5.x\u002F4.api\u002F5.kit\u002F15.builder",{"title":853,"path":2590,"stem":2591,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fapi\u002Fkit\u002Fexamples","docs\u002F5.x\u002F4.api\u002F5.kit\u002F16.examples",{"title":84,"path":2593,"stem":2594,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fapi\u002Fkit\u002Flayers","docs\u002F5.x\u002F4.api\u002F5.kit\u002F17.layers",{"title":860,"path":2596,"stem":2597,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fapi\u002Fkit\u002Fprogrammatic","docs\u002F5.x\u002F4.api\u002F5.kit\u002F2.programmatic",{"title":864,"path":2599,"stem":2600,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fapi\u002Fkit\u002Fcompatibility","docs\u002F5.x\u002F4.api\u002F5.kit\u002F3.compatibility",{"title":268,"path":2602,"stem":2603,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fapi\u002Fkit\u002Fautoimports","docs\u002F5.x\u002F4.api\u002F5.kit\u002F4.autoimports",{"title":438,"path":2605,"stem":2606,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fapi\u002Fkit\u002Fcomponents","docs\u002F5.x\u002F4.api\u002F5.kit\u002F5.components",{"title":874,"path":2608,"stem":2609,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fapi\u002Fkit\u002Fcontext","docs\u002F5.x\u002F4.api\u002F5.kit\u002F6.context",{"title":878,"path":2611,"stem":2612,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fapi\u002Fkit\u002Fpages","docs\u002F5.x\u002F4.api\u002F5.kit\u002F7.pages",{"title":882,"path":2614,"stem":2615,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fapi\u002Fkit\u002Flayout","docs\u002F5.x\u002F4.api\u002F5.kit\u002F8.layout",{"title":886,"path":2617,"stem":2618,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fapi\u002Fkit\u002Fhead","docs\u002F5.x\u002F4.api\u002F5.kit\u002F9.head",{"title":890,"path":2620,"stem":2621,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fapi\u002Fkit\u002Fplugins","docs\u002F5.x\u002F4.api\u002F5.kit\u002F9.plugins",{"title":894,"titleTemplate":6,"icon":895,"path":2623,"stem":2624,"children":2625,"page":108},"\u002Fdocs\u002F5.x\u002Fapi\u002Fadvanced","docs\u002F5.x\u002F4.api\u002F6.advanced",[2626,2629],{"title":411,"path":2627,"stem":2628,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fapi\u002Fadvanced\u002Fhooks","docs\u002F5.x\u002F4.api\u002F6.advanced\u002F1.hooks",{"title":903,"path":2630,"stem":2631,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fapi\u002Fadvanced\u002Fimport-meta","docs\u002F5.x\u002F4.api\u002F6.advanced\u002F2.import-meta",{"title":907,"path":2633,"stem":2634,"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":2636,"stem":2637,"children":2638,"page":108},"\u002Fdocs\u002F5.x\u002Fexamples","docs\u002F5.x\u002F4.examples",[2639,2642,2661,2674,2705],{"title":918,"path":2640,"stem":2641,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fexamples\u002Fhello-world","docs\u002F5.x\u002F4.examples\u002F0.hello-world",{"title":399,"path":2643,"stem":2644,"children":2645,"page":108},"\u002Fdocs\u002F5.x\u002Fexamples\u002Ffeatures","docs\u002F5.x\u002F4.examples\u002F1.features",[2646,2649,2652,2655,2658],{"title":926,"path":2647,"stem":2648,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fexamples\u002Ffeatures\u002Fauto-imports","docs\u002F5.x\u002F4.examples\u002F1.features\u002F1.auto-imports",{"title":64,"path":2650,"stem":2651,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fexamples\u002Ffeatures\u002Fdata-fetching","docs\u002F5.x\u002F4.examples\u002F1.features\u002F2.data-fetching",{"title":69,"path":2653,"stem":2654,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fexamples\u002Ffeatures\u002Fstate-management","docs\u002F5.x\u002F4.examples\u002F1.features\u002F3.state-management",{"title":936,"path":2656,"stem":2657,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fexamples\u002Ffeatures\u002Fmeta-tags","docs\u002F5.x\u002F4.examples\u002F1.features\u002F4.meta-tags",{"title":940,"path":2659,"stem":2660,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fexamples\u002Ffeatures\u002Flayouts","docs\u002F5.x\u002F4.examples\u002F1.features\u002F5.layouts",{"title":49,"path":2662,"stem":2663,"children":2664,"page":108},"\u002Fdocs\u002F5.x\u002Fexamples\u002Frouting","docs\u002F5.x\u002F4.examples\u002F2.routing",[2665,2668,2671],{"title":948,"path":2666,"stem":2667,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fexamples\u002Frouting\u002Fmiddleware","docs\u002F5.x\u002F4.examples\u002F2.routing\u002Fmiddleware",{"title":878,"path":2669,"stem":2670,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fexamples\u002Frouting\u002Fpages","docs\u002F5.x\u002F4.examples\u002F2.routing\u002Fpages",{"title":955,"path":2672,"stem":2673,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fexamples\u002Frouting\u002Funiversal-router","docs\u002F5.x\u002F4.examples\u002F2.routing\u002Funiversal-router",{"title":894,"path":2675,"stem":2676,"children":2677,"page":108},"\u002Fdocs\u002F5.x\u002Fexamples\u002Fadvanced","docs\u002F5.x\u002F4.examples\u002F4.advanced",[2678,2681,2684,2687,2690,2693,2696,2699,2702],{"title":84,"path":2679,"stem":2680,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fexamples\u002Fadvanced\u002Fconfig-extends","docs\u002F5.x\u002F4.examples\u002F4.advanced\u002Fconfig-extends",{"title":74,"path":2682,"stem":2683,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fexamples\u002Fadvanced\u002Ferror-handling","docs\u002F5.x\u002F4.examples\u002F4.advanced\u002Ferror-handling",{"title":969,"path":2685,"stem":2686,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fexamples\u002Fadvanced\u002Fjsx","docs\u002F5.x\u002F4.examples\u002F4.advanced\u002Fjsx",{"title":973,"path":2688,"stem":2689,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fexamples\u002Fadvanced\u002Flocale","docs\u002F5.x\u002F4.examples\u002F4.advanced\u002Flocale",{"title":977,"path":2691,"stem":2692,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fexamples\u002Fadvanced\u002Fmodule-extend-pages","docs\u002F5.x\u002F4.examples\u002F4.advanced\u002Fmodule-extend-pages",{"title":981,"path":2694,"stem":2695,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fexamples\u002Fadvanced\u002Fteleport","docs\u002F5.x\u002F4.examples\u002F4.advanced\u002Fteleport",{"title":99,"path":2697,"stem":2698,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fexamples\u002Fadvanced\u002Ftesting","docs\u002F5.x\u002F4.examples\u002F4.advanced\u002Ftesting",{"title":523,"path":2700,"stem":2701,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fexamples\u002Fadvanced\u002Fuse-cookie","docs\u002F5.x\u002F4.examples\u002F4.advanced\u002Fuse-cookie",{"title":991,"path":2703,"stem":2704,"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":2706,"stem":2707,"children":2708,"page":108},"\u002Fdocs\u002F5.x\u002Fexamples\u002Fexperimental","docs\u002F5.x\u002F4.examples\u002F7.experimental",[2709],{"title":1000,"path":2710,"stem":2711,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fexamples\u002Fexperimental\u002Fwasm","docs\u002F5.x\u002F4.examples\u002F7.experimental\u002Fwasm",{"title":1004,"titleTemplate":1005,"icon":1006,"path":2713,"stem":2714,"children":2715,"page":108},"\u002Fdocs\u002F5.x\u002Fcommunity","docs\u002F5.x\u002F5.community",[2716,2719,2722,2725,2728,2731],{"title":1011,"path":2717,"stem":2718,"titleTemplate":6,"icon":1014},"\u002Fdocs\u002F5.x\u002Fcommunity\u002Fgetting-help","docs\u002F5.x\u002F5.community\u002F2.getting-help",{"title":1016,"path":2720,"stem":2721,"titleTemplate":6,"icon":1019},"\u002Fdocs\u002F5.x\u002Fcommunity\u002Freporting-bugs","docs\u002F5.x\u002F5.community\u002F3.reporting-bugs",{"title":1021,"path":2723,"stem":2724,"titleTemplate":6,"icon":1024},"\u002Fdocs\u002F5.x\u002Fcommunity\u002Fcontribution","docs\u002F5.x\u002F5.community\u002F4.contribution",{"title":1026,"path":2726,"stem":2727,"titleTemplate":6,"icon":1029},"\u002Fdocs\u002F5.x\u002Fcommunity\u002Fframework-contribution","docs\u002F5.x\u002F5.community\u002F5.framework-contribution",{"title":1031,"path":2729,"stem":2730,"titleTemplate":6,"icon":1034},"\u002Fdocs\u002F5.x\u002Fcommunity\u002Froadmap","docs\u002F5.x\u002F5.community\u002F6.roadmap",{"title":1036,"path":2732,"stem":2733,"titleTemplate":6,"icon":1039},"\u002Fdocs\u002F5.x\u002Fcommunity\u002Fchangelog","docs\u002F5.x\u002F5.community\u002F7.changelog",{"title":1041,"titleTemplate":1042,"icon":1043,"path":2735,"stem":2736,"children":2737,"page":108},"\u002Fdocs\u002F5.x\u002Fbridge","docs\u002F5.x\u002F6.bridge",[2738,2741,2744,2747,2750,2753,2756,2759,2762,2765],{"title":1048,"path":2739,"stem":2740,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fbridge\u002Foverview","docs\u002F5.x\u002F6.bridge\u002F1.overview",{"title":29,"path":2742,"stem":2743,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fbridge\u002Fconfiguration","docs\u002F5.x\u002F6.bridge\u002F10.configuration",{"title":280,"path":2745,"stem":2746,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fbridge\u002Ftypescript","docs\u002F5.x\u002F6.bridge\u002F2.typescript",{"title":1058,"path":2748,"stem":2749,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fbridge\u002Fbridge-composition-api","docs\u002F5.x\u002F6.bridge\u002F3.bridge-composition-api",{"title":1062,"path":2751,"stem":2752,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fbridge\u002Fplugins-and-middleware","docs\u002F5.x\u002F6.bridge\u002F4.plugins-and-middleware",{"title":1066,"path":2754,"stem":2755,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fbridge\u002Fnuxt3-compatible-api","docs\u002F5.x\u002F6.bridge\u002F5.nuxt3-compatible-api",{"title":936,"path":2757,"stem":2758,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fbridge\u002Fmeta","docs\u002F5.x\u002F6.bridge\u002F6.meta",{"title":403,"path":2760,"stem":2761,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fbridge\u002Fruntime-config","docs\u002F5.x\u002F6.bridge\u002F7.runtime-config",{"title":837,"path":2763,"stem":2764,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fbridge\u002Fnitro","docs\u002F5.x\u002F6.bridge\u002F8.nitro",{"title":1079,"path":2766,"stem":2767,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fbridge\u002Fvite","docs\u002F5.x\u002F6.bridge\u002F9.vite",{"title":1083,"titleTemplate":1084,"icon":107,"path":2769,"stem":2770,"children":2771,"page":108},"\u002Fdocs\u002F5.x\u002Fmigration","docs\u002F5.x\u002F7.migration",[2772,2775,2778,2781,2784,2787,2790,2793,2796,2799,2802],{"title":1048,"path":2773,"stem":2774,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fmigration\u002Foverview","docs\u002F5.x\u002F7.migration\u002F1.overview",{"title":1092,"path":2776,"stem":2777,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fmigration\u002Fbundling","docs\u002F5.x\u002F7.migration\u002F10.bundling",{"title":79,"path":2779,"stem":2780,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fmigration\u002Fserver","docs\u002F5.x\u002F7.migration\u002F11.server",{"title":29,"path":2782,"stem":2783,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fmigration\u002Fconfiguration","docs\u002F5.x\u002F7.migration\u002F2.configuration",{"title":276,"path":2785,"stem":2786,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fmigration\u002Fmodule-authors","docs\u002F5.x\u002F7.migration\u002F20.module-authors",{"title":926,"path":2788,"stem":2789,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fmigration\u002Fauto-imports","docs\u002F5.x\u002F7.migration\u002F3.auto-imports",{"title":936,"path":2791,"stem":2792,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fmigration\u002Fmeta","docs\u002F5.x\u002F7.migration\u002F4.meta",{"title":1062,"path":2794,"stem":2795,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fmigration\u002Fplugins-and-middleware","docs\u002F5.x\u002F7.migration\u002F5.plugins-and-middleware",{"title":1114,"path":2797,"stem":2798,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fmigration\u002Fpages-and-layouts","docs\u002F5.x\u002F7.migration\u002F6.pages-and-layouts",{"title":1118,"path":2800,"stem":2801,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fmigration\u002Fcomponent-options","docs\u002F5.x\u002F7.migration\u002F7.component-options",{"title":403,"path":2803,"stem":2804,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fmigration\u002Fruntime-config","docs\u002F5.x\u002F7.migration\u002F8.runtime-config",{"title":2806,"icon":2807,"path":2808,"stem":2809,"children":2810,"page":108},"Blog","i-lucide-newspaper","\u002Fblog","blog",[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,2975,2979,2983,2987,2991,2995,2999,3003],{"title":2812,"path":2813,"stem":2814},"Announcing 3.0","\u002Fblog\u002Fv3","blog\u002F1.v3",{"title":2816,"path":2817,"stem":2818},"Nuxt 3.3","\u002Fblog\u002Fv3-3","blog\u002F10.v3-3",{"title":2820,"path":2821,"stem":2822},"Nuxt 3.4","\u002Fblog\u002Fv3-4","blog\u002F11.v3-4",{"title":2824,"path":2825,"stem":2826},"Nuxt 3.5","\u002Fblog\u002Fv3-5","blog\u002F12.v3-5",{"title":2828,"path":2829,"stem":2830},"Nuxt 3.6","\u002Fblog\u002Fv3-6","blog\u002F13.v3-6",{"title":2832,"path":2833,"stem":2834},"Nuxt on the Edge","\u002Fblog\u002Fnuxt-on-the-edge","blog\u002F14.nuxt-on-the-edge",{"title":2836,"path":2837,"stem":2838},"Nuxt 3.7","\u002Fblog\u002Fv3-7","blog\u002F15.v3-7",{"title":2840,"path":2841,"stem":2842},"A New Website","\u002Fblog\u002Fnew-website","blog\u002F16.new-website",{"title":2844,"path":2845,"stem":2846},"Nuxt 3.8","\u002Fblog\u002Fv3-8","blog\u002F17.v3-8",{"title":2848,"path":2849,"stem":2850},"Nuxt DevTools v1.0","\u002Fblog\u002Fnuxt-devtools-v1-0","blog\u002F18.nuxt-devtools-v1-0",{"title":2852,"path":2853,"stem":2854},"Nuxt 3.9","\u002Fblog\u002Fv3-9","blog\u002F19.v3-9",{"title":2856,"path":2857,"stem":2858},"Nuxt: A vision for 2023","\u002Fblog\u002Fvision-2023","blog\u002F2.vision-2023",{"title":2860,"path":2861,"stem":2862},"Nuxt 3.10","\u002Fblog\u002Fv3-10","blog\u002F20.v3-10",{"title":2864,"path":2865,"stem":2866},"The Evolution of Shiki v1.0","\u002Fblog\u002Fshiki-v1","blog\u002F21.shiki-v1",{"title":2868,"path":2869,"stem":2870},"Nuxt 3.11","\u002Fblog\u002Fv3-11","blog\u002F22.v3-11",{"title":2872,"path":2873,"stem":2874},"Nuxt: Looking forward","\u002Fblog\u002Flooking-forward-2024","blog\u002F23.looking-forward-2024",{"title":2876,"path":2877,"stem":2878},"Refreshed Nuxt ESLint Integrations","\u002Fblog\u002Feslint-module","blog\u002F24.eslint-module",{"title":2880,"path":2881,"stem":2882},"Nuxt 3.12","\u002Fblog\u002Fv3-12","blog\u002F25.v3-12",{"title":2884,"path":2885,"stem":2886},"Introducing Nuxt Scripts","\u002Fblog\u002Fnuxt-scripts","blog\u002F26.nuxt-scripts",{"title":2888,"path":2889,"stem":2890},"Nuxt 3.13","\u002Fblog\u002Fv3-13","blog\u002F27.v3-13",{"title":2892,"path":2893,"stem":2894},"Nuxt 3.14","\u002Fblog\u002Fv3-14","blog\u002F27.v3-14",{"title":2896,"path":2897,"stem":2898},"Introducing Nuxt Icon v1","\u002Fblog\u002Fnuxt-icon-v1-0","blog\u002F29.nuxt-icon-v1-0",{"title":2900,"path":2901,"stem":2902},"Introducing Nuxt DevTools","\u002Fblog\u002Fintroducing-nuxt-devtools","blog\u002F3.introducing-nuxt-devtools",{"title":2904,"path":2905,"stem":2906},"Announcing Nuxt 3 Release Candidate","\u002Fblog\u002Fnuxt3-rc","blog\u002F3.nuxt3-rc",{"title":2908,"path":2909,"stem":2910},"Nuxt 3.15","\u002Fblog\u002Fv3-15","blog\u002F30.v3-15",{"title":2912,"path":2913,"stem":2914},"Nuxt 3.16","\u002Fblog\u002Fv3-16","blog\u002F31.v3-16",{"title":2916,"path":2917,"stem":2918},"Nuxt UI v3","\u002Fblog\u002Fnuxt-ui-v3","blog\u002F32.nuxt-ui-v3",{"title":2920,"path":2921,"stem":2922},"Nuxt 3.17","\u002Fblog\u002Fv3-17","blog\u002F33.v3-17",{"title":2924,"path":2925,"stem":2926},"Roadmap to v4","\u002Fblog\u002Froadmap-v4","blog\u002F34.roadmap-v4",{"title":2928,"path":2929,"stem":2930},"Building a Privacy-First Feedback Widget","\u002Fblog\u002Fbuilding-a-feedback-widget","blog\u002F35.building-a-feedback-widget",{"title":2932,"path":2933,"stem":2934},"Announcing Nuxt 4.0","\u002Fblog\u002Fv4","blog\u002F36.v4",{"title":2936,"path":2937,"stem":2938},"Nuxt 3.18","\u002Fblog\u002Fv3-18","blog\u002F37.v3-18",{"title":2940,"path":2941,"stem":2942},"Nuxt 4.1","\u002Fblog\u002Fv4-1","blog\u002F38.v4-1",{"title":2944,"path":2945,"stem":2946},"Nuxt UI v4","\u002Fblog\u002Fnuxt-ui-v4","blog\u002F39.nuxt-ui-v4",{"title":2948,"path":2949,"stem":2950},"Nuxt 2 End-of-Life (EOL)","\u002Fblog\u002Fnuxt2-eol","blog\u002F4.nuxt2-eol",{"title":2952,"path":2953,"stem":2954},"Introducing Nuxt 3 Beta","\u002Fblog\u002Fnuxt3-beta","blog\u002F4.nuxt3-beta",{"title":2956,"path":2957,"stem":2958},"Building an MCP Server for Nuxt","\u002Fblog\u002Fbuilding-nuxt-mcp","blog\u002F40.building-nuxt-mcp",{"title":2960,"path":2961,"stem":2962},"Nuxt 4.2","\u002Fblog\u002Fv4-2","blog\u002F40.v4-2",{"title":2964,"path":2965,"stem":2966},"Nuxt Image v2","\u002Fblog\u002Fnuxt-image-v2","blog\u002F41.nuxt-image-v2",{"title":2968,"path":2969,"stem":2970},"Nuxt 4.3","\u002Fblog\u002Fv4-3","blog\u002F42.v4-3",{"title":2972,"path":2973,"stem":2974},"Nuxt 4.4","\u002Fblog\u002Fv4-4","blog\u002F43.v4-4",{"title":2976,"path":2977,"stem":2978},"Introducing the Nuxt Agent","\u002Fblog\u002Fintroducing-nuxt-agent","blog\u002F44.introducing-nuxt-agent",{"title":2980,"path":2981,"stem":2982},"Meet Nuxi","\u002Fblog\u002Fmeet-nuxi","blog\u002F45.meet-nuxi",{"title":2984,"path":2985,"stem":2986},"Nuxt 4.5","\u002Fblog\u002Fv4-5","blog\u002F46.v4-5",{"title":2988,"path":2989,"stem":2990},"Going Full Static","\u002Fblog\u002Fgoing-full-static","blog\u002F5.going-full-static",{"title":2992,"path":2993,"stem":2994},"Introducing Smart Prefetching","\u002Fblog\u002Fintroducing-smart-prefetching","blog\u002F6.introducing-smart-prefetching",{"title":2996,"path":2997,"stem":2998},"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":3000,"path":3001,"stem":3002},"Nuxt 2 Static Improvements","\u002Fblog\u002Fnuxt-static-improvements","blog\u002F8.nuxt-static-improvements",{"title":3004,"path":3005,"stem":3006},"Nuxt 2: From Terminal to Browser","\u002Fblog\u002Fnuxtjs-from-terminal-to-browser","blog\u002F9.nuxtjs-from-terminal-to-browser",{"name":3008,"description":3009,"repo":3010,"npm":3011,"icon":3012,"github":3013,"website":3013,"learn_more":3014,"category":3015,"type":3016,"maintainers":3017,"compatibility":3023,"generatedAt":3026,"contributors":3027,"stats":3055,"readme":3063},"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",[3018],{"name":3019,"github":3020,"twitter":3021,"bluesky":3022},"rrd","rrd108","radharadhya","rrd108.bsky.social",{"nuxt":3024,"requires":3025},">=3.0.0",{},"2026-07-24T19:15:06.928Z",[3028,3031,3035,3039,3043,3046,3049,3052],{"id":3029,"username":3020,"contributions":3030},3147489,282,{"id":3032,"username":3033,"contributions":3034},31929574,"ravesandstorm",5,{"id":3036,"username":3037,"contributions":3038},28706372,"danielroe",2,{"id":3040,"username":3041,"contributions":3042},20068593,"kschnekenburger",1,{"id":3044,"username":3045,"contributions":3042},32599710,"simonmaass",{"id":3047,"username":3048,"contributions":3042},125942725,"nd2024",{"id":3050,"username":3051,"contributions":3042},10197526,"chachew",{"id":3053,"username":3054,"contributions":3042},55457896,"LeeKrane",{"version":3056,"downloads":3057,"stars":3058,"watchers":3042,"forks":3059,"defaultBranch":3060,"publishedAt":3061,"createdAt":3062},"1.0.0",7343,56,8,"main",1782038138831,1711731542236,{"data":3064,"body":3066,"toc":10677},{"title":3065,"description":3014},"Nuxt API Shield",{"type":3067,"children":3068},"root",[3069,3076,3121,3126,3152,3158,3409,3415,3429,3538,3563,3568,3983,4001,4422,4436,4465,4570,4589,4601,4765,4770,4979,4990,5056,5275,5280,5286,5305,5312,5325,5338,6007,6031,6037,6066,6077,7302,7342,7369,7375,7381,7407,7549,7568,7771,7785,7804,7821,7839,7844,7850,7870,7876,7902,8109,8114,8124,8130,8142,8176,8182,8194,8344,8386,8391,8421,8442,8448,8453,8465,8476,8583,8591,9005,9016,9021,9072,9078,9095,9123,9127,9133,9145,9623,9629,9642,9648,9739,9745,9774,9780,9818,9824,9843,9848,9853,10145,10151,10197,10203,10209,10219,10315,10321,10412,10425,10436,10456,10462,10671],{"type":3070,"tag":3071,"props":3072,"children":3073},"element","h1",{"id":3011},[3074],{"type":3075,"value":3065},"text",{"type":3070,"tag":3077,"props":3078,"children":3079},"p",{},[3080,3093,3102,3111],{"type":3070,"tag":3081,"props":3082,"children":3086},"a",{"href":3083,"rel":3084},"https:\u002F\u002Fnpmjs.com\u002Fpackage\u002Fnuxt-api-shield",[3085],"nofollow",[3087],{"type":3070,"tag":3088,"props":3089,"children":3092},"img",{"alt":3090,"src":3091},"npm version","https:\u002F\u002Fimg.shields.io\u002Fnpm\u002Fv\u002Fnuxt-api-shield\u002Flatest.svg?style=flat&colorA=020420&colorB=00DC82",[],{"type":3070,"tag":3081,"props":3094,"children":3096},{"href":3083,"rel":3095},[3085],[3097],{"type":3070,"tag":3088,"props":3098,"children":3101},{"alt":3099,"src":3100},"npm downloads","https:\u002F\u002Fimg.shields.io\u002Fnpm\u002Fdm\u002Fnuxt-api-shield.svg?style=flat&colorA=020420&colorB=00DC82",[],{"type":3070,"tag":3081,"props":3103,"children":3105},{"href":3083,"rel":3104},[3085],[3106],{"type":3070,"tag":3088,"props":3107,"children":3110},{"alt":3108,"src":3109},"License","https:\u002F\u002Fimg.shields.io\u002Fnpm\u002Fl\u002Fnuxt-api-shield.svg?style=flat&colorA=020420&colorB=00DC82",[],{"type":3070,"tag":3081,"props":3112,"children":3115},{"href":3113,"rel":3114},"https:\u002F\u002Fnuxt.com",[3085],[3116],{"type":3070,"tag":3088,"props":3117,"children":3120},{"alt":3118,"src":3119},"Nuxt","https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FNuxt-020420?logo=nuxt.js",[],{"type":3070,"tag":3077,"props":3122,"children":3123},{},[3124],{"type":3075,"value":3125},"This Nuxt module implements a rate limiting middleware to protect your API endpoints from excessive requests.",{"type":3070,"tag":3127,"props":3128,"children":3129},"ul",{},[3130],{"type":3070,"tag":3131,"props":3132,"children":3133},"li",{},[3134,3140],{"type":3070,"tag":3081,"props":3135,"children":3137},{"href":3136},"\u002FCHANGELOG.md",[3138],{"type":3075,"value":3139},"✨  Release Notes",{"type":3070,"tag":3127,"props":3141,"children":3142},{},[3143],{"type":3070,"tag":3131,"props":3144,"children":3145},{},[3146],{"type":3070,"tag":3081,"props":3147,"children":3149},{"href":3013,"rel":3148},[3085],[3150],{"type":3075,"value":3151},"📖  Documentation",{"type":3070,"tag":3153,"props":3154,"children":3156},"h2",{"id":3155},"features",[3157],{"type":3075,"value":399},{"type":3070,"tag":3127,"props":3159,"children":3160},{},[3161,3183,3240,3261,3282,3303,3335,3369],{"type":3070,"tag":3131,"props":3162,"children":3163},{},[3164,3170],{"type":3070,"tag":3165,"props":3166,"children":3167},"strong",{},[3168],{"type":3075,"value":3169},"IP-Based Rate limiting and Brute Force Protection",{"type":3070,"tag":3127,"props":3171,"children":3172},{},[3173,3178],{"type":3070,"tag":3131,"props":3174,"children":3175},{},[3176],{"type":3075,"value":3177},"Tracks and enforces rate limits for individual IP addresses.",{"type":3070,"tag":3131,"props":3179,"children":3180},{},[3181],{"type":3075,"value":3182},"Prevents malicious actors or excessive requests from a single source from overwhelming your API.",{"type":3070,"tag":3131,"props":3184,"children":3185},{},[3186,3191],{"type":3070,"tag":3165,"props":3187,"children":3188},{},[3189],{"type":3075,"value":3190},"Customizable Rate Limits",{"type":3070,"tag":3127,"props":3192,"children":3193},{},[3194,3199,3211,3216,3221,3235],{"type":3070,"tag":3131,"props":3195,"children":3196},{},[3197],{"type":3075,"value":3198},"Configure maximum request count, duration within which the limit applies, and a ban period for exceeding the limit.",{"type":3070,"tag":3131,"props":3200,"children":3201},{},[3202,3204,3209],{"type":3075,"value":3203},"If the request limit is exceeded, the user is banned for the configured ban period. During the ban period, ",{"type":3070,"tag":3165,"props":3205,"children":3206},{},[3207],{"type":3075,"value":3208},"all requests are blocked with a 429 error",{"type":3075,"value":3210},", regardless of the rate limit window.",{"type":3070,"tag":3131,"props":3212,"children":3213},{},[3214],{"type":3075,"value":3215},"Add a delay to responses when a user is banned to discourage further abuse (optional).",{"type":3070,"tag":3131,"props":3217,"children":3218},{},[3219],{"type":3075,"value":3220},"Customize the error message for banned users.",{"type":3070,"tag":3131,"props":3222,"children":3223},{},[3224,3226,3233],{"type":3075,"value":3225},"Optionally include the ",{"type":3070,"tag":3227,"props":3228,"children":3230},"code",{"className":3229},[],[3231],{"type":3075,"value":3232},"Retry-After",{"type":3075,"value":3234}," header in responses when a user is banned.",{"type":3070,"tag":3131,"props":3236,"children":3237},{},[3238],{"type":3075,"value":3239},"Tailor the rate-limiting behavior to align with your API's specific needs and usage patterns.",{"type":3070,"tag":3131,"props":3241,"children":3242},{},[3243,3248],{"type":3070,"tag":3165,"props":3244,"children":3245},{},[3246],{"type":3075,"value":3247},"Event-Driven Handling",{"type":3070,"tag":3127,"props":3249,"children":3250},{},[3251,3256],{"type":3070,"tag":3131,"props":3252,"children":3253},{},[3254],{"type":3075,"value":3255},"Intercepts incoming API requests efficiently using Nuxt's event system.",{"type":3070,"tag":3131,"props":3257,"children":3258},{},[3259],{"type":3075,"value":3260},"Ensures seamless integration with your Nuxt application's request lifecycle.",{"type":3070,"tag":3131,"props":3262,"children":3263},{},[3264,3269],{"type":3070,"tag":3165,"props":3265,"children":3266},{},[3267],{"type":3075,"value":3268},"Flexible Storage",{"type":3070,"tag":3127,"props":3270,"children":3271},{},[3272,3277],{"type":3070,"tag":3131,"props":3273,"children":3274},{},[3275],{"type":3075,"value":3276},"Utilizes Nuxt's unstorage abstraction for versatile storage options.",{"type":3070,"tag":3131,"props":3278,"children":3279},{},[3280],{"type":3075,"value":3281},"Store rate-limiting data in various storage providers (filesystem, memory, databases, etc.) based on your project's requirements.",{"type":3070,"tag":3131,"props":3283,"children":3284},{},[3285,3290],{"type":3070,"tag":3165,"props":3286,"children":3287},{},[3288],{"type":3075,"value":3289},"Configurable with Runtime Config",{"type":3070,"tag":3127,"props":3291,"children":3292},{},[3293,3298],{"type":3070,"tag":3131,"props":3294,"children":3295},{},[3296],{"type":3075,"value":3297},"Easily adjust rate-limiting parameters without code changes.",{"type":3070,"tag":3131,"props":3299,"children":3300},{},[3301],{"type":3075,"value":3302},"Adapt to dynamic needs and maintain control over rate-limiting behavior through Nuxt's runtime configuration.",{"type":3070,"tag":3131,"props":3304,"children":3305},{},[3306,3311],{"type":3070,"tag":3165,"props":3307,"children":3308},{},[3309],{"type":3075,"value":3310},"Bundled cleanup tasks",{"type":3070,"tag":3127,"props":3312,"children":3313},{},[3314],{"type":3070,"tag":3131,"props":3315,"children":3316},{},[3317,3319,3325,3327,3333],{"type":3075,"value":3318},"Registers Nitro tasks ",{"type":3070,"tag":3227,"props":3320,"children":3322},{"className":3321},[],[3323],{"type":3075,"value":3324},"shield:cleanBans",{"type":3075,"value":3326}," and ",{"type":3070,"tag":3227,"props":3328,"children":3330},{"className":3329},[],[3331],{"type":3075,"value":3332},"shield:cleanIpData",{"type":3075,"value":3334}," so you can schedule maintenance without adding task files (see setup step 4).",{"type":3070,"tag":3131,"props":3336,"children":3337},{},[3338,3343],{"type":3070,"tag":3165,"props":3339,"children":3340},{},[3341],{"type":3075,"value":3342},"Clear Error Handling",{"type":3070,"tag":3127,"props":3344,"children":3345},{},[3346,3351,3364],{"type":3070,"tag":3131,"props":3347,"children":3348},{},[3349],{"type":3075,"value":3350},"Returns a standardized 429 \"Too Many Requests\" error response when rate limits are exceeded or when a user is banned.",{"type":3070,"tag":3131,"props":3352,"children":3353},{},[3354,3356,3362],{"type":3075,"value":3355},"The 429 body is JSON (",{"type":3070,"tag":3227,"props":3357,"children":3359},{"className":3358},[],[3360],{"type":3075,"value":3361},"{ error, retryAfter }",{"type":3075,"value":3363},") for predictable client-side handling.",{"type":3070,"tag":3131,"props":3365,"children":3366},{},[3367],{"type":3075,"value":3368},"Facilitates proper error handling in client-side applications for a smooth user experience.",{"type":3070,"tag":3131,"props":3370,"children":3371},{},[3372,3377],{"type":3070,"tag":3165,"props":3373,"children":3374},{},[3375],{"type":3075,"value":3376},"Standard Rate-Limit Headers",{"type":3070,"tag":3127,"props":3378,"children":3379},{},[3380],{"type":3070,"tag":3131,"props":3381,"children":3382},{},[3383,3385,3391,3393,3399,3401,3407],{"type":3075,"value":3384},"Every response includes ",{"type":3070,"tag":3227,"props":3386,"children":3388},{"className":3387},[],[3389],{"type":3075,"value":3390},"X-RateLimit-Limit",{"type":3075,"value":3392},", ",{"type":3070,"tag":3227,"props":3394,"children":3396},{"className":3395},[],[3397],{"type":3075,"value":3398},"X-RateLimit-Remaining",{"type":3075,"value":3400},", and ",{"type":3070,"tag":3227,"props":3402,"children":3404},{"className":3403},[],[3405],{"type":3075,"value":3406},"X-RateLimit-Reset",{"type":3075,"value":3408}," headers so clients and CDNs can track usage without parsing response bodies.",{"type":3070,"tag":3153,"props":3410,"children":3412},{"id":3411},"quick-setup",[3413],{"type":3075,"value":3414},"Quick Setup",{"type":3070,"tag":3416,"props":3417,"children":3419},"h3",{"id":3418},"_1-add-nuxt-api-shield-dependency-to-your-project",[3420,3422,3427],{"type":3075,"value":3421},"1. Add ",{"type":3070,"tag":3227,"props":3423,"children":3425},{"className":3424},[],[3426],{"type":3075,"value":3011},{"type":3075,"value":3428}," dependency to your project",{"type":3070,"tag":3430,"props":3431,"children":3435},"pre",{"className":3432,"code":3433,"language":3434,"meta":3014,"style":3014},"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",[3436],{"type":3070,"tag":3227,"props":3437,"children":3438},{"__ignoreMap":3014},[3439,3450,3470,3479,3488,3504,3512,3521],{"type":3070,"tag":3440,"props":3441,"children":3443},"span",{"class":3442,"line":3042},"line",[3444],{"type":3070,"tag":3440,"props":3445,"children":3447},{"style":3446},"--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#90A4AE;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic",[3448],{"type":3075,"value":3449},"# Using pnpm\n",{"type":3070,"tag":3440,"props":3451,"children":3452},{"class":3442,"line":3038},[3453,3459,3465],{"type":3070,"tag":3440,"props":3454,"children":3456},{"style":3455},"--shiki-light:#E2931D;--shiki-default:#E2931D;--shiki-dark:#FFCB6B",[3457],{"type":3075,"value":3458},"pnpm",{"type":3070,"tag":3440,"props":3460,"children":3462},{"style":3461},"--shiki-light:#91B859;--shiki-default:#91B859;--shiki-dark:#C3E88D",[3463],{"type":3075,"value":3464}," add",{"type":3070,"tag":3440,"props":3466,"children":3467},{"style":3461},[3468],{"type":3075,"value":3469}," nuxt-api-shield\n",{"type":3070,"tag":3440,"props":3471,"children":3473},{"class":3442,"line":3472},3,[3474],{"type":3070,"tag":3440,"props":3475,"children":3476},{"emptyLinePlaceholder":1200},[3477],{"type":3075,"value":3478},"\n",{"type":3070,"tag":3440,"props":3480,"children":3482},{"class":3442,"line":3481},4,[3483],{"type":3070,"tag":3440,"props":3484,"children":3485},{"style":3446},[3486],{"type":3075,"value":3487},"# Using yarn\n",{"type":3070,"tag":3440,"props":3489,"children":3490},{"class":3442,"line":3034},[3491,3496,3500],{"type":3070,"tag":3440,"props":3492,"children":3493},{"style":3455},[3494],{"type":3075,"value":3495},"yarn",{"type":3070,"tag":3440,"props":3497,"children":3498},{"style":3461},[3499],{"type":3075,"value":3464},{"type":3070,"tag":3440,"props":3501,"children":3502},{"style":3461},[3503],{"type":3075,"value":3469},{"type":3070,"tag":3440,"props":3505,"children":3507},{"class":3442,"line":3506},6,[3508],{"type":3070,"tag":3440,"props":3509,"children":3510},{"emptyLinePlaceholder":1200},[3511],{"type":3075,"value":3478},{"type":3070,"tag":3440,"props":3513,"children":3515},{"class":3442,"line":3514},7,[3516],{"type":3070,"tag":3440,"props":3517,"children":3518},{"style":3446},[3519],{"type":3075,"value":3520},"# Using npm\n",{"type":3070,"tag":3440,"props":3522,"children":3523},{"class":3442,"line":3059},[3524,3529,3534],{"type":3070,"tag":3440,"props":3525,"children":3526},{"style":3455},[3527],{"type":3075,"value":3528},"npm",{"type":3070,"tag":3440,"props":3530,"children":3531},{"style":3461},[3532],{"type":3075,"value":3533}," install",{"type":3070,"tag":3440,"props":3535,"children":3536},{"style":3461},[3537],{"type":3075,"value":3469},{"type":3070,"tag":3416,"props":3539,"children":3541},{"id":3540},"_2-add-nuxt-api-shield-to-the-modules-section-of-nuxtconfigts",[3542,3544,3549,3551,3556,3558],{"type":3075,"value":3543},"2. Add ",{"type":3070,"tag":3227,"props":3545,"children":3547},{"className":3546},[],[3548],{"type":3075,"value":3011},{"type":3075,"value":3550}," to the ",{"type":3070,"tag":3227,"props":3552,"children":3554},{"className":3553},[],[3555],{"type":3075,"value":162},{"type":3075,"value":3557}," section of ",{"type":3070,"tag":3227,"props":3559,"children":3561},{"className":3560},[],[3562],{"type":3075,"value":233},{"type":3070,"tag":3077,"props":3564,"children":3565},{},[3566],{"type":3075,"value":3567},"You should add only the values you want to use differently from the default values.",{"type":3070,"tag":3430,"props":3569,"children":3573},{"className":3570,"code":3571,"language":3572,"meta":3014,"style":3014},"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",[3574],{"type":3070,"tag":3227,"props":3575,"children":3576},{"__ignoreMap":3014},[3577,3609,3651,3668,3676,3684,3692,3700,3708,3717,3726,3735,3744,3753,3762,3771,3780,3788,3797,3806,3820,3848,3856,3865,3893,3910,3919,3947,3955,3964],{"type":3070,"tag":3440,"props":3578,"children":3579},{"class":3442,"line":3042},[3580,3586,3591,3597,3603],{"type":3070,"tag":3440,"props":3581,"children":3583},{"style":3582},"--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#39ADB5;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic",[3584],{"type":3075,"value":3585},"export",{"type":3070,"tag":3440,"props":3587,"children":3588},{"style":3582},[3589],{"type":3075,"value":3590}," default",{"type":3070,"tag":3440,"props":3592,"children":3594},{"style":3593},"--shiki-light:#6182B8;--shiki-default:#6182B8;--shiki-dark:#82AAFF",[3595],{"type":3075,"value":3596}," defineNuxtConfig",{"type":3070,"tag":3440,"props":3598,"children":3600},{"style":3599},"--shiki-light:#90A4AE;--shiki-default:#90A4AE;--shiki-dark:#BABED8",[3601],{"type":3075,"value":3602},"(",{"type":3070,"tag":3440,"props":3604,"children":3606},{"style":3605},"--shiki-light:#39ADB5;--shiki-default:#39ADB5;--shiki-dark:#89DDFF",[3607],{"type":3075,"value":3608},"{\n",{"type":3070,"tag":3440,"props":3610,"children":3611},{"class":3442,"line":3038},[3612,3618,3623,3628,3633,3637,3641,3646],{"type":3070,"tag":3440,"props":3613,"children":3615},{"style":3614},"--shiki-light:#E53935;--shiki-default:#E53935;--shiki-dark:#F07178",[3616],{"type":3075,"value":3617},"  modules",{"type":3070,"tag":3440,"props":3619,"children":3620},{"style":3605},[3621],{"type":3075,"value":3622},":",{"type":3070,"tag":3440,"props":3624,"children":3625},{"style":3599},[3626],{"type":3075,"value":3627}," [",{"type":3070,"tag":3440,"props":3629,"children":3630},{"style":3605},[3631],{"type":3075,"value":3632},"\"",{"type":3070,"tag":3440,"props":3634,"children":3635},{"style":3461},[3636],{"type":3075,"value":3011},{"type":3070,"tag":3440,"props":3638,"children":3639},{"style":3605},[3640],{"type":3075,"value":3632},{"type":3070,"tag":3440,"props":3642,"children":3643},{"style":3599},[3644],{"type":3075,"value":3645},"]",{"type":3070,"tag":3440,"props":3647,"children":3648},{"style":3605},[3649],{"type":3075,"value":3650},",\n",{"type":3070,"tag":3440,"props":3652,"children":3653},{"class":3442,"line":3472},[3654,3659,3663],{"type":3070,"tag":3440,"props":3655,"children":3656},{"style":3614},[3657],{"type":3075,"value":3658},"  nuxtApiShield",{"type":3070,"tag":3440,"props":3660,"children":3661},{"style":3605},[3662],{"type":3075,"value":3622},{"type":3070,"tag":3440,"props":3664,"children":3665},{"style":3605},[3666],{"type":3075,"value":3667}," {\n",{"type":3070,"tag":3440,"props":3669,"children":3670},{"class":3442,"line":3481},[3671],{"type":3070,"tag":3440,"props":3672,"children":3673},{"style":3446},[3674],{"type":3075,"value":3675},"    \u002F*limit: {\n",{"type":3070,"tag":3440,"props":3677,"children":3678},{"class":3442,"line":3034},[3679],{"type":3070,"tag":3440,"props":3680,"children":3681},{"style":3446},[3682],{"type":3075,"value":3683},"      max: 12,        \u002F\u002F maximum requests per duration time, default is 12\u002Fduration\n",{"type":3070,"tag":3440,"props":3685,"children":3686},{"class":3442,"line":3506},[3687],{"type":3070,"tag":3440,"props":3688,"children":3689},{"style":3446},[3690],{"type":3075,"value":3691},"      duration: 108,   \u002F\u002F duration time in seconds, default is 108 seconds\n",{"type":3070,"tag":3440,"props":3693,"children":3694},{"class":3442,"line":3514},[3695],{"type":3070,"tag":3440,"props":3696,"children":3697},{"style":3446},[3698],{"type":3075,"value":3699},"      ban: 3600,      \u002F\u002F ban time in seconds, default is 3600 seconds = 1 hour\n",{"type":3070,"tag":3440,"props":3701,"children":3702},{"class":3442,"line":3059},[3703],{"type":3070,"tag":3440,"props":3704,"children":3705},{"style":3446},[3706],{"type":3075,"value":3707},"      \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":3070,"tag":3440,"props":3709,"children":3711},{"class":3442,"line":3710},9,[3712],{"type":3070,"tag":3440,"props":3713,"children":3714},{"style":3446},[3715],{"type":3075,"value":3716},"    },\n",{"type":3070,"tag":3440,"props":3718,"children":3720},{"class":3442,"line":3719},10,[3721],{"type":3070,"tag":3440,"props":3722,"children":3723},{"style":3446},[3724],{"type":3075,"value":3725},"    delayOnBan: true  \u002F\u002F delay every response with +1sec when the user is banned, default is true\n",{"type":3070,"tag":3440,"props":3727,"children":3729},{"class":3442,"line":3728},11,[3730],{"type":3070,"tag":3440,"props":3731,"children":3732},{"style":3446},[3733],{"type":3075,"value":3734},"    errorMessage: \"Too Many Requests\",  \u002F\u002F error message when the user is banned, default is \"Too Many Requests\"\n",{"type":3070,"tag":3440,"props":3736,"children":3738},{"class":3442,"line":3737},12,[3739],{"type":3070,"tag":3440,"props":3740,"children":3741},{"style":3446},[3742],{"type":3075,"value":3743},"    retryAfterHeader: false, \u002F\u002F when the user is banned add the Retry-After header to the response, default is false\n",{"type":3070,"tag":3440,"props":3745,"children":3747},{"class":3442,"line":3746},13,[3748],{"type":3070,"tag":3440,"props":3749,"children":3750},{"style":3446},[3751],{"type":3075,"value":3752},"    log: {\n",{"type":3070,"tag":3440,"props":3754,"children":3756},{"class":3442,"line":3755},14,[3757],{"type":3070,"tag":3440,"props":3758,"children":3759},{"style":3446},[3760],{"type":3075,"value":3761},"      path: \"\", \u002F\u002F path to the log file, every day a new log file will be created, use \"\" to disable logging\n",{"type":3070,"tag":3440,"props":3763,"children":3765},{"class":3442,"line":3764},15,[3766],{"type":3070,"tag":3440,"props":3767,"children":3768},{"style":3446},[3769],{"type":3075,"value":3770},"      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":3070,"tag":3440,"props":3772,"children":3774},{"class":3442,"line":3773},16,[3775],{"type":3070,"tag":3440,"props":3776,"children":3777},{"style":3446},[3778],{"type":3075,"value":3779},"      fail2ban: false, \u002F\u002F enable fail2ban-compatible log format for ban events (see fail2ban section)\n",{"type":3070,"tag":3440,"props":3781,"children":3783},{"class":3442,"line":3782},17,[3784],{"type":3070,"tag":3440,"props":3785,"children":3786},{"style":3446},[3787],{"type":3075,"value":3716},{"type":3070,"tag":3440,"props":3789,"children":3791},{"class":3442,"line":3790},18,[3792],{"type":3070,"tag":3440,"props":3793,"children":3794},{"style":3446},[3795],{"type":3075,"value":3796},"    routes: [], \u002F\u002F specify routes to apply rate limiting to, default is an empty array meaning all routes are protected.\n",{"type":3070,"tag":3440,"props":3798,"children":3800},{"class":3442,"line":3799},19,[3801],{"type":3070,"tag":3440,"props":3802,"children":3803},{"style":3446},[3804],{"type":3075,"value":3805},"    \u002F\u002F Example:\n",{"type":3070,"tag":3440,"props":3807,"children":3809},{"class":3442,"line":3808},20,[3810,3815],{"type":3070,"tag":3440,"props":3811,"children":3812},{"style":3446},[3813],{"type":3075,"value":3814},"    \u002F\u002F routes: [\"\u002Fapi\u002Fv2\u002F\", \"\u002Fapi\u002Fv3\u002F\"],",{"type":3070,"tag":3440,"props":3816,"children":3817},{"style":3446},[3818],{"type":3075,"value":3819}," \u002F\u002F \u002Fapi\u002Fv1 will not be protected, \u002Fapi\u002Fv2\u002F and \u002Fapi\u002Fv3\u002F will be protected *\u002F\n",{"type":3070,"tag":3440,"props":3821,"children":3823},{"class":3442,"line":3822},21,[3824,3829,3833,3838,3843],{"type":3070,"tag":3440,"props":3825,"children":3826},{"style":3614},[3827],{"type":3075,"value":3828},"    skipRoutes",{"type":3070,"tag":3440,"props":3830,"children":3831},{"style":3605},[3832],{"type":3075,"value":3622},{"type":3070,"tag":3440,"props":3834,"children":3835},{"style":3599},[3836],{"type":3075,"value":3837}," []",{"type":3070,"tag":3440,"props":3839,"children":3840},{"style":3605},[3841],{"type":3075,"value":3842},",",{"type":3070,"tag":3440,"props":3844,"children":3845},{"style":3446},[3846],{"type":3075,"value":3847}," \u002F\u002F specify routes to skip\u002Fexempt from rate limiting, supports wildcard patterns (*\u002F**)\n",{"type":3070,"tag":3440,"props":3849,"children":3851},{"class":3442,"line":3850},22,[3852],{"type":3070,"tag":3440,"props":3853,"children":3854},{"style":3446},[3855],{"type":3075,"value":3805},{"type":3070,"tag":3440,"props":3857,"children":3859},{"class":3442,"line":3858},23,[3860],{"type":3070,"tag":3440,"props":3861,"children":3862},{"style":3446},[3863],{"type":3075,"value":3864},"    \u002F\u002F skipRoutes: [\"\u002Fapi\u002Fhealth\", \"\u002Fapi\u002F_nuxt\u002F**\", \"\u002Fapi\u002Fwebhooks\u002Fstripe\"],\n",{"type":3070,"tag":3440,"props":3866,"children":3868},{"class":3442,"line":3867},24,[3869,3874,3878,3884,3888],{"type":3070,"tag":3440,"props":3870,"children":3871},{"style":3614},[3872],{"type":3075,"value":3873},"    ipTTL",{"type":3070,"tag":3440,"props":3875,"children":3876},{"style":3605},[3877],{"type":3075,"value":3622},{"type":3070,"tag":3440,"props":3879,"children":3881},{"style":3880},"--shiki-light:#F76D47;--shiki-default:#F76D47;--shiki-dark:#F78C6C",[3882],{"type":3075,"value":3883}," 604800",{"type":3070,"tag":3440,"props":3885,"children":3886},{"style":3605},[3887],{"type":3075,"value":3842},{"type":3070,"tag":3440,"props":3889,"children":3890},{"style":3446},[3891],{"type":3075,"value":3892}," \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":3070,"tag":3440,"props":3894,"children":3896},{"class":3442,"line":3895},25,[3897,3902,3906],{"type":3070,"tag":3440,"props":3898,"children":3899},{"style":3614},[3900],{"type":3075,"value":3901},"    security",{"type":3070,"tag":3440,"props":3903,"children":3904},{"style":3605},[3905],{"type":3075,"value":3622},{"type":3070,"tag":3440,"props":3907,"children":3908},{"style":3605},[3909],{"type":3075,"value":3667},{"type":3070,"tag":3440,"props":3911,"children":3913},{"class":3442,"line":3912},26,[3914],{"type":3070,"tag":3440,"props":3915,"children":3916},{"style":3446},[3917],{"type":3075,"value":3918},"      \u002F\u002F Optional: Security-related configurations\n",{"type":3070,"tag":3440,"props":3920,"children":3922},{"class":3442,"line":3921},27,[3923,3928,3932,3938,3942],{"type":3070,"tag":3440,"props":3924,"children":3925},{"style":3614},[3926],{"type":3075,"value":3927},"      trustXForwardedFor",{"type":3070,"tag":3440,"props":3929,"children":3930},{"style":3605},[3931],{"type":3075,"value":3622},{"type":3070,"tag":3440,"props":3933,"children":3935},{"style":3934},"--shiki-light:#FF5370;--shiki-default:#FF5370;--shiki-dark:#FF9CAC",[3936],{"type":3075,"value":3937}," false",{"type":3070,"tag":3440,"props":3939,"children":3940},{"style":3605},[3941],{"type":3075,"value":3842},{"type":3070,"tag":3440,"props":3943,"children":3944},{"style":3446},[3945],{"type":3075,"value":3946}," \u002F\u002F Default: false. Whether to trust X-Forwarded-For headers. See warning below.\n",{"type":3070,"tag":3440,"props":3948,"children":3950},{"class":3442,"line":3949},28,[3951],{"type":3070,"tag":3440,"props":3952,"children":3953},{"style":3605},[3954],{"type":3075,"value":3716},{"type":3070,"tag":3440,"props":3956,"children":3958},{"class":3442,"line":3957},29,[3959],{"type":3070,"tag":3440,"props":3960,"children":3961},{"style":3605},[3962],{"type":3075,"value":3963},"  },\n",{"type":3070,"tag":3440,"props":3965,"children":3967},{"class":3442,"line":3966},30,[3968,3973,3978],{"type":3070,"tag":3440,"props":3969,"children":3970},{"style":3605},[3971],{"type":3075,"value":3972},"}",{"type":3070,"tag":3440,"props":3974,"children":3975},{"style":3599},[3976],{"type":3075,"value":3977},")",{"type":3070,"tag":3440,"props":3979,"children":3980},{"style":3605},[3981],{"type":3075,"value":3982},";\n",{"type":3070,"tag":3077,"props":3984,"children":3985},{},[3986,3991,3993,3999],{"type":3070,"tag":3165,"props":3987,"children":3988},{},[3989],{"type":3075,"value":3990},"Default Configuration Values:",{"type":3075,"value":3992},"\n(These are applied by the module if not specified in your ",{"type":3070,"tag":3227,"props":3994,"children":3996},{"className":3995},[],[3997],{"type":3075,"value":3998},"nuxtApiShield",{"type":3075,"value":4000}," config)",{"type":3070,"tag":3430,"props":4002,"children":4004},{"className":3570,"code":4003,"language":3572,"meta":3014,"style":3014},"{\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",[4005],{"type":3070,"tag":3227,"props":4006,"children":4007},{"__ignoreMap":3014},[4008,4015,4031,4052,4078,4104,4111,4132,4162,4182,4198,4224,4250,4270,4277,4297,4317,4370,4386,4406,4414],{"type":3070,"tag":3440,"props":4009,"children":4010},{"class":3442,"line":3042},[4011],{"type":3070,"tag":3440,"props":4012,"children":4013},{"style":3605},[4014],{"type":3075,"value":3608},{"type":3070,"tag":3440,"props":4016,"children":4017},{"class":3442,"line":3038},[4018,4023,4027],{"type":3070,"tag":3440,"props":4019,"children":4020},{"style":3455},[4021],{"type":3075,"value":4022},"  limit",{"type":3070,"tag":3440,"props":4024,"children":4025},{"style":3605},[4026],{"type":3075,"value":3622},{"type":3070,"tag":3440,"props":4028,"children":4029},{"style":3605},[4030],{"type":3075,"value":3667},{"type":3070,"tag":3440,"props":4032,"children":4033},{"class":3442,"line":3472},[4034,4039,4043,4048],{"type":3070,"tag":3440,"props":4035,"children":4036},{"style":3455},[4037],{"type":3075,"value":4038},"    max",{"type":3070,"tag":3440,"props":4040,"children":4041},{"style":3605},[4042],{"type":3075,"value":3622},{"type":3070,"tag":3440,"props":4044,"children":4045},{"style":3880},[4046],{"type":3075,"value":4047}," 12",{"type":3070,"tag":3440,"props":4049,"children":4050},{"style":3605},[4051],{"type":3075,"value":3650},{"type":3070,"tag":3440,"props":4053,"children":4054},{"class":3442,"line":3481},[4055,4060,4064,4069,4073],{"type":3070,"tag":3440,"props":4056,"children":4057},{"style":3455},[4058],{"type":3075,"value":4059},"    duration",{"type":3070,"tag":3440,"props":4061,"children":4062},{"style":3605},[4063],{"type":3075,"value":3622},{"type":3070,"tag":3440,"props":4065,"children":4066},{"style":3880},[4067],{"type":3075,"value":4068}," 108",{"type":3070,"tag":3440,"props":4070,"children":4071},{"style":3605},[4072],{"type":3075,"value":3842},{"type":3070,"tag":3440,"props":4074,"children":4075},{"style":3446},[4076],{"type":3075,"value":4077}," \u002F\u002F seconds\n",{"type":3070,"tag":3440,"props":4079,"children":4080},{"class":3442,"line":3034},[4081,4086,4090,4095,4099],{"type":3070,"tag":3440,"props":4082,"children":4083},{"style":3455},[4084],{"type":3075,"value":4085},"    ban",{"type":3070,"tag":3440,"props":4087,"children":4088},{"style":3605},[4089],{"type":3075,"value":3622},{"type":3070,"tag":3440,"props":4091,"children":4092},{"style":3880},[4093],{"type":3075,"value":4094}," 3600",{"type":3070,"tag":3440,"props":4096,"children":4097},{"style":3605},[4098],{"type":3075,"value":3842},{"type":3070,"tag":3440,"props":4100,"children":4101},{"style":3446},[4102],{"type":3075,"value":4103},"     \u002F\u002F seconds\n",{"type":3070,"tag":3440,"props":4105,"children":4106},{"class":3442,"line":3506},[4107],{"type":3070,"tag":3440,"props":4108,"children":4109},{"style":3605},[4110],{"type":3075,"value":3963},{"type":3070,"tag":3440,"props":4112,"children":4113},{"class":3442,"line":3514},[4114,4119,4123,4128],{"type":3070,"tag":3440,"props":4115,"children":4116},{"style":3455},[4117],{"type":3075,"value":4118},"  delayOnBan",{"type":3070,"tag":3440,"props":4120,"children":4121},{"style":3605},[4122],{"type":3075,"value":3622},{"type":3070,"tag":3440,"props":4124,"children":4125},{"style":3934},[4126],{"type":3075,"value":4127}," true",{"type":3070,"tag":3440,"props":4129,"children":4130},{"style":3605},[4131],{"type":3075,"value":3650},{"type":3070,"tag":3440,"props":4133,"children":4134},{"class":3442,"line":3059},[4135,4140,4144,4149,4154,4158],{"type":3070,"tag":3440,"props":4136,"children":4137},{"style":3455},[4138],{"type":3075,"value":4139},"  errorMessage",{"type":3070,"tag":3440,"props":4141,"children":4142},{"style":3605},[4143],{"type":3075,"value":3622},{"type":3070,"tag":3440,"props":4145,"children":4146},{"style":3605},[4147],{"type":3075,"value":4148}," \"",{"type":3070,"tag":3440,"props":4150,"children":4151},{"style":3461},[4152],{"type":3075,"value":4153},"Too Many Requests",{"type":3070,"tag":3440,"props":4155,"children":4156},{"style":3605},[4157],{"type":3075,"value":3632},{"type":3070,"tag":3440,"props":4159,"children":4160},{"style":3605},[4161],{"type":3075,"value":3650},{"type":3070,"tag":3440,"props":4163,"children":4164},{"class":3442,"line":3710},[4165,4170,4174,4178],{"type":3070,"tag":3440,"props":4166,"children":4167},{"style":3455},[4168],{"type":3075,"value":4169},"  retryAfterHeader",{"type":3070,"tag":3440,"props":4171,"children":4172},{"style":3605},[4173],{"type":3075,"value":3622},{"type":3070,"tag":3440,"props":4175,"children":4176},{"style":3934},[4177],{"type":3075,"value":3937},{"type":3070,"tag":3440,"props":4179,"children":4180},{"style":3605},[4181],{"type":3075,"value":3650},{"type":3070,"tag":3440,"props":4183,"children":4184},{"class":3442,"line":3719},[4185,4190,4194],{"type":3070,"tag":3440,"props":4186,"children":4187},{"style":3455},[4188],{"type":3075,"value":4189},"  log",{"type":3070,"tag":3440,"props":4191,"children":4192},{"style":3605},[4193],{"type":3075,"value":3622},{"type":3070,"tag":3440,"props":4195,"children":4196},{"style":3605},[4197],{"type":3075,"value":3667},{"type":3070,"tag":3440,"props":4199,"children":4200},{"class":3442,"line":3728},[4201,4206,4210,4215,4219],{"type":3070,"tag":3440,"props":4202,"children":4203},{"style":3455},[4204],{"type":3075,"value":4205},"    path",{"type":3070,"tag":3440,"props":4207,"children":4208},{"style":3605},[4209],{"type":3075,"value":3622},{"type":3070,"tag":3440,"props":4211,"children":4212},{"style":3605},[4213],{"type":3075,"value":4214}," \"\"",{"type":3070,"tag":3440,"props":4216,"children":4217},{"style":3605},[4218],{"type":3075,"value":3842},{"type":3070,"tag":3440,"props":4220,"children":4221},{"style":3446},[4222],{"type":3075,"value":4223}," \u002F\u002F Logging is disabled if path is empty\n",{"type":3070,"tag":3440,"props":4225,"children":4226},{"class":3442,"line":3737},[4227,4232,4236,4241,4245],{"type":3070,"tag":3440,"props":4228,"children":4229},{"style":3455},[4230],{"type":3075,"value":4231},"    attempts",{"type":3070,"tag":3440,"props":4233,"children":4234},{"style":3605},[4235],{"type":3075,"value":3622},{"type":3070,"tag":3440,"props":4237,"children":4238},{"style":3880},[4239],{"type":3075,"value":4240}," 0",{"type":3070,"tag":3440,"props":4242,"children":4243},{"style":3605},[4244],{"type":3075,"value":3842},{"type":3070,"tag":3440,"props":4246,"children":4247},{"style":3446},[4248],{"type":3075,"value":4249}," \u002F\u002F Logging per IP is disabled if attempts is 0\n",{"type":3070,"tag":3440,"props":4251,"children":4252},{"class":3442,"line":3746},[4253,4258,4262,4266],{"type":3070,"tag":3440,"props":4254,"children":4255},{"style":3455},[4256],{"type":3075,"value":4257},"    fail2ban",{"type":3070,"tag":3440,"props":4259,"children":4260},{"style":3605},[4261],{"type":3075,"value":3622},{"type":3070,"tag":3440,"props":4263,"children":4264},{"style":3934},[4265],{"type":3075,"value":3937},{"type":3070,"tag":3440,"props":4267,"children":4268},{"style":3605},[4269],{"type":3075,"value":3650},{"type":3070,"tag":3440,"props":4271,"children":4272},{"class":3442,"line":3755},[4273],{"type":3070,"tag":3440,"props":4274,"children":4275},{"style":3605},[4276],{"type":3075,"value":3963},{"type":3070,"tag":3440,"props":4278,"children":4279},{"class":3442,"line":3764},[4280,4285,4289,4293],{"type":3070,"tag":3440,"props":4281,"children":4282},{"style":3455},[4283],{"type":3075,"value":4284},"  routes",{"type":3070,"tag":3440,"props":4286,"children":4287},{"style":3605},[4288],{"type":3075,"value":3622},{"type":3070,"tag":3440,"props":4290,"children":4291},{"style":3614},[4292],{"type":3075,"value":3837},{"type":3070,"tag":3440,"props":4294,"children":4295},{"style":3605},[4296],{"type":3075,"value":3650},{"type":3070,"tag":3440,"props":4298,"children":4299},{"class":3442,"line":3773},[4300,4305,4309,4313],{"type":3070,"tag":3440,"props":4301,"children":4302},{"style":3455},[4303],{"type":3075,"value":4304},"  skipRoutes",{"type":3070,"tag":3440,"props":4306,"children":4307},{"style":3605},[4308],{"type":3075,"value":3622},{"type":3070,"tag":3440,"props":4310,"children":4311},{"style":3614},[4312],{"type":3075,"value":3837},{"type":3070,"tag":3440,"props":4314,"children":4315},{"style":3605},[4316],{"type":3075,"value":3650},{"type":3070,"tag":3440,"props":4318,"children":4319},{"class":3442,"line":3782},[4320,4325,4329,4334,4339,4344,4348,4353,4357,4361,4365],{"type":3070,"tag":3440,"props":4321,"children":4322},{"style":3455},[4323],{"type":3075,"value":4324},"  ipTTL",{"type":3070,"tag":3440,"props":4326,"children":4327},{"style":3605},[4328],{"type":3075,"value":3622},{"type":3070,"tag":3440,"props":4330,"children":4331},{"style":3880},[4332],{"type":3075,"value":4333}," 7",{"type":3070,"tag":3440,"props":4335,"children":4336},{"style":3605},[4337],{"type":3075,"value":4338}," *",{"type":3070,"tag":3440,"props":4340,"children":4341},{"style":3880},[4342],{"type":3075,"value":4343}," 24",{"type":3070,"tag":3440,"props":4345,"children":4346},{"style":3605},[4347],{"type":3075,"value":4338},{"type":3070,"tag":3440,"props":4349,"children":4350},{"style":3880},[4351],{"type":3075,"value":4352}," 60",{"type":3070,"tag":3440,"props":4354,"children":4355},{"style":3605},[4356],{"type":3075,"value":4338},{"type":3070,"tag":3440,"props":4358,"children":4359},{"style":3880},[4360],{"type":3075,"value":4352},{"type":3070,"tag":3440,"props":4362,"children":4363},{"style":3605},[4364],{"type":3075,"value":3842},{"type":3070,"tag":3440,"props":4366,"children":4367},{"style":3446},[4368],{"type":3075,"value":4369}," \u002F\u002F 7 days in seconds\n",{"type":3070,"tag":3440,"props":4371,"children":4372},{"class":3442,"line":3790},[4373,4378,4382],{"type":3070,"tag":3440,"props":4374,"children":4375},{"style":3455},[4376],{"type":3075,"value":4377},"  security",{"type":3070,"tag":3440,"props":4379,"children":4380},{"style":3605},[4381],{"type":3075,"value":3622},{"type":3070,"tag":3440,"props":4383,"children":4384},{"style":3605},[4385],{"type":3075,"value":3667},{"type":3070,"tag":3440,"props":4387,"children":4388},{"class":3442,"line":3799},[4389,4394,4398,4402],{"type":3070,"tag":3440,"props":4390,"children":4391},{"style":3455},[4392],{"type":3075,"value":4393},"    trustXForwardedFor",{"type":3070,"tag":3440,"props":4395,"children":4396},{"style":3605},[4397],{"type":3075,"value":3622},{"type":3070,"tag":3440,"props":4399,"children":4400},{"style":3934},[4401],{"type":3075,"value":3937},{"type":3070,"tag":3440,"props":4403,"children":4404},{"style":3605},[4405],{"type":3075,"value":3650},{"type":3070,"tag":3440,"props":4407,"children":4408},{"class":3442,"line":3808},[4409],{"type":3070,"tag":3440,"props":4410,"children":4411},{"style":3605},[4412],{"type":3075,"value":4413},"  }\n",{"type":3070,"tag":3440,"props":4415,"children":4416},{"class":3442,"line":3822},[4417],{"type":3070,"tag":3440,"props":4418,"children":4419},{"style":3605},[4420],{"type":3075,"value":4421},"}\n",{"type":3070,"tag":3077,"props":4423,"children":4424},{},[4425],{"type":3070,"tag":3165,"props":4426,"children":4427},{},[4428,4430],{"type":3075,"value":4429},"Security Warning: ",{"type":3070,"tag":3227,"props":4431,"children":4433},{"className":4432},[],[4434],{"type":3075,"value":4435},"trustXForwardedFor",{"type":3070,"tag":3077,"props":4437,"children":4438},{},[4439,4441,4447,4449,4455,4457,4463],{"type":3075,"value":4440},"The ",{"type":3070,"tag":3227,"props":4442,"children":4444},{"className":4443},[],[4445],{"type":3075,"value":4446},"security.trustXForwardedFor",{"type":3075,"value":4448}," option (default is ",{"type":3070,"tag":3227,"props":4450,"children":4452},{"className":4451},[],[4453],{"type":3075,"value":4454},"false",{"type":3075,"value":4456},", set by the module) determines if the module uses the ",{"type":3070,"tag":3227,"props":4458,"children":4460},{"className":4459},[],[4461],{"type":3075,"value":4462},"X-Forwarded-For",{"type":3075,"value":4464}," HTTP header to identify the client's IP address.",{"type":3070,"tag":3127,"props":4466,"children":4467},{},[4468,4488,4526,4545],{"type":3070,"tag":3131,"props":4469,"children":4470},{},[4471,4473,4479,4481,4486],{"type":3075,"value":4472},"If set to ",{"type":3070,"tag":3227,"props":4474,"children":4476},{"className":4475},[],[4477],{"type":3075,"value":4478},"true",{"type":3075,"value":4480},": The module will use the IP address provided in the ",{"type":3070,"tag":3227,"props":4482,"children":4484},{"className":4483},[],[4485],{"type":3075,"value":4462},{"type":3075,"value":4487}," 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":3070,"tag":3131,"props":4489,"children":4490},{},[4491,4496,4498,4503,4505,4510,4512,4517,4519,4524],{"type":3070,"tag":3165,"props":4492,"children":4493},{},[4494],{"type":3075,"value":4495},"WARNING:",{"type":3075,"value":4497}," If ",{"type":3070,"tag":3227,"props":4499,"children":4501},{"className":4500},[],[4502],{"type":3075,"value":4435},{"type":3075,"value":4504}," is ",{"type":3070,"tag":3227,"props":4506,"children":4508},{"className":4507},[],[4509],{"type":3075,"value":4478},{"type":3075,"value":4511}," and your application is directly internet-facing OR your proxy is not configured to strip incoming ",{"type":3070,"tag":3227,"props":4513,"children":4515},{"className":4514},[],[4516],{"type":3075,"value":4462},{"type":3075,"value":4518}," headers from clients, malicious users can spoof their IP address by sending a fake ",{"type":3070,"tag":3227,"props":4520,"children":4522},{"className":4521},[],[4523],{"type":3075,"value":4462},{"type":3075,"value":4525}," header. This would allow them to bypass rate limits or cause other users to be incorrectly rate-limited.",{"type":3070,"tag":3131,"props":4527,"children":4528},{},[4529,4530,4535,4537,4543],{"type":3075,"value":4472},{"type":3070,"tag":3227,"props":4531,"children":4533},{"className":4532},[],[4534],{"type":3075,"value":4454},{"type":3075,"value":4536},": The module will use the direct IP address of the incoming connection (i.e., ",{"type":3070,"tag":3227,"props":4538,"children":4540},{"className":4539},[],[4541],{"type":3075,"value":4542},"event.node.req.socket.remoteAddress",{"type":3075,"value":4544},"). Use this setting if your application is directly internet-facing or if you are unsure about your proxy's configuration.",{"type":3070,"tag":3131,"props":4546,"children":4547},{},[4548,4553,4555,4561,4563,4568],{"type":3070,"tag":3165,"props":4549,"children":4550},{},[4551],{"type":3075,"value":4552},"Recommendation:",{"type":3075,"value":4554}," Only enable ",{"type":3070,"tag":3227,"props":4556,"children":4558},{"className":4557},[],[4559],{"type":3075,"value":4560},"trustXForwardedFor: true",{"type":3075,"value":4562}," 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":3070,"tag":3227,"props":4564,"children":4566},{"className":4565},[],[4567],{"type":3075,"value":4454},{"type":3075,"value":4569},".",{"type":3070,"tag":3416,"props":4571,"children":4573},{"id":4572},"_3-add-nitrostorage-to-nuxtconfigts",[4574,4576,4582,4584],{"type":3075,"value":4575},"3. Add ",{"type":3070,"tag":3227,"props":4577,"children":4579},{"className":4578},[],[4580],{"type":3075,"value":4581},"nitro\u002Fstorage",{"type":3075,"value":4583}," to ",{"type":3070,"tag":3227,"props":4585,"children":4587},{"className":4586},[],[4588],{"type":3075,"value":233},{"type":3070,"tag":3077,"props":4590,"children":4591},{},[4592,4594,4599],{"type":3075,"value":4593},"You can use any storage you want, but you have to use ",{"type":3070,"tag":3165,"props":4595,"children":4596},{},[4597],{"type":3075,"value":4598},"shield",{"type":3075,"value":4600}," as the name of the storage.",{"type":3070,"tag":3430,"props":4602,"children":4606},{"className":4603,"code":4604,"language":4605,"meta":3014,"style":3014},"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",[4607],{"type":3070,"tag":3227,"props":4608,"children":4609},{"__ignoreMap":3014},[4610,4617,4643,4668,4692,4700,4735,4743,4751,4758],{"type":3070,"tag":3440,"props":4611,"children":4612},{"class":3442,"line":3042},[4613],{"type":3070,"tag":3440,"props":4614,"children":4615},{"style":3605},[4616],{"type":3075,"value":3608},{"type":3070,"tag":3440,"props":4618,"children":4619},{"class":3442,"line":3038},[4620,4625,4631,4635,4639],{"type":3070,"tag":3440,"props":4621,"children":4622},{"style":3605},[4623],{"type":3075,"value":4624},"  \"",{"type":3070,"tag":3440,"props":4626,"children":4628},{"style":4627},"--shiki-light:#9C3EDA;--shiki-default:#9C3EDA;--shiki-dark:#C792EA",[4629],{"type":3075,"value":4630},"nitro",{"type":3070,"tag":3440,"props":4632,"children":4633},{"style":3605},[4634],{"type":3075,"value":3632},{"type":3070,"tag":3440,"props":4636,"children":4637},{"style":3605},[4638],{"type":3075,"value":3622},{"type":3070,"tag":3440,"props":4640,"children":4641},{"style":3605},[4642],{"type":3075,"value":3667},{"type":3070,"tag":3440,"props":4644,"children":4645},{"class":3442,"line":3472},[4646,4651,4656,4660,4664],{"type":3070,"tag":3440,"props":4647,"children":4648},{"style":3605},[4649],{"type":3075,"value":4650},"    \"",{"type":3070,"tag":3440,"props":4652,"children":4653},{"style":3455},[4654],{"type":3075,"value":4655},"storage",{"type":3070,"tag":3440,"props":4657,"children":4658},{"style":3605},[4659],{"type":3075,"value":3632},{"type":3070,"tag":3440,"props":4661,"children":4662},{"style":3605},[4663],{"type":3075,"value":3622},{"type":3070,"tag":3440,"props":4665,"children":4666},{"style":3605},[4667],{"type":3075,"value":3667},{"type":3070,"tag":3440,"props":4669,"children":4670},{"class":3442,"line":3481},[4671,4676,4680,4684,4688],{"type":3070,"tag":3440,"props":4672,"children":4673},{"style":3605},[4674],{"type":3075,"value":4675},"      \"",{"type":3070,"tag":3440,"props":4677,"children":4678},{"style":3880},[4679],{"type":3075,"value":4598},{"type":3070,"tag":3440,"props":4681,"children":4682},{"style":3605},[4683],{"type":3075,"value":3632},{"type":3070,"tag":3440,"props":4685,"children":4686},{"style":3605},[4687],{"type":3075,"value":3622},{"type":3070,"tag":3440,"props":4689,"children":4690},{"style":3605},[4691],{"type":3075,"value":3667},{"type":3070,"tag":3440,"props":4693,"children":4694},{"class":3442,"line":3034},[4695],{"type":3070,"tag":3440,"props":4696,"children":4697},{"style":3446},[4698],{"type":3075,"value":4699},"        \u002F\u002F storage name, you **must** use \"shield\" as the name\n",{"type":3070,"tag":3440,"props":4701,"children":4702},{"class":3442,"line":3506},[4703,4708,4713,4717,4721,4725,4730],{"type":3070,"tag":3440,"props":4704,"children":4705},{"style":3605},[4706],{"type":3075,"value":4707},"        \"",{"type":3070,"tag":3440,"props":4709,"children":4710},{"style":3614},[4711],{"type":3075,"value":4712},"driver",{"type":3070,"tag":3440,"props":4714,"children":4715},{"style":3605},[4716],{"type":3075,"value":3632},{"type":3070,"tag":3440,"props":4718,"children":4719},{"style":3605},[4720],{"type":3075,"value":3622},{"type":3070,"tag":3440,"props":4722,"children":4723},{"style":3605},[4724],{"type":3075,"value":4148},{"type":3070,"tag":3440,"props":4726,"children":4727},{"style":3461},[4728],{"type":3075,"value":4729},"memory",{"type":3070,"tag":3440,"props":4731,"children":4732},{"style":3605},[4733],{"type":3075,"value":4734},"\"\n",{"type":3070,"tag":3440,"props":4736,"children":4737},{"class":3442,"line":3514},[4738],{"type":3070,"tag":3440,"props":4739,"children":4740},{"style":3605},[4741],{"type":3075,"value":4742},"      }\n",{"type":3070,"tag":3440,"props":4744,"children":4745},{"class":3442,"line":3059},[4746],{"type":3070,"tag":3440,"props":4747,"children":4748},{"style":3605},[4749],{"type":3075,"value":4750},"    }\n",{"type":3070,"tag":3440,"props":4752,"children":4753},{"class":3442,"line":3710},[4754],{"type":3070,"tag":3440,"props":4755,"children":4756},{"style":3605},[4757],{"type":3075,"value":4413},{"type":3070,"tag":3440,"props":4759,"children":4760},{"class":3442,"line":3719},[4761],{"type":3070,"tag":3440,"props":4762,"children":4763},{"style":3605},[4764],{"type":3075,"value":4421},{"type":3070,"tag":3077,"props":4766,"children":4767},{},[4768],{"type":3075,"value":4769},"If you use for example redis, you can use the following configuration, define the host and port.",{"type":3070,"tag":3430,"props":4771,"children":4773},{"className":4603,"code":4772,"language":4605,"meta":3014,"style":3014},"{\n  \"nitro\": {\n    \"storage\": {\n      \"shield\": {\n        \"driver\": \"redis\",\n        \"host\": \"localhost\",\n        \"port\": 6379\n      }\n    }\n  }\n}\n",[4774],{"type":3070,"tag":3227,"props":4775,"children":4776},{"__ignoreMap":3014},[4777,4784,4807,4830,4853,4889,4926,4951,4958,4965,4972],{"type":3070,"tag":3440,"props":4778,"children":4779},{"class":3442,"line":3042},[4780],{"type":3070,"tag":3440,"props":4781,"children":4782},{"style":3605},[4783],{"type":3075,"value":3608},{"type":3070,"tag":3440,"props":4785,"children":4786},{"class":3442,"line":3038},[4787,4791,4795,4799,4803],{"type":3070,"tag":3440,"props":4788,"children":4789},{"style":3605},[4790],{"type":3075,"value":4624},{"type":3070,"tag":3440,"props":4792,"children":4793},{"style":4627},[4794],{"type":3075,"value":4630},{"type":3070,"tag":3440,"props":4796,"children":4797},{"style":3605},[4798],{"type":3075,"value":3632},{"type":3070,"tag":3440,"props":4800,"children":4801},{"style":3605},[4802],{"type":3075,"value":3622},{"type":3070,"tag":3440,"props":4804,"children":4805},{"style":3605},[4806],{"type":3075,"value":3667},{"type":3070,"tag":3440,"props":4808,"children":4809},{"class":3442,"line":3472},[4810,4814,4818,4822,4826],{"type":3070,"tag":3440,"props":4811,"children":4812},{"style":3605},[4813],{"type":3075,"value":4650},{"type":3070,"tag":3440,"props":4815,"children":4816},{"style":3455},[4817],{"type":3075,"value":4655},{"type":3070,"tag":3440,"props":4819,"children":4820},{"style":3605},[4821],{"type":3075,"value":3632},{"type":3070,"tag":3440,"props":4823,"children":4824},{"style":3605},[4825],{"type":3075,"value":3622},{"type":3070,"tag":3440,"props":4827,"children":4828},{"style":3605},[4829],{"type":3075,"value":3667},{"type":3070,"tag":3440,"props":4831,"children":4832},{"class":3442,"line":3481},[4833,4837,4841,4845,4849],{"type":3070,"tag":3440,"props":4834,"children":4835},{"style":3605},[4836],{"type":3075,"value":4675},{"type":3070,"tag":3440,"props":4838,"children":4839},{"style":3880},[4840],{"type":3075,"value":4598},{"type":3070,"tag":3440,"props":4842,"children":4843},{"style":3605},[4844],{"type":3075,"value":3632},{"type":3070,"tag":3440,"props":4846,"children":4847},{"style":3605},[4848],{"type":3075,"value":3622},{"type":3070,"tag":3440,"props":4850,"children":4851},{"style":3605},[4852],{"type":3075,"value":3667},{"type":3070,"tag":3440,"props":4854,"children":4855},{"class":3442,"line":3034},[4856,4860,4864,4868,4872,4876,4881,4885],{"type":3070,"tag":3440,"props":4857,"children":4858},{"style":3605},[4859],{"type":3075,"value":4707},{"type":3070,"tag":3440,"props":4861,"children":4862},{"style":3614},[4863],{"type":3075,"value":4712},{"type":3070,"tag":3440,"props":4865,"children":4866},{"style":3605},[4867],{"type":3075,"value":3632},{"type":3070,"tag":3440,"props":4869,"children":4870},{"style":3605},[4871],{"type":3075,"value":3622},{"type":3070,"tag":3440,"props":4873,"children":4874},{"style":3605},[4875],{"type":3075,"value":4148},{"type":3070,"tag":3440,"props":4877,"children":4878},{"style":3461},[4879],{"type":3075,"value":4880},"redis",{"type":3070,"tag":3440,"props":4882,"children":4883},{"style":3605},[4884],{"type":3075,"value":3632},{"type":3070,"tag":3440,"props":4886,"children":4887},{"style":3605},[4888],{"type":3075,"value":3650},{"type":3070,"tag":3440,"props":4890,"children":4891},{"class":3442,"line":3506},[4892,4896,4901,4905,4909,4913,4918,4922],{"type":3070,"tag":3440,"props":4893,"children":4894},{"style":3605},[4895],{"type":3075,"value":4707},{"type":3070,"tag":3440,"props":4897,"children":4898},{"style":3614},[4899],{"type":3075,"value":4900},"host",{"type":3070,"tag":3440,"props":4902,"children":4903},{"style":3605},[4904],{"type":3075,"value":3632},{"type":3070,"tag":3440,"props":4906,"children":4907},{"style":3605},[4908],{"type":3075,"value":3622},{"type":3070,"tag":3440,"props":4910,"children":4911},{"style":3605},[4912],{"type":3075,"value":4148},{"type":3070,"tag":3440,"props":4914,"children":4915},{"style":3461},[4916],{"type":3075,"value":4917},"localhost",{"type":3070,"tag":3440,"props":4919,"children":4920},{"style":3605},[4921],{"type":3075,"value":3632},{"type":3070,"tag":3440,"props":4923,"children":4924},{"style":3605},[4925],{"type":3075,"value":3650},{"type":3070,"tag":3440,"props":4927,"children":4928},{"class":3442,"line":3514},[4929,4933,4938,4942,4946],{"type":3070,"tag":3440,"props":4930,"children":4931},{"style":3605},[4932],{"type":3075,"value":4707},{"type":3070,"tag":3440,"props":4934,"children":4935},{"style":3614},[4936],{"type":3075,"value":4937},"port",{"type":3070,"tag":3440,"props":4939,"children":4940},{"style":3605},[4941],{"type":3075,"value":3632},{"type":3070,"tag":3440,"props":4943,"children":4944},{"style":3605},[4945],{"type":3075,"value":3622},{"type":3070,"tag":3440,"props":4947,"children":4948},{"style":3880},[4949],{"type":3075,"value":4950}," 6379\n",{"type":3070,"tag":3440,"props":4952,"children":4953},{"class":3442,"line":3059},[4954],{"type":3070,"tag":3440,"props":4955,"children":4956},{"style":3605},[4957],{"type":3075,"value":4742},{"type":3070,"tag":3440,"props":4959,"children":4960},{"class":3442,"line":3710},[4961],{"type":3070,"tag":3440,"props":4962,"children":4963},{"style":3605},[4964],{"type":3075,"value":4750},{"type":3070,"tag":3440,"props":4966,"children":4967},{"class":3442,"line":3719},[4968],{"type":3070,"tag":3440,"props":4969,"children":4970},{"style":3605},[4971],{"type":3075,"value":4413},{"type":3070,"tag":3440,"props":4973,"children":4974},{"class":3442,"line":3728},[4975],{"type":3070,"tag":3440,"props":4976,"children":4977},{"style":3605},[4978],{"type":3075,"value":4421},{"type":3070,"tag":3416,"props":4980,"children":4982},{"id":4981},"_4-schedule-bundled-cleanup-tasks-in-nuxtconfigts",[4983,4985],{"type":3075,"value":4984},"4. Schedule bundled cleanup tasks in ",{"type":3070,"tag":3227,"props":4986,"children":4988},{"className":4987},[],[4989],{"type":3075,"value":233},{"type":3070,"tag":3077,"props":4991,"children":4992},{},[4993,4995,5000,5002,5008,5010,5015,5017,5023,5025,5031,5033,5039,5041,5046,5048,5054],{"type":3075,"value":4994},"The module registers two Nitro tasks for you: ",{"type":3070,"tag":3227,"props":4996,"children":4998},{"className":4997},[],[4999],{"type":3075,"value":3324},{"type":3075,"value":5001}," (removes expired ",{"type":3070,"tag":3227,"props":5003,"children":5005},{"className":5004},[],[5006],{"type":3075,"value":5007},"ban:*",{"type":3075,"value":5009}," keys) and ",{"type":3070,"tag":3227,"props":5011,"children":5013},{"className":5012},[],[5014],{"type":3075,"value":3332},{"type":3075,"value":5016}," (removes stale ",{"type":3070,"tag":3227,"props":5018,"children":5020},{"className":5019},[],[5021],{"type":3075,"value":5022},"ip:*",{"type":3075,"value":5024}," keys using ",{"type":3070,"tag":3227,"props":5026,"children":5028},{"className":5027},[],[5029],{"type":3075,"value":5030},"ipTTL",{"type":3075,"value":5032},"). Turn on Nitro tasks and add ",{"type":3070,"tag":3227,"props":5034,"children":5036},{"className":5035},[],[5037],{"type":3075,"value":5038},"scheduledTasks",{"type":3075,"value":5040}," so they run on a cadence you choose. You do ",{"type":3070,"tag":3165,"props":5042,"children":5043},{},[5044],{"type":3075,"value":5045},"not",{"type":3075,"value":5047}," need files under ",{"type":3070,"tag":3227,"props":5049,"children":5051},{"className":5050},[],[5052],{"type":3075,"value":5053},"server\u002Ftasks\u002F",{"type":3075,"value":5055}," for this default setup.",{"type":3070,"tag":3430,"props":5057,"children":5059},{"className":4603,"code":5058,"language":4605,"meta":3014,"style":3014},"{\n  \"nitro\": {\n    \"experimental\": {\n      \"tasks\": true\n    },\n    \"scheduledTasks\": {\n      \"*\u002F15 * * * *\": [\"shield:cleanBans\"],\n      \"0 0 * * *\": [\"shield:cleanIpData\"]\n    }\n  }\n}\n",[5060],{"type":3070,"tag":3227,"props":5061,"children":5062},{"__ignoreMap":3014},[5063,5070,5093,5117,5142,5149,5172,5213,5254,5261,5268],{"type":3070,"tag":3440,"props":5064,"children":5065},{"class":3442,"line":3042},[5066],{"type":3070,"tag":3440,"props":5067,"children":5068},{"style":3605},[5069],{"type":3075,"value":3608},{"type":3070,"tag":3440,"props":5071,"children":5072},{"class":3442,"line":3038},[5073,5077,5081,5085,5089],{"type":3070,"tag":3440,"props":5074,"children":5075},{"style":3605},[5076],{"type":3075,"value":4624},{"type":3070,"tag":3440,"props":5078,"children":5079},{"style":4627},[5080],{"type":3075,"value":4630},{"type":3070,"tag":3440,"props":5082,"children":5083},{"style":3605},[5084],{"type":3075,"value":3632},{"type":3070,"tag":3440,"props":5086,"children":5087},{"style":3605},[5088],{"type":3075,"value":3622},{"type":3070,"tag":3440,"props":5090,"children":5091},{"style":3605},[5092],{"type":3075,"value":3667},{"type":3070,"tag":3440,"props":5094,"children":5095},{"class":3442,"line":3472},[5096,5100,5105,5109,5113],{"type":3070,"tag":3440,"props":5097,"children":5098},{"style":3605},[5099],{"type":3075,"value":4650},{"type":3070,"tag":3440,"props":5101,"children":5102},{"style":3455},[5103],{"type":3075,"value":5104},"experimental",{"type":3070,"tag":3440,"props":5106,"children":5107},{"style":3605},[5108],{"type":3075,"value":3632},{"type":3070,"tag":3440,"props":5110,"children":5111},{"style":3605},[5112],{"type":3075,"value":3622},{"type":3070,"tag":3440,"props":5114,"children":5115},{"style":3605},[5116],{"type":3075,"value":3667},{"type":3070,"tag":3440,"props":5118,"children":5119},{"class":3442,"line":3481},[5120,5124,5129,5133,5137],{"type":3070,"tag":3440,"props":5121,"children":5122},{"style":3605},[5123],{"type":3075,"value":4675},{"type":3070,"tag":3440,"props":5125,"children":5126},{"style":3880},[5127],{"type":3075,"value":5128},"tasks",{"type":3070,"tag":3440,"props":5130,"children":5131},{"style":3605},[5132],{"type":3075,"value":3632},{"type":3070,"tag":3440,"props":5134,"children":5135},{"style":3605},[5136],{"type":3075,"value":3622},{"type":3070,"tag":3440,"props":5138,"children":5139},{"style":3605},[5140],{"type":3075,"value":5141}," true\n",{"type":3070,"tag":3440,"props":5143,"children":5144},{"class":3442,"line":3034},[5145],{"type":3070,"tag":3440,"props":5146,"children":5147},{"style":3605},[5148],{"type":3075,"value":3716},{"type":3070,"tag":3440,"props":5150,"children":5151},{"class":3442,"line":3506},[5152,5156,5160,5164,5168],{"type":3070,"tag":3440,"props":5153,"children":5154},{"style":3605},[5155],{"type":3075,"value":4650},{"type":3070,"tag":3440,"props":5157,"children":5158},{"style":3455},[5159],{"type":3075,"value":5038},{"type":3070,"tag":3440,"props":5161,"children":5162},{"style":3605},[5163],{"type":3075,"value":3632},{"type":3070,"tag":3440,"props":5165,"children":5166},{"style":3605},[5167],{"type":3075,"value":3622},{"type":3070,"tag":3440,"props":5169,"children":5170},{"style":3605},[5171],{"type":3075,"value":3667},{"type":3070,"tag":3440,"props":5173,"children":5174},{"class":3442,"line":3514},[5175,5179,5184,5188,5192,5196,5200,5204,5208],{"type":3070,"tag":3440,"props":5176,"children":5177},{"style":3605},[5178],{"type":3075,"value":4675},{"type":3070,"tag":3440,"props":5180,"children":5181},{"style":3880},[5182],{"type":3075,"value":5183},"*\u002F15 * * * *",{"type":3070,"tag":3440,"props":5185,"children":5186},{"style":3605},[5187],{"type":3075,"value":3632},{"type":3070,"tag":3440,"props":5189,"children":5190},{"style":3605},[5191],{"type":3075,"value":3622},{"type":3070,"tag":3440,"props":5193,"children":5194},{"style":3605},[5195],{"type":3075,"value":3627},{"type":3070,"tag":3440,"props":5197,"children":5198},{"style":3605},[5199],{"type":3075,"value":3632},{"type":3070,"tag":3440,"props":5201,"children":5202},{"style":3461},[5203],{"type":3075,"value":3324},{"type":3070,"tag":3440,"props":5205,"children":5206},{"style":3605},[5207],{"type":3075,"value":3632},{"type":3070,"tag":3440,"props":5209,"children":5210},{"style":3605},[5211],{"type":3075,"value":5212},"],\n",{"type":3070,"tag":3440,"props":5214,"children":5215},{"class":3442,"line":3059},[5216,5220,5225,5229,5233,5237,5241,5245,5249],{"type":3070,"tag":3440,"props":5217,"children":5218},{"style":3605},[5219],{"type":3075,"value":4675},{"type":3070,"tag":3440,"props":5221,"children":5222},{"style":3880},[5223],{"type":3075,"value":5224},"0 0 * * *",{"type":3070,"tag":3440,"props":5226,"children":5227},{"style":3605},[5228],{"type":3075,"value":3632},{"type":3070,"tag":3440,"props":5230,"children":5231},{"style":3605},[5232],{"type":3075,"value":3622},{"type":3070,"tag":3440,"props":5234,"children":5235},{"style":3605},[5236],{"type":3075,"value":3627},{"type":3070,"tag":3440,"props":5238,"children":5239},{"style":3605},[5240],{"type":3075,"value":3632},{"type":3070,"tag":3440,"props":5242,"children":5243},{"style":3461},[5244],{"type":3075,"value":3332},{"type":3070,"tag":3440,"props":5246,"children":5247},{"style":3605},[5248],{"type":3075,"value":3632},{"type":3070,"tag":3440,"props":5250,"children":5251},{"style":3605},[5252],{"type":3075,"value":5253},"]\n",{"type":3070,"tag":3440,"props":5255,"children":5256},{"class":3442,"line":3710},[5257],{"type":3070,"tag":3440,"props":5258,"children":5259},{"style":3605},[5260],{"type":3075,"value":4750},{"type":3070,"tag":3440,"props":5262,"children":5263},{"class":3442,"line":3719},[5264],{"type":3070,"tag":3440,"props":5265,"children":5266},{"style":3605},[5267],{"type":3075,"value":4413},{"type":3070,"tag":3440,"props":5269,"children":5270},{"class":3442,"line":3728},[5271],{"type":3070,"tag":3440,"props":5272,"children":5273},{"style":3605},[5274],{"type":3075,"value":4421},{"type":3070,"tag":3077,"props":5276,"children":5277},{},[5278],{"type":3075,"value":5279},"Cron expressions are examples only: for instance, clean expired bans every 15 minutes and IP tracking data daily at midnight.",{"type":3070,"tag":3416,"props":5281,"children":5283},{"id":5282},"_5-optional-custom-cleanup-task-implementations",[5284],{"type":3075,"value":5285},"5. Optional: custom cleanup task implementations",{"type":3070,"tag":3077,"props":5287,"children":5288},{},[5289,5291,5296,5298,5303],{"type":3075,"value":5290},"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":3070,"tag":3165,"props":5292,"children":5293},{},[5294],{"type":3075,"value":5295},"another",{"type":3075,"value":5297}," task name and point ",{"type":3070,"tag":3227,"props":5299,"children":5301},{"className":5300},[],[5302],{"type":3075,"value":5038},{"type":3075,"value":5304}," at that name instead.",{"type":3070,"tag":5306,"props":5307,"children":5309},"h4",{"id":5308},"a-task-for-cleaning-expired-bans",[5310],{"type":3075,"value":5311},"a) Task for cleaning expired bans",{"type":3070,"tag":3077,"props":5313,"children":5314},{},[5315,5317,5323],{"type":3075,"value":5316},"Removes ban entries (",{"type":3070,"tag":3227,"props":5318,"children":5320},{"className":5319},[],[5321],{"type":3075,"value":5322},"ban:xxx.xxx.xxx.xxx",{"type":3075,"value":5324},") after the ban timestamp has passed.",{"type":3070,"tag":3077,"props":5326,"children":5327},{},[5328,5330,5336],{"type":3075,"value":5329},"Example ",{"type":3070,"tag":3227,"props":5331,"children":5333},{"className":5332},[],[5334],{"type":3075,"value":5335},"server\u002Ftasks\u002Fshield\u002FcleanBans.ts",{"type":3075,"value":5337}," (task name must match what you schedule):",{"type":3070,"tag":3430,"props":5339,"children":5343},{"className":5340,"code":5341,"language":5342,"meta":3014,"style":3014},"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",[5344],{"type":3070,"tag":3227,"props":5345,"children":5346},{"__ignoreMap":3014},[5347,5398,5405,5429,5445,5478,5507,5514,5536,5588,5595,5603,5662,5669,5694,5735,5786,5821,5858,5871,5878,5885,5947,5985,5992],{"type":3070,"tag":3440,"props":5348,"children":5349},{"class":3442,"line":3042},[5350,5355,5360,5365,5370,5375,5379,5384,5388,5393],{"type":3070,"tag":3440,"props":5351,"children":5352},{"style":3582},[5353],{"type":3075,"value":5354},"import",{"type":3070,"tag":3440,"props":5356,"children":5357},{"style":3605},[5358],{"type":3075,"value":5359}," {",{"type":3070,"tag":3440,"props":5361,"children":5362},{"style":3599},[5363],{"type":3075,"value":5364}," isActualBanTimestampExpired",{"type":3070,"tag":3440,"props":5366,"children":5367},{"style":3605},[5368],{"type":3075,"value":5369}," }",{"type":3070,"tag":3440,"props":5371,"children":5372},{"style":3582},[5373],{"type":3075,"value":5374}," from",{"type":3070,"tag":3440,"props":5376,"children":5377},{"style":3605},[5378],{"type":3075,"value":4148},{"type":3070,"tag":3440,"props":5380,"children":5381},{"style":3461},[5382],{"type":3075,"value":5383},"#imports",{"type":3070,"tag":3440,"props":5385,"children":5386},{"style":3605},[5387],{"type":3075,"value":3632},{"type":3070,"tag":3440,"props":5389,"children":5390},{"style":3605},[5391],{"type":3075,"value":5392},";",{"type":3070,"tag":3440,"props":5394,"children":5395},{"style":3446},[5396],{"type":3075,"value":5397}," \u002F\u002F Auto-imported utility from nuxt-api-shield\n",{"type":3070,"tag":3440,"props":5399,"children":5400},{"class":3442,"line":3038},[5401],{"type":3070,"tag":3440,"props":5402,"children":5403},{"emptyLinePlaceholder":1200},[5404],{"type":3075,"value":3478},{"type":3070,"tag":3440,"props":5406,"children":5407},{"class":3442,"line":3472},[5408,5412,5416,5421,5425],{"type":3070,"tag":3440,"props":5409,"children":5410},{"style":3582},[5411],{"type":3075,"value":3585},{"type":3070,"tag":3440,"props":5413,"children":5414},{"style":3582},[5415],{"type":3075,"value":3590},{"type":3070,"tag":3440,"props":5417,"children":5418},{"style":3593},[5419],{"type":3075,"value":5420}," defineTask",{"type":3070,"tag":3440,"props":5422,"children":5423},{"style":3599},[5424],{"type":3075,"value":3602},{"type":3070,"tag":3440,"props":5426,"children":5427},{"style":3605},[5428],{"type":3075,"value":3608},{"type":3070,"tag":3440,"props":5430,"children":5431},{"class":3442,"line":3481},[5432,5437,5441],{"type":3070,"tag":3440,"props":5433,"children":5434},{"style":3614},[5435],{"type":3075,"value":5436},"  meta",{"type":3070,"tag":3440,"props":5438,"children":5439},{"style":3605},[5440],{"type":3075,"value":3622},{"type":3070,"tag":3440,"props":5442,"children":5443},{"style":3605},[5444],{"type":3075,"value":3667},{"type":3070,"tag":3440,"props":5446,"children":5447},{"class":3442,"line":3034},[5448,5453,5457,5461,5465,5469,5473],{"type":3070,"tag":3440,"props":5449,"children":5450},{"style":3614},[5451],{"type":3075,"value":5452},"    name",{"type":3070,"tag":3440,"props":5454,"children":5455},{"style":3605},[5456],{"type":3075,"value":3622},{"type":3070,"tag":3440,"props":5458,"children":5459},{"style":3605},[5460],{"type":3075,"value":4148},{"type":3070,"tag":3440,"props":5462,"children":5463},{"style":3461},[5464],{"type":3075,"value":3324},{"type":3070,"tag":3440,"props":5466,"children":5467},{"style":3605},[5468],{"type":3075,"value":3632},{"type":3070,"tag":3440,"props":5470,"children":5471},{"style":3605},[5472],{"type":3075,"value":3842},{"type":3070,"tag":3440,"props":5474,"children":5475},{"style":3446},[5476],{"type":3075,"value":5477}," \u002F\u002F Match the name in scheduledTasks\n",{"type":3070,"tag":3440,"props":5479,"children":5480},{"class":3442,"line":3506},[5481,5486,5490,5494,5499,5503],{"type":3070,"tag":3440,"props":5482,"children":5483},{"style":3614},[5484],{"type":3075,"value":5485},"    description",{"type":3070,"tag":3440,"props":5487,"children":5488},{"style":3605},[5489],{"type":3075,"value":3622},{"type":3070,"tag":3440,"props":5491,"children":5492},{"style":3605},[5493],{"type":3075,"value":4148},{"type":3070,"tag":3440,"props":5495,"children":5496},{"style":3461},[5497],{"type":3075,"value":5498},"Clean expired bans from nuxt-api-shield storage.",{"type":3070,"tag":3440,"props":5500,"children":5501},{"style":3605},[5502],{"type":3075,"value":3632},{"type":3070,"tag":3440,"props":5504,"children":5505},{"style":3605},[5506],{"type":3075,"value":3650},{"type":3070,"tag":3440,"props":5508,"children":5509},{"class":3442,"line":3514},[5510],{"type":3070,"tag":3440,"props":5511,"children":5512},{"style":3605},[5513],{"type":3075,"value":3963},{"type":3070,"tag":3440,"props":5515,"children":5516},{"class":3442,"line":3059},[5517,5522,5527,5532],{"type":3070,"tag":3440,"props":5518,"children":5519},{"style":4627},[5520],{"type":3075,"value":5521},"  async",{"type":3070,"tag":3440,"props":5523,"children":5524},{"style":3614},[5525],{"type":3075,"value":5526}," run",{"type":3070,"tag":3440,"props":5528,"children":5529},{"style":3605},[5530],{"type":3075,"value":5531},"()",{"type":3070,"tag":3440,"props":5533,"children":5534},{"style":3605},[5535],{"type":3075,"value":3667},{"type":3070,"tag":3440,"props":5537,"children":5538},{"class":3442,"line":3710},[5539,5544,5549,5554,5559,5563,5567,5571,5575,5579,5583],{"type":3070,"tag":3440,"props":5540,"children":5541},{"style":4627},[5542],{"type":3075,"value":5543},"    const",{"type":3070,"tag":3440,"props":5545,"children":5546},{"style":3599},[5547],{"type":3075,"value":5548}," shieldStorage",{"type":3070,"tag":3440,"props":5550,"children":5551},{"style":3605},[5552],{"type":3075,"value":5553}," =",{"type":3070,"tag":3440,"props":5555,"children":5556},{"style":3593},[5557],{"type":3075,"value":5558}," useStorage",{"type":3070,"tag":3440,"props":5560,"children":5561},{"style":3614},[5562],{"type":3075,"value":3602},{"type":3070,"tag":3440,"props":5564,"children":5565},{"style":3605},[5566],{"type":3075,"value":3632},{"type":3070,"tag":3440,"props":5568,"children":5569},{"style":3461},[5570],{"type":3075,"value":4598},{"type":3070,"tag":3440,"props":5572,"children":5573},{"style":3605},[5574],{"type":3075,"value":3632},{"type":3070,"tag":3440,"props":5576,"children":5577},{"style":3614},[5578],{"type":3075,"value":3977},{"type":3070,"tag":3440,"props":5580,"children":5581},{"style":3605},[5582],{"type":3075,"value":5392},{"type":3070,"tag":3440,"props":5584,"children":5585},{"style":3446},[5586],{"type":3075,"value":5587}," \u002F\u002F Use your configured storage name\n",{"type":3070,"tag":3440,"props":5589,"children":5590},{"class":3442,"line":3719},[5591],{"type":3070,"tag":3440,"props":5592,"children":5593},{"emptyLinePlaceholder":1200},[5594],{"type":3075,"value":3478},{"type":3070,"tag":3440,"props":5596,"children":5597},{"class":3442,"line":3728},[5598],{"type":3070,"tag":3440,"props":5599,"children":5600},{"style":3446},[5601],{"type":3075,"value":5602},"    \u002F\u002F Only fetch keys that start with the 'ban:' prefix\n",{"type":3070,"tag":3440,"props":5604,"children":5605},{"class":3442,"line":3737},[5606,5610,5615,5619,5624,5628,5632,5637,5641,5645,5650,5654,5658],{"type":3070,"tag":3440,"props":5607,"children":5608},{"style":4627},[5609],{"type":3075,"value":5543},{"type":3070,"tag":3440,"props":5611,"children":5612},{"style":3599},[5613],{"type":3075,"value":5614}," banKeys",{"type":3070,"tag":3440,"props":5616,"children":5617},{"style":3605},[5618],{"type":3075,"value":5553},{"type":3070,"tag":3440,"props":5620,"children":5621},{"style":3582},[5622],{"type":3075,"value":5623}," await",{"type":3070,"tag":3440,"props":5625,"children":5626},{"style":3599},[5627],{"type":3075,"value":5548},{"type":3070,"tag":3440,"props":5629,"children":5630},{"style":3605},[5631],{"type":3075,"value":4569},{"type":3070,"tag":3440,"props":5633,"children":5634},{"style":3593},[5635],{"type":3075,"value":5636},"getKeys",{"type":3070,"tag":3440,"props":5638,"children":5639},{"style":3614},[5640],{"type":3075,"value":3602},{"type":3070,"tag":3440,"props":5642,"children":5643},{"style":3605},[5644],{"type":3075,"value":3632},{"type":3070,"tag":3440,"props":5646,"children":5647},{"style":3461},[5648],{"type":3075,"value":5649},"ban:",{"type":3070,"tag":3440,"props":5651,"children":5652},{"style":3605},[5653],{"type":3075,"value":3632},{"type":3070,"tag":3440,"props":5655,"children":5656},{"style":3614},[5657],{"type":3075,"value":3977},{"type":3070,"tag":3440,"props":5659,"children":5660},{"style":3605},[5661],{"type":3075,"value":3982},{"type":3070,"tag":3440,"props":5663,"children":5664},{"class":3442,"line":3746},[5665],{"type":3070,"tag":3440,"props":5666,"children":5667},{"emptyLinePlaceholder":1200},[5668],{"type":3075,"value":3478},{"type":3070,"tag":3440,"props":5670,"children":5671},{"class":3442,"line":3755},[5672,5677,5682,5686,5690],{"type":3070,"tag":3440,"props":5673,"children":5674},{"style":4627},[5675],{"type":3075,"value":5676},"    let",{"type":3070,"tag":3440,"props":5678,"children":5679},{"style":3599},[5680],{"type":3075,"value":5681}," cleanedCount",{"type":3070,"tag":3440,"props":5683,"children":5684},{"style":3605},[5685],{"type":3075,"value":5553},{"type":3070,"tag":3440,"props":5687,"children":5688},{"style":3880},[5689],{"type":3075,"value":4240},{"type":3070,"tag":3440,"props":5691,"children":5692},{"style":3605},[5693],{"type":3075,"value":3982},{"type":3070,"tag":3440,"props":5695,"children":5696},{"class":3442,"line":3764},[5697,5702,5707,5712,5717,5722,5726,5731],{"type":3070,"tag":3440,"props":5698,"children":5699},{"style":3582},[5700],{"type":3075,"value":5701},"    for",{"type":3070,"tag":3440,"props":5703,"children":5704},{"style":3614},[5705],{"type":3075,"value":5706}," (",{"type":3070,"tag":3440,"props":5708,"children":5709},{"style":4627},[5710],{"type":3075,"value":5711},"const",{"type":3070,"tag":3440,"props":5713,"children":5714},{"style":3599},[5715],{"type":3075,"value":5716}," key",{"type":3070,"tag":3440,"props":5718,"children":5719},{"style":3605},[5720],{"type":3075,"value":5721}," of",{"type":3070,"tag":3440,"props":5723,"children":5724},{"style":3599},[5725],{"type":3075,"value":5614},{"type":3070,"tag":3440,"props":5727,"children":5728},{"style":3614},[5729],{"type":3075,"value":5730},") ",{"type":3070,"tag":3440,"props":5732,"children":5733},{"style":3605},[5734],{"type":3075,"value":3608},{"type":3070,"tag":3440,"props":5736,"children":5737},{"class":3442,"line":3773},[5738,5743,5748,5752,5756,5760,5764,5769,5773,5778,5782],{"type":3070,"tag":3440,"props":5739,"children":5740},{"style":4627},[5741],{"type":3075,"value":5742},"      const",{"type":3070,"tag":3440,"props":5744,"children":5745},{"style":3599},[5746],{"type":3075,"value":5747}," bannedUntilRaw",{"type":3070,"tag":3440,"props":5749,"children":5750},{"style":3605},[5751],{"type":3075,"value":5553},{"type":3070,"tag":3440,"props":5753,"children":5754},{"style":3582},[5755],{"type":3075,"value":5623},{"type":3070,"tag":3440,"props":5757,"children":5758},{"style":3599},[5759],{"type":3075,"value":5548},{"type":3070,"tag":3440,"props":5761,"children":5762},{"style":3605},[5763],{"type":3075,"value":4569},{"type":3070,"tag":3440,"props":5765,"children":5766},{"style":3593},[5767],{"type":3075,"value":5768},"getItem",{"type":3070,"tag":3440,"props":5770,"children":5771},{"style":3614},[5772],{"type":3075,"value":3602},{"type":3070,"tag":3440,"props":5774,"children":5775},{"style":3599},[5776],{"type":3075,"value":5777},"key",{"type":3070,"tag":3440,"props":5779,"children":5780},{"style":3614},[5781],{"type":3075,"value":3977},{"type":3070,"tag":3440,"props":5783,"children":5784},{"style":3605},[5785],{"type":3075,"value":3982},{"type":3070,"tag":3440,"props":5787,"children":5788},{"class":3442,"line":3782},[5789,5794,5798,5803,5807,5812,5817],{"type":3070,"tag":3440,"props":5790,"children":5791},{"style":3582},[5792],{"type":3075,"value":5793},"      if",{"type":3070,"tag":3440,"props":5795,"children":5796},{"style":3614},[5797],{"type":3075,"value":5706},{"type":3070,"tag":3440,"props":5799,"children":5800},{"style":3593},[5801],{"type":3075,"value":5802},"isActualBanTimestampExpired",{"type":3070,"tag":3440,"props":5804,"children":5805},{"style":3614},[5806],{"type":3075,"value":3602},{"type":3070,"tag":3440,"props":5808,"children":5809},{"style":3599},[5810],{"type":3075,"value":5811},"bannedUntilRaw",{"type":3070,"tag":3440,"props":5813,"children":5814},{"style":3614},[5815],{"type":3075,"value":5816},")) ",{"type":3070,"tag":3440,"props":5818,"children":5819},{"style":3605},[5820],{"type":3075,"value":3608},{"type":3070,"tag":3440,"props":5822,"children":5823},{"class":3442,"line":3790},[5824,5829,5833,5837,5842,5846,5850,5854],{"type":3070,"tag":3440,"props":5825,"children":5826},{"style":3582},[5827],{"type":3075,"value":5828},"        await",{"type":3070,"tag":3440,"props":5830,"children":5831},{"style":3599},[5832],{"type":3075,"value":5548},{"type":3070,"tag":3440,"props":5834,"children":5835},{"style":3605},[5836],{"type":3075,"value":4569},{"type":3070,"tag":3440,"props":5838,"children":5839},{"style":3593},[5840],{"type":3075,"value":5841},"removeItem",{"type":3070,"tag":3440,"props":5843,"children":5844},{"style":3614},[5845],{"type":3075,"value":3602},{"type":3070,"tag":3440,"props":5847,"children":5848},{"style":3599},[5849],{"type":3075,"value":5777},{"type":3070,"tag":3440,"props":5851,"children":5852},{"style":3614},[5853],{"type":3075,"value":3977},{"type":3070,"tag":3440,"props":5855,"children":5856},{"style":3605},[5857],{"type":3075,"value":3982},{"type":3070,"tag":3440,"props":5859,"children":5860},{"class":3442,"line":3799},[5861,5866],{"type":3070,"tag":3440,"props":5862,"children":5863},{"style":3599},[5864],{"type":3075,"value":5865},"        cleanedCount",{"type":3070,"tag":3440,"props":5867,"children":5868},{"style":3605},[5869],{"type":3075,"value":5870},"++;\n",{"type":3070,"tag":3440,"props":5872,"children":5873},{"class":3442,"line":3808},[5874],{"type":3070,"tag":3440,"props":5875,"children":5876},{"style":3605},[5877],{"type":3075,"value":4742},{"type":3070,"tag":3440,"props":5879,"children":5880},{"class":3442,"line":3822},[5881],{"type":3070,"tag":3440,"props":5882,"children":5883},{"style":3605},[5884],{"type":3075,"value":4750},{"type":3070,"tag":3440,"props":5886,"children":5887},{"class":3442,"line":3850},[5888,5893,5897,5902,5906,5911,5916,5921,5926,5930,5935,5939,5943],{"type":3070,"tag":3440,"props":5889,"children":5890},{"style":3599},[5891],{"type":3075,"value":5892},"    console",{"type":3070,"tag":3440,"props":5894,"children":5895},{"style":3605},[5896],{"type":3075,"value":4569},{"type":3070,"tag":3440,"props":5898,"children":5899},{"style":3593},[5900],{"type":3075,"value":5901},"log",{"type":3070,"tag":3440,"props":5903,"children":5904},{"style":3614},[5905],{"type":3075,"value":3602},{"type":3070,"tag":3440,"props":5907,"children":5908},{"style":3605},[5909],{"type":3075,"value":5910},"`",{"type":3070,"tag":3440,"props":5912,"children":5913},{"style":3461},[5914],{"type":3075,"value":5915},"[nuxt-api-shield] Cleaned ",{"type":3070,"tag":3440,"props":5917,"children":5918},{"style":3605},[5919],{"type":3075,"value":5920},"${",{"type":3070,"tag":3440,"props":5922,"children":5923},{"style":3599},[5924],{"type":3075,"value":5925},"cleanedCount",{"type":3070,"tag":3440,"props":5927,"children":5928},{"style":3605},[5929],{"type":3075,"value":3972},{"type":3070,"tag":3440,"props":5931,"children":5932},{"style":3461},[5933],{"type":3075,"value":5934}," expired ban(s).",{"type":3070,"tag":3440,"props":5936,"children":5937},{"style":3605},[5938],{"type":3075,"value":5910},{"type":3070,"tag":3440,"props":5940,"children":5941},{"style":3614},[5942],{"type":3075,"value":3977},{"type":3070,"tag":3440,"props":5944,"children":5945},{"style":3605},[5946],{"type":3075,"value":3982},{"type":3070,"tag":3440,"props":5948,"children":5949},{"class":3442,"line":3858},[5950,5955,5959,5964,5968,5972,5976,5980],{"type":3070,"tag":3440,"props":5951,"children":5952},{"style":3582},[5953],{"type":3075,"value":5954},"    return",{"type":3070,"tag":3440,"props":5956,"children":5957},{"style":3605},[5958],{"type":3075,"value":5359},{"type":3070,"tag":3440,"props":5960,"children":5961},{"style":3614},[5962],{"type":3075,"value":5963}," result",{"type":3070,"tag":3440,"props":5965,"children":5966},{"style":3605},[5967],{"type":3075,"value":3622},{"type":3070,"tag":3440,"props":5969,"children":5970},{"style":3605},[5971],{"type":3075,"value":5359},{"type":3070,"tag":3440,"props":5973,"children":5974},{"style":3599},[5975],{"type":3075,"value":5681},{"type":3070,"tag":3440,"props":5977,"children":5978},{"style":3605},[5979],{"type":3075,"value":5369},{"type":3070,"tag":3440,"props":5981,"children":5982},{"style":3605},[5983],{"type":3075,"value":5984}," };\n",{"type":3070,"tag":3440,"props":5986,"children":5987},{"class":3442,"line":3867},[5988],{"type":3070,"tag":3440,"props":5989,"children":5990},{"style":3605},[5991],{"type":3075,"value":3963},{"type":3070,"tag":3440,"props":5993,"children":5994},{"class":3442,"line":3895},[5995,5999,6003],{"type":3070,"tag":3440,"props":5996,"children":5997},{"style":3605},[5998],{"type":3075,"value":3972},{"type":3070,"tag":3440,"props":6000,"children":6001},{"style":3599},[6002],{"type":3075,"value":3977},{"type":3070,"tag":3440,"props":6004,"children":6005},{"style":3605},[6006],{"type":3075,"value":3982},{"type":3070,"tag":3077,"props":6008,"children":6009},{},[6010,6011,6016,6018,6023,6025,6030],{"type":3075,"value":4440},{"type":3070,"tag":3227,"props":6012,"children":6014},{"className":6013},[],[6015],{"type":3075,"value":5802},{"type":3075,"value":6017}," utility is provided by ",{"type":3070,"tag":3227,"props":6019,"children":6021},{"className":6020},[],[6022],{"type":3075,"value":3011},{"type":3075,"value":6024}," and should be available via ",{"type":3070,"tag":3227,"props":6026,"children":6028},{"className":6027},[],[6029],{"type":3075,"value":5383},{"type":3075,"value":4569},{"type":3070,"tag":5306,"props":6032,"children":6034},{"id":6033},"b-task-for-cleaning-old-ip-tracking-data",[6035],{"type":3075,"value":6036},"b) Task for cleaning old IP tracking data",{"type":3070,"tag":3077,"props":6038,"children":6039},{},[6040,6042,6048,6050,6056,6058,6064],{"type":3075,"value":6041},"Cleans IP tracking entries (",{"type":3070,"tag":3227,"props":6043,"children":6045},{"className":6044},[],[6046],{"type":3075,"value":6047},"ip:xxx.xxx.xxx.xxx",{"type":3075,"value":6049},") whose ",{"type":3070,"tag":3227,"props":6051,"children":6053},{"className":6052},[],[6054],{"type":3075,"value":6055},"time",{"type":3075,"value":6057}," is older than ",{"type":3070,"tag":3227,"props":6059,"children":6061},{"className":6060},[],[6062],{"type":3075,"value":6063},"nuxtApiShield.ipTTL",{"type":3075,"value":6065}," (default 7 days), and drops malformed entries. That keeps storage from growing with one-off IPs that were never banned.",{"type":3070,"tag":3077,"props":6067,"children":6068},{},[6069,6070,6076],{"type":3075,"value":5329},{"type":3070,"tag":3227,"props":6071,"children":6073},{"className":6072},[],[6074],{"type":3075,"value":6075},"server\u002Ftasks\u002Fshield\u002FcleanIpData.ts",{"type":3075,"value":3622},{"type":3070,"tag":3430,"props":6078,"children":6080},{"className":5340,"code":6079,"language":5342,"meta":3014,"style":3014},"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",[6081],{"type":3070,"tag":3227,"props":6082,"children":6083},{"__ignoreMap":3014},[6084,6129,6169,6176,6199,6214,6245,6273,6280,6299,6342,6386,6393,6401,6433,6440,6488,6509,6525,6537,6604,6611,6644,6651,6708,6746,6769,6776,6811,6883,6890,6899,6964,7016,7053,7066,7075,7093,7102,7138,7150,7158,7166,7174,7194,7229,7242,7278,7286],{"type":3070,"tag":3440,"props":6085,"children":6086},{"class":3442,"line":3042},[6087,6091,6096,6100,6105,6109,6113,6117,6121,6125],{"type":3070,"tag":3440,"props":6088,"children":6089},{"style":3582},[6090],{"type":3075,"value":5354},{"type":3070,"tag":3440,"props":6092,"children":6093},{"style":3582},[6094],{"type":3075,"value":6095}," type",{"type":3070,"tag":3440,"props":6097,"children":6098},{"style":3605},[6099],{"type":3075,"value":5359},{"type":3070,"tag":3440,"props":6101,"children":6102},{"style":3599},[6103],{"type":3075,"value":6104}," RateLimit",{"type":3070,"tag":3440,"props":6106,"children":6107},{"style":3605},[6108],{"type":3075,"value":5369},{"type":3070,"tag":3440,"props":6110,"children":6111},{"style":3582},[6112],{"type":3075,"value":5374},{"type":3070,"tag":3440,"props":6114,"children":6115},{"style":3605},[6116],{"type":3075,"value":4148},{"type":3070,"tag":3440,"props":6118,"children":6119},{"style":3461},[6120],{"type":3075,"value":3011},{"type":3070,"tag":3440,"props":6122,"children":6123},{"style":3605},[6124],{"type":3075,"value":3632},{"type":3070,"tag":3440,"props":6126,"children":6127},{"style":3605},[6128],{"type":3075,"value":3982},{"type":3070,"tag":3440,"props":6130,"children":6131},{"class":3442,"line":3038},[6132,6136,6140,6145,6149,6153,6157,6161,6165],{"type":3070,"tag":3440,"props":6133,"children":6134},{"style":3582},[6135],{"type":3075,"value":5354},{"type":3070,"tag":3440,"props":6137,"children":6138},{"style":3605},[6139],{"type":3075,"value":5359},{"type":3070,"tag":3440,"props":6141,"children":6142},{"style":3599},[6143],{"type":3075,"value":6144}," useRuntimeConfig",{"type":3070,"tag":3440,"props":6146,"children":6147},{"style":3605},[6148],{"type":3075,"value":5369},{"type":3070,"tag":3440,"props":6150,"children":6151},{"style":3582},[6152],{"type":3075,"value":5374},{"type":3070,"tag":3440,"props":6154,"children":6155},{"style":3605},[6156],{"type":3075,"value":4148},{"type":3070,"tag":3440,"props":6158,"children":6159},{"style":3461},[6160],{"type":3075,"value":5383},{"type":3070,"tag":3440,"props":6162,"children":6163},{"style":3605},[6164],{"type":3075,"value":3632},{"type":3070,"tag":3440,"props":6166,"children":6167},{"style":3605},[6168],{"type":3075,"value":3982},{"type":3070,"tag":3440,"props":6170,"children":6171},{"class":3442,"line":3472},[6172],{"type":3070,"tag":3440,"props":6173,"children":6174},{"emptyLinePlaceholder":1200},[6175],{"type":3075,"value":3478},{"type":3070,"tag":3440,"props":6177,"children":6178},{"class":3442,"line":3481},[6179,6183,6187,6191,6195],{"type":3070,"tag":3440,"props":6180,"children":6181},{"style":3582},[6182],{"type":3075,"value":3585},{"type":3070,"tag":3440,"props":6184,"children":6185},{"style":3582},[6186],{"type":3075,"value":3590},{"type":3070,"tag":3440,"props":6188,"children":6189},{"style":3593},[6190],{"type":3075,"value":5420},{"type":3070,"tag":3440,"props":6192,"children":6193},{"style":3599},[6194],{"type":3075,"value":3602},{"type":3070,"tag":3440,"props":6196,"children":6197},{"style":3605},[6198],{"type":3075,"value":3608},{"type":3070,"tag":3440,"props":6200,"children":6201},{"class":3442,"line":3034},[6202,6206,6210],{"type":3070,"tag":3440,"props":6203,"children":6204},{"style":3614},[6205],{"type":3075,"value":5436},{"type":3070,"tag":3440,"props":6207,"children":6208},{"style":3605},[6209],{"type":3075,"value":3622},{"type":3070,"tag":3440,"props":6211,"children":6212},{"style":3605},[6213],{"type":3075,"value":3667},{"type":3070,"tag":3440,"props":6215,"children":6216},{"class":3442,"line":3506},[6217,6221,6225,6229,6233,6237,6241],{"type":3070,"tag":3440,"props":6218,"children":6219},{"style":3614},[6220],{"type":3075,"value":5452},{"type":3070,"tag":3440,"props":6222,"children":6223},{"style":3605},[6224],{"type":3075,"value":3622},{"type":3070,"tag":3440,"props":6226,"children":6227},{"style":3605},[6228],{"type":3075,"value":4148},{"type":3070,"tag":3440,"props":6230,"children":6231},{"style":3461},[6232],{"type":3075,"value":3332},{"type":3070,"tag":3440,"props":6234,"children":6235},{"style":3605},[6236],{"type":3075,"value":3632},{"type":3070,"tag":3440,"props":6238,"children":6239},{"style":3605},[6240],{"type":3075,"value":3842},{"type":3070,"tag":3440,"props":6242,"children":6243},{"style":3446},[6244],{"type":3075,"value":5477},{"type":3070,"tag":3440,"props":6246,"children":6247},{"class":3442,"line":3514},[6248,6252,6256,6260,6265,6269],{"type":3070,"tag":3440,"props":6249,"children":6250},{"style":3614},[6251],{"type":3075,"value":5485},{"type":3070,"tag":3440,"props":6253,"children":6254},{"style":3605},[6255],{"type":3075,"value":3622},{"type":3070,"tag":3440,"props":6257,"children":6258},{"style":3605},[6259],{"type":3075,"value":4148},{"type":3070,"tag":3440,"props":6261,"children":6262},{"style":3461},[6263],{"type":3075,"value":6264},"Clean old IP tracking data from nuxt-api-shield storage.",{"type":3070,"tag":3440,"props":6266,"children":6267},{"style":3605},[6268],{"type":3075,"value":3632},{"type":3070,"tag":3440,"props":6270,"children":6271},{"style":3605},[6272],{"type":3075,"value":3650},{"type":3070,"tag":3440,"props":6274,"children":6275},{"class":3442,"line":3059},[6276],{"type":3070,"tag":3440,"props":6277,"children":6278},{"style":3605},[6279],{"type":3075,"value":3963},{"type":3070,"tag":3440,"props":6281,"children":6282},{"class":3442,"line":3710},[6283,6287,6291,6295],{"type":3070,"tag":3440,"props":6284,"children":6285},{"style":4627},[6286],{"type":3075,"value":5521},{"type":3070,"tag":3440,"props":6288,"children":6289},{"style":3614},[6290],{"type":3075,"value":5526},{"type":3070,"tag":3440,"props":6292,"children":6293},{"style":3605},[6294],{"type":3075,"value":5531},{"type":3070,"tag":3440,"props":6296,"children":6297},{"style":3605},[6298],{"type":3075,"value":3667},{"type":3070,"tag":3440,"props":6300,"children":6301},{"class":3442,"line":3719},[6302,6306,6310,6314,6318,6322,6326,6330,6334,6338],{"type":3070,"tag":3440,"props":6303,"children":6304},{"style":4627},[6305],{"type":3075,"value":5543},{"type":3070,"tag":3440,"props":6307,"children":6308},{"style":3599},[6309],{"type":3075,"value":5548},{"type":3070,"tag":3440,"props":6311,"children":6312},{"style":3605},[6313],{"type":3075,"value":5553},{"type":3070,"tag":3440,"props":6315,"children":6316},{"style":3593},[6317],{"type":3075,"value":5558},{"type":3070,"tag":3440,"props":6319,"children":6320},{"style":3614},[6321],{"type":3075,"value":3602},{"type":3070,"tag":3440,"props":6323,"children":6324},{"style":3605},[6325],{"type":3075,"value":3632},{"type":3070,"tag":3440,"props":6327,"children":6328},{"style":3461},[6329],{"type":3075,"value":4598},{"type":3070,"tag":3440,"props":6331,"children":6332},{"style":3605},[6333],{"type":3075,"value":3632},{"type":3070,"tag":3440,"props":6335,"children":6336},{"style":3614},[6337],{"type":3075,"value":3977},{"type":3070,"tag":3440,"props":6339,"children":6340},{"style":3605},[6341],{"type":3075,"value":3982},{"type":3070,"tag":3440,"props":6343,"children":6344},{"class":3442,"line":3728},[6345,6349,6354,6358,6362,6366,6370,6374,6378,6382],{"type":3070,"tag":3440,"props":6346,"children":6347},{"style":4627},[6348],{"type":3075,"value":5543},{"type":3070,"tag":3440,"props":6350,"children":6351},{"style":3599},[6352],{"type":3075,"value":6353}," config",{"type":3070,"tag":3440,"props":6355,"children":6356},{"style":3605},[6357],{"type":3075,"value":5553},{"type":3070,"tag":3440,"props":6359,"children":6360},{"style":3593},[6361],{"type":3075,"value":6144},{"type":3070,"tag":3440,"props":6363,"children":6364},{"style":3614},[6365],{"type":3075,"value":5531},{"type":3070,"tag":3440,"props":6367,"children":6368},{"style":3605},[6369],{"type":3075,"value":4569},{"type":3070,"tag":3440,"props":6371,"children":6372},{"style":3599},[6373],{"type":3075,"value":180},{"type":3070,"tag":3440,"props":6375,"children":6376},{"style":3605},[6377],{"type":3075,"value":4569},{"type":3070,"tag":3440,"props":6379,"children":6380},{"style":3599},[6381],{"type":3075,"value":3998},{"type":3070,"tag":3440,"props":6383,"children":6384},{"style":3605},[6385],{"type":3075,"value":3982},{"type":3070,"tag":3440,"props":6387,"children":6388},{"class":3442,"line":3737},[6389],{"type":3070,"tag":3440,"props":6390,"children":6391},{"emptyLinePlaceholder":1200},[6392],{"type":3075,"value":3478},{"type":3070,"tag":3440,"props":6394,"children":6395},{"class":3442,"line":3746},[6396],{"type":3070,"tag":3440,"props":6397,"children":6398},{"style":3446},[6399],{"type":3075,"value":6400},"    \u002F\u002F ipTTL is expected to be in seconds from config (module applies default if not set by user)\n",{"type":3070,"tag":3440,"props":6402,"children":6403},{"class":3442,"line":3755},[6404,6408,6413,6417,6421,6425,6429],{"type":3070,"tag":3440,"props":6405,"children":6406},{"style":4627},[6407],{"type":3075,"value":5543},{"type":3070,"tag":3440,"props":6409,"children":6410},{"style":3599},[6411],{"type":3075,"value":6412}," ipTTLseconds",{"type":3070,"tag":3440,"props":6414,"children":6415},{"style":3605},[6416],{"type":3075,"value":5553},{"type":3070,"tag":3440,"props":6418,"children":6419},{"style":3599},[6420],{"type":3075,"value":6353},{"type":3070,"tag":3440,"props":6422,"children":6423},{"style":3605},[6424],{"type":3075,"value":4569},{"type":3070,"tag":3440,"props":6426,"children":6427},{"style":3599},[6428],{"type":3075,"value":5030},{"type":3070,"tag":3440,"props":6430,"children":6431},{"style":3605},[6432],{"type":3075,"value":3982},{"type":3070,"tag":3440,"props":6434,"children":6435},{"class":3442,"line":3764},[6436],{"type":3070,"tag":3440,"props":6437,"children":6438},{"emptyLinePlaceholder":1200},[6439],{"type":3075,"value":3478},{"type":3070,"tag":3440,"props":6441,"children":6442},{"class":3442,"line":3773},[6443,6448,6452,6457,6462,6467,6471,6476,6480,6484],{"type":3070,"tag":3440,"props":6444,"children":6445},{"style":3582},[6446],{"type":3075,"value":6447},"    if",{"type":3070,"tag":3440,"props":6449,"children":6450},{"style":3614},[6451],{"type":3075,"value":5706},{"type":3070,"tag":3440,"props":6453,"children":6454},{"style":3605},[6455],{"type":3075,"value":6456},"!",{"type":3070,"tag":3440,"props":6458,"children":6459},{"style":3599},[6460],{"type":3075,"value":6461},"ipTTLseconds",{"type":3070,"tag":3440,"props":6463,"children":6464},{"style":3605},[6465],{"type":3075,"value":6466}," ||",{"type":3070,"tag":3440,"props":6468,"children":6469},{"style":3599},[6470],{"type":3075,"value":6412},{"type":3070,"tag":3440,"props":6472,"children":6473},{"style":3605},[6474],{"type":3075,"value":6475}," \u003C=",{"type":3070,"tag":3440,"props":6477,"children":6478},{"style":3880},[6479],{"type":3075,"value":4240},{"type":3070,"tag":3440,"props":6481,"children":6482},{"style":3614},[6483],{"type":3075,"value":5730},{"type":3070,"tag":3440,"props":6485,"children":6486},{"style":3605},[6487],{"type":3075,"value":3608},{"type":3070,"tag":3440,"props":6489,"children":6490},{"class":3442,"line":3782},[6491,6496,6500,6504],{"type":3070,"tag":3440,"props":6492,"children":6493},{"style":3599},[6494],{"type":3075,"value":6495},"      console",{"type":3070,"tag":3440,"props":6497,"children":6498},{"style":3605},[6499],{"type":3075,"value":4569},{"type":3070,"tag":3440,"props":6501,"children":6502},{"style":3593},[6503],{"type":3075,"value":5901},{"type":3070,"tag":3440,"props":6505,"children":6506},{"style":3614},[6507],{"type":3075,"value":6508},"(\n",{"type":3070,"tag":3440,"props":6510,"children":6511},{"class":3442,"line":3790},[6512,6516,6521],{"type":3070,"tag":3440,"props":6513,"children":6514},{"style":3605},[6515],{"type":3075,"value":4707},{"type":3070,"tag":3440,"props":6517,"children":6518},{"style":3461},[6519],{"type":3075,"value":6520},"[nuxt-api-shield] IP data cleanup (ipTTL) is disabled or invalid.",{"type":3070,"tag":3440,"props":6522,"children":6523},{"style":3605},[6524],{"type":3075,"value":4734},{"type":3070,"tag":3440,"props":6526,"children":6527},{"class":3442,"line":3799},[6528,6533],{"type":3070,"tag":3440,"props":6529,"children":6530},{"style":3614},[6531],{"type":3075,"value":6532},"      )",{"type":3070,"tag":3440,"props":6534,"children":6535},{"style":3605},[6536],{"type":3075,"value":3982},{"type":3070,"tag":3440,"props":6538,"children":6539},{"class":3442,"line":3808},[6540,6545,6549,6553,6557,6561,6565,6569,6573,6578,6583,6587,6591,6596,6600],{"type":3070,"tag":3440,"props":6541,"children":6542},{"style":3582},[6543],{"type":3075,"value":6544},"      return",{"type":3070,"tag":3440,"props":6546,"children":6547},{"style":3605},[6548],{"type":3075,"value":5359},{"type":3070,"tag":3440,"props":6550,"children":6551},{"style":3614},[6552],{"type":3075,"value":5963},{"type":3070,"tag":3440,"props":6554,"children":6555},{"style":3605},[6556],{"type":3075,"value":3622},{"type":3070,"tag":3440,"props":6558,"children":6559},{"style":3605},[6560],{"type":3075,"value":5359},{"type":3070,"tag":3440,"props":6562,"children":6563},{"style":3614},[6564],{"type":3075,"value":5681},{"type":3070,"tag":3440,"props":6566,"children":6567},{"style":3605},[6568],{"type":3075,"value":3622},{"type":3070,"tag":3440,"props":6570,"children":6571},{"style":3880},[6572],{"type":3075,"value":4240},{"type":3070,"tag":3440,"props":6574,"children":6575},{"style":3605},[6576],{"type":3075,"value":6577}," },",{"type":3070,"tag":3440,"props":6579,"children":6580},{"style":3614},[6581],{"type":3075,"value":6582}," status",{"type":3070,"tag":3440,"props":6584,"children":6585},{"style":3605},[6586],{"type":3075,"value":3622},{"type":3070,"tag":3440,"props":6588,"children":6589},{"style":3605},[6590],{"type":3075,"value":4148},{"type":3070,"tag":3440,"props":6592,"children":6593},{"style":3461},[6594],{"type":3075,"value":6595},"disabled_or_invalid_ttl",{"type":3070,"tag":3440,"props":6597,"children":6598},{"style":3605},[6599],{"type":3075,"value":3632},{"type":3070,"tag":3440,"props":6601,"children":6602},{"style":3605},[6603],{"type":3075,"value":5984},{"type":3070,"tag":3440,"props":6605,"children":6606},{"class":3442,"line":3822},[6607],{"type":3070,"tag":3440,"props":6608,"children":6609},{"style":3605},[6610],{"type":3075,"value":4750},{"type":3070,"tag":3440,"props":6612,"children":6613},{"class":3442,"line":3850},[6614,6618,6623,6627,6631,6635,6640],{"type":3070,"tag":3440,"props":6615,"children":6616},{"style":4627},[6617],{"type":3075,"value":5543},{"type":3070,"tag":3440,"props":6619,"children":6620},{"style":3599},[6621],{"type":3075,"value":6622}," ipTTLms",{"type":3070,"tag":3440,"props":6624,"children":6625},{"style":3605},[6626],{"type":3075,"value":5553},{"type":3070,"tag":3440,"props":6628,"children":6629},{"style":3599},[6630],{"type":3075,"value":6412},{"type":3070,"tag":3440,"props":6632,"children":6633},{"style":3605},[6634],{"type":3075,"value":4338},{"type":3070,"tag":3440,"props":6636,"children":6637},{"style":3880},[6638],{"type":3075,"value":6639}," 1000",{"type":3070,"tag":3440,"props":6641,"children":6642},{"style":3605},[6643],{"type":3075,"value":3982},{"type":3070,"tag":3440,"props":6645,"children":6646},{"class":3442,"line":3858},[6647],{"type":3070,"tag":3440,"props":6648,"children":6649},{"emptyLinePlaceholder":1200},[6650],{"type":3075,"value":3478},{"type":3070,"tag":3440,"props":6652,"children":6653},{"class":3442,"line":3867},[6654,6658,6663,6667,6671,6675,6679,6683,6687,6691,6696,6700,6704],{"type":3070,"tag":3440,"props":6655,"children":6656},{"style":4627},[6657],{"type":3075,"value":5543},{"type":3070,"tag":3440,"props":6659,"children":6660},{"style":3599},[6661],{"type":3075,"value":6662}," ipKeys",{"type":3070,"tag":3440,"props":6664,"children":6665},{"style":3605},[6666],{"type":3075,"value":5553},{"type":3070,"tag":3440,"props":6668,"children":6669},{"style":3582},[6670],{"type":3075,"value":5623},{"type":3070,"tag":3440,"props":6672,"children":6673},{"style":3599},[6674],{"type":3075,"value":5548},{"type":3070,"tag":3440,"props":6676,"children":6677},{"style":3605},[6678],{"type":3075,"value":4569},{"type":3070,"tag":3440,"props":6680,"children":6681},{"style":3593},[6682],{"type":3075,"value":5636},{"type":3070,"tag":3440,"props":6684,"children":6685},{"style":3614},[6686],{"type":3075,"value":3602},{"type":3070,"tag":3440,"props":6688,"children":6689},{"style":3605},[6690],{"type":3075,"value":3632},{"type":3070,"tag":3440,"props":6692,"children":6693},{"style":3461},[6694],{"type":3075,"value":6695},"ip:",{"type":3070,"tag":3440,"props":6697,"children":6698},{"style":3605},[6699],{"type":3075,"value":3632},{"type":3070,"tag":3440,"props":6701,"children":6702},{"style":3614},[6703],{"type":3075,"value":3977},{"type":3070,"tag":3440,"props":6705,"children":6706},{"style":3605},[6707],{"type":3075,"value":3982},{"type":3070,"tag":3440,"props":6709,"children":6710},{"class":3442,"line":3895},[6711,6715,6720,6724,6729,6733,6738,6742],{"type":3070,"tag":3440,"props":6712,"children":6713},{"style":4627},[6714],{"type":3075,"value":5543},{"type":3070,"tag":3440,"props":6716,"children":6717},{"style":3599},[6718],{"type":3075,"value":6719}," currentTime",{"type":3070,"tag":3440,"props":6721,"children":6722},{"style":3605},[6723],{"type":3075,"value":5553},{"type":3070,"tag":3440,"props":6725,"children":6726},{"style":3599},[6727],{"type":3075,"value":6728}," Date",{"type":3070,"tag":3440,"props":6730,"children":6731},{"style":3605},[6732],{"type":3075,"value":4569},{"type":3070,"tag":3440,"props":6734,"children":6735},{"style":3593},[6736],{"type":3075,"value":6737},"now",{"type":3070,"tag":3440,"props":6739,"children":6740},{"style":3614},[6741],{"type":3075,"value":5531},{"type":3070,"tag":3440,"props":6743,"children":6744},{"style":3605},[6745],{"type":3075,"value":3982},{"type":3070,"tag":3440,"props":6747,"children":6748},{"class":3442,"line":3912},[6749,6753,6757,6761,6765],{"type":3070,"tag":3440,"props":6750,"children":6751},{"style":4627},[6752],{"type":3075,"value":5676},{"type":3070,"tag":3440,"props":6754,"children":6755},{"style":3599},[6756],{"type":3075,"value":5681},{"type":3070,"tag":3440,"props":6758,"children":6759},{"style":3605},[6760],{"type":3075,"value":5553},{"type":3070,"tag":3440,"props":6762,"children":6763},{"style":3880},[6764],{"type":3075,"value":4240},{"type":3070,"tag":3440,"props":6766,"children":6767},{"style":3605},[6768],{"type":3075,"value":3982},{"type":3070,"tag":3440,"props":6770,"children":6771},{"class":3442,"line":3921},[6772],{"type":3070,"tag":3440,"props":6773,"children":6774},{"emptyLinePlaceholder":1200},[6775],{"type":3075,"value":3478},{"type":3070,"tag":3440,"props":6777,"children":6778},{"class":3442,"line":3949},[6779,6783,6787,6791,6795,6799,6803,6807],{"type":3070,"tag":3440,"props":6780,"children":6781},{"style":3582},[6782],{"type":3075,"value":5701},{"type":3070,"tag":3440,"props":6784,"children":6785},{"style":3614},[6786],{"type":3075,"value":5706},{"type":3070,"tag":3440,"props":6788,"children":6789},{"style":4627},[6790],{"type":3075,"value":5711},{"type":3070,"tag":3440,"props":6792,"children":6793},{"style":3599},[6794],{"type":3075,"value":5716},{"type":3070,"tag":3440,"props":6796,"children":6797},{"style":3605},[6798],{"type":3075,"value":5721},{"type":3070,"tag":3440,"props":6800,"children":6801},{"style":3599},[6802],{"type":3075,"value":6662},{"type":3070,"tag":3440,"props":6804,"children":6805},{"style":3614},[6806],{"type":3075,"value":5730},{"type":3070,"tag":3440,"props":6808,"children":6809},{"style":3605},[6810],{"type":3075,"value":3608},{"type":3070,"tag":3440,"props":6812,"children":6813},{"class":3442,"line":3957},[6814,6818,6823,6827,6831,6836,6840,6844,6848,6852,6856,6860,6865,6869,6874,6879],{"type":3070,"tag":3440,"props":6815,"children":6816},{"style":4627},[6817],{"type":3075,"value":5742},{"type":3070,"tag":3440,"props":6819,"children":6820},{"style":3599},[6821],{"type":3075,"value":6822}," entry",{"type":3070,"tag":3440,"props":6824,"children":6825},{"style":3605},[6826],{"type":3075,"value":5553},{"type":3070,"tag":3440,"props":6828,"children":6829},{"style":3614},[6830],{"type":3075,"value":5706},{"type":3070,"tag":3440,"props":6832,"children":6833},{"style":3582},[6834],{"type":3075,"value":6835},"await",{"type":3070,"tag":3440,"props":6837,"children":6838},{"style":3599},[6839],{"type":3075,"value":5548},{"type":3070,"tag":3440,"props":6841,"children":6842},{"style":3605},[6843],{"type":3075,"value":4569},{"type":3070,"tag":3440,"props":6845,"children":6846},{"style":3593},[6847],{"type":3075,"value":5768},{"type":3070,"tag":3440,"props":6849,"children":6850},{"style":3614},[6851],{"type":3075,"value":3602},{"type":3070,"tag":3440,"props":6853,"children":6854},{"style":3599},[6855],{"type":3075,"value":5777},{"type":3070,"tag":3440,"props":6857,"children":6858},{"style":3614},[6859],{"type":3075,"value":5816},{"type":3070,"tag":3440,"props":6861,"children":6862},{"style":3582},[6863],{"type":3075,"value":6864},"as",{"type":3070,"tag":3440,"props":6866,"children":6867},{"style":3455},[6868],{"type":3075,"value":6104},{"type":3070,"tag":3440,"props":6870,"children":6871},{"style":3605},[6872],{"type":3075,"value":6873}," |",{"type":3070,"tag":3440,"props":6875,"children":6876},{"style":3455},[6877],{"type":3075,"value":6878}," null",{"type":3070,"tag":3440,"props":6880,"children":6881},{"style":3605},[6882],{"type":3075,"value":3982},{"type":3070,"tag":3440,"props":6884,"children":6885},{"class":3442,"line":3966},[6886],{"type":3070,"tag":3440,"props":6887,"children":6888},{"emptyLinePlaceholder":1200},[6889],{"type":3075,"value":3478},{"type":3070,"tag":3440,"props":6891,"children":6893},{"class":3442,"line":6892},31,[6894],{"type":3070,"tag":3440,"props":6895,"children":6896},{"style":3446},[6897],{"type":3075,"value":6898},"      \u002F\u002F Check if entry exists and has a numeric 'time' property\n",{"type":3070,"tag":3440,"props":6900,"children":6902},{"class":3442,"line":6901},32,[6903,6907,6911,6916,6921,6926,6930,6934,6938,6943,6947,6952,6956,6960],{"type":3070,"tag":3440,"props":6904,"children":6905},{"style":3582},[6906],{"type":3075,"value":5793},{"type":3070,"tag":3440,"props":6908,"children":6909},{"style":3614},[6910],{"type":3075,"value":5706},{"type":3070,"tag":3440,"props":6912,"children":6913},{"style":3599},[6914],{"type":3075,"value":6915},"entry",{"type":3070,"tag":3440,"props":6917,"children":6918},{"style":3605},[6919],{"type":3075,"value":6920}," &&",{"type":3070,"tag":3440,"props":6922,"children":6923},{"style":3605},[6924],{"type":3075,"value":6925}," typeof",{"type":3070,"tag":3440,"props":6927,"children":6928},{"style":3599},[6929],{"type":3075,"value":6822},{"type":3070,"tag":3440,"props":6931,"children":6932},{"style":3605},[6933],{"type":3075,"value":4569},{"type":3070,"tag":3440,"props":6935,"children":6936},{"style":3599},[6937],{"type":3075,"value":6055},{"type":3070,"tag":3440,"props":6939,"children":6940},{"style":3605},[6941],{"type":3075,"value":6942}," ===",{"type":3070,"tag":3440,"props":6944,"children":6945},{"style":3605},[6946],{"type":3075,"value":4148},{"type":3070,"tag":3440,"props":6948,"children":6949},{"style":3461},[6950],{"type":3075,"value":6951},"number",{"type":3070,"tag":3440,"props":6953,"children":6954},{"style":3605},[6955],{"type":3075,"value":3632},{"type":3070,"tag":3440,"props":6957,"children":6958},{"style":3614},[6959],{"type":3075,"value":5730},{"type":3070,"tag":3440,"props":6961,"children":6962},{"style":3605},[6963],{"type":3075,"value":3608},{"type":3070,"tag":3440,"props":6965,"children":6967},{"class":3442,"line":6966},33,[6968,6973,6977,6982,6987,6991,6995,6999,7004,7008,7012],{"type":3070,"tag":3440,"props":6969,"children":6970},{"style":3582},[6971],{"type":3075,"value":6972},"        if",{"type":3070,"tag":3440,"props":6974,"children":6975},{"style":3614},[6976],{"type":3075,"value":5706},{"type":3070,"tag":3440,"props":6978,"children":6979},{"style":3599},[6980],{"type":3075,"value":6981},"currentTime",{"type":3070,"tag":3440,"props":6983,"children":6984},{"style":3605},[6985],{"type":3075,"value":6986}," -",{"type":3070,"tag":3440,"props":6988,"children":6989},{"style":3599},[6990],{"type":3075,"value":6822},{"type":3070,"tag":3440,"props":6992,"children":6993},{"style":3605},[6994],{"type":3075,"value":4569},{"type":3070,"tag":3440,"props":6996,"children":6997},{"style":3599},[6998],{"type":3075,"value":6055},{"type":3070,"tag":3440,"props":7000,"children":7001},{"style":3605},[7002],{"type":3075,"value":7003}," >",{"type":3070,"tag":3440,"props":7005,"children":7006},{"style":3599},[7007],{"type":3075,"value":6622},{"type":3070,"tag":3440,"props":7009,"children":7010},{"style":3614},[7011],{"type":3075,"value":5730},{"type":3070,"tag":3440,"props":7013,"children":7014},{"style":3605},[7015],{"type":3075,"value":3608},{"type":3070,"tag":3440,"props":7017,"children":7019},{"class":3442,"line":7018},34,[7020,7025,7029,7033,7037,7041,7045,7049],{"type":3070,"tag":3440,"props":7021,"children":7022},{"style":3582},[7023],{"type":3075,"value":7024},"          await",{"type":3070,"tag":3440,"props":7026,"children":7027},{"style":3599},[7028],{"type":3075,"value":5548},{"type":3070,"tag":3440,"props":7030,"children":7031},{"style":3605},[7032],{"type":3075,"value":4569},{"type":3070,"tag":3440,"props":7034,"children":7035},{"style":3593},[7036],{"type":3075,"value":5841},{"type":3070,"tag":3440,"props":7038,"children":7039},{"style":3614},[7040],{"type":3075,"value":3602},{"type":3070,"tag":3440,"props":7042,"children":7043},{"style":3599},[7044],{"type":3075,"value":5777},{"type":3070,"tag":3440,"props":7046,"children":7047},{"style":3614},[7048],{"type":3075,"value":3977},{"type":3070,"tag":3440,"props":7050,"children":7051},{"style":3605},[7052],{"type":3075,"value":3982},{"type":3070,"tag":3440,"props":7054,"children":7056},{"class":3442,"line":7055},35,[7057,7062],{"type":3070,"tag":3440,"props":7058,"children":7059},{"style":3599},[7060],{"type":3075,"value":7061},"          cleanedCount",{"type":3070,"tag":3440,"props":7063,"children":7064},{"style":3605},[7065],{"type":3075,"value":5870},{"type":3070,"tag":3440,"props":7067,"children":7069},{"class":3442,"line":7068},36,[7070],{"type":3070,"tag":3440,"props":7071,"children":7072},{"style":3605},[7073],{"type":3075,"value":7074},"        }\n",{"type":3070,"tag":3440,"props":7076,"children":7078},{"class":3442,"line":7077},37,[7079,7084,7089],{"type":3070,"tag":3440,"props":7080,"children":7081},{"style":3605},[7082],{"type":3075,"value":7083},"      }",{"type":3070,"tag":3440,"props":7085,"children":7086},{"style":3582},[7087],{"type":3075,"value":7088}," else",{"type":3070,"tag":3440,"props":7090,"children":7091},{"style":3605},[7092],{"type":3075,"value":3667},{"type":3070,"tag":3440,"props":7094,"children":7096},{"class":3442,"line":7095},38,[7097],{"type":3070,"tag":3440,"props":7098,"children":7099},{"style":3446},[7100],{"type":3075,"value":7101},"        \u002F\u002F Clean up entries that are null, not an object, or missing a numeric 'time'\n",{"type":3070,"tag":3440,"props":7103,"children":7105},{"class":3442,"line":7104},39,[7106,7110,7114,7118,7122,7126,7130,7134],{"type":3070,"tag":3440,"props":7107,"children":7108},{"style":3582},[7109],{"type":3075,"value":5828},{"type":3070,"tag":3440,"props":7111,"children":7112},{"style":3599},[7113],{"type":3075,"value":5548},{"type":3070,"tag":3440,"props":7115,"children":7116},{"style":3605},[7117],{"type":3075,"value":4569},{"type":3070,"tag":3440,"props":7119,"children":7120},{"style":3593},[7121],{"type":3075,"value":5841},{"type":3070,"tag":3440,"props":7123,"children":7124},{"style":3614},[7125],{"type":3075,"value":3602},{"type":3070,"tag":3440,"props":7127,"children":7128},{"style":3599},[7129],{"type":3075,"value":5777},{"type":3070,"tag":3440,"props":7131,"children":7132},{"style":3614},[7133],{"type":3075,"value":3977},{"type":3070,"tag":3440,"props":7135,"children":7136},{"style":3605},[7137],{"type":3075,"value":3982},{"type":3070,"tag":3440,"props":7139,"children":7141},{"class":3442,"line":7140},40,[7142,7146],{"type":3070,"tag":3440,"props":7143,"children":7144},{"style":3599},[7145],{"type":3075,"value":5865},{"type":3070,"tag":3440,"props":7147,"children":7148},{"style":3605},[7149],{"type":3075,"value":5870},{"type":3070,"tag":3440,"props":7151,"children":7153},{"class":3442,"line":7152},41,[7154],{"type":3070,"tag":3440,"props":7155,"children":7156},{"style":3605},[7157],{"type":3075,"value":4742},{"type":3070,"tag":3440,"props":7159,"children":7161},{"class":3442,"line":7160},42,[7162],{"type":3070,"tag":3440,"props":7163,"children":7164},{"style":3605},[7165],{"type":3075,"value":4750},{"type":3070,"tag":3440,"props":7167,"children":7169},{"class":3442,"line":7168},43,[7170],{"type":3070,"tag":3440,"props":7171,"children":7172},{"emptyLinePlaceholder":1200},[7173],{"type":3075,"value":3478},{"type":3070,"tag":3440,"props":7175,"children":7177},{"class":3442,"line":7176},44,[7178,7182,7186,7190],{"type":3070,"tag":3440,"props":7179,"children":7180},{"style":3599},[7181],{"type":3075,"value":5892},{"type":3070,"tag":3440,"props":7183,"children":7184},{"style":3605},[7185],{"type":3075,"value":4569},{"type":3070,"tag":3440,"props":7187,"children":7188},{"style":3593},[7189],{"type":3075,"value":5901},{"type":3070,"tag":3440,"props":7191,"children":7192},{"style":3614},[7193],{"type":3075,"value":6508},{"type":3070,"tag":3440,"props":7195,"children":7197},{"class":3442,"line":7196},45,[7198,7203,7207,7211,7215,7219,7224],{"type":3070,"tag":3440,"props":7199,"children":7200},{"style":3605},[7201],{"type":3075,"value":7202},"      `",{"type":3070,"tag":3440,"props":7204,"children":7205},{"style":3461},[7206],{"type":3075,"value":5915},{"type":3070,"tag":3440,"props":7208,"children":7209},{"style":3605},[7210],{"type":3075,"value":5920},{"type":3070,"tag":3440,"props":7212,"children":7213},{"style":3599},[7214],{"type":3075,"value":5925},{"type":3070,"tag":3440,"props":7216,"children":7217},{"style":3605},[7218],{"type":3075,"value":3972},{"type":3070,"tag":3440,"props":7220,"children":7221},{"style":3461},[7222],{"type":3075,"value":7223}," old\u002Fmalformed IP data entries.",{"type":3070,"tag":3440,"props":7225,"children":7226},{"style":3605},[7227],{"type":3075,"value":7228},"`\n",{"type":3070,"tag":3440,"props":7230,"children":7232},{"class":3442,"line":7231},46,[7233,7238],{"type":3070,"tag":3440,"props":7234,"children":7235},{"style":3614},[7236],{"type":3075,"value":7237},"    )",{"type":3070,"tag":3440,"props":7239,"children":7240},{"style":3605},[7241],{"type":3075,"value":3982},{"type":3070,"tag":3440,"props":7243,"children":7245},{"class":3442,"line":7244},47,[7246,7250,7254,7258,7262,7266,7270,7274],{"type":3070,"tag":3440,"props":7247,"children":7248},{"style":3582},[7249],{"type":3075,"value":5954},{"type":3070,"tag":3440,"props":7251,"children":7252},{"style":3605},[7253],{"type":3075,"value":5359},{"type":3070,"tag":3440,"props":7255,"children":7256},{"style":3614},[7257],{"type":3075,"value":5963},{"type":3070,"tag":3440,"props":7259,"children":7260},{"style":3605},[7261],{"type":3075,"value":3622},{"type":3070,"tag":3440,"props":7263,"children":7264},{"style":3605},[7265],{"type":3075,"value":5359},{"type":3070,"tag":3440,"props":7267,"children":7268},{"style":3599},[7269],{"type":3075,"value":5681},{"type":3070,"tag":3440,"props":7271,"children":7272},{"style":3605},[7273],{"type":3075,"value":5369},{"type":3070,"tag":3440,"props":7275,"children":7276},{"style":3605},[7277],{"type":3075,"value":5984},{"type":3070,"tag":3440,"props":7279,"children":7281},{"class":3442,"line":7280},48,[7282],{"type":3070,"tag":3440,"props":7283,"children":7284},{"style":3605},[7285],{"type":3075,"value":3963},{"type":3070,"tag":3440,"props":7287,"children":7289},{"class":3442,"line":7288},49,[7290,7294,7298],{"type":3070,"tag":3440,"props":7291,"children":7292},{"style":3605},[7293],{"type":3075,"value":3972},{"type":3070,"tag":3440,"props":7295,"children":7296},{"style":3599},[7297],{"type":3075,"value":3977},{"type":3070,"tag":3440,"props":7299,"children":7300},{"style":3605},[7301],{"type":3075,"value":3982},{"type":3070,"tag":3077,"props":7303,"children":7304},{},[7305,7307,7312,7314,7319,7321,7326,7327,7333,7335,7340],{"type":3075,"value":7306},"Configure ",{"type":3070,"tag":3227,"props":7308,"children":7310},{"className":7309},[],[7311],{"type":3075,"value":5030},{"type":3075,"value":7313}," under ",{"type":3070,"tag":3227,"props":7315,"children":7317},{"className":7316},[],[7318],{"type":3075,"value":3998},{"type":3075,"value":7320}," if you want a TTL other than the default. Setting ",{"type":3070,"tag":3227,"props":7322,"children":7324},{"className":7323},[],[7325],{"type":3075,"value":5030},{"type":3075,"value":4583},{"type":3070,"tag":3227,"props":7328,"children":7330},{"className":7329},[],[7331],{"type":3075,"value":7332},"0",{"type":3075,"value":7334}," (or any non-positive value) makes the bundled ",{"type":3070,"tag":3227,"props":7336,"children":7338},{"className":7337},[],[7339],{"type":3075,"value":3332},{"type":3075,"value":7341}," task skip IP cleanup (it logs and exits).",{"type":3070,"tag":3077,"props":7343,"children":7344},{},[7345,7347,7353,7355,7360,7362,7367],{"type":3075,"value":7346},"If you add your own task file with the same ",{"type":3070,"tag":3227,"props":7348,"children":7350},{"className":7349},[],[7351],{"type":3075,"value":7352},"meta.name",{"type":3075,"value":7354}," as a bundled task (",{"type":3070,"tag":3227,"props":7356,"children":7358},{"className":7357},[],[7359],{"type":3075,"value":3324},{"type":3075,"value":7361}," or ",{"type":3070,"tag":3227,"props":7363,"children":7365},{"className":7364},[],[7366],{"type":3075,"value":3332},{"type":3075,"value":7368},"), Nitro may prefer your project file over the module—avoid duplicate names unless you intend to override.",{"type":3070,"tag":3153,"props":7370,"children":7372},{"id":7371},"production-deployment",[7373],{"type":3075,"value":7374},"Production Deployment",{"type":3070,"tag":3416,"props":7376,"children":7378},{"id":7377},"use-redis-as-the-storage-driver",[7379],{"type":3075,"value":7380},"Use Redis as the storage driver",{"type":3070,"tag":3077,"props":7382,"children":7383},{},[7384,7386,7391,7393,7398,7399,7405],{"type":3075,"value":7385},"For production deployments — especially with multiple server instances or significant traffic — ",{"type":3070,"tag":3165,"props":7387,"children":7388},{},[7389],{"type":3075,"value":7390},"Redis is the recommended storage driver",{"type":3075,"value":7392},". The ",{"type":3070,"tag":3227,"props":7394,"children":7396},{"className":7395},[],[7397],{"type":3075,"value":4729},{"type":3075,"value":3326},{"type":3070,"tag":3227,"props":7400,"children":7402},{"className":7401},[],[7403],{"type":3075,"value":7404},"fs",{"type":3075,"value":7406}," drivers have important limitations:",{"type":3070,"tag":7408,"props":7409,"children":7410},"table",{},[7411,7445],{"type":3070,"tag":7412,"props":7413,"children":7414},"thead",{},[7415],{"type":3070,"tag":7416,"props":7417,"children":7418},"tr",{},[7419,7425,7440],{"type":3070,"tag":7420,"props":7421,"children":7422},"th",{},[7423],{"type":3075,"value":7424},"Area",{"type":3070,"tag":7420,"props":7426,"children":7427},{},[7428,7433,7435],{"type":3070,"tag":3227,"props":7429,"children":7431},{"className":7430},[],[7432],{"type":3075,"value":4729},{"type":3075,"value":7434}," \u002F ",{"type":3070,"tag":3227,"props":7436,"children":7438},{"className":7437},[],[7439],{"type":3075,"value":7404},{"type":3070,"tag":7420,"props":7441,"children":7442},{},[7443],{"type":3075,"value":7444},"Redis",{"type":3070,"tag":7446,"props":7447,"children":7448},"tbody",{},[7449,7471,7492],{"type":3070,"tag":7416,"props":7450,"children":7451},{},[7452,7461,7466],{"type":3070,"tag":7453,"props":7454,"children":7455},"td",{},[7456],{"type":3070,"tag":3165,"props":7457,"children":7458},{},[7459],{"type":3075,"value":7460},"Multi-instance",{"type":3070,"tag":7453,"props":7462,"children":7463},{},[7464],{"type":3075,"value":7465},"Each process has its own isolated state. Rate limits reset per instance, allowing bypass.",{"type":3070,"tag":7453,"props":7467,"children":7468},{},[7469],{"type":3075,"value":7470},"Shared state across all instances.",{"type":3070,"tag":7416,"props":7472,"children":7473},{},[7474,7482,7487],{"type":3070,"tag":7453,"props":7475,"children":7476},{},[7477],{"type":3070,"tag":3165,"props":7478,"children":7479},{},[7480],{"type":3075,"value":7481},"Atomic operations",{"type":3070,"tag":7453,"props":7483,"children":7484},{},[7485],{"type":3075,"value":7486},"Read → increment → write is not atomic. Concurrent requests can both read the same count and exceed the limit simultaneously.",{"type":3070,"tag":7453,"props":7488,"children":7489},{},[7490],{"type":3075,"value":7491},"Single-threaded — reads and writes are naturally atomic. No race conditions.",{"type":3070,"tag":7416,"props":7493,"children":7494},{},[7495,7503,7529],{"type":3070,"tag":7453,"props":7496,"children":7497},{},[7498],{"type":3070,"tag":3165,"props":7499,"children":7500},{},[7501],{"type":3075,"value":7502},"Cleanup",{"type":3070,"tag":7453,"props":7504,"children":7505},{},[7506,7508,7513,7514,7519,7521,7527],{"type":3075,"value":7507},"Cleanup tasks (",{"type":3070,"tag":3227,"props":7509,"children":7511},{"className":7510},[],[7512],{"type":3075,"value":3324},{"type":3075,"value":3392},{"type":3070,"tag":3227,"props":7515,"children":7517},{"className":7516},[],[7518],{"type":3075,"value":3332},{"type":3075,"value":7520},") must scan all keys with ",{"type":3070,"tag":3227,"props":7522,"children":7524},{"className":7523},[],[7525],{"type":3075,"value":7526},"getKeys()",{"type":3075,"value":7528},". At scale this blocks the event loop.",{"type":3070,"tag":7453,"props":7530,"children":7531},{},[7532,7534,7540,7541,7547],{"type":3075,"value":7533},"Use ",{"type":3070,"tag":3227,"props":7535,"children":7537},{"className":7536},[],[7538],{"type":3075,"value":7539},"EXPIRE",{"type":3075,"value":7361},{"type":3070,"tag":3227,"props":7542,"children":7544},{"className":7543},[],[7545],{"type":3075,"value":7546},"TTL",{"type":3075,"value":7548}," natively — expired keys are reclaimed automatically without scanning.",{"type":3070,"tag":3077,"props":7550,"children":7551},{},[7552,7554,7559,7561,7566],{"type":3075,"value":7553},"To use Redis, configure the ",{"type":3070,"tag":3227,"props":7555,"children":7557},{"className":7556},[],[7558],{"type":3075,"value":4598},{"type":3075,"value":7560}," storage with the ",{"type":3070,"tag":3227,"props":7562,"children":7564},{"className":7563},[],[7565],{"type":3075,"value":4880},{"type":3075,"value":7567}," driver:",{"type":3070,"tag":3430,"props":7569,"children":7570},{"className":4603,"code":4772,"language":4605,"meta":3014,"style":3014},[7571],{"type":3070,"tag":3227,"props":7572,"children":7573},{"__ignoreMap":3014},[7574,7581,7604,7627,7650,7685,7720,7743,7750,7757,7764],{"type":3070,"tag":3440,"props":7575,"children":7576},{"class":3442,"line":3042},[7577],{"type":3070,"tag":3440,"props":7578,"children":7579},{"style":3605},[7580],{"type":3075,"value":3608},{"type":3070,"tag":3440,"props":7582,"children":7583},{"class":3442,"line":3038},[7584,7588,7592,7596,7600],{"type":3070,"tag":3440,"props":7585,"children":7586},{"style":3605},[7587],{"type":3075,"value":4624},{"type":3070,"tag":3440,"props":7589,"children":7590},{"style":4627},[7591],{"type":3075,"value":4630},{"type":3070,"tag":3440,"props":7593,"children":7594},{"style":3605},[7595],{"type":3075,"value":3632},{"type":3070,"tag":3440,"props":7597,"children":7598},{"style":3605},[7599],{"type":3075,"value":3622},{"type":3070,"tag":3440,"props":7601,"children":7602},{"style":3605},[7603],{"type":3075,"value":3667},{"type":3070,"tag":3440,"props":7605,"children":7606},{"class":3442,"line":3472},[7607,7611,7615,7619,7623],{"type":3070,"tag":3440,"props":7608,"children":7609},{"style":3605},[7610],{"type":3075,"value":4650},{"type":3070,"tag":3440,"props":7612,"children":7613},{"style":3455},[7614],{"type":3075,"value":4655},{"type":3070,"tag":3440,"props":7616,"children":7617},{"style":3605},[7618],{"type":3075,"value":3632},{"type":3070,"tag":3440,"props":7620,"children":7621},{"style":3605},[7622],{"type":3075,"value":3622},{"type":3070,"tag":3440,"props":7624,"children":7625},{"style":3605},[7626],{"type":3075,"value":3667},{"type":3070,"tag":3440,"props":7628,"children":7629},{"class":3442,"line":3481},[7630,7634,7638,7642,7646],{"type":3070,"tag":3440,"props":7631,"children":7632},{"style":3605},[7633],{"type":3075,"value":4675},{"type":3070,"tag":3440,"props":7635,"children":7636},{"style":3880},[7637],{"type":3075,"value":4598},{"type":3070,"tag":3440,"props":7639,"children":7640},{"style":3605},[7641],{"type":3075,"value":3632},{"type":3070,"tag":3440,"props":7643,"children":7644},{"style":3605},[7645],{"type":3075,"value":3622},{"type":3070,"tag":3440,"props":7647,"children":7648},{"style":3605},[7649],{"type":3075,"value":3667},{"type":3070,"tag":3440,"props":7651,"children":7652},{"class":3442,"line":3034},[7653,7657,7661,7665,7669,7673,7677,7681],{"type":3070,"tag":3440,"props":7654,"children":7655},{"style":3605},[7656],{"type":3075,"value":4707},{"type":3070,"tag":3440,"props":7658,"children":7659},{"style":3614},[7660],{"type":3075,"value":4712},{"type":3070,"tag":3440,"props":7662,"children":7663},{"style":3605},[7664],{"type":3075,"value":3632},{"type":3070,"tag":3440,"props":7666,"children":7667},{"style":3605},[7668],{"type":3075,"value":3622},{"type":3070,"tag":3440,"props":7670,"children":7671},{"style":3605},[7672],{"type":3075,"value":4148},{"type":3070,"tag":3440,"props":7674,"children":7675},{"style":3461},[7676],{"type":3075,"value":4880},{"type":3070,"tag":3440,"props":7678,"children":7679},{"style":3605},[7680],{"type":3075,"value":3632},{"type":3070,"tag":3440,"props":7682,"children":7683},{"style":3605},[7684],{"type":3075,"value":3650},{"type":3070,"tag":3440,"props":7686,"children":7687},{"class":3442,"line":3506},[7688,7692,7696,7700,7704,7708,7712,7716],{"type":3070,"tag":3440,"props":7689,"children":7690},{"style":3605},[7691],{"type":3075,"value":4707},{"type":3070,"tag":3440,"props":7693,"children":7694},{"style":3614},[7695],{"type":3075,"value":4900},{"type":3070,"tag":3440,"props":7697,"children":7698},{"style":3605},[7699],{"type":3075,"value":3632},{"type":3070,"tag":3440,"props":7701,"children":7702},{"style":3605},[7703],{"type":3075,"value":3622},{"type":3070,"tag":3440,"props":7705,"children":7706},{"style":3605},[7707],{"type":3075,"value":4148},{"type":3070,"tag":3440,"props":7709,"children":7710},{"style":3461},[7711],{"type":3075,"value":4917},{"type":3070,"tag":3440,"props":7713,"children":7714},{"style":3605},[7715],{"type":3075,"value":3632},{"type":3070,"tag":3440,"props":7717,"children":7718},{"style":3605},[7719],{"type":3075,"value":3650},{"type":3070,"tag":3440,"props":7721,"children":7722},{"class":3442,"line":3514},[7723,7727,7731,7735,7739],{"type":3070,"tag":3440,"props":7724,"children":7725},{"style":3605},[7726],{"type":3075,"value":4707},{"type":3070,"tag":3440,"props":7728,"children":7729},{"style":3614},[7730],{"type":3075,"value":4937},{"type":3070,"tag":3440,"props":7732,"children":7733},{"style":3605},[7734],{"type":3075,"value":3632},{"type":3070,"tag":3440,"props":7736,"children":7737},{"style":3605},[7738],{"type":3075,"value":3622},{"type":3070,"tag":3440,"props":7740,"children":7741},{"style":3880},[7742],{"type":3075,"value":4950},{"type":3070,"tag":3440,"props":7744,"children":7745},{"class":3442,"line":3059},[7746],{"type":3070,"tag":3440,"props":7747,"children":7748},{"style":3605},[7749],{"type":3075,"value":4742},{"type":3070,"tag":3440,"props":7751,"children":7752},{"class":3442,"line":3710},[7753],{"type":3070,"tag":3440,"props":7754,"children":7755},{"style":3605},[7756],{"type":3075,"value":4750},{"type":3070,"tag":3440,"props":7758,"children":7759},{"class":3442,"line":3719},[7760],{"type":3070,"tag":3440,"props":7761,"children":7762},{"style":3605},[7763],{"type":3075,"value":4413},{"type":3070,"tag":3440,"props":7765,"children":7766},{"class":3442,"line":3728},[7767],{"type":3070,"tag":3440,"props":7768,"children":7769},{"style":3605},[7770],{"type":3075,"value":4421},{"type":3070,"tag":3077,"props":7772,"children":7773},{},[7774,7776,7783],{"type":3075,"value":7775},"See the ",{"type":3070,"tag":3081,"props":7777,"children":7780},{"href":7778,"rel":7779},"https:\u002F\u002Funstorage.unjs.io\u002Fdrivers\u002Fredis",[3085],[7781],{"type":3075,"value":7782},"unstorage Redis driver docs",{"type":3075,"value":7784}," for all available options.",{"type":3070,"tag":3416,"props":7786,"children":7788},{"id":7787},"when-memory-fs-is-acceptable",[7789,7791,7796,7797,7802],{"type":3075,"value":7790},"When ",{"type":3070,"tag":3227,"props":7792,"children":7794},{"className":7793},[],[7795],{"type":3075,"value":4729},{"type":3075,"value":7434},{"type":3070,"tag":3227,"props":7798,"children":7800},{"className":7799},[],[7801],{"type":3075,"value":7404},{"type":3075,"value":7803}," is acceptable",{"type":3070,"tag":3077,"props":7805,"children":7806},{},[7807,7808,7813,7814,7819],{"type":3075,"value":4440},{"type":3070,"tag":3227,"props":7809,"children":7811},{"className":7810},[],[7812],{"type":3075,"value":4729},{"type":3075,"value":3326},{"type":3070,"tag":3227,"props":7815,"children":7817},{"className":7816},[],[7818],{"type":3075,"value":7404},{"type":3075,"value":7820}," drivers are fine for:",{"type":3070,"tag":3127,"props":7822,"children":7823},{},[7824,7829,7834],{"type":3070,"tag":3131,"props":7825,"children":7826},{},[7827],{"type":3075,"value":7828},"Single-instance deployments",{"type":3070,"tag":3131,"props":7830,"children":7831},{},[7832],{"type":3075,"value":7833},"Development environments",{"type":3070,"tag":3131,"props":7835,"children":7836},{},[7837],{"type":3075,"value":7838},"Low-traffic applications where occasional race conditions are acceptable",{"type":3070,"tag":3077,"props":7840,"children":7841},{},[7842],{"type":3075,"value":7843},"For everything else, use Redis.",{"type":3070,"tag":3153,"props":7845,"children":7847},{"id":7846},"fail2ban-integration",[7848],{"type":3075,"value":7849},"Fail2ban Integration",{"type":3070,"tag":3077,"props":7851,"children":7852},{},[7853,7855,7860,7862,7868],{"type":3075,"value":7854},"When a user exceeds the rate limit and gets banned, ",{"type":3070,"tag":3227,"props":7856,"children":7858},{"className":7857},[],[7859],{"type":3075,"value":3011},{"type":3075,"value":7861}," can write ban events to the log file in a ",{"type":3070,"tag":3227,"props":7863,"children":7865},{"className":7864},[],[7866],{"type":3075,"value":7867},"fail2ban",{"type":3075,"value":7869},"-compatible format. You can then configure fail2ban to watch these logs and automatically block the IP at the firewall level.",{"type":3070,"tag":3416,"props":7871,"children":7873},{"id":7872},"setup",[7874],{"type":3075,"value":7875},"Setup",{"type":3070,"tag":3077,"props":7877,"children":7878},{},[7879,7881,7887,7888,7893,7895,7901],{"type":3075,"value":7880},"Enable fail2ban logging by setting ",{"type":3070,"tag":3227,"props":7882,"children":7884},{"className":7883},[],[7885],{"type":3075,"value":7886},"log.fail2ban",{"type":3075,"value":4583},{"type":3070,"tag":3227,"props":7889,"children":7891},{"className":7890},[],[7892],{"type":3075,"value":4478},{"type":3075,"value":7894}," and configuring the ",{"type":3070,"tag":3227,"props":7896,"children":7898},{"className":7897},[],[7899],{"type":3075,"value":7900},"log.path",{"type":3075,"value":3622},{"type":3070,"tag":3430,"props":7903,"children":7905},{"className":3570,"code":7904,"language":3572,"meta":3014,"style":3014},"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",[7906],{"type":3070,"tag":3227,"props":7907,"children":7908},{"__ignoreMap":3014},[7909,7932,7967,7982,7998,8032,8058,8083,8090,8097],{"type":3070,"tag":3440,"props":7910,"children":7911},{"class":3442,"line":3042},[7912,7916,7920,7924,7928],{"type":3070,"tag":3440,"props":7913,"children":7914},{"style":3582},[7915],{"type":3075,"value":3585},{"type":3070,"tag":3440,"props":7917,"children":7918},{"style":3582},[7919],{"type":3075,"value":3590},{"type":3070,"tag":3440,"props":7921,"children":7922},{"style":3593},[7923],{"type":3075,"value":3596},{"type":3070,"tag":3440,"props":7925,"children":7926},{"style":3599},[7927],{"type":3075,"value":3602},{"type":3070,"tag":3440,"props":7929,"children":7930},{"style":3605},[7931],{"type":3075,"value":3608},{"type":3070,"tag":3440,"props":7933,"children":7934},{"class":3442,"line":3038},[7935,7939,7943,7947,7951,7955,7959,7963],{"type":3070,"tag":3440,"props":7936,"children":7937},{"style":3614},[7938],{"type":3075,"value":3617},{"type":3070,"tag":3440,"props":7940,"children":7941},{"style":3605},[7942],{"type":3075,"value":3622},{"type":3070,"tag":3440,"props":7944,"children":7945},{"style":3599},[7946],{"type":3075,"value":3627},{"type":3070,"tag":3440,"props":7948,"children":7949},{"style":3605},[7950],{"type":3075,"value":3632},{"type":3070,"tag":3440,"props":7952,"children":7953},{"style":3461},[7954],{"type":3075,"value":3011},{"type":3070,"tag":3440,"props":7956,"children":7957},{"style":3605},[7958],{"type":3075,"value":3632},{"type":3070,"tag":3440,"props":7960,"children":7961},{"style":3599},[7962],{"type":3075,"value":3645},{"type":3070,"tag":3440,"props":7964,"children":7965},{"style":3605},[7966],{"type":3075,"value":3650},{"type":3070,"tag":3440,"props":7968,"children":7969},{"class":3442,"line":3472},[7970,7974,7978],{"type":3070,"tag":3440,"props":7971,"children":7972},{"style":3614},[7973],{"type":3075,"value":3658},{"type":3070,"tag":3440,"props":7975,"children":7976},{"style":3605},[7977],{"type":3075,"value":3622},{"type":3070,"tag":3440,"props":7979,"children":7980},{"style":3605},[7981],{"type":3075,"value":3667},{"type":3070,"tag":3440,"props":7983,"children":7984},{"class":3442,"line":3481},[7985,7990,7994],{"type":3070,"tag":3440,"props":7986,"children":7987},{"style":3614},[7988],{"type":3075,"value":7989},"    log",{"type":3070,"tag":3440,"props":7991,"children":7992},{"style":3605},[7993],{"type":3075,"value":3622},{"type":3070,"tag":3440,"props":7995,"children":7996},{"style":3605},[7997],{"type":3075,"value":3667},{"type":3070,"tag":3440,"props":7999,"children":8000},{"class":3442,"line":3034},[8001,8006,8010,8014,8019,8023,8027],{"type":3070,"tag":3440,"props":8002,"children":8003},{"style":3614},[8004],{"type":3075,"value":8005},"      path",{"type":3070,"tag":3440,"props":8007,"children":8008},{"style":3605},[8009],{"type":3075,"value":3622},{"type":3070,"tag":3440,"props":8011,"children":8012},{"style":3605},[8013],{"type":3075,"value":4148},{"type":3070,"tag":3440,"props":8015,"children":8016},{"style":3461},[8017],{"type":3075,"value":8018},"\u002Fvar\u002Flog\u002Fnuxt-api-shield",{"type":3070,"tag":3440,"props":8020,"children":8021},{"style":3605},[8022],{"type":3075,"value":3632},{"type":3070,"tag":3440,"props":8024,"children":8025},{"style":3605},[8026],{"type":3075,"value":3842},{"type":3070,"tag":3440,"props":8028,"children":8029},{"style":3446},[8030],{"type":3075,"value":8031}," \u002F\u002F required — must be set\n",{"type":3070,"tag":3440,"props":8033,"children":8034},{"class":3442,"line":3506},[8035,8040,8044,8049,8053],{"type":3070,"tag":3440,"props":8036,"children":8037},{"style":3614},[8038],{"type":3075,"value":8039},"      attempts",{"type":3070,"tag":3440,"props":8041,"children":8042},{"style":3605},[8043],{"type":3075,"value":3622},{"type":3070,"tag":3440,"props":8045,"children":8046},{"style":3880},[8047],{"type":3075,"value":8048}," 1",{"type":3070,"tag":3440,"props":8050,"children":8051},{"style":3605},[8052],{"type":3075,"value":3842},{"type":3070,"tag":3440,"props":8054,"children":8055},{"style":3446},[8056],{"type":3075,"value":8057},"                       \u002F\u002F optional — threshold for regular request logging\n",{"type":3070,"tag":3440,"props":8059,"children":8060},{"class":3442,"line":3514},[8061,8066,8070,8074,8078],{"type":3070,"tag":3440,"props":8062,"children":8063},{"style":3614},[8064],{"type":3075,"value":8065},"      fail2ban",{"type":3070,"tag":3440,"props":8067,"children":8068},{"style":3605},[8069],{"type":3075,"value":3622},{"type":3070,"tag":3440,"props":8071,"children":8072},{"style":3934},[8073],{"type":3075,"value":4127},{"type":3070,"tag":3440,"props":8075,"children":8076},{"style":3605},[8077],{"type":3075,"value":3842},{"type":3070,"tag":3440,"props":8079,"children":8080},{"style":3446},[8081],{"type":3075,"value":8082},"                     \u002F\u002F enable fail2ban format\n",{"type":3070,"tag":3440,"props":8084,"children":8085},{"class":3442,"line":3059},[8086],{"type":3070,"tag":3440,"props":8087,"children":8088},{"style":3605},[8089],{"type":3075,"value":3716},{"type":3070,"tag":3440,"props":8091,"children":8092},{"class":3442,"line":3710},[8093],{"type":3070,"tag":3440,"props":8094,"children":8095},{"style":3605},[8096],{"type":3075,"value":3963},{"type":3070,"tag":3440,"props":8098,"children":8099},{"class":3442,"line":3719},[8100,8104],{"type":3070,"tag":3440,"props":8101,"children":8102},{"style":3605},[8103],{"type":3075,"value":3972},{"type":3070,"tag":3440,"props":8105,"children":8106},{"style":3599},[8107],{"type":3075,"value":8108},")\n",{"type":3070,"tag":3077,"props":8110,"children":8111},{},[8112],{"type":3075,"value":8113},"When enabled, every ban event writes a line like:",{"type":3070,"tag":3430,"props":8115,"children":8119},{"className":8116,"code":8118,"language":3075},[8117],"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",[8120],{"type":3070,"tag":3227,"props":8121,"children":8122},{"__ignoreMap":3014},[8123],{"type":3075,"value":8118},{"type":3070,"tag":3416,"props":8125,"children":8127},{"id":8126},"fail2ban-filter-configuration",[8128],{"type":3075,"value":8129},"Fail2ban filter configuration",{"type":3070,"tag":3077,"props":8131,"children":8132},{},[8133,8135,8141],{"type":3075,"value":8134},"Create ",{"type":3070,"tag":3227,"props":8136,"children":8138},{"className":8137},[],[8139],{"type":3075,"value":8140},"\u002Fetc\u002Ffail2ban\u002Ffilter.d\u002Fnuxt-api-shield.conf",{"type":3075,"value":3622},{"type":3070,"tag":3430,"props":8143,"children":8147},{"className":8144,"code":8145,"language":8146,"meta":3014,"style":3014},"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",[8148],{"type":3070,"tag":3227,"props":8149,"children":8150},{"__ignoreMap":3014},[8151,8159],{"type":3070,"tag":3440,"props":8152,"children":8153},{"class":3442,"line":3042},[8154],{"type":3070,"tag":3440,"props":8155,"children":8156},{"style":3605},[8157],{"type":3075,"value":8158},"[Definition]\n",{"type":3070,"tag":3440,"props":8160,"children":8161},{"class":3442,"line":3038},[8162,8167,8171],{"type":3070,"tag":3440,"props":8163,"children":8164},{"style":3614},[8165],{"type":3075,"value":8166},"failregex",{"type":3070,"tag":3440,"props":8168,"children":8169},{"style":3605},[8170],{"type":3075,"value":5553},{"type":3070,"tag":3440,"props":8172,"children":8173},{"style":3599},[8174],{"type":3075,"value":8175}," ^\\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2}:\\d{2},\\d{3} nuxt-api-shield ban \u003CHOST>\n",{"type":3070,"tag":3416,"props":8177,"children":8179},{"id":8178},"jail-configuration",[8180],{"type":3075,"value":8181},"Jail configuration",{"type":3070,"tag":3077,"props":8183,"children":8184},{},[8185,8187,8193],{"type":3075,"value":8186},"Add a jail entry in ",{"type":3070,"tag":3227,"props":8188,"children":8190},{"className":8189},[],[8191],{"type":3075,"value":8192},"\u002Fetc\u002Ffail2ban\u002Fjail.local",{"type":3075,"value":3622},{"type":3070,"tag":3430,"props":8195,"children":8197},{"className":8144,"code":8196,"language":8146,"meta":3014,"style":3014},"[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",[8198],{"type":3070,"tag":3227,"props":8199,"children":8200},{"__ignoreMap":3014},[8201,8209,8226,8243,8260,8277,8294,8311,8327],{"type":3070,"tag":3440,"props":8202,"children":8203},{"class":3442,"line":3042},[8204],{"type":3070,"tag":3440,"props":8205,"children":8206},{"style":3605},[8207],{"type":3075,"value":8208},"[nuxt-api-shield]\n",{"type":3070,"tag":3440,"props":8210,"children":8211},{"class":3442,"line":3038},[8212,8217,8222],{"type":3070,"tag":3440,"props":8213,"children":8214},{"style":3614},[8215],{"type":3075,"value":8216},"enabled",{"type":3070,"tag":3440,"props":8218,"children":8219},{"style":3605},[8220],{"type":3075,"value":8221},"  =",{"type":3070,"tag":3440,"props":8223,"children":8224},{"style":3599},[8225],{"type":3075,"value":5141},{"type":3070,"tag":3440,"props":8227,"children":8228},{"class":3442,"line":3472},[8229,8234,8239],{"type":3070,"tag":3440,"props":8230,"children":8231},{"style":3614},[8232],{"type":3075,"value":8233},"filter",{"type":3070,"tag":3440,"props":8235,"children":8236},{"style":3605},[8237],{"type":3075,"value":8238},"   =",{"type":3070,"tag":3440,"props":8240,"children":8241},{"style":3599},[8242],{"type":3075,"value":3469},{"type":3070,"tag":3440,"props":8244,"children":8245},{"class":3442,"line":3481},[8246,8251,8255],{"type":3070,"tag":3440,"props":8247,"children":8248},{"style":3614},[8249],{"type":3075,"value":8250},"logpath",{"type":3070,"tag":3440,"props":8252,"children":8253},{"style":3605},[8254],{"type":3075,"value":8221},{"type":3070,"tag":3440,"props":8256,"children":8257},{"style":3599},[8258],{"type":3075,"value":8259}," \u002Fvar\u002Flog\u002Fnuxt-api-shield\u002Fshield-*.log\n",{"type":3070,"tag":3440,"props":8261,"children":8262},{"class":3442,"line":3034},[8263,8267,8272],{"type":3070,"tag":3440,"props":8264,"children":8265},{"style":3614},[8266],{"type":3075,"value":4937},{"type":3070,"tag":3440,"props":8268,"children":8269},{"style":3605},[8270],{"type":3075,"value":8271},"     =",{"type":3070,"tag":3440,"props":8273,"children":8274},{"style":3599},[8275],{"type":3075,"value":8276}," http,https\n",{"type":3070,"tag":3440,"props":8278,"children":8279},{"class":3442,"line":3506},[8280,8285,8289],{"type":3070,"tag":3440,"props":8281,"children":8282},{"style":3614},[8283],{"type":3075,"value":8284},"banaction",{"type":3070,"tag":3440,"props":8286,"children":8287},{"style":3605},[8288],{"type":3075,"value":5553},{"type":3070,"tag":3440,"props":8290,"children":8291},{"style":3599},[8292],{"type":3075,"value":8293}," iptables-multiport\n",{"type":3070,"tag":3440,"props":8295,"children":8296},{"class":3442,"line":3514},[8297,8302,8306],{"type":3070,"tag":3440,"props":8298,"children":8299},{"style":3614},[8300],{"type":3075,"value":8301},"maxretry",{"type":3070,"tag":3440,"props":8303,"children":8304},{"style":3605},[8305],{"type":3075,"value":5553},{"type":3070,"tag":3440,"props":8307,"children":8308},{"style":3599},[8309],{"type":3075,"value":8310}," 1\n",{"type":3070,"tag":3440,"props":8312,"children":8313},{"class":3442,"line":3059},[8314,8319,8323],{"type":3070,"tag":3440,"props":8315,"children":8316},{"style":3614},[8317],{"type":3075,"value":8318},"findtime",{"type":3070,"tag":3440,"props":8320,"children":8321},{"style":3605},[8322],{"type":3075,"value":5553},{"type":3070,"tag":3440,"props":8324,"children":8325},{"style":3599},[8326],{"type":3075,"value":8310},{"type":3070,"tag":3440,"props":8328,"children":8329},{"class":3442,"line":3710},[8330,8335,8339],{"type":3070,"tag":3440,"props":8331,"children":8332},{"style":3614},[8333],{"type":3075,"value":8334},"bantime",{"type":3070,"tag":3440,"props":8336,"children":8337},{"style":3605},[8338],{"type":3075,"value":8221},{"type":3070,"tag":3440,"props":8340,"children":8341},{"style":3599},[8342],{"type":3075,"value":8343}," 3600\n",{"type":3070,"tag":3077,"props":8345,"children":8346},{},[8347,8349,8354,8356,8362,8364,8370,8371,8377,8379,8384],{"type":3075,"value":8348},"Since ",{"type":3070,"tag":3227,"props":8350,"children":8352},{"className":8351},[],[8353],{"type":3075,"value":3011},{"type":3075,"value":8355}," already applies its own ban logic (configurable via ",{"type":3070,"tag":3227,"props":8357,"children":8359},{"className":8358},[],[8360],{"type":3075,"value":8361},"limit.ban",{"type":3075,"value":8363},"), set ",{"type":3070,"tag":3227,"props":8365,"children":8367},{"className":8366},[],[8368],{"type":3075,"value":8369},"maxretry = 1",{"type":3075,"value":3326},{"type":3070,"tag":3227,"props":8372,"children":8374},{"className":8373},[],[8375],{"type":3075,"value":8376},"findtime = 1",{"type":3075,"value":8378}," so fail2ban acts immediately on each ban log entry. Adjust ",{"type":3070,"tag":3227,"props":8380,"children":8382},{"className":8381},[],[8383],{"type":3075,"value":8334},{"type":3075,"value":8385}," to match or extend your module-level ban duration.",{"type":3070,"tag":3077,"props":8387,"children":8388},{},[8389],{"type":3075,"value":8390},"Restart fail2ban after adding the config:",{"type":3070,"tag":3430,"props":8392,"children":8394},{"className":3432,"code":8393,"language":3434,"meta":3014,"style":3014},"sudo systemctl restart fail2ban\n",[8395],{"type":3070,"tag":3227,"props":8396,"children":8397},{"__ignoreMap":3014},[8398],{"type":3070,"tag":3440,"props":8399,"children":8400},{"class":3442,"line":3042},[8401,8406,8411,8416],{"type":3070,"tag":3440,"props":8402,"children":8403},{"style":3455},[8404],{"type":3075,"value":8405},"sudo",{"type":3070,"tag":3440,"props":8407,"children":8408},{"style":3461},[8409],{"type":3075,"value":8410}," systemctl",{"type":3070,"tag":3440,"props":8412,"children":8413},{"style":3461},[8414],{"type":3075,"value":8415}," restart",{"type":3070,"tag":3440,"props":8417,"children":8418},{"style":3461},[8419],{"type":3075,"value":8420}," fail2ban\n",{"type":3070,"tag":8422,"props":8423,"children":8424},"blockquote",{},[8425],{"type":3070,"tag":3077,"props":8426,"children":8427},{},[8428,8433,8435,8440],{"type":3070,"tag":3165,"props":8429,"children":8430},{},[8431],{"type":3075,"value":8432},"Note:",{"type":3075,"value":8434}," The ",{"type":3070,"tag":3227,"props":8436,"children":8438},{"className":8437},[],[8439],{"type":3075,"value":7900},{"type":3075,"value":8441}," directory must be readable by the fail2ban service. Ensure permissions are set accordingly.",{"type":3070,"tag":3153,"props":8443,"children":8445},{"id":8444},"typescript-types",[8446],{"type":3075,"value":8447},"TypeScript Types",{"type":3070,"tag":3077,"props":8449,"children":8450},{},[8451],{"type":3075,"value":8452},"The module exports TypeScript types that you can use in your application:",{"type":3070,"tag":3416,"props":8454,"children":8456},{"id":8455},"ratelimit-type",[8457,8463],{"type":3070,"tag":3227,"props":8458,"children":8460},{"className":8459},[],[8461],{"type":3075,"value":8462},"RateLimit",{"type":3075,"value":8464}," Type",{"type":3070,"tag":3077,"props":8466,"children":8467},{},[8468,8469,8474],{"type":3075,"value":4440},{"type":3070,"tag":3227,"props":8470,"children":8472},{"className":8471},[],[8473],{"type":3075,"value":8462},{"type":3075,"value":8475}," type represents the structure of rate limit data stored for each IP address:",{"type":3070,"tag":3430,"props":8477,"children":8479},{"className":5340,"code":8478,"language":5342,"meta":3014,"style":3014},"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",[8480],{"type":3070,"tag":3227,"props":8481,"children":8482},{"__ignoreMap":3014},[8483,8526,8533,8541,8549,8562,8575],{"type":3070,"tag":3440,"props":8484,"children":8485},{"class":3442,"line":3042},[8486,8490,8494,8498,8502,8506,8510,8514,8518,8522],{"type":3070,"tag":3440,"props":8487,"children":8488},{"style":3582},[8489],{"type":3075,"value":5354},{"type":3070,"tag":3440,"props":8491,"children":8492},{"style":3582},[8493],{"type":3075,"value":6095},{"type":3070,"tag":3440,"props":8495,"children":8496},{"style":3605},[8497],{"type":3075,"value":5359},{"type":3070,"tag":3440,"props":8499,"children":8500},{"style":3599},[8501],{"type":3075,"value":6104},{"type":3070,"tag":3440,"props":8503,"children":8504},{"style":3605},[8505],{"type":3075,"value":5369},{"type":3070,"tag":3440,"props":8507,"children":8508},{"style":3582},[8509],{"type":3075,"value":5374},{"type":3070,"tag":3440,"props":8511,"children":8512},{"style":3605},[8513],{"type":3075,"value":4148},{"type":3070,"tag":3440,"props":8515,"children":8516},{"style":3461},[8517],{"type":3075,"value":3011},{"type":3070,"tag":3440,"props":8519,"children":8520},{"style":3605},[8521],{"type":3075,"value":3632},{"type":3070,"tag":3440,"props":8523,"children":8524},{"style":3605},[8525],{"type":3075,"value":3982},{"type":3070,"tag":3440,"props":8527,"children":8528},{"class":3442,"line":3038},[8529],{"type":3070,"tag":3440,"props":8530,"children":8531},{"emptyLinePlaceholder":1200},[8532],{"type":3075,"value":3478},{"type":3070,"tag":3440,"props":8534,"children":8535},{"class":3442,"line":3472},[8536],{"type":3070,"tag":3440,"props":8537,"children":8538},{"style":3446},[8539],{"type":3075,"value":8540},"\u002F\u002F RateLimit structure:\n",{"type":3070,"tag":3440,"props":8542,"children":8543},{"class":3442,"line":3481},[8544],{"type":3070,"tag":3440,"props":8545,"children":8546},{"style":3446},[8547],{"type":3075,"value":8548},"\u002F\u002F {\n",{"type":3070,"tag":3440,"props":8550,"children":8551},{"class":3442,"line":3034},[8552,8557],{"type":3070,"tag":3440,"props":8553,"children":8554},{"style":3446},[8555],{"type":3075,"value":8556},"\u002F\u002F   count: number",{"type":3070,"tag":3440,"props":8558,"children":8559},{"style":3446},[8560],{"type":3075,"value":8561},"  \u002F\u002F Number of requests made\n",{"type":3070,"tag":3440,"props":8563,"children":8564},{"class":3442,"line":3506},[8565,8570],{"type":3070,"tag":3440,"props":8566,"children":8567},{"style":3446},[8568],{"type":3075,"value":8569},"\u002F\u002F   time: number",{"type":3070,"tag":3440,"props":8571,"children":8572},{"style":3446},[8573],{"type":3075,"value":8574},"   \u002F\u002F Timestamp of the last request\n",{"type":3070,"tag":3440,"props":8576,"children":8577},{"class":3442,"line":3514},[8578],{"type":3070,"tag":3440,"props":8579,"children":8580},{"style":3446},[8581],{"type":3075,"value":8582},"\u002F\u002F }\n",{"type":3070,"tag":3077,"props":8584,"children":8585},{},[8586],{"type":3070,"tag":3165,"props":8587,"children":8588},{},[8589],{"type":3075,"value":8590},"Usage Example:",{"type":3070,"tag":3430,"props":8592,"children":8594},{"className":5340,"code":8593,"language":5342,"meta":3014,"style":3014},"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",[8595],{"type":3070,"tag":3227,"props":8596,"children":8597},{"__ignoreMap":3014},[8598,8641,8680,8687,8732,8765,8826,8833,8850,8917,8998],{"type":3070,"tag":3440,"props":8599,"children":8600},{"class":3442,"line":3042},[8601,8605,8609,8613,8617,8621,8625,8629,8633,8637],{"type":3070,"tag":3440,"props":8602,"children":8603},{"style":3582},[8604],{"type":3075,"value":5354},{"type":3070,"tag":3440,"props":8606,"children":8607},{"style":3582},[8608],{"type":3075,"value":6095},{"type":3070,"tag":3440,"props":8610,"children":8611},{"style":3605},[8612],{"type":3075,"value":5359},{"type":3070,"tag":3440,"props":8614,"children":8615},{"style":3599},[8616],{"type":3075,"value":6104},{"type":3070,"tag":3440,"props":8618,"children":8619},{"style":3605},[8620],{"type":3075,"value":5369},{"type":3070,"tag":3440,"props":8622,"children":8623},{"style":3582},[8624],{"type":3075,"value":5374},{"type":3070,"tag":3440,"props":8626,"children":8627},{"style":3605},[8628],{"type":3075,"value":4148},{"type":3070,"tag":3440,"props":8630,"children":8631},{"style":3461},[8632],{"type":3075,"value":3011},{"type":3070,"tag":3440,"props":8634,"children":8635},{"style":3605},[8636],{"type":3075,"value":3632},{"type":3070,"tag":3440,"props":8638,"children":8639},{"style":3605},[8640],{"type":3075,"value":3982},{"type":3070,"tag":3440,"props":8642,"children":8643},{"class":3442,"line":3038},[8644,8648,8652,8656,8660,8664,8668,8672,8676],{"type":3070,"tag":3440,"props":8645,"children":8646},{"style":3582},[8647],{"type":3075,"value":5354},{"type":3070,"tag":3440,"props":8649,"children":8650},{"style":3605},[8651],{"type":3075,"value":5359},{"type":3070,"tag":3440,"props":8653,"children":8654},{"style":3599},[8655],{"type":3075,"value":5558},{"type":3070,"tag":3440,"props":8657,"children":8658},{"style":3605},[8659],{"type":3075,"value":5369},{"type":3070,"tag":3440,"props":8661,"children":8662},{"style":3582},[8663],{"type":3075,"value":5374},{"type":3070,"tag":3440,"props":8665,"children":8666},{"style":3605},[8667],{"type":3075,"value":4148},{"type":3070,"tag":3440,"props":8669,"children":8670},{"style":3461},[8671],{"type":3075,"value":5383},{"type":3070,"tag":3440,"props":8673,"children":8674},{"style":3605},[8675],{"type":3075,"value":3632},{"type":3070,"tag":3440,"props":8677,"children":8678},{"style":3605},[8679],{"type":3075,"value":3982},{"type":3070,"tag":3440,"props":8681,"children":8682},{"class":3442,"line":3472},[8683],{"type":3070,"tag":3440,"props":8684,"children":8685},{"emptyLinePlaceholder":1200},[8686],{"type":3075,"value":3478},{"type":3070,"tag":3440,"props":8688,"children":8689},{"class":3442,"line":3481},[8690,8694,8699,8704,8708,8712,8716,8720,8724,8728],{"type":3070,"tag":3440,"props":8691,"children":8692},{"style":4627},[8693],{"type":3075,"value":5711},{"type":3070,"tag":3440,"props":8695,"children":8696},{"style":3599},[8697],{"type":3075,"value":8698}," shieldStorage ",{"type":3070,"tag":3440,"props":8700,"children":8701},{"style":3605},[8702],{"type":3075,"value":8703},"=",{"type":3070,"tag":3440,"props":8705,"children":8706},{"style":3593},[8707],{"type":3075,"value":5558},{"type":3070,"tag":3440,"props":8709,"children":8710},{"style":3599},[8711],{"type":3075,"value":3602},{"type":3070,"tag":3440,"props":8713,"children":8714},{"style":3605},[8715],{"type":3075,"value":3632},{"type":3070,"tag":3440,"props":8717,"children":8718},{"style":3461},[8719],{"type":3075,"value":4598},{"type":3070,"tag":3440,"props":8721,"children":8722},{"style":3605},[8723],{"type":3075,"value":3632},{"type":3070,"tag":3440,"props":8725,"children":8726},{"style":3599},[8727],{"type":3075,"value":3977},{"type":3070,"tag":3440,"props":8729,"children":8730},{"style":3605},[8731],{"type":3075,"value":3982},{"type":3070,"tag":3440,"props":8733,"children":8734},{"class":3442,"line":3034},[8735,8739,8744,8748,8752,8757,8761],{"type":3070,"tag":3440,"props":8736,"children":8737},{"style":4627},[8738],{"type":3075,"value":5711},{"type":3070,"tag":3440,"props":8740,"children":8741},{"style":3599},[8742],{"type":3075,"value":8743}," ipKey ",{"type":3070,"tag":3440,"props":8745,"children":8746},{"style":3605},[8747],{"type":3075,"value":8703},{"type":3070,"tag":3440,"props":8749,"children":8750},{"style":3605},[8751],{"type":3075,"value":4148},{"type":3070,"tag":3440,"props":8753,"children":8754},{"style":3461},[8755],{"type":3075,"value":8756},"ip:192.168.1.1",{"type":3070,"tag":3440,"props":8758,"children":8759},{"style":3605},[8760],{"type":3075,"value":3632},{"type":3070,"tag":3440,"props":8762,"children":8763},{"style":3605},[8764],{"type":3075,"value":3982},{"type":3070,"tag":3440,"props":8766,"children":8767},{"class":3442,"line":3506},[8768,8772,8777,8781,8785,8789,8793,8797,8801,8806,8810,8814,8818,8822],{"type":3070,"tag":3440,"props":8769,"children":8770},{"style":4627},[8771],{"type":3075,"value":5711},{"type":3070,"tag":3440,"props":8773,"children":8774},{"style":3599},[8775],{"type":3075,"value":8776}," entry ",{"type":3070,"tag":3440,"props":8778,"children":8779},{"style":3605},[8780],{"type":3075,"value":8703},{"type":3070,"tag":3440,"props":8782,"children":8783},{"style":3599},[8784],{"type":3075,"value":5706},{"type":3070,"tag":3440,"props":8786,"children":8787},{"style":3582},[8788],{"type":3075,"value":6835},{"type":3070,"tag":3440,"props":8790,"children":8791},{"style":3599},[8792],{"type":3075,"value":5548},{"type":3070,"tag":3440,"props":8794,"children":8795},{"style":3605},[8796],{"type":3075,"value":4569},{"type":3070,"tag":3440,"props":8798,"children":8799},{"style":3593},[8800],{"type":3075,"value":5768},{"type":3070,"tag":3440,"props":8802,"children":8803},{"style":3599},[8804],{"type":3075,"value":8805},"(ipKey)) ",{"type":3070,"tag":3440,"props":8807,"children":8808},{"style":3582},[8809],{"type":3075,"value":6864},{"type":3070,"tag":3440,"props":8811,"children":8812},{"style":3455},[8813],{"type":3075,"value":6104},{"type":3070,"tag":3440,"props":8815,"children":8816},{"style":3605},[8817],{"type":3075,"value":6873},{"type":3070,"tag":3440,"props":8819,"children":8820},{"style":3455},[8821],{"type":3075,"value":6878},{"type":3070,"tag":3440,"props":8823,"children":8824},{"style":3605},[8825],{"type":3075,"value":3982},{"type":3070,"tag":3440,"props":8827,"children":8828},{"class":3442,"line":3514},[8829],{"type":3070,"tag":3440,"props":8830,"children":8831},{"emptyLinePlaceholder":1200},[8832],{"type":3075,"value":3478},{"type":3070,"tag":3440,"props":8834,"children":8835},{"class":3442,"line":3059},[8836,8841,8846],{"type":3070,"tag":3440,"props":8837,"children":8838},{"style":3582},[8839],{"type":3075,"value":8840},"if",{"type":3070,"tag":3440,"props":8842,"children":8843},{"style":3599},[8844],{"type":3075,"value":8845}," (entry) ",{"type":3070,"tag":3440,"props":8847,"children":8848},{"style":3605},[8849],{"type":3075,"value":3608},{"type":3070,"tag":3440,"props":8851,"children":8852},{"class":3442,"line":3710},[8853,8858,8862,8866,8870,8874,8879,8883,8887,8891,8896,8900,8905,8909,8913],{"type":3070,"tag":3440,"props":8854,"children":8855},{"style":3599},[8856],{"type":3075,"value":8857},"  console",{"type":3070,"tag":3440,"props":8859,"children":8860},{"style":3605},[8861],{"type":3075,"value":4569},{"type":3070,"tag":3440,"props":8863,"children":8864},{"style":3593},[8865],{"type":3075,"value":5901},{"type":3070,"tag":3440,"props":8867,"children":8868},{"style":3614},[8869],{"type":3075,"value":3602},{"type":3070,"tag":3440,"props":8871,"children":8872},{"style":3605},[8873],{"type":3075,"value":5910},{"type":3070,"tag":3440,"props":8875,"children":8876},{"style":3461},[8877],{"type":3075,"value":8878},"IP has made ",{"type":3070,"tag":3440,"props":8880,"children":8881},{"style":3605},[8882],{"type":3075,"value":5920},{"type":3070,"tag":3440,"props":8884,"children":8885},{"style":3599},[8886],{"type":3075,"value":6915},{"type":3070,"tag":3440,"props":8888,"children":8889},{"style":3605},[8890],{"type":3075,"value":4569},{"type":3070,"tag":3440,"props":8892,"children":8893},{"style":3599},[8894],{"type":3075,"value":8895},"count",{"type":3070,"tag":3440,"props":8897,"children":8898},{"style":3605},[8899],{"type":3075,"value":3972},{"type":3070,"tag":3440,"props":8901,"children":8902},{"style":3461},[8903],{"type":3075,"value":8904}," requests",{"type":3070,"tag":3440,"props":8906,"children":8907},{"style":3605},[8908],{"type":3075,"value":5910},{"type":3070,"tag":3440,"props":8910,"children":8911},{"style":3614},[8912],{"type":3075,"value":3977},{"type":3070,"tag":3440,"props":8914,"children":8915},{"style":3605},[8916],{"type":3075,"value":3982},{"type":3070,"tag":3440,"props":8918,"children":8919},{"class":3442,"line":3719},[8920,8924,8928,8932,8936,8940,8945,8949,8954,8958,8963,8967,8972,8976,8981,8985,8990,8994],{"type":3070,"tag":3440,"props":8921,"children":8922},{"style":3599},[8923],{"type":3075,"value":8857},{"type":3070,"tag":3440,"props":8925,"children":8926},{"style":3605},[8927],{"type":3075,"value":4569},{"type":3070,"tag":3440,"props":8929,"children":8930},{"style":3593},[8931],{"type":3075,"value":5901},{"type":3070,"tag":3440,"props":8933,"children":8934},{"style":3614},[8935],{"type":3075,"value":3602},{"type":3070,"tag":3440,"props":8937,"children":8938},{"style":3605},[8939],{"type":3075,"value":5910},{"type":3070,"tag":3440,"props":8941,"children":8942},{"style":3461},[8943],{"type":3075,"value":8944},"Last request at: ",{"type":3070,"tag":3440,"props":8946,"children":8947},{"style":3605},[8948],{"type":3075,"value":5920},{"type":3070,"tag":3440,"props":8950,"children":8951},{"style":3605},[8952],{"type":3075,"value":8953},"new",{"type":3070,"tag":3440,"props":8955,"children":8956},{"style":3593},[8957],{"type":3075,"value":6728},{"type":3070,"tag":3440,"props":8959,"children":8960},{"style":3599},[8961],{"type":3075,"value":8962},"(entry",{"type":3070,"tag":3440,"props":8964,"children":8965},{"style":3605},[8966],{"type":3075,"value":4569},{"type":3070,"tag":3440,"props":8968,"children":8969},{"style":3599},[8970],{"type":3075,"value":8971},"time)",{"type":3070,"tag":3440,"props":8973,"children":8974},{"style":3605},[8975],{"type":3075,"value":4569},{"type":3070,"tag":3440,"props":8977,"children":8978},{"style":3593},[8979],{"type":3075,"value":8980},"toISOString",{"type":3070,"tag":3440,"props":8982,"children":8983},{"style":3599},[8984],{"type":3075,"value":5531},{"type":3070,"tag":3440,"props":8986,"children":8987},{"style":3605},[8988],{"type":3075,"value":8989},"}`",{"type":3070,"tag":3440,"props":8991,"children":8992},{"style":3614},[8993],{"type":3075,"value":3977},{"type":3070,"tag":3440,"props":8995,"children":8996},{"style":3605},[8997],{"type":3075,"value":3982},{"type":3070,"tag":3440,"props":8999,"children":9000},{"class":3442,"line":3728},[9001],{"type":3070,"tag":3440,"props":9002,"children":9003},{"style":3605},[9004],{"type":3075,"value":4421},{"type":3070,"tag":3416,"props":9006,"children":9008},{"id":9007},"moduleoptions-type",[9009,9015],{"type":3070,"tag":3227,"props":9010,"children":9012},{"className":9011},[],[9013],{"type":3075,"value":9014},"ModuleOptions",{"type":3075,"value":8464},{"type":3070,"tag":3077,"props":9017,"children":9018},{},[9019],{"type":3075,"value":9020},"You can also import the module configuration type:",{"type":3070,"tag":3430,"props":9022,"children":9024},{"className":5340,"code":9023,"language":5342,"meta":3014,"style":3014},"import type { ModuleOptions } from \"nuxt-api-shield\";\n",[9025],{"type":3070,"tag":3227,"props":9026,"children":9027},{"__ignoreMap":3014},[9028],{"type":3070,"tag":3440,"props":9029,"children":9030},{"class":3442,"line":3042},[9031,9035,9039,9043,9048,9052,9056,9060,9064,9068],{"type":3070,"tag":3440,"props":9032,"children":9033},{"style":3582},[9034],{"type":3075,"value":5354},{"type":3070,"tag":3440,"props":9036,"children":9037},{"style":3582},[9038],{"type":3075,"value":6095},{"type":3070,"tag":3440,"props":9040,"children":9041},{"style":3605},[9042],{"type":3075,"value":5359},{"type":3070,"tag":3440,"props":9044,"children":9045},{"style":3599},[9046],{"type":3075,"value":9047}," ModuleOptions",{"type":3070,"tag":3440,"props":9049,"children":9050},{"style":3605},[9051],{"type":3075,"value":5369},{"type":3070,"tag":3440,"props":9053,"children":9054},{"style":3582},[9055],{"type":3075,"value":5374},{"type":3070,"tag":3440,"props":9057,"children":9058},{"style":3605},[9059],{"type":3075,"value":4148},{"type":3070,"tag":3440,"props":9061,"children":9062},{"style":3461},[9063],{"type":3075,"value":3011},{"type":3070,"tag":3440,"props":9065,"children":9066},{"style":3605},[9067],{"type":3075,"value":3632},{"type":3070,"tag":3440,"props":9069,"children":9070},{"style":3605},[9071],{"type":3075,"value":3982},{"type":3070,"tag":3153,"props":9073,"children":9075},{"id":9074},"per-route-rate-limiting",[9076],{"type":3075,"value":9077},"Per-Route Rate Limiting",{"type":3070,"tag":3077,"props":9079,"children":9080},{},[9081,9086,9088,9093],{"type":3070,"tag":3227,"props":9082,"children":9084},{"className":9083},[],[9085],{"type":3075,"value":3011},{"type":3075,"value":9087}," supports ",{"type":3070,"tag":3165,"props":9089,"children":9090},{},[9091],{"type":3075,"value":9092},"per-route rate limiting",{"type":3075,"value":9094},", allowing you to define custom limits for specific API endpoints while keeping a global default configuration for all other routes.",{"type":3070,"tag":3077,"props":9096,"children":9097},{},[9098,9100,9106,9107,9113,9115,9121],{"type":3075,"value":9099},"This is useful when certain endpoints (such as ",{"type":3070,"tag":3227,"props":9101,"children":9103},{"className":9102},[],[9104],{"type":3075,"value":9105},"\u002Fapi\u002Flogin",{"type":3075,"value":3392},{"type":3070,"tag":3227,"props":9108,"children":9110},{"className":9109},[],[9111],{"type":3075,"value":9112},"\u002Fapi\u002Fauth",{"type":3075,"value":9114},", or ",{"type":3070,"tag":3227,"props":9116,"children":9118},{"className":9117},[],[9119],{"type":3075,"value":9120},"\u002Fapi\u002Fpayment",{"type":3075,"value":9122},") require stricter protection.",{"type":3070,"tag":9124,"props":9125,"children":9126},"hr",{},[],{"type":3070,"tag":3416,"props":9128,"children":9130},{"id":9129},"configuration-example",[9131],{"type":3075,"value":9132},"Configuration Example",{"type":3070,"tag":3077,"props":9134,"children":9135},{},[9136,9137,9143],{"type":3075,"value":4440},{"type":3070,"tag":3227,"props":9138,"children":9140},{"className":9139},[],[9141],{"type":3075,"value":9142},"routes",{"type":3075,"value":9144}," option accepts a mixed array of strings (exact matches) and objects (custom limits or patterns).",{"type":3070,"tag":3430,"props":9146,"children":9148},{"className":5340,"code":9147,"language":5342,"meta":3014,"style":3014},"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",[9149],{"type":3070,"tag":3227,"props":9150,"children":9151},{"__ignoreMap":3014},[9152,9175,9210,9217,9232,9248,9268,9288,9308,9315,9322,9339,9347,9367,9374,9382,9390,9419,9440,9461,9469,9477,9484,9492,9499,9527,9547,9566,9582,9589,9601,9608],{"type":3070,"tag":3440,"props":9153,"children":9154},{"class":3442,"line":3042},[9155,9159,9163,9167,9171],{"type":3070,"tag":3440,"props":9156,"children":9157},{"style":3582},[9158],{"type":3075,"value":3585},{"type":3070,"tag":3440,"props":9160,"children":9161},{"style":3582},[9162],{"type":3075,"value":3590},{"type":3070,"tag":3440,"props":9164,"children":9165},{"style":3593},[9166],{"type":3075,"value":3596},{"type":3070,"tag":3440,"props":9168,"children":9169},{"style":3599},[9170],{"type":3075,"value":3602},{"type":3070,"tag":3440,"props":9172,"children":9173},{"style":3605},[9174],{"type":3075,"value":3608},{"type":3070,"tag":3440,"props":9176,"children":9177},{"class":3442,"line":3038},[9178,9182,9186,9190,9194,9198,9202,9206],{"type":3070,"tag":3440,"props":9179,"children":9180},{"style":3614},[9181],{"type":3075,"value":3617},{"type":3070,"tag":3440,"props":9183,"children":9184},{"style":3605},[9185],{"type":3075,"value":3622},{"type":3070,"tag":3440,"props":9187,"children":9188},{"style":3599},[9189],{"type":3075,"value":3627},{"type":3070,"tag":3440,"props":9191,"children":9192},{"style":3605},[9193],{"type":3075,"value":3632},{"type":3070,"tag":3440,"props":9195,"children":9196},{"style":3461},[9197],{"type":3075,"value":3011},{"type":3070,"tag":3440,"props":9199,"children":9200},{"style":3605},[9201],{"type":3075,"value":3632},{"type":3070,"tag":3440,"props":9203,"children":9204},{"style":3599},[9205],{"type":3075,"value":3645},{"type":3070,"tag":3440,"props":9207,"children":9208},{"style":3605},[9209],{"type":3075,"value":3650},{"type":3070,"tag":3440,"props":9211,"children":9212},{"class":3442,"line":3472},[9213],{"type":3070,"tag":3440,"props":9214,"children":9215},{"emptyLinePlaceholder":1200},[9216],{"type":3075,"value":3478},{"type":3070,"tag":3440,"props":9218,"children":9219},{"class":3442,"line":3481},[9220,9224,9228],{"type":3070,"tag":3440,"props":9221,"children":9222},{"style":3614},[9223],{"type":3075,"value":3658},{"type":3070,"tag":3440,"props":9225,"children":9226},{"style":3605},[9227],{"type":3075,"value":3622},{"type":3070,"tag":3440,"props":9229,"children":9230},{"style":3605},[9231],{"type":3075,"value":3667},{"type":3070,"tag":3440,"props":9233,"children":9234},{"class":3442,"line":3034},[9235,9240,9244],{"type":3070,"tag":3440,"props":9236,"children":9237},{"style":3614},[9238],{"type":3075,"value":9239},"    limit",{"type":3070,"tag":3440,"props":9241,"children":9242},{"style":3605},[9243],{"type":3075,"value":3622},{"type":3070,"tag":3440,"props":9245,"children":9246},{"style":3605},[9247],{"type":3075,"value":3667},{"type":3070,"tag":3440,"props":9249,"children":9250},{"class":3442,"line":3506},[9251,9256,9260,9264],{"type":3070,"tag":3440,"props":9252,"children":9253},{"style":3614},[9254],{"type":3075,"value":9255},"      max",{"type":3070,"tag":3440,"props":9257,"children":9258},{"style":3605},[9259],{"type":3075,"value":3622},{"type":3070,"tag":3440,"props":9261,"children":9262},{"style":3880},[9263],{"type":3075,"value":4047},{"type":3070,"tag":3440,"props":9265,"children":9266},{"style":3605},[9267],{"type":3075,"value":3650},{"type":3070,"tag":3440,"props":9269,"children":9270},{"class":3442,"line":3514},[9271,9276,9280,9284],{"type":3070,"tag":3440,"props":9272,"children":9273},{"style":3614},[9274],{"type":3075,"value":9275},"      duration",{"type":3070,"tag":3440,"props":9277,"children":9278},{"style":3605},[9279],{"type":3075,"value":3622},{"type":3070,"tag":3440,"props":9281,"children":9282},{"style":3880},[9283],{"type":3075,"value":4068},{"type":3070,"tag":3440,"props":9285,"children":9286},{"style":3605},[9287],{"type":3075,"value":3650},{"type":3070,"tag":3440,"props":9289,"children":9290},{"class":3442,"line":3059},[9291,9296,9300,9304],{"type":3070,"tag":3440,"props":9292,"children":9293},{"style":3614},[9294],{"type":3075,"value":9295},"      ban",{"type":3070,"tag":3440,"props":9297,"children":9298},{"style":3605},[9299],{"type":3075,"value":3622},{"type":3070,"tag":3440,"props":9301,"children":9302},{"style":3880},[9303],{"type":3075,"value":4094},{"type":3070,"tag":3440,"props":9305,"children":9306},{"style":3605},[9307],{"type":3075,"value":3650},{"type":3070,"tag":3440,"props":9309,"children":9310},{"class":3442,"line":3710},[9311],{"type":3070,"tag":3440,"props":9312,"children":9313},{"style":3605},[9314],{"type":3075,"value":3716},{"type":3070,"tag":3440,"props":9316,"children":9317},{"class":3442,"line":3719},[9318],{"type":3070,"tag":3440,"props":9319,"children":9320},{"emptyLinePlaceholder":1200},[9321],{"type":3075,"value":3478},{"type":3070,"tag":3440,"props":9323,"children":9324},{"class":3442,"line":3728},[9325,9330,9334],{"type":3070,"tag":3440,"props":9326,"children":9327},{"style":3614},[9328],{"type":3075,"value":9329},"    routes",{"type":3070,"tag":3440,"props":9331,"children":9332},{"style":3605},[9333],{"type":3075,"value":3622},{"type":3070,"tag":3440,"props":9335,"children":9336},{"style":3599},[9337],{"type":3075,"value":9338}," [\n",{"type":3070,"tag":3440,"props":9340,"children":9341},{"class":3442,"line":3737},[9342],{"type":3070,"tag":3440,"props":9343,"children":9344},{"style":3446},[9345],{"type":3075,"value":9346},"      \u002F\u002F 1. String: uses the global default limit (exact match)\n",{"type":3070,"tag":3440,"props":9348,"children":9349},{"class":3442,"line":3746},[9350,9354,9359,9363],{"type":3070,"tag":3440,"props":9351,"children":9352},{"style":3605},[9353],{"type":3075,"value":4675},{"type":3070,"tag":3440,"props":9355,"children":9356},{"style":3461},[9357],{"type":3075,"value":9358},"\u002Fapi\u002Fexample",{"type":3070,"tag":3440,"props":9360,"children":9361},{"style":3605},[9362],{"type":3075,"value":3632},{"type":3070,"tag":3440,"props":9364,"children":9365},{"style":3605},[9366],{"type":3075,"value":3650},{"type":3070,"tag":3440,"props":9368,"children":9369},{"class":3442,"line":3755},[9370],{"type":3070,"tag":3440,"props":9371,"children":9372},{"emptyLinePlaceholder":1200},[9373],{"type":3075,"value":3478},{"type":3070,"tag":3440,"props":9375,"children":9376},{"class":3442,"line":3764},[9377],{"type":3070,"tag":3440,"props":9378,"children":9379},{"style":3446},[9380],{"type":3075,"value":9381},"      \u002F\u002F 2. Object: custom rate limit for a specific route (exact match)\n",{"type":3070,"tag":3440,"props":9383,"children":9384},{"class":3442,"line":3773},[9385],{"type":3070,"tag":3440,"props":9386,"children":9387},{"style":3605},[9388],{"type":3075,"value":9389},"      {\n",{"type":3070,"tag":3440,"props":9391,"children":9392},{"class":3442,"line":3782},[9393,9398,9402,9406,9411,9415],{"type":3070,"tag":3440,"props":9394,"children":9395},{"style":3614},[9396],{"type":3075,"value":9397},"        path",{"type":3070,"tag":3440,"props":9399,"children":9400},{"style":3605},[9401],{"type":3075,"value":3622},{"type":3070,"tag":3440,"props":9403,"children":9404},{"style":3605},[9405],{"type":3075,"value":4148},{"type":3070,"tag":3440,"props":9407,"children":9408},{"style":3461},[9409],{"type":3075,"value":9410},"\u002Fapi\u002Fexample-per-route",{"type":3070,"tag":3440,"props":9412,"children":9413},{"style":3605},[9414],{"type":3075,"value":3632},{"type":3070,"tag":3440,"props":9416,"children":9417},{"style":3605},[9418],{"type":3075,"value":3650},{"type":3070,"tag":3440,"props":9420,"children":9421},{"class":3442,"line":3790},[9422,9427,9431,9436],{"type":3070,"tag":3440,"props":9423,"children":9424},{"style":3614},[9425],{"type":3075,"value":9426},"        max",{"type":3070,"tag":3440,"props":9428,"children":9429},{"style":3605},[9430],{"type":3075,"value":3622},{"type":3070,"tag":3440,"props":9432,"children":9433},{"style":3880},[9434],{"type":3075,"value":9435}," 5",{"type":3070,"tag":3440,"props":9437,"children":9438},{"style":3605},[9439],{"type":3075,"value":3650},{"type":3070,"tag":3440,"props":9441,"children":9442},{"class":3442,"line":3799},[9443,9448,9452,9457],{"type":3070,"tag":3440,"props":9444,"children":9445},{"style":3614},[9446],{"type":3075,"value":9447},"        duration",{"type":3070,"tag":3440,"props":9449,"children":9450},{"style":3605},[9451],{"type":3075,"value":3622},{"type":3070,"tag":3440,"props":9453,"children":9454},{"style":3880},[9455],{"type":3075,"value":9456}," 10",{"type":3070,"tag":3440,"props":9458,"children":9459},{"style":3605},[9460],{"type":3075,"value":3650},{"type":3070,"tag":3440,"props":9462,"children":9463},{"class":3442,"line":3808},[9464],{"type":3070,"tag":3440,"props":9465,"children":9466},{"style":3446},[9467],{"type":3075,"value":9468},"        \u002F\u002F \"ban\" can also be overridden per route\n",{"type":3070,"tag":3440,"props":9470,"children":9471},{"class":3442,"line":3822},[9472],{"type":3070,"tag":3440,"props":9473,"children":9474},{"style":3605},[9475],{"type":3075,"value":9476},"      },\n",{"type":3070,"tag":3440,"props":9478,"children":9479},{"class":3442,"line":3850},[9480],{"type":3070,"tag":3440,"props":9481,"children":9482},{"emptyLinePlaceholder":1200},[9483],{"type":3075,"value":3478},{"type":3070,"tag":3440,"props":9485,"children":9486},{"class":3442,"line":3858},[9487],{"type":3070,"tag":3440,"props":9488,"children":9489},{"style":3446},[9490],{"type":3075,"value":9491},"      \u002F\u002F 3. Object: Wildcard pattern\n",{"type":3070,"tag":3440,"props":9493,"children":9494},{"class":3442,"line":3867},[9495],{"type":3070,"tag":3440,"props":9496,"children":9497},{"style":3605},[9498],{"type":3075,"value":9389},{"type":3070,"tag":3440,"props":9500,"children":9501},{"class":3442,"line":3895},[9502,9506,9510,9514,9519,9523],{"type":3070,"tag":3440,"props":9503,"children":9504},{"style":3614},[9505],{"type":3075,"value":9397},{"type":3070,"tag":3440,"props":9507,"children":9508},{"style":3605},[9509],{"type":3075,"value":3622},{"type":3070,"tag":3440,"props":9511,"children":9512},{"style":3605},[9513],{"type":3075,"value":4148},{"type":3070,"tag":3440,"props":9515,"children":9516},{"style":3461},[9517],{"type":3075,"value":9518},"\u002Fapi\u002Fusers\u002F*\u002Fprofile",{"type":3070,"tag":3440,"props":9520,"children":9521},{"style":3605},[9522],{"type":3075,"value":3632},{"type":3070,"tag":3440,"props":9524,"children":9525},{"style":3605},[9526],{"type":3075,"value":3650},{"type":3070,"tag":3440,"props":9528,"children":9529},{"class":3442,"line":3912},[9530,9535,9539,9543],{"type":3070,"tag":3440,"props":9531,"children":9532},{"style":3614},[9533],{"type":3075,"value":9534},"        pattern",{"type":3070,"tag":3440,"props":9536,"children":9537},{"style":3605},[9538],{"type":3075,"value":3622},{"type":3070,"tag":3440,"props":9540,"children":9541},{"style":3934},[9542],{"type":3075,"value":4127},{"type":3070,"tag":3440,"props":9544,"children":9545},{"style":3605},[9546],{"type":3075,"value":3650},{"type":3070,"tag":3440,"props":9548,"children":9549},{"class":3442,"line":3921},[9550,9554,9558,9562],{"type":3070,"tag":3440,"props":9551,"children":9552},{"style":3614},[9553],{"type":3075,"value":9426},{"type":3070,"tag":3440,"props":9555,"children":9556},{"style":3605},[9557],{"type":3075,"value":3622},{"type":3070,"tag":3440,"props":9559,"children":9560},{"style":3880},[9561],{"type":3075,"value":9456},{"type":3070,"tag":3440,"props":9563,"children":9564},{"style":3605},[9565],{"type":3075,"value":3650},{"type":3070,"tag":3440,"props":9567,"children":9568},{"class":3442,"line":3949},[9569,9573,9577],{"type":3070,"tag":3440,"props":9570,"children":9571},{"style":3614},[9572],{"type":3075,"value":9447},{"type":3070,"tag":3440,"props":9574,"children":9575},{"style":3605},[9576],{"type":3075,"value":3622},{"type":3070,"tag":3440,"props":9578,"children":9579},{"style":3880},[9580],{"type":3075,"value":9581}," 60\n",{"type":3070,"tag":3440,"props":9583,"children":9584},{"class":3442,"line":3957},[9585],{"type":3070,"tag":3440,"props":9586,"children":9587},{"style":3605},[9588],{"type":3075,"value":4742},{"type":3070,"tag":3440,"props":9590,"children":9591},{"class":3442,"line":3966},[9592,9597],{"type":3070,"tag":3440,"props":9593,"children":9594},{"style":3599},[9595],{"type":3075,"value":9596},"    ]",{"type":3070,"tag":3440,"props":9598,"children":9599},{"style":3605},[9600],{"type":3075,"value":3650},{"type":3070,"tag":3440,"props":9602,"children":9603},{"class":3442,"line":6892},[9604],{"type":3070,"tag":3440,"props":9605,"children":9606},{"style":3605},[9607],{"type":3075,"value":3963},{"type":3070,"tag":3440,"props":9609,"children":9610},{"class":3442,"line":6901},[9611,9615,9619],{"type":3070,"tag":3440,"props":9612,"children":9613},{"style":3605},[9614],{"type":3075,"value":3972},{"type":3070,"tag":3440,"props":9616,"children":9617},{"style":3599},[9618],{"type":3075,"value":3977},{"type":3070,"tag":3440,"props":9620,"children":9621},{"style":3605},[9622],{"type":3075,"value":3982},{"type":3070,"tag":3416,"props":9624,"children":9626},{"id":9625},"wildcard-route-support",[9627],{"type":3075,"value":9628},"Wildcard Route Support",{"type":3070,"tag":3077,"props":9630,"children":9631},{},[9632,9634,9640],{"type":3075,"value":9633},"Wildcard patterns allow you to apply the same limits to groups of related API endpoints. Enable them by setting ",{"type":3070,"tag":3227,"props":9635,"children":9637},{"className":9636},[],[9638],{"type":3075,"value":9639},"pattern: true",{"type":3075,"value":9641}," in your route configuration.",{"type":3070,"tag":5306,"props":9643,"children":9645},{"id":9644},"wildcard-pattern-syntax",[9646],{"type":3075,"value":9647},"Wildcard Pattern Syntax",{"type":3070,"tag":3127,"props":9649,"children":9650},{},[9651,9695],{"type":3070,"tag":3131,"props":9652,"children":9653},{},[9654,9666,9668],{"type":3070,"tag":3165,"props":9655,"children":9656},{},[9657,9659,9665],{"type":3075,"value":9658},"Single-Segment Wildcard (",{"type":3070,"tag":3227,"props":9660,"children":9662},{"className":9661},[],[9663],{"type":3075,"value":9664},"*",{"type":3075,"value":3977},{"type":3075,"value":9667},": Matches exactly one path segment.\n",{"type":3070,"tag":3127,"props":9669,"children":9670},{},[9671],{"type":3070,"tag":3131,"props":9672,"children":9673},{},[9674,9679,9681,9687,9688,9694],{"type":3070,"tag":3227,"props":9675,"children":9677},{"className":9676},[],[9678],{"type":3075,"value":9518},{"type":3075,"value":9680}," matches ",{"type":3070,"tag":3227,"props":9682,"children":9684},{"className":9683},[],[9685],{"type":3075,"value":9686},"\u002Fapi\u002Fusers\u002F123\u002Fprofile",{"type":3075,"value":7361},{"type":3070,"tag":3227,"props":9689,"children":9691},{"className":9690},[],[9692],{"type":3075,"value":9693},"\u002Fapi\u002Fusers\u002Fadmin\u002Fprofile",{"type":3075,"value":4569},{"type":3070,"tag":3131,"props":9696,"children":9697},{},[9698,9710,9712],{"type":3070,"tag":3165,"props":9699,"children":9700},{},[9701,9703,9709],{"type":3075,"value":9702},"Multi-Segment Wildcard (",{"type":3070,"tag":3227,"props":9704,"children":9706},{"className":9705},[],[9707],{"type":3075,"value":9708},"**",{"type":3075,"value":3977},{"type":3075,"value":9711},": Matches zero or more path segments.\n",{"type":3070,"tag":3127,"props":9713,"children":9714},{},[9715],{"type":3070,"tag":3131,"props":9716,"children":9717},{},[9718,9724,9725,9731,9732,9738],{"type":3070,"tag":3227,"props":9719,"children":9721},{"className":9720},[],[9722],{"type":3075,"value":9723},"\u002Fapi\u002Freports\u002F**\u002Fsummary",{"type":3075,"value":9680},{"type":3070,"tag":3227,"props":9726,"children":9728},{"className":9727},[],[9729],{"type":3075,"value":9730},"\u002Fapi\u002Freports\u002Fmonthly\u002F2023\u002Fsummary",{"type":3075,"value":7361},{"type":3070,"tag":3227,"props":9733,"children":9735},{"className":9734},[],[9736],{"type":3075,"value":9737},"\u002Fapi\u002Freports\u002Fsummary",{"type":3075,"value":4569},{"type":3070,"tag":5306,"props":9740,"children":9742},{"id":9741},"pattern-precedence",[9743],{"type":3075,"value":9744},"Pattern Precedence",{"type":3070,"tag":9746,"props":9747,"children":9748},"ol",{},[9749,9759,9769],{"type":3070,"tag":3131,"props":9750,"children":9751},{},[9752,9757],{"type":3070,"tag":3165,"props":9753,"children":9754},{},[9755],{"type":3075,"value":9756},"Exact matches",{"type":3075,"value":9758}," always take precedence over wildcard patterns.",{"type":3070,"tag":3131,"props":9760,"children":9761},{},[9762,9767],{"type":3070,"tag":3165,"props":9763,"children":9764},{},[9765],{"type":3075,"value":9766},"More specific wildcards",{"type":3075,"value":9768}," take precedence over less specific ones.",{"type":3070,"tag":3131,"props":9770,"children":9771},{},[9772],{"type":3075,"value":9773},"When multiple wildcard patterns match, the most specific one is used.",{"type":3070,"tag":5306,"props":9775,"children":9777},{"id":9776},"important-notes",[9778],{"type":3075,"value":9779},"Important Notes",{"type":3070,"tag":3127,"props":9781,"children":9782},{},[9783,9793],{"type":3070,"tag":3131,"props":9784,"children":9785},{},[9786,9791],{"type":3070,"tag":3165,"props":9787,"children":9788},{},[9789],{"type":3075,"value":9790},"Shared Rate Limits:",{"type":3075,"value":9792}," All requests that match the same wildcard pattern share the same rate limit counter.",{"type":3070,"tag":3131,"props":9794,"children":9795},{},[9796,9801,9803,9809,9810,9816],{"type":3070,"tag":3165,"props":9797,"children":9798},{},[9799],{"type":3075,"value":9800},"Security:",{"type":3075,"value":9802}," Broad or dangerous patterns like ",{"type":3070,"tag":3227,"props":9804,"children":9806},{"className":9805},[],[9807],{"type":3075,"value":9808},"\u002F**",{"type":3075,"value":7361},{"type":3070,"tag":3227,"props":9811,"children":9813},{"className":9812},[],[9814],{"type":3075,"value":9815},"\u002F*",{"type":3075,"value":9817}," are automatically rejected to prevent accidental global blocking.",{"type":3070,"tag":3153,"props":9819,"children":9821},{"id":9820},"skipping-routes",[9822],{"type":3075,"value":9823},"Skipping Routes",{"type":3070,"tag":3077,"props":9825,"children":9826},{},[9827,9828,9834,9836,9841],{"type":3075,"value":4440},{"type":3070,"tag":3227,"props":9829,"children":9831},{"className":9830},[],[9832],{"type":3075,"value":9833},"skipRoutes",{"type":3075,"value":9835}," 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":3070,"tag":3227,"props":9837,"children":9839},{"className":9838},[],[9840],{"type":3075,"value":9142},{"type":3075,"value":9842}," array.",{"type":3070,"tag":3077,"props":9844,"children":9845},{},[9846],{"type":3075,"value":9847},"This is useful for health checks, webhook endpoints, monitoring probes, or internal status routes that should always respond regardless of traffic.",{"type":3070,"tag":3416,"props":9849,"children":9851},{"id":9850},"configuration-example-1",[9852],{"type":3075,"value":9132},{"type":3070,"tag":3430,"props":9854,"children":9856},{"className":5340,"code":9855,"language":5342,"meta":3014,"style":3014},"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",[9857],{"type":3070,"tag":3227,"props":9858,"children":9859},{"__ignoreMap":3014},[9860,9883,9918,9925,9940,9955,9974,9993,10012,10019,10026,10041,10066,10091,10116,10127,10134],{"type":3070,"tag":3440,"props":9861,"children":9862},{"class":3442,"line":3042},[9863,9867,9871,9875,9879],{"type":3070,"tag":3440,"props":9864,"children":9865},{"style":3582},[9866],{"type":3075,"value":3585},{"type":3070,"tag":3440,"props":9868,"children":9869},{"style":3582},[9870],{"type":3075,"value":3590},{"type":3070,"tag":3440,"props":9872,"children":9873},{"style":3593},[9874],{"type":3075,"value":3596},{"type":3070,"tag":3440,"props":9876,"children":9877},{"style":3599},[9878],{"type":3075,"value":3602},{"type":3070,"tag":3440,"props":9880,"children":9881},{"style":3605},[9882],{"type":3075,"value":3608},{"type":3070,"tag":3440,"props":9884,"children":9885},{"class":3442,"line":3038},[9886,9890,9894,9898,9902,9906,9910,9914],{"type":3070,"tag":3440,"props":9887,"children":9888},{"style":3614},[9889],{"type":3075,"value":3617},{"type":3070,"tag":3440,"props":9891,"children":9892},{"style":3605},[9893],{"type":3075,"value":3622},{"type":3070,"tag":3440,"props":9895,"children":9896},{"style":3599},[9897],{"type":3075,"value":3627},{"type":3070,"tag":3440,"props":9899,"children":9900},{"style":3605},[9901],{"type":3075,"value":3632},{"type":3070,"tag":3440,"props":9903,"children":9904},{"style":3461},[9905],{"type":3075,"value":3011},{"type":3070,"tag":3440,"props":9907,"children":9908},{"style":3605},[9909],{"type":3075,"value":3632},{"type":3070,"tag":3440,"props":9911,"children":9912},{"style":3599},[9913],{"type":3075,"value":3645},{"type":3070,"tag":3440,"props":9915,"children":9916},{"style":3605},[9917],{"type":3075,"value":3650},{"type":3070,"tag":3440,"props":9919,"children":9920},{"class":3442,"line":3472},[9921],{"type":3070,"tag":3440,"props":9922,"children":9923},{"emptyLinePlaceholder":1200},[9924],{"type":3075,"value":3478},{"type":3070,"tag":3440,"props":9926,"children":9927},{"class":3442,"line":3481},[9928,9932,9936],{"type":3070,"tag":3440,"props":9929,"children":9930},{"style":3614},[9931],{"type":3075,"value":3658},{"type":3070,"tag":3440,"props":9933,"children":9934},{"style":3605},[9935],{"type":3075,"value":3622},{"type":3070,"tag":3440,"props":9937,"children":9938},{"style":3605},[9939],{"type":3075,"value":3667},{"type":3070,"tag":3440,"props":9941,"children":9942},{"class":3442,"line":3034},[9943,9947,9951],{"type":3070,"tag":3440,"props":9944,"children":9945},{"style":3614},[9946],{"type":3075,"value":9239},{"type":3070,"tag":3440,"props":9948,"children":9949},{"style":3605},[9950],{"type":3075,"value":3622},{"type":3070,"tag":3440,"props":9952,"children":9953},{"style":3605},[9954],{"type":3075,"value":3667},{"type":3070,"tag":3440,"props":9956,"children":9957},{"class":3442,"line":3506},[9958,9962,9966,9970],{"type":3070,"tag":3440,"props":9959,"children":9960},{"style":3614},[9961],{"type":3075,"value":9255},{"type":3070,"tag":3440,"props":9963,"children":9964},{"style":3605},[9965],{"type":3075,"value":3622},{"type":3070,"tag":3440,"props":9967,"children":9968},{"style":3880},[9969],{"type":3075,"value":4047},{"type":3070,"tag":3440,"props":9971,"children":9972},{"style":3605},[9973],{"type":3075,"value":3650},{"type":3070,"tag":3440,"props":9975,"children":9976},{"class":3442,"line":3514},[9977,9981,9985,9989],{"type":3070,"tag":3440,"props":9978,"children":9979},{"style":3614},[9980],{"type":3075,"value":9275},{"type":3070,"tag":3440,"props":9982,"children":9983},{"style":3605},[9984],{"type":3075,"value":3622},{"type":3070,"tag":3440,"props":9986,"children":9987},{"style":3880},[9988],{"type":3075,"value":4068},{"type":3070,"tag":3440,"props":9990,"children":9991},{"style":3605},[9992],{"type":3075,"value":3650},{"type":3070,"tag":3440,"props":9994,"children":9995},{"class":3442,"line":3059},[9996,10000,10004,10008],{"type":3070,"tag":3440,"props":9997,"children":9998},{"style":3614},[9999],{"type":3075,"value":9295},{"type":3070,"tag":3440,"props":10001,"children":10002},{"style":3605},[10003],{"type":3075,"value":3622},{"type":3070,"tag":3440,"props":10005,"children":10006},{"style":3880},[10007],{"type":3075,"value":4094},{"type":3070,"tag":3440,"props":10009,"children":10010},{"style":3605},[10011],{"type":3075,"value":3650},{"type":3070,"tag":3440,"props":10013,"children":10014},{"class":3442,"line":3710},[10015],{"type":3070,"tag":3440,"props":10016,"children":10017},{"style":3605},[10018],{"type":3075,"value":3716},{"type":3070,"tag":3440,"props":10020,"children":10021},{"class":3442,"line":3719},[10022],{"type":3070,"tag":3440,"props":10023,"children":10024},{"emptyLinePlaceholder":1200},[10025],{"type":3075,"value":3478},{"type":3070,"tag":3440,"props":10027,"children":10028},{"class":3442,"line":3728},[10029,10033,10037],{"type":3070,"tag":3440,"props":10030,"children":10031},{"style":3614},[10032],{"type":3075,"value":3828},{"type":3070,"tag":3440,"props":10034,"children":10035},{"style":3605},[10036],{"type":3075,"value":3622},{"type":3070,"tag":3440,"props":10038,"children":10039},{"style":3599},[10040],{"type":3075,"value":9338},{"type":3070,"tag":3440,"props":10042,"children":10043},{"class":3442,"line":3737},[10044,10048,10053,10057,10061],{"type":3070,"tag":3440,"props":10045,"children":10046},{"style":3605},[10047],{"type":3075,"value":4675},{"type":3070,"tag":3440,"props":10049,"children":10050},{"style":3461},[10051],{"type":3075,"value":10052},"\u002Fapi\u002Fhealth",{"type":3070,"tag":3440,"props":10054,"children":10055},{"style":3605},[10056],{"type":3075,"value":3632},{"type":3070,"tag":3440,"props":10058,"children":10059},{"style":3605},[10060],{"type":3075,"value":3842},{"type":3070,"tag":3440,"props":10062,"children":10063},{"style":3446},[10064],{"type":3075,"value":10065},"          \u002F\u002F exact match\n",{"type":3070,"tag":3440,"props":10067,"children":10068},{"class":3442,"line":3746},[10069,10073,10078,10082,10086],{"type":3070,"tag":3440,"props":10070,"children":10071},{"style":3605},[10072],{"type":3075,"value":4675},{"type":3070,"tag":3440,"props":10074,"children":10075},{"style":3461},[10076],{"type":3075,"value":10077},"\u002Fapi\u002F_nuxt\u002F**",{"type":3070,"tag":3440,"props":10079,"children":10080},{"style":3605},[10081],{"type":3075,"value":3632},{"type":3070,"tag":3440,"props":10083,"children":10084},{"style":3605},[10085],{"type":3075,"value":3842},{"type":3070,"tag":3440,"props":10087,"children":10088},{"style":3446},[10089],{"type":3075,"value":10090},"        \u002F\u002F multi-segment wildcard\n",{"type":3070,"tag":3440,"props":10092,"children":10093},{"class":3442,"line":3755},[10094,10098,10103,10107,10111],{"type":3070,"tag":3440,"props":10095,"children":10096},{"style":3605},[10097],{"type":3075,"value":4675},{"type":3070,"tag":3440,"props":10099,"children":10100},{"style":3461},[10101],{"type":3075,"value":10102},"\u002Fapi\u002Fwebhooks\u002Fstripe",{"type":3070,"tag":3440,"props":10104,"children":10105},{"style":3605},[10106],{"type":3075,"value":3632},{"type":3070,"tag":3440,"props":10108,"children":10109},{"style":3605},[10110],{"type":3075,"value":3842},{"type":3070,"tag":3440,"props":10112,"children":10113},{"style":3446},[10114],{"type":3075,"value":10115}," \u002F\u002F exact match\n",{"type":3070,"tag":3440,"props":10117,"children":10118},{"class":3442,"line":3764},[10119,10123],{"type":3070,"tag":3440,"props":10120,"children":10121},{"style":3599},[10122],{"type":3075,"value":9596},{"type":3070,"tag":3440,"props":10124,"children":10125},{"style":3605},[10126],{"type":3075,"value":3650},{"type":3070,"tag":3440,"props":10128,"children":10129},{"class":3442,"line":3773},[10130],{"type":3070,"tag":3440,"props":10131,"children":10132},{"style":3605},[10133],{"type":3075,"value":3963},{"type":3070,"tag":3440,"props":10135,"children":10136},{"class":3442,"line":3782},[10137,10141],{"type":3070,"tag":3440,"props":10138,"children":10139},{"style":3605},[10140],{"type":3075,"value":3972},{"type":3070,"tag":3440,"props":10142,"children":10143},{"style":3599},[10144],{"type":3075,"value":8108},{"type":3070,"tag":3416,"props":10146,"children":10148},{"id":10147},"how-it-works",[10149],{"type":3075,"value":10150},"How It Works",{"type":3070,"tag":3127,"props":10152,"children":10153},{},[10154,10166,10178],{"type":3070,"tag":3131,"props":10155,"children":10156},{},[10157,10159,10164],{"type":3075,"value":10158},"Routes in ",{"type":3070,"tag":3227,"props":10160,"children":10162},{"className":10161},[],[10163],{"type":3075,"value":9833},{"type":3075,"value":10165}," bypass the middleware entirely — no ban check, no rate limit counter, no log entry.",{"type":3070,"tag":3131,"props":10167,"children":10168},{},[10169,10171,10176],{"type":3075,"value":10170},"The rest of your API routes (those matching the global defaults or the ",{"type":3070,"tag":3227,"props":10172,"children":10174},{"className":10173},[],[10175],{"type":3075,"value":9142},{"type":3075,"value":10177}," option) continue to be rate limited normally.",{"type":3070,"tag":3131,"props":10179,"children":10180},{},[10181,10183,10188,10190,10195],{"type":3075,"value":10182},"Supports the same wildcard syntax as per-route patterns: ",{"type":3070,"tag":3227,"props":10184,"children":10186},{"className":10185},[],[10187],{"type":3075,"value":9664},{"type":3075,"value":10189}," for single segment, ",{"type":3070,"tag":3227,"props":10191,"children":10193},{"className":10192},[],[10194],{"type":3075,"value":9708},{"type":3075,"value":10196}," for multi-segment.",{"type":3070,"tag":3153,"props":10198,"children":10200},{"id":10199},"important-considerations",[10201],{"type":3075,"value":10202},"Important Considerations",{"type":3070,"tag":3416,"props":10204,"children":10206},{"id":10205},"data-privacy-ip-address-storage",[10207],{"type":3075,"value":10208},"Data Privacy (IP Address Storage)",{"type":3070,"tag":3077,"props":10210,"children":10211},{},[10212,10217],{"type":3070,"tag":3227,"props":10213,"children":10215},{"className":10214},[],[10216],{"type":3075,"value":3011},{"type":3075,"value":10218}," 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":3070,"tag":3127,"props":10220,"children":10221},{},[10222,10263,10273],{"type":3070,"tag":3131,"props":10223,"children":10224},{},[10225,10230],{"type":3070,"tag":3165,"props":10226,"children":10227},{},[10228],{"type":3075,"value":10229},"Data Stored:",{"type":3070,"tag":3127,"props":10231,"children":10232},{},[10233,10252],{"type":3070,"tag":3131,"props":10234,"children":10235},{},[10236,10242,10244,10250],{"type":3070,"tag":3227,"props":10237,"children":10239},{"className":10238},[],[10240],{"type":3075,"value":10241},"ip:\u003CIP_ADDRESS>",{"type":3075,"value":10243},": Stores ",{"type":3070,"tag":3227,"props":10245,"children":10247},{"className":10246},[],[10248],{"type":3075,"value":10249},"{ count: number, time: number }",{"type":3075,"value":10251}," for tracking request rates.",{"type":3070,"tag":3131,"props":10253,"children":10254},{},[10255,10261],{"type":3070,"tag":3227,"props":10256,"children":10258},{"className":10257},[],[10259],{"type":3075,"value":10260},"ban:\u003CIP_ADDRESS>",{"type":3075,"value":10262},": Stores a timestamp indicating when a ban on an IP address expires.",{"type":3070,"tag":3131,"props":10264,"children":10265},{},[10266,10271],{"type":3070,"tag":3165,"props":10267,"children":10268},{},[10269],{"type":3075,"value":10270},"Compliance:",{"type":3075,"value":10272}," 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":3070,"tag":3131,"props":10274,"children":10275},{},[10276,10281],{"type":3070,"tag":3165,"props":10277,"children":10278},{},[10279],{"type":3075,"value":10280},"Data Retention:",{"type":3070,"tag":3127,"props":10282,"children":10283},{},[10284,10296],{"type":3070,"tag":3131,"props":10285,"children":10286},{},[10287,10289,10294],{"type":3075,"value":10288},"Ban entries are cleaned up by the ",{"type":3070,"tag":3227,"props":10290,"children":10292},{"className":10291},[],[10293],{"type":3075,"value":3324},{"type":3075,"value":10295}," task after expiry.",{"type":3070,"tag":3131,"props":10297,"children":10298},{},[10299,10301,10306,10308,10313],{"type":3075,"value":10300},"IP tracking entries are cleaned up by the ",{"type":3070,"tag":3227,"props":10302,"children":10304},{"className":10303},[],[10305],{"type":3075,"value":3332},{"type":3075,"value":10307}," task based on the ",{"type":3070,"tag":3227,"props":10309,"children":10311},{"className":10310},[],[10312],{"type":3075,"value":5030},{"type":3075,"value":10314}," setting.",{"type":3070,"tag":3416,"props":10316,"children":10318},{"id":10317},"storage-security",[10319],{"type":3075,"value":10320},"Storage Security",{"type":3070,"tag":3127,"props":10322,"children":10323},{},[10324,10402],{"type":3070,"tag":3131,"props":10325,"children":10326},{},[10327,10340,10342,10348,10350,10355,10356,10362,10364,10370,10372,10377,10379],{"type":3070,"tag":3165,"props":10328,"children":10329},{},[10330,10332,10338],{"type":3075,"value":10331},"Filesystem Driver (",{"type":3070,"tag":3227,"props":10333,"children":10335},{"className":10334},[],[10336],{"type":3075,"value":10337},"driver: 'fs'",{"type":3075,"value":10339},"):",{"type":3075,"value":10341}," If you use the filesystem driver for ",{"type":3070,"tag":3227,"props":10343,"children":10345},{"className":10344},[],[10346],{"type":3075,"value":10347},"unstorage",{"type":3075,"value":10349}," (e.g., ",{"type":3070,"tag":3227,"props":10351,"children":10353},{"className":10352},[],[10354],{"type":3075,"value":10337},{"type":3075,"value":3392},{"type":3070,"tag":3227,"props":10357,"children":10359},{"className":10358},[],[10360],{"type":3075,"value":10361},"base: '.shield'",{"type":3075,"value":10363},"), ensure that the storage directory (and the ",{"type":3070,"tag":3227,"props":10365,"children":10367},{"className":10366},[],[10368],{"type":3075,"value":10369},"logs",{"type":3075,"value":10371}," directory if logging is enabled via ",{"type":3070,"tag":3227,"props":10373,"children":10375},{"className":10374},[],[10376],{"type":3075,"value":7900},{"type":3075,"value":10378},") is:\n",{"type":3070,"tag":3127,"props":10380,"children":10381},{},[10382,10392],{"type":3070,"tag":3131,"props":10383,"children":10384},{},[10385,10390],{"type":3070,"tag":3165,"props":10386,"children":10387},{},[10388],{"type":3075,"value":10389},"Not web-accessible:",{"type":3075,"value":10391}," Your web server should not be configured to serve files from these directories.",{"type":3070,"tag":3131,"props":10393,"children":10394},{},[10395,10400],{"type":3070,"tag":3165,"props":10396,"children":10397},{},[10398],{"type":3075,"value":10399},"Properly permissioned:",{"type":3075,"value":10401}," The directories should have appropriate server-side file permissions to prevent unauthorized reading or writing.",{"type":3070,"tag":3131,"props":10403,"children":10404},{},[10405,10410],{"type":3070,"tag":3165,"props":10406,"children":10407},{},[10408],{"type":3075,"value":10409},"Other Drivers (Redis, etc.):",{"type":3075,"value":10411}," If using database drivers like Redis, ensure your database server itself is secured (e.g., authentication, network access controls).",{"type":3070,"tag":3416,"props":10413,"children":10415},{"id":10414},"error-message-errormessage",[10416,10418,10424],{"type":3075,"value":10417},"Error Message (",{"type":3070,"tag":3227,"props":10419,"children":10421},{"className":10420},[],[10422],{"type":3075,"value":10423},"errorMessage",{"type":3075,"value":3977},{"type":3070,"tag":3077,"props":10426,"children":10427},{},[10428,10429,10434],{"type":3075,"value":4440},{"type":3070,"tag":3227,"props":10430,"children":10432},{"className":10431},[],[10433],{"type":3075,"value":10423},{"type":3075,"value":10435}," option in the module configuration is returned in the body of a 429 response.",{"type":3070,"tag":3127,"props":10437,"children":10438},{},[10439,10444],{"type":3070,"tag":3131,"props":10440,"children":10441},{},[10442],{"type":3075,"value":10443},"It's recommended to use a plain text message.",{"type":3070,"tag":3131,"props":10445,"children":10446},{},[10447,10449,10454],{"type":3075,"value":10448},"If you choose to use HTML in your ",{"type":3070,"tag":3227,"props":10450,"children":10452},{"className":10451},[],[10453],{"type":3075,"value":10423},{"type":3075,"value":10455},", 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":3070,"tag":3153,"props":10457,"children":10459},{"id":10458},"development",[10460],{"type":3075,"value":10461},"Development",{"type":3070,"tag":3430,"props":10463,"children":10465},{"className":3432,"code":10464,"language":3434,"meta":3014,"style":3014},"# 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",[10466],{"type":3070,"tag":3227,"props":10467,"children":10468},{"__ignoreMap":3014},[10469,10477,10485,10492,10500,10512,10519,10527,10539,10546,10554,10566,10573,10581,10593,10600,10608,10620,10632,10639,10647,10659],{"type":3070,"tag":3440,"props":10470,"children":10471},{"class":3442,"line":3042},[10472],{"type":3070,"tag":3440,"props":10473,"children":10474},{"style":3446},[10475],{"type":3075,"value":10476},"# Install dependencies\n",{"type":3070,"tag":3440,"props":10478,"children":10479},{"class":3442,"line":3038},[10480],{"type":3070,"tag":3440,"props":10481,"children":10482},{"style":3455},[10483],{"type":3075,"value":10484},"yarn\n",{"type":3070,"tag":3440,"props":10486,"children":10487},{"class":3442,"line":3472},[10488],{"type":3070,"tag":3440,"props":10489,"children":10490},{"emptyLinePlaceholder":1200},[10491],{"type":3075,"value":3478},{"type":3070,"tag":3440,"props":10493,"children":10494},{"class":3442,"line":3481},[10495],{"type":3070,"tag":3440,"props":10496,"children":10497},{"style":3446},[10498],{"type":3075,"value":10499},"# Generate type stubs\n",{"type":3070,"tag":3440,"props":10501,"children":10502},{"class":3442,"line":3034},[10503,10507],{"type":3070,"tag":3440,"props":10504,"children":10505},{"style":3455},[10506],{"type":3075,"value":3495},{"type":3070,"tag":3440,"props":10508,"children":10509},{"style":3461},[10510],{"type":3075,"value":10511}," dev:prepare\n",{"type":3070,"tag":3440,"props":10513,"children":10514},{"class":3442,"line":3506},[10515],{"type":3070,"tag":3440,"props":10516,"children":10517},{"emptyLinePlaceholder":1200},[10518],{"type":3075,"value":3478},{"type":3070,"tag":3440,"props":10520,"children":10521},{"class":3442,"line":3514},[10522],{"type":3070,"tag":3440,"props":10523,"children":10524},{"style":3446},[10525],{"type":3075,"value":10526},"# Develop with the playground\n",{"type":3070,"tag":3440,"props":10528,"children":10529},{"class":3442,"line":3059},[10530,10534],{"type":3070,"tag":3440,"props":10531,"children":10532},{"style":3455},[10533],{"type":3075,"value":3495},{"type":3070,"tag":3440,"props":10535,"children":10536},{"style":3461},[10537],{"type":3075,"value":10538}," dev\n",{"type":3070,"tag":3440,"props":10540,"children":10541},{"class":3442,"line":3710},[10542],{"type":3070,"tag":3440,"props":10543,"children":10544},{"emptyLinePlaceholder":1200},[10545],{"type":3075,"value":3478},{"type":3070,"tag":3440,"props":10547,"children":10548},{"class":3442,"line":3719},[10549],{"type":3070,"tag":3440,"props":10550,"children":10551},{"style":3446},[10552],{"type":3075,"value":10553},"# Build the playground\n",{"type":3070,"tag":3440,"props":10555,"children":10556},{"class":3442,"line":3728},[10557,10561],{"type":3070,"tag":3440,"props":10558,"children":10559},{"style":3455},[10560],{"type":3075,"value":3495},{"type":3070,"tag":3440,"props":10562,"children":10563},{"style":3461},[10564],{"type":3075,"value":10565}," dev:build\n",{"type":3070,"tag":3440,"props":10567,"children":10568},{"class":3442,"line":3737},[10569],{"type":3070,"tag":3440,"props":10570,"children":10571},{"emptyLinePlaceholder":1200},[10572],{"type":3075,"value":3478},{"type":3070,"tag":3440,"props":10574,"children":10575},{"class":3442,"line":3746},[10576],{"type":3070,"tag":3440,"props":10577,"children":10578},{"style":3446},[10579],{"type":3075,"value":10580},"# Run ESLint\n",{"type":3070,"tag":3440,"props":10582,"children":10583},{"class":3442,"line":3755},[10584,10588],{"type":3070,"tag":3440,"props":10585,"children":10586},{"style":3455},[10587],{"type":3075,"value":3495},{"type":3070,"tag":3440,"props":10589,"children":10590},{"style":3461},[10591],{"type":3075,"value":10592}," lint\n",{"type":3070,"tag":3440,"props":10594,"children":10595},{"class":3442,"line":3764},[10596],{"type":3070,"tag":3440,"props":10597,"children":10598},{"emptyLinePlaceholder":1200},[10599],{"type":3075,"value":3478},{"type":3070,"tag":3440,"props":10601,"children":10602},{"class":3442,"line":3773},[10603],{"type":3070,"tag":3440,"props":10604,"children":10605},{"style":3446},[10606],{"type":3075,"value":10607},"# Run Vitest\n",{"type":3070,"tag":3440,"props":10609,"children":10610},{"class":3442,"line":3782},[10611,10615],{"type":3070,"tag":3440,"props":10612,"children":10613},{"style":3455},[10614],{"type":3075,"value":3495},{"type":3070,"tag":3440,"props":10616,"children":10617},{"style":3461},[10618],{"type":3075,"value":10619}," test\n",{"type":3070,"tag":3440,"props":10621,"children":10622},{"class":3442,"line":3790},[10623,10627],{"type":3070,"tag":3440,"props":10624,"children":10625},{"style":3455},[10626],{"type":3075,"value":3495},{"type":3070,"tag":3440,"props":10628,"children":10629},{"style":3461},[10630],{"type":3075,"value":10631}," test:watch\n",{"type":3070,"tag":3440,"props":10633,"children":10634},{"class":3442,"line":3799},[10635],{"type":3070,"tag":3440,"props":10636,"children":10637},{"emptyLinePlaceholder":1200},[10638],{"type":3075,"value":3478},{"type":3070,"tag":3440,"props":10640,"children":10641},{"class":3442,"line":3808},[10642],{"type":3070,"tag":3440,"props":10643,"children":10644},{"style":3446},[10645],{"type":3075,"value":10646},"# Release new version\n",{"type":3070,"tag":3440,"props":10648,"children":10649},{"class":3442,"line":3822},[10650,10654],{"type":3070,"tag":3440,"props":10651,"children":10652},{"style":3455},[10653],{"type":3075,"value":3495},{"type":3070,"tag":3440,"props":10655,"children":10656},{"style":3461},[10657],{"type":3075,"value":10658}," release:patch\n",{"type":3070,"tag":3440,"props":10660,"children":10661},{"class":3442,"line":3850},[10662,10666],{"type":3070,"tag":3440,"props":10663,"children":10664},{"style":3455},[10665],{"type":3075,"value":3495},{"type":3070,"tag":3440,"props":10667,"children":10668},{"style":3461},[10669],{"type":3075,"value":10670}," release:minor\n",{"type":3070,"tag":10672,"props":10673,"children":10674},"style",{},[10675],{"type":3075,"value":10676},"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":3014,"searchDepth":3038,"depth":3038,"links":10678},[10679,10680,10691,10696,10701,10707,10711,10715,10721],{"id":3155,"depth":3038,"text":399},{"id":3411,"depth":3038,"text":3414,"children":10681},[10682,10684,10686,10688,10690],{"id":3418,"depth":3472,"text":10683},"1. Add nuxt-api-shield dependency to your project",{"id":3540,"depth":3472,"text":10685},"2. Add nuxt-api-shield to the modules section of nuxt.config.ts",{"id":4572,"depth":3472,"text":10687},"3. Add nitro\u002Fstorage to nuxt.config.ts",{"id":4981,"depth":3472,"text":10689},"4. Schedule bundled cleanup tasks in nuxt.config.ts",{"id":5282,"depth":3472,"text":5285},{"id":7371,"depth":3038,"text":7374,"children":10692},[10693,10694],{"id":7377,"depth":3472,"text":7380},{"id":7787,"depth":3472,"text":10695},"When memory \u002F fs is acceptable",{"id":7846,"depth":3038,"text":7849,"children":10697},[10698,10699,10700],{"id":7872,"depth":3472,"text":7875},{"id":8126,"depth":3472,"text":8129},{"id":8178,"depth":3472,"text":8181},{"id":8444,"depth":3038,"text":8447,"children":10702},[10703,10705],{"id":8455,"depth":3472,"text":10704},"RateLimit Type",{"id":9007,"depth":3472,"text":10706},"ModuleOptions Type",{"id":9074,"depth":3038,"text":9077,"children":10708},[10709,10710],{"id":9129,"depth":3472,"text":9132},{"id":9625,"depth":3472,"text":9628},{"id":9820,"depth":3038,"text":9823,"children":10712},[10713,10714],{"id":9850,"depth":3472,"text":9132},{"id":10147,"depth":3472,"text":10150},{"id":10199,"depth":3038,"text":10202,"children":10716},[10717,10718,10719],{"id":10205,"depth":3472,"text":10208},{"id":10317,"depth":3472,"text":10320},{"id":10414,"depth":3472,"text":10720},"Error Message (errorMessage)",{"id":10458,"depth":3038,"text":10461},{"v5":10723,"v4":10724,"v3":10725,"v2":10726},"5 (nightly)","4.5.0","3.21.9","2.18.1"]