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