[{"data":1,"prerenderedAt":2044},["ShallowReactive",2],{"navigation":3,"-docs-tasks":402,"-docs-tasks-surround":2039},[4,93,226,232,387,399],{"title":5,"path":6,"stem":7,"children":8,"icon":92},"","/docs","1.docs/1.index",[9,12,17,22,27,32,37,42,47,52,57,62,67,72,77,82,87],{"title":10,"path":6,"stem":7,"icon":11},"Introduction","i-lucide-compass",{"title":13,"path":14,"stem":15,"icon":16},"Quick Start","/docs/quick-start","1.docs/2.quick-start","i-lucide-zap",{"title":18,"path":19,"stem":20,"icon":21},"Renderer","/docs/renderer","1.docs/4.renderer","ri:layout-masonry-line",{"title":23,"path":24,"stem":25,"icon":26},"Routing","/docs/routing","1.docs/5.routing","ri:direction-line",{"title":28,"path":29,"stem":30,"icon":31},"Assets","/docs/assets","1.docs/50.assets","ri:image-2-line",{"title":33,"path":34,"stem":35,"icon":36},"Configuration","/docs/configuration","1.docs/50.configuration","ri:settings-3-line",{"title":38,"path":39,"stem":40,"icon":41},"Database","/docs/database","1.docs/50.database","ri:database-2-line",{"title":43,"path":44,"stem":45,"icon":46},"Lifecycle","/docs/lifecycle","1.docs/50.lifecycle","i-lucide-layers",{"title":48,"path":49,"stem":50,"icon":51},"OpenAPI","/docs/openapi","1.docs/50.openapi","ri:contract-line",{"title":53,"path":54,"stem":55,"icon":56},"Plugins","/docs/plugins","1.docs/50.plugins","ri:plug-line",{"title":58,"path":59,"stem":60,"icon":61},"Tasks","/docs/tasks","1.docs/50.tasks","codicon:run-all",{"title":63,"path":64,"stem":65,"icon":66},"WebSocket","/docs/websocket","1.docs/50.websocket","ri:broadcast-fill",{"title":68,"path":69,"stem":70,"icon":71},"Server Entry","/docs/server-entry","1.docs/6.server-entry","ri:server-line",{"title":73,"path":74,"stem":75,"icon":76},"Cache","/docs/cache","1.docs/7.cache","ri:speed-line",{"title":78,"path":79,"stem":80,"icon":81},"KV Storage","/docs/storage","1.docs/8.storage","carbon:datastore",{"title":83,"path":84,"stem":85,"icon":86},"Migration Guide","/docs/migration","1.docs/99.migration","ri:arrow-right-up-line",{"title":88,"path":89,"stem":90,"icon":91},"Nightly Channel","/docs/nightly","1.docs/99.nightly","ri:moon-fill","i-lucide-book-open",{"title":94,"path":95,"stem":96,"children":97,"icon":99},"Deploy","/deploy","2.deploy/0.index",[98,100,121],{"title":94,"path":95,"stem":96,"icon":99},"ri:upload-cloud-2-line",{"title":101,"path":102,"stem":103,"children":104,"page":120},"Runtimes","/deploy/runtimes","2.deploy/10.runtimes",[105,110,115],{"title":106,"path":107,"stem":108,"icon":109},"Node.js","/deploy/runtimes/node","2.deploy/10.runtimes/1.node","akar-icons:node-fill",{"title":111,"path":112,"stem":113,"icon":114},"Bun","/deploy/runtimes/bun","2.deploy/10.runtimes/bun","simple-icons:bun",{"title":116,"path":117,"stem":118,"icon":119},"Deno","/deploy/runtimes/deno","2.deploy/10.runtimes/deno","simple-icons:deno",false,{"title":122,"path":123,"stem":124,"children":125,"page":120},"Providers","/deploy/providers","2.deploy/20.providers",[126,130,134,138,142,146,150,154,158,162,166,170,174,178,182,186,190,194,198,202,206,210,214,218,222],{"title":127,"path":128,"stem":129},"Alwaysdata","/deploy/providers/alwaysdata","2.deploy/20.providers/alwaysdata",{"title":131,"path":132,"stem":133},"AWS Lambda","/deploy/providers/aws","2.deploy/20.providers/aws",{"title":135,"path":136,"stem":137},"AWS Amplify","/deploy/providers/aws-amplify","2.deploy/20.providers/aws-amplify",{"title":139,"path":140,"stem":141},"Azure","/deploy/providers/azure","2.deploy/20.providers/azure",{"title":143,"path":144,"stem":145},"Cleavr","/deploy/providers/cleavr","2.deploy/20.providers/cleavr",{"title":147,"path":148,"stem":149},"Cloudflare","/deploy/providers/cloudflare","2.deploy/20.providers/cloudflare",{"title":151,"path":152,"stem":153},"Deno Deploy","/deploy/providers/deno-deploy","2.deploy/20.providers/deno-deploy",{"title":155,"path":156,"stem":157},"DigitalOcean","/deploy/providers/digitalocean","2.deploy/20.providers/digitalocean",{"title":159,"path":160,"stem":161},"EdgeOne Pages","/deploy/providers/edgeone","2.deploy/20.providers/edgeone",{"title":163,"path":164,"stem":165},"Firebase","/deploy/providers/firebase","2.deploy/20.providers/firebase",{"title":167,"path":168,"stem":169},"Flightcontrol","/deploy/providers/flightcontrol","2.deploy/20.providers/flightcontrol",{"title":171,"path":172,"stem":173},"Genezio","/deploy/providers/genezio","2.deploy/20.providers/genezio",{"title":175,"path":176,"stem":177},"GitHub Pages","/deploy/providers/github-pages","2.deploy/20.providers/github-pages",{"title":179,"path":180,"stem":181},"GitLab Pages","/deploy/providers/gitlab-pages","2.deploy/20.providers/gitlab-pages",{"title":183,"path":184,"stem":185},"Heroku","/deploy/providers/heroku","2.deploy/20.providers/heroku",{"title":187,"path":188,"stem":189},"IIS","/deploy/providers/iis","2.deploy/20.providers/iis",{"title":191,"path":192,"stem":193},"Koyeb","/deploy/providers/koyeb","2.deploy/20.providers/koyeb",{"title":195,"path":196,"stem":197},"Netlify","/deploy/providers/netlify","2.deploy/20.providers/netlify",{"title":199,"path":200,"stem":201},"Platform.sh","/deploy/providers/platform-sh","2.deploy/20.providers/platform-sh",{"title":203,"path":204,"stem":205},"Render.com","/deploy/providers/render","2.deploy/20.providers/render",{"title":207,"path":208,"stem":209},"StormKit","/deploy/providers/stormkit","2.deploy/20.providers/stormkit",{"title":211,"path":212,"stem":213},"Vercel","/deploy/providers/vercel","2.deploy/20.providers/vercel",{"title":215,"path":216,"stem":217},"Zeabur","/deploy/providers/zeabur","2.deploy/20.providers/zeabur",{"title":219,"path":220,"stem":221},"Zephyr Cloud","/deploy/providers/zephyr","2.deploy/20.providers/zephyr",{"title":223,"path":224,"stem":225},"Zerops","/deploy/providers/zerops","2.deploy/20.providers/zerops",{"title":227,"path":228,"stem":229,"children":230,"icon":36},"Config","/config","3.config/0.index",[231],{"title":227,"path":228,"stem":229,"icon":36},{"title":233,"path":234,"stem":235,"children":236,"icon":238},"Examples","/examples","4.examples/0.index",[237,239,244,249,254,259,263,268,273,278,283,288,293,297,302,306,310,315,320,325,330,335,340,345,350,355,359,364,369,373,378,383],{"title":233,"path":234,"stem":235,"icon":238},"i-lucide-folder-code",{"title":240,"path":241,"stem":242,"icon":243},"API Routes","/examples/api-routes","4.examples/api-routes","i-lucide-route",{"title":245,"path":246,"stem":247,"icon":248},"Auto Imports","/examples/auto-imports","4.examples/auto-imports","i-lucide-import",{"title":250,"path":251,"stem":252,"icon":253},"Cached Handler","/examples/cached-handler","4.examples/cached-handler","i-lucide-clock",{"title":255,"path":256,"stem":257,"icon":258},"Custom Error Handler","/examples/custom-error-handler","4.examples/custom-error-handler","i-lucide-alert-circle",{"title":38,"path":260,"stem":261,"icon":262},"/examples/database","4.examples/database","i-lucide-database",{"title":264,"path":265,"stem":266,"icon":267},"Elysia","/examples/elysia","4.examples/elysia","i-skill-icons-elysia-dark",{"title":269,"path":270,"stem":271,"icon":272},"Express","/examples/express","4.examples/express","i-simple-icons-express",{"title":274,"path":275,"stem":276,"icon":277},"Fastify","/examples/fastify","4.examples/fastify","i-simple-icons-fastify",{"title":279,"path":280,"stem":281,"icon":282},"Hello World","/examples/hello-world","4.examples/hello-world","i-lucide-sparkles",{"title":284,"path":285,"stem":286,"icon":287},"Hono","/examples/hono","4.examples/hono","i-logos-hono",{"title":289,"path":290,"stem":291,"icon":292},"Import Alias","/examples/import-alias","4.examples/import-alias","i-lucide-at-sign",{"title":294,"path":295,"stem":296,"icon":46},"Middleware","/examples/middleware","4.examples/middleware",{"title":298,"path":299,"stem":300,"icon":301},"Mono JSX","/examples/mono-jsx","4.examples/mono-jsx","i-lucide-brackets",{"title":303,"path":304,"stem":305,"icon":301},"Nano JSX","/examples/nano-jsx","4.examples/nano-jsx",{"title":53,"path":307,"stem":308,"icon":309},"/examples/plugins","4.examples/plugins","i-lucide-plug",{"title":311,"path":312,"stem":313,"icon":314},"Custom Renderer","/examples/renderer","4.examples/renderer","i-lucide-code",{"title":316,"path":317,"stem":318,"icon":319},"Runtime Config","/examples/runtime-config","4.examples/runtime-config","i-lucide-settings",{"title":321,"path":322,"stem":323,"icon":324},"Server Fetch","/examples/server-fetch","4.examples/server-fetch","i-lucide-arrow-right-left",{"title":326,"path":327,"stem":328,"icon":329},"Shiki","/examples/shiki","4.examples/shiki","i-lucide-highlighter",{"title":331,"path":332,"stem":333,"icon":334},"Virtual Routes","/examples/virtual-routes","4.examples/virtual-routes","i-lucide-box",{"title":336,"path":337,"stem":338,"icon":339},"Vite Nitro Plugin","/examples/vite-nitro-plugin","4.examples/vite-nitro-plugin","i-logos-vitejs",{"title":341,"path":342,"stem":343,"icon":344},"Vite RSC","/examples/vite-rsc","4.examples/vite-rsc","i-logos-react",{"title":346,"path":347,"stem":348,"icon":349},"Vite SSR HTML","/examples/vite-ssr-html","4.examples/vite-ssr-html","i-logos-html-5",{"title":351,"path":352,"stem":353,"icon":354},"SSR with Preact","/examples/vite-ssr-preact","4.examples/vite-ssr-preact","i-logos-preact",{"title":356,"path":357,"stem":358,"icon":344},"SSR with React","/examples/vite-ssr-react","4.examples/vite-ssr-react",{"title":360,"path":361,"stem":362,"icon":363},"SSR with SolidJS","/examples/vite-ssr-solid","4.examples/vite-ssr-solid","i-logos-solidjs-icon",{"title":365,"path":366,"stem":367,"icon":368},"SSR with TanStack Router","/examples/vite-ssr-tsr-react","4.examples/vite-ssr-tsr-react","i-simple-icons-tanstack",{"title":370,"path":371,"stem":372,"icon":368},"SSR with TanStack Start","/examples/vite-ssr-tss-react","4.examples/vite-ssr-tss-react",{"title":374,"path":375,"stem":376,"icon":377},"SSR with Vue Router","/examples/vite-ssr-vue-router","4.examples/vite-ssr-vue-router","i-logos-vue",{"title":379,"path":380,"stem":381,"icon":382},"Vite + tRPC","/examples/vite-trpc","4.examples/vite-trpc","i-simple-icons-trpc",{"title":63,"path":384,"stem":385,"icon":386},"/examples/websocket","4.examples/websocket","i-lucide-radio",{"title":388,"path":389,"stem":390,"children":391},"Blog","/blog","9.blog",[392,395],{"title":388,"path":389,"stem":393,"icon":394},"9.blog/index","i-lucide-file-text",{"title":396,"path":397,"stem":398,"icon":394},"Nitro v3 Beta is here!","/blog/v3-beta","9.blog/1.v3-beta",{"title":5,"path":400,"stem":401},"/","index",{"id":403,"title":58,"body":404,"description":2033,"extension":2034,"meta":2035,"navigation":2036,"path":59,"seo":2037,"stem":60,"__hash__":2038},"content/1.docs/50.tasks.md",{"type":405,"value":406,"toc":2011,"icon":61},"minimark",[407,412,427,430,514,518,525,540,546,657,662,669,708,818,823,831,866,919,923,926,1018,1029,1033,1036,1116,1122,1134,1148,1152,1237,1242,1245,1257,1339,1343,1354,1358,1474,1478,1484,1498,1504,1508,1511,1515,1522,1525,1654,1660,1666,1913,1919,1923,1932,1936,1954,1958,1981,1987,1991,1995,2002,2007],[408,409,411],"h2",{"id":410},"opt-in-to-the-experimental-feature","Opt-in to the experimental feature",[413,414,415],"important",{},[416,417,418,419,426],"p",{},"\nTasks support is currently experimental.\nSee ",[420,421,425],"a",{"href":422,"rel":423},"https://github.com/nitrojs/nitro/issues/1974",[424],"nofollow","nitrojs/nitro#1974"," for the relevant discussion.",[416,428,429],{},"In order to use the tasks API you need to enable experimental feature flag.",[431,432,437],"pre",{"className":433,"code":434,"filename":435,"language":436,"meta":5,"style":5},"language-ts shiki shiki-themes github-light github-dark github-dark","import { defineConfig } from \"nitro\";\n\nexport default defineConfig({\n  experimental: {\n    tasks: true\n  }\n})\n","nitro.config.ts","ts",[438,439,440,463,470,486,492,502,508],"code",{"__ignoreMap":5},[441,442,445,449,453,456,460],"span",{"class":443,"line":444},"line",1,[441,446,448],{"class":447},"so5gQ","import",[441,450,452],{"class":451},"slsVL"," { defineConfig } ",[441,454,455],{"class":447},"from",[441,457,459],{"class":458},"sfrk1"," \"nitro\"",[441,461,462],{"class":451},";\n",[441,464,466],{"class":443,"line":465},2,[441,467,469],{"emptyLinePlaceholder":468},true,"\n",[441,471,473,476,479,483],{"class":443,"line":472},3,[441,474,475],{"class":447},"export",[441,477,478],{"class":447}," default",[441,480,482],{"class":481},"shcOC"," defineConfig",[441,484,485],{"class":451},"({\n",[441,487,489],{"class":443,"line":488},4,[441,490,491],{"class":451},"  experimental: {\n",[441,493,495,498],{"class":443,"line":494},5,[441,496,497],{"class":451},"    tasks: ",[441,499,501],{"class":500},"suiK_","true\n",[441,503,505],{"class":443,"line":504},6,[441,506,507],{"class":451},"  }\n",[441,509,511],{"class":443,"line":510},7,[441,512,513],{"class":451},"})\n",[408,515,517],{"id":516},"define-tasks","Define tasks",[416,519,520,521,524],{},"Tasks can be defined in ",[438,522,523],{},"tasks/[name].ts"," files.",[416,526,527,528,531,532,535,536,539],{},"Nested directories are supported. The task name will be joined with ",[438,529,530],{},":",". (Example: ",[438,533,534],{},"tasks/db/migrate.ts"," task name will be ",[438,537,538],{},"db:migrate",")",[416,541,542],{},[543,544,545],"strong",{},"Example:",[431,547,549],{"className":433,"code":548,"filename":534,"language":436,"meta":5,"style":5},"export default defineTask({\n  meta: {\n    name: \"db:migrate\",\n    description: \"Run database migrations\",\n  },\n  run({ payload, context }) {\n    console.log(\"Running DB migration task...\");\n    return { result: \"Success\" };\n  },\n});\n",[438,550,551,562,567,578,588,593,614,631,646,651],{"__ignoreMap":5},[441,552,553,555,557,560],{"class":443,"line":444},[441,554,475],{"class":447},[441,556,478],{"class":447},[441,558,559],{"class":481}," defineTask",[441,561,485],{"class":451},[441,563,564],{"class":443,"line":465},[441,565,566],{"class":451},"  meta: {\n",[441,568,569,572,575],{"class":443,"line":472},[441,570,571],{"class":451},"    name: ",[441,573,574],{"class":458},"\"db:migrate\"",[441,576,577],{"class":451},",\n",[441,579,580,583,586],{"class":443,"line":488},[441,581,582],{"class":451},"    description: ",[441,584,585],{"class":458},"\"Run database migrations\"",[441,587,577],{"class":451},[441,589,590],{"class":443,"line":494},[441,591,592],{"class":451},"  },\n",[441,594,595,598,601,605,608,611],{"class":443,"line":504},[441,596,597],{"class":481},"  run",[441,599,600],{"class":451},"({ ",[441,602,604],{"class":603},"sQHwn","payload",[441,606,607],{"class":451},", ",[441,609,610],{"class":603},"context",[441,612,613],{"class":451}," }) {\n",[441,615,616,619,622,625,628],{"class":443,"line":510},[441,617,618],{"class":451},"    console.",[441,620,621],{"class":481},"log",[441,623,624],{"class":451},"(",[441,626,627],{"class":458},"\"Running DB migration task...\"",[441,629,630],{"class":451},");\n",[441,632,634,637,640,643],{"class":443,"line":633},8,[441,635,636],{"class":447},"    return",[441,638,639],{"class":451}," { result: ",[441,641,642],{"class":458},"\"Success\"",[441,644,645],{"class":451}," };\n",[441,647,649],{"class":443,"line":648},9,[441,650,592],{"class":451},[441,652,654],{"class":443,"line":653},10,[441,655,656],{"class":451},"});\n",[658,659,661],"h3",{"id":660},"task-interface","Task interface",[416,663,664,665,668],{},"The ",[438,666,667],{},"defineTask"," helper accepts an object with the following properties:",[670,671,672,689],"ul",{},[673,674,675,680,681,684,685,688],"li",{},[543,676,677],{},[438,678,679],{},"meta"," (optional): An object with optional ",[438,682,683],{},"name"," and ",[438,686,687],{},"description"," string fields used for display in the dev server and CLI.",[673,690,691,696,697,703,704,707],{},[543,692,693],{},[438,694,695],{},"run"," (required): A function that receives a ",[420,698,700],{"href":699},"#taskevent",[438,701,702],{},"TaskEvent"," and returns (or resolves to) an object with an optional ",[438,705,706],{},"result"," property.",[431,709,711],{"className":433,"code":710,"language":436,"meta":5,"style":5},"interface Task\u003CRT = unknown> {\n  meta?: { name?: string; description?: string };\n  run(event: TaskEvent): { result?: RT } | Promise\u003C{ result?: RT }>;\n}\n",[438,712,713,736,765,813],{"__ignoreMap":5},[441,714,715,718,721,724,727,730,733],{"class":443,"line":444},[441,716,717],{"class":447},"interface",[441,719,720],{"class":481}," Task",[441,722,723],{"class":451},"\u003C",[441,725,726],{"class":481},"RT",[441,728,729],{"class":447}," =",[441,731,732],{"class":500}," unknown",[441,734,735],{"class":451},"> {\n",[441,737,738,741,744,747,749,751,754,757,759,761,763],{"class":443,"line":465},[441,739,740],{"class":603},"  meta",[441,742,743],{"class":447},"?:",[441,745,746],{"class":451}," { ",[441,748,683],{"class":603},[441,750,743],{"class":447},[441,752,753],{"class":500}," string",[441,755,756],{"class":451},"; ",[441,758,687],{"class":603},[441,760,743],{"class":447},[441,762,753],{"class":500},[441,764,645],{"class":451},[441,766,767,769,771,774,776,779,781,783,785,787,789,792,795,798,801,804,806,808,810],{"class":443,"line":472},[441,768,597],{"class":481},[441,770,624],{"class":451},[441,772,773],{"class":603},"event",[441,775,530],{"class":447},[441,777,778],{"class":481}," TaskEvent",[441,780,539],{"class":451},[441,782,530],{"class":447},[441,784,746],{"class":451},[441,786,706],{"class":603},[441,788,743],{"class":447},[441,790,791],{"class":481}," RT",[441,793,794],{"class":451}," } ",[441,796,797],{"class":447},"|",[441,799,800],{"class":481}," Promise",[441,802,803],{"class":451},"\u003C{ ",[441,805,706],{"class":603},[441,807,743],{"class":447},[441,809,791],{"class":481},[441,811,812],{"class":451}," }>;\n",[441,814,815],{"class":443,"line":488},[441,816,817],{"class":451},"}\n",[658,819,821],{"id":820},"taskevent",[438,822,702],{},[416,824,664,825,827,828,830],{},[438,826,695],{}," function receives a ",[438,829,702],{}," object with the following properties:",[670,832,833,840,851],{},[673,834,835,839],{},[543,836,837],{},[438,838,683],{},": The name of the task being executed.",[673,841,842,846,847,850],{},[543,843,844],{},[438,845,604],{},": An object (",[438,848,849],{},"Record\u003Cstring, unknown>",") containing any data passed to the task.",[673,852,853,857,858,861,862,865],{},[543,854,855],{},[438,856,610],{},": A ",[438,859,860],{},"TaskContext"," object (may include ",[438,863,864],{},"waitUntil"," depending on the runtime).",[431,867,869],{"className":433,"code":868,"language":436,"meta":5,"style":5},"interface TaskEvent {\n  name: string;\n  payload: TaskPayload;\n  context: TaskContext;\n}\n",[438,870,871,880,891,903,915],{"__ignoreMap":5},[441,872,873,875,877],{"class":443,"line":444},[441,874,717],{"class":447},[441,876,778],{"class":481},[441,878,879],{"class":451}," {\n",[441,881,882,885,887,889],{"class":443,"line":465},[441,883,884],{"class":603},"  name",[441,886,530],{"class":447},[441,888,753],{"class":500},[441,890,462],{"class":451},[441,892,893,896,898,901],{"class":443,"line":472},[441,894,895],{"class":603},"  payload",[441,897,530],{"class":447},[441,899,900],{"class":481}," TaskPayload",[441,902,462],{"class":451},[441,904,905,908,910,913],{"class":443,"line":488},[441,906,907],{"class":603},"  context",[441,909,530],{"class":447},[441,911,912],{"class":481}," TaskContext",[441,914,462],{"class":451},[441,916,917],{"class":443,"line":494},[441,918,817],{"class":451},[658,920,922],{"id":921},"registering-tasks-via-config","Registering tasks via config",[416,924,925],{},"In addition to file-based scanning, tasks can be registered directly in the Nitro config. This is useful for tasks provided by modules or pointing to custom handler paths.",[431,927,929],{"className":433,"code":928,"filename":435,"language":436,"meta":5,"style":5},"import { defineConfig } from \"nitro\";\n\nexport default defineConfig({\n  experimental: {\n    tasks: true\n  },\n  tasks: {\n    \"db:migrate\": {\n      handler: \"./tasks/custom-migrate.ts\",\n      description: \"Run database migrations\"\n    }\n  }\n})\n",[438,930,931,943,947,957,961,967,971,976,984,994,1002,1008,1013],{"__ignoreMap":5},[441,932,933,935,937,939,941],{"class":443,"line":444},[441,934,448],{"class":447},[441,936,452],{"class":451},[441,938,455],{"class":447},[441,940,459],{"class":458},[441,942,462],{"class":451},[441,944,945],{"class":443,"line":465},[441,946,469],{"emptyLinePlaceholder":468},[441,948,949,951,953,955],{"class":443,"line":472},[441,950,475],{"class":447},[441,952,478],{"class":447},[441,954,482],{"class":481},[441,956,485],{"class":451},[441,958,959],{"class":443,"line":488},[441,960,491],{"class":451},[441,962,963,965],{"class":443,"line":494},[441,964,497],{"class":451},[441,966,501],{"class":500},[441,968,969],{"class":443,"line":504},[441,970,592],{"class":451},[441,972,973],{"class":443,"line":510},[441,974,975],{"class":451},"  tasks: {\n",[441,977,978,981],{"class":443,"line":633},[441,979,980],{"class":458},"    \"db:migrate\"",[441,982,983],{"class":451},": {\n",[441,985,986,989,992],{"class":443,"line":648},[441,987,988],{"class":451},"      handler: ",[441,990,991],{"class":458},"\"./tasks/custom-migrate.ts\"",[441,993,577],{"class":451},[441,995,996,999],{"class":443,"line":653},[441,997,998],{"class":451},"      description: ",[441,1000,1001],{"class":458},"\"Run database migrations\"\n",[441,1003,1005],{"class":443,"line":1004},11,[441,1006,1007],{"class":451},"    }\n",[441,1009,1011],{"class":443,"line":1010},12,[441,1012,507],{"class":451},[441,1014,1016],{"class":443,"line":1015},13,[441,1017,513],{"class":451},[416,1019,1020,1021,1024,1025,1028],{},"If a task is both scanned from the ",[438,1022,1023],{},"tasks/"," directory and defined in the config, the config-defined ",[438,1026,1027],{},"handler"," takes precedence.",[408,1030,1032],{"id":1031},"scheduled-tasks","Scheduled tasks",[416,1034,1035],{},"You can define scheduled tasks using Nitro configuration to automatically run after each period of time.",[431,1037,1039],{"className":433,"code":1038,"filename":435,"language":436,"meta":5,"style":5},"import { defineConfig } from \"nitro\";\n\nexport default defineConfig({\n  scheduledTasks: {\n    // Run `cms:update` task every minute\n    '* * * * *': ['cms:update'],\n    // Run a single task (string shorthand)\n    '0 * * * *': 'db:cleanup'\n  }\n})\n",[438,1040,1041,1053,1057,1067,1072,1078,1092,1097,1108,1112],{"__ignoreMap":5},[441,1042,1043,1045,1047,1049,1051],{"class":443,"line":444},[441,1044,448],{"class":447},[441,1046,452],{"class":451},[441,1048,455],{"class":447},[441,1050,459],{"class":458},[441,1052,462],{"class":451},[441,1054,1055],{"class":443,"line":465},[441,1056,469],{"emptyLinePlaceholder":468},[441,1058,1059,1061,1063,1065],{"class":443,"line":472},[441,1060,475],{"class":447},[441,1062,478],{"class":447},[441,1064,482],{"class":481},[441,1066,485],{"class":451},[441,1068,1069],{"class":443,"line":488},[441,1070,1071],{"class":451},"  scheduledTasks: {\n",[441,1073,1074],{"class":443,"line":494},[441,1075,1077],{"class":1076},"sCsY4","    // Run `cms:update` task every minute\n",[441,1079,1080,1083,1086,1089],{"class":443,"line":504},[441,1081,1082],{"class":458},"    '* * * * *'",[441,1084,1085],{"class":451},": [",[441,1087,1088],{"class":458},"'cms:update'",[441,1090,1091],{"class":451},"],\n",[441,1093,1094],{"class":443,"line":510},[441,1095,1096],{"class":1076},"    // Run a single task (string shorthand)\n",[441,1098,1099,1102,1105],{"class":443,"line":633},[441,1100,1101],{"class":458},"    '0 * * * *'",[441,1103,1104],{"class":451},": ",[441,1106,1107],{"class":458},"'db:cleanup'\n",[441,1109,1110],{"class":443,"line":648},[441,1111,507],{"class":451},[441,1113,1114],{"class":443,"line":653},[441,1115,513],{"class":451},[416,1117,664,1118,1121],{},[438,1119,1120],{},"scheduledTasks"," config maps cron expressions to either a single task name (string) or an array of task names. When multiple tasks are assigned to the same cron expression, they run in parallel.",[1123,1124,1125],"tip",{},[416,1126,1127,1128,1133],{},"\nYou can use ",[420,1129,1132],{"href":1130,"rel":1131},"https://crontab.guru/",[424],"crontab.guru"," to easily generate and understand cron tab patterns.",[416,1135,1136,1137,1139,1140,1143,1144,1147],{},"When a scheduled task runs, it automatically receives a ",[438,1138,604],{}," with ",[438,1141,1142],{},"scheduledTime"," set to the current timestamp (",[438,1145,1146],{},"Date.now()",").",[658,1149,1151],{"id":1150},"platform-support","Platform support",[670,1153,1154,1193,1212,1234],{},[673,1155,1156,607,1161,607,1166,607,1171,607,1176,684,1181,1186,1187,1192],{},[543,1157,1158],{},[438,1159,1160],{},"dev",[543,1162,1163],{},[438,1164,1165],{},"node_server",[543,1167,1168],{},[438,1169,1170],{},"node_cluster",[543,1172,1173],{},[438,1174,1175],{},"node_middleware",[543,1177,1178],{},[438,1179,1180],{},"bun",[543,1182,1183],{},[438,1184,1185],{},"deno_server"," presets are supported with the ",[420,1188,1191],{"href":1189,"rel":1190},"https://croner.56k.guru/",[424],"croner"," engine.",[673,1194,1195,684,1200,1205,1206,1211],{},[543,1196,1197],{},[438,1198,1199],{},"cloudflare_module",[543,1201,1202],{},[438,1203,1204],{},"cloudflare_pages"," presets have native integration with ",[420,1207,1210],{"href":1208,"rel":1209},"https://developers.cloudflare.com/workers/configuration/cron-triggers/",[424],"Cron Triggers",". Nitro automatically generates the cron triggers in the wrangler config at build time - no manual wrangler setup required.",[673,1213,1214,1219,1220,1225,1226,1229,1230,1233],{},[543,1215,1216],{},[438,1217,1218],{},"vercel"," preset has native integration with ",[420,1221,1224],{"href":1222,"rel":1223},"https://vercel.com/docs/cron-jobs",[424],"Vercel Cron Jobs",". Nitro automatically generates the cron job configuration at build time - no manual ",[438,1227,1228],{},"vercel.json"," setup required. You can secure cron endpoints by setting the ",[438,1231,1232],{},"CRON_SECRET"," environment variable.",[673,1235,1236],{},"More presets (with native primitives support) are planned to be supported!",[408,1238,1240],{"id":1239},"waituntil",[438,1241,864],{},[416,1243,1244],{},"When running background tasks, you might want to make sure the server or worker waits until the task is done.",[416,1246,1247,1248,1251,1252,1256],{},"An optional ",[438,1249,1250],{},"context.waitUntil"," function ",[1253,1254,1255],"em",{},"might"," be available depending on the runtime.",[431,1258,1260],{"className":433,"code":1259,"language":436,"meta":5,"style":5},"export default defineTask({\n  run({ context }) {\n    const promise = fetch(...)\n    context.waitUntil?.(promise);\n    await promise;\n    return { result: \"Success\" };\n  },\n});\n",[438,1261,1262,1272,1282,1303,1313,1321,1331,1335],{"__ignoreMap":5},[441,1263,1264,1266,1268,1270],{"class":443,"line":444},[441,1265,475],{"class":447},[441,1267,478],{"class":447},[441,1269,559],{"class":481},[441,1271,485],{"class":451},[441,1273,1274,1276,1278,1280],{"class":443,"line":465},[441,1275,597],{"class":481},[441,1277,600],{"class":451},[441,1279,610],{"class":603},[441,1281,613],{"class":451},[441,1283,1284,1287,1290,1292,1295,1297,1300],{"class":443,"line":472},[441,1285,1286],{"class":447},"    const",[441,1288,1289],{"class":500}," promise",[441,1291,729],{"class":447},[441,1293,1294],{"class":481}," fetch",[441,1296,624],{"class":451},[441,1298,1299],{"class":447},"...",[441,1301,1302],{"class":451},")\n",[441,1304,1305,1308,1310],{"class":443,"line":488},[441,1306,1307],{"class":451},"    context.",[441,1309,864],{"class":481},[441,1311,1312],{"class":451},"?.(promise);\n",[441,1314,1315,1318],{"class":443,"line":494},[441,1316,1317],{"class":447},"    await",[441,1319,1320],{"class":451}," promise;\n",[441,1322,1323,1325,1327,1329],{"class":443,"line":504},[441,1324,636],{"class":447},[441,1326,639],{"class":451},[441,1328,642],{"class":458},[441,1330,645],{"class":451},[441,1332,1333],{"class":443,"line":510},[441,1334,592],{"class":451},[441,1336,1337],{"class":443,"line":633},[441,1338,656],{"class":451},[408,1340,1342],{"id":1341},"programmatically-run-tasks","Programmatically run tasks",[416,1344,1345,1346,1349,1350,1353],{},"To manually run tasks, you can use ",[438,1347,1348],{},"runTask(name, { payload?, context? })"," utility from ",[438,1351,1352],{},"nitro/task",".",[416,1355,1356],{},[543,1357,545],{},[431,1359,1362],{"className":433,"code":1360,"filename":1361,"language":436,"meta":5,"style":5},"import { defineHandler } from \"nitro\";\n\nexport default defineHandler(async (event) => {\n  // IMPORTANT: Authenticate user and validate payload!\n  const payload = Object.fromEntries(event.url.searchParams);\n  const { result } = await runTask(\"db:migrate\", { payload });\n\n  return { result };\n});\n","api/migrate.ts",[438,1363,1364,1377,1381,1408,1413,1432,1458,1462,1470],{"__ignoreMap":5},[441,1365,1366,1368,1371,1373,1375],{"class":443,"line":444},[441,1367,448],{"class":447},[441,1369,1370],{"class":451}," { defineHandler } ",[441,1372,455],{"class":447},[441,1374,459],{"class":458},[441,1376,462],{"class":451},[441,1378,1379],{"class":443,"line":465},[441,1380,469],{"emptyLinePlaceholder":468},[441,1382,1383,1385,1387,1390,1392,1395,1398,1400,1403,1406],{"class":443,"line":472},[441,1384,475],{"class":447},[441,1386,478],{"class":447},[441,1388,1389],{"class":481}," defineHandler",[441,1391,624],{"class":451},[441,1393,1394],{"class":447},"async",[441,1396,1397],{"class":451}," (",[441,1399,773],{"class":603},[441,1401,1402],{"class":451},") ",[441,1404,1405],{"class":447},"=>",[441,1407,879],{"class":451},[441,1409,1410],{"class":443,"line":488},[441,1411,1412],{"class":1076},"  // IMPORTANT: Authenticate user and validate payload!\n",[441,1414,1415,1418,1421,1423,1426,1429],{"class":443,"line":494},[441,1416,1417],{"class":447},"  const",[441,1419,1420],{"class":500}," payload",[441,1422,729],{"class":447},[441,1424,1425],{"class":451}," Object.",[441,1427,1428],{"class":481},"fromEntries",[441,1430,1431],{"class":451},"(event.url.searchParams);\n",[441,1433,1434,1436,1438,1440,1442,1445,1448,1451,1453,1455],{"class":443,"line":504},[441,1435,1417],{"class":447},[441,1437,746],{"class":451},[441,1439,706],{"class":500},[441,1441,794],{"class":451},[441,1443,1444],{"class":447},"=",[441,1446,1447],{"class":447}," await",[441,1449,1450],{"class":481}," runTask",[441,1452,624],{"class":451},[441,1454,574],{"class":458},[441,1456,1457],{"class":451},", { payload });\n",[441,1459,1460],{"class":443,"line":510},[441,1461,469],{"emptyLinePlaceholder":468},[441,1463,1464,1467],{"class":443,"line":633},[441,1465,1466],{"class":447},"  return",[441,1468,1469],{"class":451}," { result };\n",[441,1471,1472],{"class":443,"line":648},[441,1473,656],{"class":451},[658,1475,1477],{"id":1476},"error-handling","Error handling",[416,1479,1480,1483],{},[438,1481,1482],{},"runTask"," throws an HTTP error if:",[670,1485,1486,1492],{},[673,1487,1488,1489,1147],{},"The task does not exist (status ",[438,1490,1491],{},"404",[673,1493,1494,1495,1147],{},"The task has no handler implementation (status ",[438,1496,1497],{},"501",[416,1499,1500,1501,1503],{},"Any errors thrown inside the task's ",[438,1502,695],{}," function will propagate to the caller.",[408,1505,1507],{"id":1506},"run-tasks-with-dev-server","Run tasks with dev server",[416,1509,1510],{},"Nitro's built-in dev server exposes tasks to be easily executed without programmatic usage.",[658,1512,1514],{"id":1513},"using-api-routes","Using API routes",[1516,1517,1519],"h4",{"id":1518},"_nitrotasks",[438,1520,1521],{},"/_nitro/tasks",[416,1523,1524],{},"This endpoint returns a list of available task names and their meta.",[431,1526,1530],{"className":1527,"code":1528,"language":1529,"meta":5,"style":5},"language-json shiki shiki-themes github-light github-dark github-dark","// [GET] /_nitro/tasks\n{\n  \"tasks\": {\n    \"db:migrate\": {\n      \"description\": \"Run database migrations\"\n    },\n     \"cms:update\": {\n      \"description\": \"Update CMS content\"\n    }\n  },\n  \"scheduledTasks\": [\n    {\n      \"cron\": \"* * * * *\",\n      \"tasks\": [\n        \"cms:update\"\n      ]\n    }\n  ]\n}\n","json",[438,1531,1532,1537,1542,1549,1555,1564,1569,1576,1585,1589,1593,1601,1606,1618,1626,1632,1638,1643,1649],{"__ignoreMap":5},[441,1533,1534],{"class":443,"line":444},[441,1535,1536],{"class":1076},"// [GET] /_nitro/tasks\n",[441,1538,1539],{"class":443,"line":465},[441,1540,1541],{"class":451},"{\n",[441,1543,1544,1547],{"class":443,"line":472},[441,1545,1546],{"class":500},"  \"tasks\"",[441,1548,983],{"class":451},[441,1550,1551,1553],{"class":443,"line":488},[441,1552,980],{"class":500},[441,1554,983],{"class":451},[441,1556,1557,1560,1562],{"class":443,"line":494},[441,1558,1559],{"class":500},"      \"description\"",[441,1561,1104],{"class":451},[441,1563,1001],{"class":458},[441,1565,1566],{"class":443,"line":504},[441,1567,1568],{"class":451},"    },\n",[441,1570,1571,1574],{"class":443,"line":510},[441,1572,1573],{"class":500},"     \"cms:update\"",[441,1575,983],{"class":451},[441,1577,1578,1580,1582],{"class":443,"line":633},[441,1579,1559],{"class":500},[441,1581,1104],{"class":451},[441,1583,1584],{"class":458},"\"Update CMS content\"\n",[441,1586,1587],{"class":443,"line":648},[441,1588,1007],{"class":451},[441,1590,1591],{"class":443,"line":653},[441,1592,592],{"class":451},[441,1594,1595,1598],{"class":443,"line":1004},[441,1596,1597],{"class":500},"  \"scheduledTasks\"",[441,1599,1600],{"class":451},": [\n",[441,1602,1603],{"class":443,"line":1010},[441,1604,1605],{"class":451},"    {\n",[441,1607,1608,1611,1613,1616],{"class":443,"line":1015},[441,1609,1610],{"class":500},"      \"cron\"",[441,1612,1104],{"class":451},[441,1614,1615],{"class":458},"\"* * * * *\"",[441,1617,577],{"class":451},[441,1619,1621,1624],{"class":443,"line":1620},14,[441,1622,1623],{"class":500},"      \"tasks\"",[441,1625,1600],{"class":451},[441,1627,1629],{"class":443,"line":1628},15,[441,1630,1631],{"class":458},"        \"cms:update\"\n",[441,1633,1635],{"class":443,"line":1634},16,[441,1636,1637],{"class":451},"      ]\n",[441,1639,1641],{"class":443,"line":1640},17,[441,1642,1007],{"class":451},[441,1644,1646],{"class":443,"line":1645},18,[441,1647,1648],{"class":451},"  ]\n",[441,1650,1652],{"class":443,"line":1651},19,[441,1653,817],{"class":451},[1516,1655,1657],{"id":1656},"_nitrotasksname",[438,1658,1659],{},"/_nitro/tasks/:name",[416,1661,1662,1663,707],{},"This endpoint executes a task. You can provide a payload using both query parameters and body JSON payload. The payload sent in the JSON body payload must be under the ",[438,1664,1665],{},"\"payload\"",[1667,1668,1669,1753,1802],"code-group",{},[431,1670,1673],{"className":433,"code":1671,"filename":1672,"language":436,"meta":5,"style":5},"export default defineTask({\n  meta: {\n    name: \"echo:payload\",\n    description: \"Returns the provided payload\",\n  },\n  run({ payload, context }) {\n    console.log(\"Running echo task...\");\n    return { result: payload };\n  },\n});\n","tasks/echo/payload.ts",[438,1674,1675,1685,1689,1698,1707,1711,1725,1738,1745,1749],{"__ignoreMap":5},[441,1676,1677,1679,1681,1683],{"class":443,"line":444},[441,1678,475],{"class":447},[441,1680,478],{"class":447},[441,1682,559],{"class":481},[441,1684,485],{"class":451},[441,1686,1687],{"class":443,"line":465},[441,1688,566],{"class":451},[441,1690,1691,1693,1696],{"class":443,"line":472},[441,1692,571],{"class":451},[441,1694,1695],{"class":458},"\"echo:payload\"",[441,1697,577],{"class":451},[441,1699,1700,1702,1705],{"class":443,"line":488},[441,1701,582],{"class":451},[441,1703,1704],{"class":458},"\"Returns the provided payload\"",[441,1706,577],{"class":451},[441,1708,1709],{"class":443,"line":494},[441,1710,592],{"class":451},[441,1712,1713,1715,1717,1719,1721,1723],{"class":443,"line":504},[441,1714,597],{"class":481},[441,1716,600],{"class":451},[441,1718,604],{"class":603},[441,1720,607],{"class":451},[441,1722,610],{"class":603},[441,1724,613],{"class":451},[441,1726,1727,1729,1731,1733,1736],{"class":443,"line":510},[441,1728,618],{"class":451},[441,1730,621],{"class":481},[441,1732,624],{"class":451},[441,1734,1735],{"class":458},"\"Running echo task...\"",[441,1737,630],{"class":451},[441,1739,1740,1742],{"class":443,"line":633},[441,1741,636],{"class":447},[441,1743,1744],{"class":451}," { result: payload };\n",[441,1746,1747],{"class":443,"line":648},[441,1748,592],{"class":451},[441,1750,1751],{"class":443,"line":653},[441,1752,656],{"class":451},[431,1754,1757],{"className":1527,"code":1755,"filename":1756,"language":1529,"meta":5,"style":5},"// [GET] /_nitro/tasks/echo:payload?field=value&array=1&array=2\n{\n  \"field\": \"value\",\n  \"array\": [\"1\", \"2\"]\n}\n","GET",[438,1758,1759,1764,1768,1780,1798],{"__ignoreMap":5},[441,1760,1761],{"class":443,"line":444},[441,1762,1763],{"class":1076},"// [GET] /_nitro/tasks/echo:payload?field=value&array=1&array=2\n",[441,1765,1766],{"class":443,"line":465},[441,1767,1541],{"class":451},[441,1769,1770,1773,1775,1778],{"class":443,"line":472},[441,1771,1772],{"class":500},"  \"field\"",[441,1774,1104],{"class":451},[441,1776,1777],{"class":458},"\"value\"",[441,1779,577],{"class":451},[441,1781,1782,1785,1787,1790,1792,1795],{"class":443,"line":488},[441,1783,1784],{"class":500},"  \"array\"",[441,1786,1085],{"class":451},[441,1788,1789],{"class":458},"\"1\"",[441,1791,607],{"class":451},[441,1793,1794],{"class":458},"\"2\"",[441,1796,1797],{"class":451},"]\n",[441,1799,1800],{"class":443,"line":494},[441,1801,817],{"class":451},[431,1803,1806],{"className":1527,"code":1804,"filename":1805,"language":1529,"meta":5,"style":5},"/**\n * [POST] /_nitro/tasks/echo:payload?field=value\n * body: {\n *   \"payload\": {\n *     \"answer\": 42,\n *     \"nested\": {\n *       \"value\": true\n *     }\n *   }\n * }\n */\n{\n  \"field\": \"value\",\n  \"answer\": 42,\n  \"nested\": {\n    \"value\": true\n  }\n}\n","POST",[438,1807,1808,1813,1818,1823,1828,1833,1838,1843,1848,1853,1858,1863,1867,1877,1889,1896,1905,1909],{"__ignoreMap":5},[441,1809,1810],{"class":443,"line":444},[441,1811,1812],{"class":1076},"/**\n",[441,1814,1815],{"class":443,"line":465},[441,1816,1817],{"class":1076}," * [POST] /_nitro/tasks/echo:payload?field=value\n",[441,1819,1820],{"class":443,"line":472},[441,1821,1822],{"class":1076}," * body: {\n",[441,1824,1825],{"class":443,"line":488},[441,1826,1827],{"class":1076}," *   \"payload\": {\n",[441,1829,1830],{"class":443,"line":494},[441,1831,1832],{"class":1076}," *     \"answer\": 42,\n",[441,1834,1835],{"class":443,"line":504},[441,1836,1837],{"class":1076}," *     \"nested\": {\n",[441,1839,1840],{"class":443,"line":510},[441,1841,1842],{"class":1076}," *       \"value\": true\n",[441,1844,1845],{"class":443,"line":633},[441,1846,1847],{"class":1076}," *     }\n",[441,1849,1850],{"class":443,"line":648},[441,1851,1852],{"class":1076}," *   }\n",[441,1854,1855],{"class":443,"line":653},[441,1856,1857],{"class":1076}," * }\n",[441,1859,1860],{"class":443,"line":1004},[441,1861,1862],{"class":1076}," */\n",[441,1864,1865],{"class":443,"line":1010},[441,1866,1541],{"class":451},[441,1868,1869,1871,1873,1875],{"class":443,"line":1015},[441,1870,1772],{"class":500},[441,1872,1104],{"class":451},[441,1874,1777],{"class":458},[441,1876,577],{"class":451},[441,1878,1879,1882,1884,1887],{"class":443,"line":1620},[441,1880,1881],{"class":500},"  \"answer\"",[441,1883,1104],{"class":451},[441,1885,1886],{"class":500},"42",[441,1888,577],{"class":451},[441,1890,1891,1894],{"class":443,"line":1628},[441,1892,1893],{"class":500},"  \"nested\"",[441,1895,983],{"class":451},[441,1897,1898,1901,1903],{"class":443,"line":1634},[441,1899,1900],{"class":500},"    \"value\"",[441,1902,1104],{"class":451},[441,1904,501],{"class":500},[441,1906,1907],{"class":443,"line":1640},[441,1908,507],{"class":451},[441,1910,1911],{"class":443,"line":1645},[441,1912,817],{"class":451},[1914,1915,1916],"note",{},[416,1917,1918],{},"\nThe JSON payload included in the body will overwrite the keys present in the query params.",[658,1920,1922],{"id":1921},"using-cli","Using CLI",[413,1924,1925],{},[416,1926,1927,1928,1931],{},"\nIt is only possible to run these commands while the ",[543,1929,1930],{},"dev server is running",". You should run them in a second terminal.",[1516,1933,1935],{"id":1934},"list-tasks","List tasks",[431,1937,1941],{"className":1938,"code":1939,"language":1940,"meta":5,"style":5},"language-sh shiki shiki-themes github-light github-dark github-dark","nitro task list\n","sh",[438,1942,1943],{"__ignoreMap":5},[441,1944,1945,1948,1951],{"class":443,"line":444},[441,1946,1947],{"class":481},"nitro",[441,1949,1950],{"class":458}," task",[441,1952,1953],{"class":458}," list\n",[1516,1955,1957],{"id":1956},"run-a-task","Run a task",[431,1959,1961],{"className":1938,"code":1960,"language":1940,"meta":5,"style":5},"nitro task run db:migrate --payload \"{}\"\n",[438,1962,1963],{"__ignoreMap":5},[441,1964,1965,1967,1969,1972,1975,1978],{"class":443,"line":444},[441,1966,1947],{"class":481},[441,1968,1950],{"class":458},[441,1970,1971],{"class":458}," run",[441,1973,1974],{"class":458}," db:migrate",[441,1976,1977],{"class":500}," --payload",[441,1979,1980],{"class":458}," \"{}\"\n",[416,1982,664,1983,1986],{},[438,1984,1985],{},"--payload"," flag accepts a JSON string that will be parsed and passed to the task. If the value is not a valid JSON object, the task runs without a payload.",[408,1988,1990],{"id":1989},"notes","Notes",[658,1992,1994],{"id":1993},"concurrency","Concurrency",[416,1996,1997,1998,2001],{},"Each task can have ",[543,1999,2000],{},"one running instance",". Calling a task of same name multiple times in parallel, results in calling it once and all callers will get the same return value.",[1914,2003,2004],{},[416,2005,2006],{},"\nNitro tasks can be running multiple times and in parallel.",[2008,2009,2010],"style",{},"html pre.shiki code .so5gQ, html code.shiki .so5gQ{--shiki-light:#D73A49;--shiki-default:#F97583;--shiki-dark:#F97583}html pre.shiki code .slsVL, html code.shiki .slsVL{--shiki-light:#24292E;--shiki-default:#E1E4E8;--shiki-dark:#E1E4E8}html pre.shiki code .sfrk1, html code.shiki .sfrk1{--shiki-light:#032F62;--shiki-default:#9ECBFF;--shiki-dark:#9ECBFF}html pre.shiki code .shcOC, html code.shiki .shcOC{--shiki-light:#6F42C1;--shiki-default:#B392F0;--shiki-dark:#B392F0}html pre.shiki code .suiK_, html code.shiki .suiK_{--shiki-light:#005CC5;--shiki-default:#79B8FF;--shiki-dark:#79B8FF}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 .sQHwn, html code.shiki .sQHwn{--shiki-light:#E36209;--shiki-default:#FFAB70;--shiki-dark:#FFAB70}html pre.shiki code .sCsY4, html code.shiki .sCsY4{--shiki-light:#6A737D;--shiki-default:#6A737D;--shiki-dark:#6A737D}",{"title":5,"searchDepth":465,"depth":465,"links":2012},[2013,2014,2019,2022,2023,2026,2030],{"id":410,"depth":465,"text":411},{"id":516,"depth":465,"text":517,"children":2015},[2016,2017,2018],{"id":660,"depth":472,"text":661},{"id":820,"depth":472,"text":702},{"id":921,"depth":472,"text":922},{"id":1031,"depth":465,"text":1032,"children":2020},[2021],{"id":1150,"depth":472,"text":1151},{"id":1239,"depth":465,"text":864},{"id":1341,"depth":465,"text":1342,"children":2024},[2025],{"id":1476,"depth":472,"text":1477},{"id":1506,"depth":465,"text":1507,"children":2027},[2028,2029],{"id":1513,"depth":472,"text":1514},{"id":1921,"depth":472,"text":1922},{"id":1989,"depth":465,"text":1990,"children":2031},[2032],{"id":1993,"depth":472,"text":1994},"Nitro tasks allow on-off operations in runtime.","md",{"icon":61},{"icon":61},{"title":58,"description":2033},"3jQ3dnDLUDKaMT1X1oE0c6YFmJxcm80KqW4e_xxwe80",[2040,2042],{"title":53,"path":54,"stem":55,"description":2041,"icon":56,"children":-1},"Use plugins to extend Nitro's runtime behavior.",{"title":63,"path":64,"stem":65,"description":2043,"icon":66,"children":-1},"Nitro provides cross-platform WebSocket support powered by CrossWS and H3.",1776373829220]