[{"data":1,"prerenderedAt":1633},["ShallowReactive",2],{"navigation":3,"/docs/guides/pre-rendering":137,"/docs/guides/pre-rendering-surround":1628},[4,123],{"title":5,"icon":6,"path":7,"stem":8,"children":9,"page":113},"Docs","i-lucide-book","/docs","docs",[10,34,58,73,84,95,114],{"title":11,"path":12,"stem":13,"children":14,"icon":33},"Getting Started","/docs/getting-started","docs/1.getting-started/1.index",[15,17,21,25,29],{"title":16,"path":12,"stem":13},"Introduction",{"title":18,"path":19,"stem":20},"Installation","/docs/getting-started/installation","docs/1.getting-started/2.installation",{"title":22,"path":23,"stem":24},"Deploy","/docs/getting-started/deploy","docs/1.getting-started/3.deploy",{"title":26,"path":27,"stem":28},"Migration","/docs/getting-started/migration","docs/1.getting-started/4.migration",{"title":30,"path":31,"stem":32},"Environments","/docs/getting-started/environments","docs/1.getting-started/5.environments","i-lucide-rocket",{"title":35,"path":36,"stem":37,"children":38,"icon":57},"Database","/docs/database","docs/2.database/1.index",[39,41,45,49,53],{"title":40,"path":36,"stem":37},"Setup",{"title":42,"path":43,"stem":44},"Schema","/docs/database/schema","docs/2.database/2.schema",{"title":46,"path":47,"stem":48},"Queries","/docs/database/query","docs/2.database/3.query",{"title":50,"path":51,"stem":52},"Migrations","/docs/database/migrations","docs/2.database/4.migrations",{"title":54,"path":55,"stem":56},"CLI","/docs/database/cli","docs/2.database/cli","i-lucide-database",{"title":59,"path":60,"stem":61,"children":62,"icon":72},"Blob","/docs/blob","docs/3.blob/1.index",[63,64,68],{"title":40,"path":60,"stem":61},{"title":65,"path":66,"stem":67},"Upload","/docs/blob/upload","docs/3.blob/2.upload",{"title":69,"path":70,"stem":71},"Blob SDK","/docs/blob/usage","docs/3.blob/3.usage","i-lucide-shapes",{"title":74,"path":75,"stem":76,"children":77,"icon":83},"Key Value","/docs/kv","docs/4.kv/1.index",[78,79],{"title":40,"path":75,"stem":76},{"title":80,"path":81,"stem":82},"KV SDK","/docs/kv/usage","docs/4.kv/2.usage","i-lucide-list",{"title":85,"path":86,"stem":87,"children":88,"icon":94},"Cache","/docs/cache","docs/5.cache/1.index",[89,90],{"title":40,"path":86,"stem":87},{"title":91,"path":92,"stem":93},"Usage","/docs/cache/usage","docs/5.cache/2.usage","i-lucide-zap",{"title":96,"icon":97,"path":98,"stem":99,"children":100,"page":113},"Guides","i-lucide-book-text","/docs/guides","docs/6.guides",[101,105,109],{"title":102,"path":103,"stem":104},"Pre-rendering","/docs/guides/pre-rendering","docs/6.guides/1.pre-rendering",{"title":106,"path":107,"stem":108},"Realtime","/docs/guides/realtime","docs/6.guides/2.realtime",{"title":110,"path":111,"stem":112},"CI/CD","/docs/guides/ci-cd","docs/6.guides/3.ci-cd",false,{"title":115,"path":116,"stem":117,"children":118,"page":113},"Reference","/docs/reference","docs/7.reference",[119],{"title":120,"path":121,"stem":122},"Environment Variables","/docs/reference/environment-variables","docs/7.reference/1.environment-variables",{"title":124,"icon":125,"path":126,"stem":127,"children":128,"page":113},"Changelog","i-lucide-megaphone","/changelog","changelog",[129,133],{"title":130,"path":131,"stem":132},"NuxtHub Multi-Vendor is now available","/changelog/nuxthub-multi-vendor","changelog/nuxthub-multi-vendor",{"title":134,"path":135,"stem":136},"Self-Hosting First & Cloud-Agnostic Future","/changelog/self-hosting-first","changelog/self-hosting-first",{"id":138,"title":102,"body":139,"description":1622,"extension":1623,"links":1624,"meta":1625,"navigation":384,"path":103,"seo":1626,"stem":104,"__hash__":1627},"docs/docs/6.guides/1.pre-rendering.md",{"type":140,"value":141,"toc":1609},"minimark",[142,157,160,170,175,180,187,277,290,294,298,309,426,432,437,461,473,477,480,490,648,660,720,724,744,947,951,968,1057,1069,1074,1078,1089,1096,1218,1222,1233,1244,1605],[143,144,145,146,156],"p",{},"When using NuxtHub, you need to build your application with the ",[147,148,152],"a",{"href":149,"rel":150},"https://nuxt.com/docs/api/commands/build",[151],"nofollow",[153,154,155],"code",{},"nuxt build"," in order to keep your server when deploying your application.",[143,158,159],{},"However, you can also pre-render your pages at build time to improve performance and avoid CPU usage on the server.",[161,162,164,165,169],"tip",{"to":163},"https://nuxt.com/docs/guide/concepts/rendering#hybrid-rendering","This is possible thanks to ",[166,167,168],"strong",{},"Nuxt's Hybrid Rendering"," to allow different caching rules per route.",[171,172,174],"h2",{"id":173},"route-rules","Route Rules",[176,177,179],"h3",{"id":178},"globally","Globally",[143,181,182,183,186],{},"You can define route rules in your ",[153,184,185],{},"nuxt.config.ts"," to specify how each route should be rendered:",[188,189,194],"pre",{"className":190,"code":191,"filename":185,"language":192,"meta":193,"style":193},"language-ts shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","export default defineNuxtConfig({\n  routeRules: {\n    '/': { prerender: true }\n  }\n})\n","ts","",[153,195,196,220,233,262,268],{"__ignoreMap":193},[197,198,201,205,208,212,216],"span",{"class":199,"line":200},"line",1,[197,202,204],{"class":203},"s7zQu","export",[197,206,207],{"class":203}," default",[197,209,211],{"class":210},"s2Zo4"," defineNuxtConfig",[197,213,215],{"class":214},"sTEyZ","(",[197,217,219],{"class":218},"sMK4o","{\n",[197,221,223,227,230],{"class":199,"line":222},2,[197,224,226],{"class":225},"swJcz","  routeRules",[197,228,229],{"class":218},":",[197,231,232],{"class":218}," {\n",[197,234,236,239,242,245,247,250,253,255,259],{"class":199,"line":235},3,[197,237,238],{"class":218},"    '",[197,240,241],{"class":225},"/",[197,243,244],{"class":218},"'",[197,246,229],{"class":218},[197,248,249],{"class":218}," {",[197,251,252],{"class":225}," prerender",[197,254,229],{"class":218},[197,256,258],{"class":257},"sfNiH"," true",[197,260,261],{"class":218}," }\n",[197,263,265],{"class":199,"line":264},4,[197,266,267],{"class":218},"  }\n",[197,269,271,274],{"class":199,"line":270},5,[197,272,273],{"class":218},"}",[197,275,276],{"class":214},")\n",[143,278,279,280,282,283,285,286,289],{},"When running ",[153,281,155],{},", Nuxt will pre-render the ",[153,284,241],{}," route and save the ",[153,287,288],{},"index.html"," file in the output directory.",[291,292,293],"callout",{"icon":33},"When deploying with NuxtHub on Cloudflare Pages, it will serve the pre-rendered HTML file directly from the edge for maximum performance and avoid CPU usage on the server.",[176,295,297],{"id":296},"page-level","Page Level",[143,299,300,301,308],{},"It is also possible to define route rules at the page level using the ",[147,302,305],{"href":303,"rel":304},"https://nuxt.com/docs/api/utils/define-route-rules",[151],[153,306,307],{},"defineRouteRules"," util in the page component:",[188,310,315],{"className":311,"code":312,"filename":313,"language":314,"meta":193,"style":193},"language-vue shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","\u003Cscript setup lang=\"ts\">\ndefineRouteRules({\n  prerender: true\n})\n\u003C/script>\n\n\u003Ctemplate>\n  \u003Ch1>Hello world!\u003C/h1>\n\u003C/template>\n","pages/index.vue","vue",[153,316,317,346,354,364,370,379,386,396,417],{"__ignoreMap":193},[197,318,319,322,325,329,332,335,338,341,343],{"class":199,"line":200},[197,320,321],{"class":218},"\u003C",[197,323,324],{"class":225},"script",[197,326,328],{"class":327},"spNyl"," setup",[197,330,331],{"class":327}," lang",[197,333,334],{"class":218},"=",[197,336,337],{"class":218},"\"",[197,339,192],{"class":340},"sfazB",[197,342,337],{"class":218},[197,344,345],{"class":218},">\n",[197,347,348,350,352],{"class":199,"line":222},[197,349,307],{"class":210},[197,351,215],{"class":214},[197,353,219],{"class":218},[197,355,356,359,361],{"class":199,"line":235},[197,357,358],{"class":225},"  prerender",[197,360,229],{"class":218},[197,362,363],{"class":257}," true\n",[197,365,366,368],{"class":199,"line":264},[197,367,273],{"class":218},[197,369,276],{"class":214},[197,371,372,375,377],{"class":199,"line":270},[197,373,374],{"class":218},"\u003C/",[197,376,324],{"class":225},[197,378,345],{"class":218},[197,380,382],{"class":199,"line":381},6,[197,383,385],{"emptyLinePlaceholder":384},true,"\n",[197,387,389,391,394],{"class":199,"line":388},7,[197,390,321],{"class":218},[197,392,393],{"class":225},"template",[197,395,345],{"class":218},[197,397,399,402,405,408,411,413,415],{"class":199,"line":398},8,[197,400,401],{"class":218},"  \u003C",[197,403,404],{"class":225},"h1",[197,406,407],{"class":218},">",[197,409,410],{"class":214},"Hello world!",[197,412,374],{"class":218},[197,414,404],{"class":225},[197,416,345],{"class":218},[197,418,420,422,424],{"class":199,"line":419},9,[197,421,374],{"class":218},[197,423,393],{"class":225},[197,425,345],{"class":218},[143,427,428,429,431],{},"This is equivalent of our example above in the ",[153,430,185],{}," file.",[143,433,434],{},[166,435,436],{},"Notes:",[438,439,440,452],"ul",{},[441,442,443,444,447,448,451],"li",{},"A rule defined in ",[153,445,446],{},"~/pages/foo/bar.vue"," will be applied to ",[153,449,450],{},"/foo/bar"," requests.",[441,453,454,455,447,458,451],{},"A rule in ",[153,456,457],{},"~/pages/foo/[id].vue",[153,459,460],{},"/foo/**",[462,463,465,466,468,469,472],"important",{"to":464},"https://nuxt.com/docs/guide/going-further/experimental-features#inlinerouterules","As this is an experimental feature, you need to enable it in your ",[153,467,185],{}," files with ",[153,470,471],{},"experimental: { inlineRouteRules: true }",".",[171,474,476],{"id":475},"dynamic-pre-rendering","Dynamic Pre-rendering",[143,478,479],{},"In some cases, you may want to Nuxt to pre-render other pages when pre-rendering a specific page.",[143,481,482,483,308],{},"This is useful when pre-rendering all the blog posts when pre-rendering the blog index page. To achieve this, we can use the ",[147,484,487],{"href":485,"rel":486},"https://nuxt.com/docs/api/utils/prerender-routes",[151],[153,488,489],{},"prerenderRoutes",[188,491,494],{"className":311,"code":492,"filename":493,"language":314,"meta":193,"style":193},"\u003Cscript setup lang=\"ts\">\n// Pre-render the /blog page\ndefineRouteRules({ prerender: true })\n\nconst { data: posts } = await useFetch('/api/posts')\n\n// Tell Nuxt to pre-render all blog posts\nprerenderRoutes(posts.value.map(post => `/blog/${post.slug}`))\n\u003C/script>\n","pages/blog/index.vue",[153,495,496,516,522,542,546,583,587,592,640],{"__ignoreMap":193},[197,497,498,500,502,504,506,508,510,512,514],{"class":199,"line":200},[197,499,321],{"class":218},[197,501,324],{"class":225},[197,503,328],{"class":327},[197,505,331],{"class":327},[197,507,334],{"class":218},[197,509,337],{"class":218},[197,511,192],{"class":340},[197,513,337],{"class":218},[197,515,345],{"class":218},[197,517,518],{"class":199,"line":222},[197,519,521],{"class":520},"sHwdD","// Pre-render the /blog page\n",[197,523,524,526,528,531,533,535,537,540],{"class":199,"line":235},[197,525,307],{"class":210},[197,527,215],{"class":214},[197,529,530],{"class":218},"{",[197,532,252],{"class":225},[197,534,229],{"class":218},[197,536,258],{"class":257},[197,538,539],{"class":218}," }",[197,541,276],{"class":214},[197,543,544],{"class":199,"line":264},[197,545,385],{"emptyLinePlaceholder":384},[197,547,548,551,553,556,558,561,563,566,569,572,574,576,579,581],{"class":199,"line":270},[197,549,550],{"class":327},"const",[197,552,249],{"class":218},[197,554,555],{"class":225}," data",[197,557,229],{"class":218},[197,559,560],{"class":214}," posts ",[197,562,273],{"class":218},[197,564,565],{"class":218}," =",[197,567,568],{"class":203}," await",[197,570,571],{"class":210}," useFetch",[197,573,215],{"class":214},[197,575,244],{"class":218},[197,577,578],{"class":340},"/api/posts",[197,580,244],{"class":218},[197,582,276],{"class":214},[197,584,585],{"class":199,"line":381},[197,586,385],{"emptyLinePlaceholder":384},[197,588,589],{"class":199,"line":388},[197,590,591],{"class":520},"// Tell Nuxt to pre-render all blog posts\n",[197,593,594,596,599,601,604,606,609,611,615,618,621,624,627,629,631,634,637],{"class":199,"line":398},[197,595,489],{"class":210},[197,597,598],{"class":214},"(posts",[197,600,472],{"class":218},[197,602,603],{"class":214},"value",[197,605,472],{"class":218},[197,607,608],{"class":210},"map",[197,610,215],{"class":214},[197,612,614],{"class":613},"sHdIc","post",[197,616,617],{"class":327}," =>",[197,619,620],{"class":218}," `",[197,622,623],{"class":340},"/blog/",[197,625,626],{"class":218},"${",[197,628,614],{"class":214},[197,630,472],{"class":218},[197,632,633],{"class":214},"slug",[197,635,636],{"class":218},"}`",[197,638,639],{"class":214},"))\n",[197,641,642,644,646],{"class":199,"line":419},[197,643,374],{"class":218},[197,645,324],{"class":225},[197,647,345],{"class":218},[143,649,650,651,654,655,657,658,431],{},"It is important to tell Nuxt to pre-render the ",[153,652,653],{},"/blog"," using the ",[153,656,307],{},", we can also do it globally in the ",[153,659,185],{},[188,661,663],{"className":190,"code":662,"filename":185,"language":192,"meta":193,"style":193},"export default defineNuxtConfig({\n  routeRules: {\n    // If not using `defineRouteRules` in the page component\n    '/blog': { prerender: true }\n  }\n})\n",[153,664,665,677,685,690,710,714],{"__ignoreMap":193},[197,666,667,669,671,673,675],{"class":199,"line":200},[197,668,204],{"class":203},[197,670,207],{"class":203},[197,672,211],{"class":210},[197,674,215],{"class":214},[197,676,219],{"class":218},[197,678,679,681,683],{"class":199,"line":222},[197,680,226],{"class":225},[197,682,229],{"class":218},[197,684,232],{"class":218},[197,686,687],{"class":199,"line":235},[197,688,689],{"class":520},"    // If not using `defineRouteRules` in the page component\n",[197,691,692,694,696,698,700,702,704,706,708],{"class":199,"line":264},[197,693,238],{"class":218},[197,695,653],{"class":225},[197,697,244],{"class":218},[197,699,229],{"class":218},[197,701,249],{"class":218},[197,703,252],{"class":225},[197,705,229],{"class":218},[197,707,258],{"class":257},[197,709,261],{"class":218},[197,711,712],{"class":199,"line":270},[197,713,267],{"class":218},[197,715,716,718],{"class":199,"line":381},[197,717,273],{"class":218},[197,719,276],{"class":214},[176,721,723],{"id":722},"using-a-nuxt-module","Using a Nuxt Module",[143,725,726,727,732,733,735,736,739,740,743],{},"You can also use a ",[147,728,731],{"href":729,"rel":730},"https://nuxt.com/docs/guide/going-further/modules",[151],"local Nuxt module"," to pre-render dynamic pages, which is particularly useful if you don't have a single root page (such as ",[153,734,653],{},") but still need to pre-render specific routes, such as ",[153,737,738],{},"/page-1",", ",[153,741,742],{},"/parent/page-2",", and so on.",[188,745,748],{"className":190,"code":746,"filename":747,"language":192,"meta":193,"style":193},"import { defineNuxtModule, addPrerenderRoutes } from '@nuxt/kit'\n\nexport default defineNuxtModule({\n  meta: {\n    name: 'nuxt-prerender-routes',\n  },\n  async setup() {\n    const pages = await getDynamicPages()\n    addPrerenderRoutes(pages)\n  },\n})\n\nasync function getDynamicPages(): string[] {\n  // Replace this function with the logic for retrieving the slugs for your pages.\n  return ['/page-1', '/parent/page-2']\n}\n","modules/prerender-routes.ts",[153,749,750,780,784,796,805,822,827,839,857,869,874,881,886,909,915,941],{"__ignoreMap":193},[197,751,752,755,757,760,763,766,768,771,774,777],{"class":199,"line":200},[197,753,754],{"class":203},"import",[197,756,249],{"class":218},[197,758,759],{"class":214}," defineNuxtModule",[197,761,762],{"class":218},",",[197,764,765],{"class":214}," addPrerenderRoutes",[197,767,539],{"class":218},[197,769,770],{"class":203}," from",[197,772,773],{"class":218}," '",[197,775,776],{"class":340},"@nuxt/kit",[197,778,779],{"class":218},"'\n",[197,781,782],{"class":199,"line":222},[197,783,385],{"emptyLinePlaceholder":384},[197,785,786,788,790,792,794],{"class":199,"line":235},[197,787,204],{"class":203},[197,789,207],{"class":203},[197,791,759],{"class":210},[197,793,215],{"class":214},[197,795,219],{"class":218},[197,797,798,801,803],{"class":199,"line":264},[197,799,800],{"class":225},"  meta",[197,802,229],{"class":218},[197,804,232],{"class":218},[197,806,807,810,812,814,817,819],{"class":199,"line":270},[197,808,809],{"class":225},"    name",[197,811,229],{"class":218},[197,813,773],{"class":218},[197,815,816],{"class":340},"nuxt-prerender-routes",[197,818,244],{"class":218},[197,820,821],{"class":218},",\n",[197,823,824],{"class":199,"line":381},[197,825,826],{"class":218},"  },\n",[197,828,829,832,834,837],{"class":199,"line":388},[197,830,831],{"class":327},"  async",[197,833,328],{"class":225},[197,835,836],{"class":218},"()",[197,838,232],{"class":218},[197,840,841,844,847,849,851,854],{"class":199,"line":398},[197,842,843],{"class":327},"    const",[197,845,846],{"class":214}," pages",[197,848,565],{"class":218},[197,850,568],{"class":203},[197,852,853],{"class":210}," getDynamicPages",[197,855,856],{"class":225},"()\n",[197,858,859,862,864,867],{"class":199,"line":419},[197,860,861],{"class":210},"    addPrerenderRoutes",[197,863,215],{"class":225},[197,865,866],{"class":214},"pages",[197,868,276],{"class":225},[197,870,872],{"class":199,"line":871},10,[197,873,826],{"class":218},[197,875,877,879],{"class":199,"line":876},11,[197,878,273],{"class":218},[197,880,276],{"class":214},[197,882,884],{"class":199,"line":883},12,[197,885,385],{"emptyLinePlaceholder":384},[197,887,889,892,895,897,900,904,907],{"class":199,"line":888},13,[197,890,891],{"class":327},"async",[197,893,894],{"class":327}," function",[197,896,853],{"class":210},[197,898,899],{"class":218},"():",[197,901,903],{"class":902},"sBMFI"," string",[197,905,906],{"class":214},"[] ",[197,908,219],{"class":218},[197,910,912],{"class":199,"line":911},14,[197,913,914],{"class":520},"  // Replace this function with the logic for retrieving the slugs for your pages.\n",[197,916,918,921,924,926,928,930,932,934,936,938],{"class":199,"line":917},15,[197,919,920],{"class":203},"  return",[197,922,923],{"class":225}," [",[197,925,244],{"class":218},[197,927,738],{"class":340},[197,929,244],{"class":218},[197,931,762],{"class":218},[197,933,773],{"class":218},[197,935,742],{"class":340},[197,937,244],{"class":218},[197,939,940],{"class":225},"]\n",[197,942,944],{"class":199,"line":943},16,[197,945,946],{"class":218},"}\n",[171,948,950],{"id":949},"pre-render-all-pages","Pre-render All Pages",[143,952,953,954,961,962,965,966,229],{},"To have the same behavior as ",[147,955,958],{"href":956,"rel":957},"https://nuxt.com/docs/api/commands/generate",[151],[153,959,960],{},"nuxt generate"," while keeping the server part, you can pre-render all pages by configuring the ",[153,963,964],{},"nitro.prerender"," option in the ",[153,967,185],{},[188,969,971],{"className":190,"code":970,"filename":185,"language":192,"meta":193,"style":193},"export default defineNuxtConfig({\n  nitro: {\n    prerender: {\n      // Pre-render the homepage\n      routes: ['/'],\n      // Then crawl all the links on the page\n      crawlLinks: true\n    }\n  }\n})\n",[153,972,973,985,994,1003,1008,1028,1033,1042,1047,1051],{"__ignoreMap":193},[197,974,975,977,979,981,983],{"class":199,"line":200},[197,976,204],{"class":203},[197,978,207],{"class":203},[197,980,211],{"class":210},[197,982,215],{"class":214},[197,984,219],{"class":218},[197,986,987,990,992],{"class":199,"line":222},[197,988,989],{"class":225},"  nitro",[197,991,229],{"class":218},[197,993,232],{"class":218},[197,995,996,999,1001],{"class":199,"line":235},[197,997,998],{"class":225},"    prerender",[197,1000,229],{"class":218},[197,1002,232],{"class":218},[197,1004,1005],{"class":199,"line":264},[197,1006,1007],{"class":520},"      // Pre-render the homepage\n",[197,1009,1010,1013,1015,1017,1019,1021,1023,1026],{"class":199,"line":270},[197,1011,1012],{"class":225},"      routes",[197,1014,229],{"class":218},[197,1016,923],{"class":214},[197,1018,244],{"class":218},[197,1020,241],{"class":340},[197,1022,244],{"class":218},[197,1024,1025],{"class":214},"]",[197,1027,821],{"class":218},[197,1029,1030],{"class":199,"line":381},[197,1031,1032],{"class":520},"      // Then crawl all the links on the page\n",[197,1034,1035,1038,1040],{"class":199,"line":388},[197,1036,1037],{"class":225},"      crawlLinks",[197,1039,229],{"class":218},[197,1041,363],{"class":257},[197,1043,1044],{"class":199,"line":398},[197,1045,1046],{"class":218},"    }\n",[197,1048,1049],{"class":199,"line":419},[197,1050,267],{"class":218},[197,1052,1053,1055],{"class":199,"line":871},[197,1054,273],{"class":218},[197,1056,276],{"class":214},[143,1058,279,1059,1061,1062,1064,1065,1068],{},[153,1060,155],{},", Nuxt will pre-render all pages and save the ",[153,1063,288],{}," file in the ",[153,1066,1067],{},"dist/"," directory.",[161,1070,1073],{"to":1071,"target":1072},"https://nuxt.com/docs/getting-started/prerendering","_blank","Learn more about Nuxt prerendering.",[176,1075,1077],{"id":1076},"cloudflare-100-routes-limit","Cloudflare 100 routes limit",[143,1079,1080,1081,1088],{},"NuxtHub will generate a ",[147,1082,1085],{"href":1083,"rel":1084},"https://developers.cloudflare.com/pages/functions/routing/#create-a-_routesjson-file",[151],[153,1086,1087],{},"dist/_routes.json"," for Cloudflare Pages, but it has a limit of 100 excluded routes (used for static assets).",[143,1090,1091,1092,1095],{},"As each pre-rendered page will be added to the exclude list, we recommend to add your known pre-rendered pattern in the ",[153,1093,1094],{},"nitro.cloudflare.pages.routes.exclude"," option:",[188,1097,1099],{"className":190,"code":1098,"filename":185,"language":192,"meta":193,"style":193},"export default defineNuxtConfig({\n  // ...\n  nitro: {\n    cloudflare: {\n      pages: {\n        routes: {\n          exclude: [\n            // we know that all docs and blog pages are pre-rendered\n            '/docs/*',\n            '/blog/*'\n          ]\n        }\n      }\n    }\n  }\n})\n",[153,1100,1101,1113,1118,1126,1135,1144,1153,1163,1168,1180,1189,1194,1199,1204,1208,1212],{"__ignoreMap":193},[197,1102,1103,1105,1107,1109,1111],{"class":199,"line":200},[197,1104,204],{"class":203},[197,1106,207],{"class":203},[197,1108,211],{"class":210},[197,1110,215],{"class":214},[197,1112,219],{"class":218},[197,1114,1115],{"class":199,"line":222},[197,1116,1117],{"class":520},"  // ...\n",[197,1119,1120,1122,1124],{"class":199,"line":235},[197,1121,989],{"class":225},[197,1123,229],{"class":218},[197,1125,232],{"class":218},[197,1127,1128,1131,1133],{"class":199,"line":264},[197,1129,1130],{"class":225},"    cloudflare",[197,1132,229],{"class":218},[197,1134,232],{"class":218},[197,1136,1137,1140,1142],{"class":199,"line":270},[197,1138,1139],{"class":225},"      pages",[197,1141,229],{"class":218},[197,1143,232],{"class":218},[197,1145,1146,1149,1151],{"class":199,"line":381},[197,1147,1148],{"class":225},"        routes",[197,1150,229],{"class":218},[197,1152,232],{"class":218},[197,1154,1155,1158,1160],{"class":199,"line":388},[197,1156,1157],{"class":225},"          exclude",[197,1159,229],{"class":218},[197,1161,1162],{"class":214}," [\n",[197,1164,1165],{"class":199,"line":398},[197,1166,1167],{"class":520},"            // we know that all docs and blog pages are pre-rendered\n",[197,1169,1170,1173,1176,1178],{"class":199,"line":419},[197,1171,1172],{"class":218},"            '",[197,1174,1175],{"class":340},"/docs/*",[197,1177,244],{"class":218},[197,1179,821],{"class":218},[197,1181,1182,1184,1187],{"class":199,"line":871},[197,1183,1172],{"class":218},[197,1185,1186],{"class":340},"/blog/*",[197,1188,779],{"class":218},[197,1190,1191],{"class":199,"line":876},[197,1192,1193],{"class":214},"          ]\n",[197,1195,1196],{"class":199,"line":883},[197,1197,1198],{"class":218},"        }\n",[197,1200,1201],{"class":199,"line":888},[197,1202,1203],{"class":218},"      }\n",[197,1205,1206],{"class":199,"line":911},[197,1207,1046],{"class":218},[197,1209,1210],{"class":199,"line":917},[197,1211,267],{"class":218},[197,1213,1214,1216],{"class":199,"line":943},[197,1215,273],{"class":218},[197,1217,276],{"class":214},[171,1219,1221],{"id":1220},"caveats","Caveats",[143,1223,1224,1225,1232],{},"If you are using authentication in your application such as ",[147,1226,1229],{"href":1227,"rel":1228},"https://github.com/Atinux/nuxt-auth-utils",[151],[153,1230,1231],{},"nuxt-auth-utils",", you need to remember that the authentication state will not be available during the pre-rendering process.",[143,1234,1235,1236,1243],{},"For example, if you have a header component that either display the logged in user or a login button, you need to wrap the logic inside the ",[147,1237,1240],{"href":1238,"rel":1239},"https://github.com/atinux/nuxt-auth-utils?tab=readme-ov-file#authstate-component",[151],[153,1241,1242],{},"\u003CAuthState>"," component to display a placeholder while the page is being pre-rendered.",[188,1245,1248],{"className":311,"code":1246,"filename":1247,"language":314,"meta":193,"style":193},"\u003Cscript setup lang=\"ts\">\nconst { loggedIn, user } = useUserSession()\n\nconst links = [\n  { label: 'Docs', to: '/docs' },\n  { label: 'Blog', to: '/blog' }\n]\n\u003C/script>\n\n\u003Ctemplate>\n  \u003CUHeader title=\"ACME\" :links=\"links\">\n    \u003Ctemplate #right>\n      \u003CAuthState>\n        \u003CUButton v-if=\"loggedIn\" to=\"/profile\">{{ user.name }}\u003C/UButton>\n        \u003CUButton v-else to=\"/login\">Login\u003C/UButton>\n        \u003Ctemplate #placeholder>\n          \u003C!-- Display loading state -->\n          \u003CUButton :loading=\"true\" />\n        \u003C/template>\n      \u003C/AuthState>\n  \u003C/template>\n\u003C/template>\n","components/AppHeader.vue",[153,1249,1250,1270,1293,1297,1308,1340,1369,1373,1381,1385,1393,1426,1441,1451,1493,1524,1537,1543,1566,1576,1586,1596],{"__ignoreMap":193},[197,1251,1252,1254,1256,1258,1260,1262,1264,1266,1268],{"class":199,"line":200},[197,1253,321],{"class":218},[197,1255,324],{"class":225},[197,1257,328],{"class":327},[197,1259,331],{"class":327},[197,1261,334],{"class":218},[197,1263,337],{"class":218},[197,1265,192],{"class":340},[197,1267,337],{"class":218},[197,1269,345],{"class":218},[197,1271,1272,1274,1276,1279,1281,1284,1286,1288,1291],{"class":199,"line":222},[197,1273,550],{"class":327},[197,1275,249],{"class":218},[197,1277,1278],{"class":214}," loggedIn",[197,1280,762],{"class":218},[197,1282,1283],{"class":214}," user ",[197,1285,273],{"class":218},[197,1287,565],{"class":218},[197,1289,1290],{"class":210}," useUserSession",[197,1292,856],{"class":214},[197,1294,1295],{"class":199,"line":235},[197,1296,385],{"emptyLinePlaceholder":384},[197,1298,1299,1301,1304,1306],{"class":199,"line":264},[197,1300,550],{"class":327},[197,1302,1303],{"class":214}," links ",[197,1305,334],{"class":218},[197,1307,1162],{"class":214},[197,1309,1310,1313,1316,1318,1320,1322,1324,1326,1329,1331,1333,1335,1337],{"class":199,"line":270},[197,1311,1312],{"class":218},"  {",[197,1314,1315],{"class":225}," label",[197,1317,229],{"class":218},[197,1319,773],{"class":218},[197,1321,5],{"class":340},[197,1323,244],{"class":218},[197,1325,762],{"class":218},[197,1327,1328],{"class":225}," to",[197,1330,229],{"class":218},[197,1332,773],{"class":218},[197,1334,7],{"class":340},[197,1336,244],{"class":218},[197,1338,1339],{"class":218}," },\n",[197,1341,1342,1344,1346,1348,1350,1353,1355,1357,1359,1361,1363,1365,1367],{"class":199,"line":381},[197,1343,1312],{"class":218},[197,1345,1315],{"class":225},[197,1347,229],{"class":218},[197,1349,773],{"class":218},[197,1351,1352],{"class":340},"Blog",[197,1354,244],{"class":218},[197,1356,762],{"class":218},[197,1358,1328],{"class":225},[197,1360,229],{"class":218},[197,1362,773],{"class":218},[197,1364,653],{"class":340},[197,1366,244],{"class":218},[197,1368,261],{"class":218},[197,1370,1371],{"class":199,"line":388},[197,1372,940],{"class":214},[197,1374,1375,1377,1379],{"class":199,"line":398},[197,1376,374],{"class":218},[197,1378,324],{"class":225},[197,1380,345],{"class":218},[197,1382,1383],{"class":199,"line":419},[197,1384,385],{"emptyLinePlaceholder":384},[197,1386,1387,1389,1391],{"class":199,"line":871},[197,1388,321],{"class":218},[197,1390,393],{"class":225},[197,1392,345],{"class":218},[197,1394,1395,1397,1400,1403,1405,1407,1410,1412,1415,1417,1419,1422,1424],{"class":199,"line":876},[197,1396,401],{"class":218},[197,1398,1399],{"class":225},"UHeader",[197,1401,1402],{"class":327}," title",[197,1404,334],{"class":218},[197,1406,337],{"class":218},[197,1408,1409],{"class":340},"ACME",[197,1411,337],{"class":218},[197,1413,1414],{"class":327}," :links",[197,1416,334],{"class":218},[197,1418,337],{"class":218},[197,1420,1421],{"class":340},"links",[197,1423,337],{"class":218},[197,1425,345],{"class":218},[197,1427,1428,1431,1433,1436,1439],{"class":199,"line":883},[197,1429,1430],{"class":218},"    \u003C",[197,1432,393],{"class":225},[197,1434,1435],{"class":218}," #",[197,1437,1438],{"class":327},"right",[197,1440,345],{"class":218},[197,1442,1443,1446,1449],{"class":199,"line":888},[197,1444,1445],{"class":218},"      \u003C",[197,1447,1448],{"class":225},"AuthState",[197,1450,345],{"class":218},[197,1452,1453,1456,1459,1462,1464,1466,1469,1471,1473,1475,1477,1480,1482,1484,1487,1489,1491],{"class":199,"line":911},[197,1454,1455],{"class":218},"        \u003C",[197,1457,1458],{"class":225},"UButton",[197,1460,1461],{"class":327}," v-if",[197,1463,334],{"class":218},[197,1465,337],{"class":218},[197,1467,1468],{"class":340},"loggedIn",[197,1470,337],{"class":218},[197,1472,1328],{"class":327},[197,1474,334],{"class":218},[197,1476,337],{"class":218},[197,1478,1479],{"class":340},"/profile",[197,1481,337],{"class":218},[197,1483,407],{"class":218},[197,1485,1486],{"class":214},"{{ user.name }}",[197,1488,374],{"class":218},[197,1490,1458],{"class":225},[197,1492,345],{"class":218},[197,1494,1495,1497,1499,1502,1504,1506,1508,1511,1513,1515,1518,1520,1522],{"class":199,"line":917},[197,1496,1455],{"class":218},[197,1498,1458],{"class":225},[197,1500,1501],{"class":327}," v-else",[197,1503,1328],{"class":327},[197,1505,334],{"class":218},[197,1507,337],{"class":218},[197,1509,1510],{"class":340},"/login",[197,1512,337],{"class":218},[197,1514,407],{"class":218},[197,1516,1517],{"class":214},"Login",[197,1519,374],{"class":218},[197,1521,1458],{"class":225},[197,1523,345],{"class":218},[197,1525,1526,1528,1530,1532,1535],{"class":199,"line":943},[197,1527,1455],{"class":218},[197,1529,393],{"class":225},[197,1531,1435],{"class":218},[197,1533,1534],{"class":327},"placeholder",[197,1536,345],{"class":218},[197,1538,1540],{"class":199,"line":1539},17,[197,1541,1542],{"class":520},"          \u003C!-- Display loading state -->\n",[197,1544,1546,1549,1551,1554,1556,1558,1561,1563],{"class":199,"line":1545},18,[197,1547,1548],{"class":218},"          \u003C",[197,1550,1458],{"class":225},[197,1552,1553],{"class":327}," :loading",[197,1555,334],{"class":218},[197,1557,337],{"class":218},[197,1559,1560],{"class":340},"true",[197,1562,337],{"class":218},[197,1564,1565],{"class":218}," />\n",[197,1567,1569,1572,1574],{"class":199,"line":1568},19,[197,1570,1571],{"class":218},"        \u003C/",[197,1573,393],{"class":225},[197,1575,345],{"class":218},[197,1577,1579,1582,1584],{"class":199,"line":1578},20,[197,1580,1581],{"class":218},"      \u003C/",[197,1583,1448],{"class":225},[197,1585,345],{"class":218},[197,1587,1589,1592,1594],{"class":199,"line":1588},21,[197,1590,1591],{"class":218},"  \u003C/",[197,1593,393],{"class":225},[197,1595,345],{"class":218},[197,1597,1599,1601,1603],{"class":199,"line":1598},22,[197,1600,374],{"class":218},[197,1602,393],{"class":225},[197,1604,345],{"class":218},[1606,1607,1608],"style",{},"html pre.shiki code .s7zQu, html code.shiki .s7zQu{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .sfNiH, html code.shiki .sfNiH{--shiki-light:#FF5370;--shiki-default:#FF9CAC;--shiki-dark:#FF9CAC}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html pre.shiki code .sHdIc, html code.shiki .sHdIc{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#EEFFFF;--shiki-default-font-style:italic;--shiki-dark:#BABED8;--shiki-dark-font-style:italic}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}",{"title":193,"searchDepth":222,"depth":222,"links":1610},[1611,1615,1618,1621],{"id":173,"depth":222,"text":174,"children":1612},[1613,1614],{"id":178,"depth":235,"text":179},{"id":296,"depth":235,"text":297},{"id":475,"depth":222,"text":476,"children":1616},[1617],{"id":722,"depth":235,"text":723},{"id":949,"depth":222,"text":950,"children":1619},[1620],{"id":1076,"depth":235,"text":1077},{"id":1220,"depth":222,"text":1221},"Pre-render pages at build time for maximum performance and avoid server CPU usage.","md",null,{},{"title":102,"description":1622},"9fE0x3fF4IlurTvENmSJLZX58w9bxs2FFMWVCLpdF6E",[1629,1631],{"title":91,"path":92,"stem":93,"description":1630,"children":-1},"Learn how to cache API routes, server functions, and pages in your Nuxt application, with practical examples and best practices.",{"title":106,"path":107,"stem":108,"description":1632,"children":-1},"Build real-time experiences with NuxtHub.",1773885581434]