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