[{"data":1,"prerenderedAt":2905},["ShallowReactive",2],{"navigation":3,"docs-path-index":340,"-docs-modules-client-requests":446,"-docs-modules-client-requests-surround":2900},[4],{"title":5,"icon":6,"path":7,"stem":8,"children":9,"page":64},"Docs","i-lucide-book-marked","\u002Fdocs","docs",[10,30,65,293,318],{"title":11,"path":12,"stem":13,"children":14,"icon":29},"Getting Started","\u002Fdocs\u002Fgetting-started","docs\u002F1.getting-started\u002F1.index",[15,17,21,25],{"title":16,"path":12,"stem":13},"Introduction",{"title":18,"path":19,"stem":20},"Installation","\u002Fdocs\u002Fgetting-started\u002Finstallation","docs\u002F1.getting-started\u002F2.installation",{"title":22,"path":23,"stem":24},"Examples","\u002Fdocs\u002Fgetting-started\u002Fexamples","docs\u002F1.getting-started\u002F3.examples",{"title":26,"path":27,"stem":28},"Project Generator","\u002Fdocs\u002Fgetting-started\u002Fproject-generator","docs\u002F1.getting-started\u002F4.project-generator","i-lucide-rocket",{"title":31,"icon":32,"path":33,"stem":34,"children":35,"page":64},"Core features","i-lucide-square-function","\u002Fdocs\u002Fcore-features","docs\u002F2.core-features",[36,40,44,48,52,56,60],{"title":37,"path":38,"stem":39},"Configuration","\u002Fdocs\u002Fcore-features\u002Fconfiguration","docs\u002F2.core-features\u002F0.configuration",{"title":41,"path":42,"stem":43},"Dependency Injection","\u002Fdocs\u002Fcore-features\u002Fcontainer","docs\u002F2.core-features\u002F1.container",{"title":45,"path":46,"stem":47},"Controllers","\u002Fdocs\u002Fcore-features\u002Fcontrollers","docs\u002F2.core-features\u002F2.controllers",{"title":49,"path":50,"stem":51},"Middlewares","\u002Fdocs\u002Fcore-features\u002Fmiddlewares","docs\u002F2.core-features\u002F3.middlewares",{"title":53,"path":54,"stem":55},"Validation","\u002Fdocs\u002Fcore-features\u002Fvalidation","docs\u002F2.core-features\u002F4.validation",{"title":57,"path":58,"stem":59},"Introspection","\u002Fdocs\u002Fcore-features\u002Fintrospection","docs\u002F2.core-features\u002F5.introspection",{"title":61,"path":62,"stem":63},"Health Checks","\u002Fdocs\u002Fcore-features\u002Fhealth","docs\u002F2.core-features\u002F6.health",false,{"title":66,"icon":67,"defaultOpen":68,"path":69,"stem":70,"children":71,"page":64},"Modules","i-lucide-boxes",true,"\u002Fdocs\u002Fmodules","docs\u002F3.modules",[72,89,100,116,135,154,177,191,206,214,229,240,255,274,282],{"title":73,"icon":64,"defaultOpen":64,"path":74,"stem":75,"children":76,"page":64},"Auth","\u002Fdocs\u002Fmodules\u002Fauth","docs\u002F3.modules\u002F1.auth",[77,81,85],{"title":78,"path":79,"stem":80},"Overview","\u002Fdocs\u002Fmodules\u002Fauth\u002Foverview","docs\u002F3.modules\u002F1.auth\u002F0.overview",{"title":82,"path":83,"stem":84},"Decorators","\u002Fdocs\u002Fmodules\u002Fauth\u002Fdecorators","docs\u002F3.modules\u002F1.auth\u002F1.decorators",{"title":86,"path":87,"stem":88},"API Reference","\u002Fdocs\u002Fmodules\u002Fauth\u002Fapi","docs\u002F3.modules\u002F1.auth\u002F2.api",{"title":90,"icon":64,"defaultOpen":64,"path":91,"stem":92,"children":93,"page":64},"Devtools","\u002Fdocs\u002Fmodules\u002Fdevtools","docs\u002F3.modules\u002F10.devtools",[94,97],{"title":78,"path":95,"stem":96},"\u002Fdocs\u002Fmodules\u002Fdevtools\u002Foverview","docs\u002F3.modules\u002F10.devtools\u002F0.overview",{"title":37,"path":98,"stem":99},"\u002Fdocs\u002Fmodules\u002Fdevtools\u002Fconfiguration","docs\u002F3.modules\u002F10.devtools\u002F1.configuration",{"title":101,"icon":64,"defaultOpen":64,"path":102,"stem":103,"children":104,"page":64},"Telemetry","\u002Fdocs\u002Fmodules\u002Ftelemetry","docs\u002F3.modules\u002F11.telemetry",[105,108,112],{"title":78,"path":106,"stem":107},"\u002Fdocs\u002Fmodules\u002Ftelemetry\u002Foverview","docs\u002F3.modules\u002F11.telemetry\u002F0.overview",{"title":109,"path":110,"stem":111},"API","\u002Fdocs\u002Fmodules\u002Ftelemetry\u002Fapi","docs\u002F3.modules\u002F11.telemetry\u002F1.api",{"title":113,"path":114,"stem":115},"Instrumentation","\u002Fdocs\u002Fmodules\u002Ftelemetry\u002Finstrumentation","docs\u002F3.modules\u002F11.telemetry\u002F2.instrumentation",{"title":117,"icon":64,"defaultOpen":64,"path":118,"stem":119,"children":120,"page":64},"Queue","\u002Fdocs\u002Fmodules\u002Fqueue","docs\u002F3.modules\u002F12.queue",[121,124,128,132],{"title":78,"path":122,"stem":123},"\u002Fdocs\u002Fmodules\u002Fqueue\u002Foverview","docs\u002F3.modules\u002F12.queue\u002F0.overview",{"title":125,"path":126,"stem":127},"Consumers","\u002Fdocs\u002Fmodules\u002Fqueue\u002Fconsumers","docs\u002F3.modules\u002F12.queue\u002F1.consumers",{"title":129,"path":130,"stem":131},"Strategies","\u002Fdocs\u002Fmodules\u002Fqueue\u002Fstrategies","docs\u002F3.modules\u002F12.queue\u002F2.strategies",{"title":109,"path":133,"stem":134},"\u002Fdocs\u002Fmodules\u002Fqueue\u002Fapi","docs\u002F3.modules\u002F12.queue\u002F3.api",{"title":136,"icon":64,"defaultOpen":64,"path":137,"stem":138,"children":139,"page":64},"Scheduler","\u002Fdocs\u002Fmodules\u002Fscheduler","docs\u002F3.modules\u002F13.scheduler",[140,143,147,151],{"title":78,"path":141,"stem":142},"\u002Fdocs\u002Fmodules\u002Fscheduler\u002Foverview","docs\u002F3.modules\u002F13.scheduler\u002F0.overview",{"title":144,"path":145,"stem":146},"Jobs","\u002Fdocs\u002Fmodules\u002Fscheduler\u002Fjobs","docs\u002F3.modules\u002F13.scheduler\u002F1.jobs",{"title":148,"path":149,"stem":150},"Clustering","\u002Fdocs\u002Fmodules\u002Fscheduler\u002Fclustering","docs\u002F3.modules\u002F13.scheduler\u002F2.clustering",{"title":109,"path":152,"stem":153},"\u002Fdocs\u002Fmodules\u002Fscheduler\u002Fapi","docs\u002F3.modules\u002F13.scheduler\u002F3.api",{"title":155,"icon":64,"defaultOpen":64,"path":156,"stem":157,"children":158,"page":64},"Testing","\u002Fdocs\u002Fmodules\u002Ftesting","docs\u002F3.modules\u002F14.testing",[159,162,166,170,174],{"title":78,"path":160,"stem":161},"\u002Fdocs\u002Fmodules\u002Ftesting\u002Foverview","docs\u002F3.modules\u002F14.testing\u002F0.overview",{"title":163,"path":164,"stem":165},"Requests","\u002Fdocs\u002Fmodules\u002Ftesting\u002Frequests","docs\u002F3.modules\u002F14.testing\u002F1.requests",{"title":167,"path":168,"stem":169},"Dependencies","\u002Fdocs\u002Fmodules\u002Ftesting\u002Fdependencies","docs\u002F3.modules\u002F14.testing\u002F2.dependencies",{"title":171,"path":172,"stem":173},"Extensions","\u002Fdocs\u002Fmodules\u002Ftesting\u002Fextensions","docs\u002F3.modules\u002F14.testing\u002F3.extensions",{"title":109,"path":175,"stem":176},"\u002Fdocs\u002Fmodules\u002Ftesting\u002Fapi","docs\u002F3.modules\u002F14.testing\u002F4.api",{"title":178,"icon":64,"defaultOpen":64,"path":179,"stem":180,"children":181,"page":64},"Client","\u002Fdocs\u002Fmodules\u002Fclient","docs\u002F3.modules\u002F15.client",[182,185,188],{"title":78,"path":183,"stem":184},"\u002Fdocs\u002Fmodules\u002Fclient\u002Foverview","docs\u002F3.modules\u002F15.client\u002F0.overview",{"title":163,"path":186,"stem":187},"\u002Fdocs\u002Fmodules\u002Fclient\u002Frequests","docs\u002F3.modules\u002F15.client\u002F1.requests",{"title":109,"path":189,"stem":190},"\u002Fdocs\u002Fmodules\u002Fclient\u002Fapi","docs\u002F3.modules\u002F15.client\u002F2.api",{"title":192,"icon":64,"defaultOpen":64,"path":193,"stem":194,"children":195,"page":64},"Logger","\u002Fdocs\u002Fmodules\u002Flogger","docs\u002F3.modules\u002F2.logger",[196,199,203],{"title":78,"path":197,"stem":198},"\u002Fdocs\u002Fmodules\u002Flogger\u002Foverview","docs\u002F3.modules\u002F2.logger\u002F0.overview",{"title":200,"path":201,"stem":202},"Drains & Adapters","\u002Fdocs\u002Fmodules\u002Flogger\u002Fdrivers","docs\u002F3.modules\u002F2.logger\u002F1.drivers",{"title":109,"path":204,"stem":205},"\u002Fdocs\u002Fmodules\u002Flogger\u002Fapi","docs\u002F3.modules\u002F2.logger\u002F2.api",{"title":207,"icon":64,"defaultOpen":64,"path":208,"stem":209,"children":210,"page":64},"Serverless","\u002Fdocs\u002Fmodules\u002Fserverless","docs\u002F3.modules\u002F3.serverless",[211],{"title":78,"path":212,"stem":213},"\u002Fdocs\u002Fmodules\u002Fserverless\u002Foverview","docs\u002F3.modules\u002F3.serverless\u002F0.overview",{"title":215,"icon":64,"defaultOpen":64,"path":216,"stem":217,"children":218,"page":64},"Storage","\u002Fdocs\u002Fmodules\u002Fstorage","docs\u002F3.modules\u002F4.storage",[219,222,226],{"title":78,"path":220,"stem":221},"\u002Fdocs\u002Fmodules\u002Fstorage\u002Foverview","docs\u002F3.modules\u002F4.storage\u002F0.overview",{"title":223,"path":224,"stem":225},"Drivers","\u002Fdocs\u002Fmodules\u002Fstorage\u002Fdrivers","docs\u002F3.modules\u002F4.storage\u002F1.drivers",{"title":109,"path":227,"stem":228},"\u002Fdocs\u002Fmodules\u002Fstorage\u002Fapi","docs\u002F3.modules\u002F4.storage\u002F2.api",{"title":230,"icon":64,"defaultOpen":64,"path":231,"stem":232,"children":233,"page":64},"Web Sockets","\u002Fdocs\u002Fmodules\u002Fweb-sockets","docs\u002F3.modules\u002F5.web-sockets",[234,237],{"title":78,"path":235,"stem":236},"\u002Fdocs\u002Fmodules\u002Fweb-sockets\u002Foverview","docs\u002F3.modules\u002F5.web-sockets\u002F0.overview",{"title":109,"path":238,"stem":239},"\u002Fdocs\u002Fmodules\u002Fweb-sockets\u002Fapi","docs\u002F3.modules\u002F5.web-sockets\u002F1.api",{"title":241,"icon":64,"defaultOpen":64,"path":242,"stem":243,"children":244,"page":64},"Schema","\u002Fdocs\u002Fmodules\u002Fschema","docs\u002F3.modules\u002F6.schema",[245,248,251],{"title":78,"path":246,"stem":247},"\u002Fdocs\u002Fmodules\u002Fschema\u002Foverview","docs\u002F3.modules\u002F6.schema\u002F0.overview",{"title":82,"path":249,"stem":250},"\u002Fdocs\u002Fmodules\u002Fschema\u002Fdecorators","docs\u002F3.modules\u002F6.schema\u002F1.decorators",{"title":252,"path":253,"stem":254},"Scalar","\u002Fdocs\u002Fmodules\u002Fschema\u002Fscalar","docs\u002F3.modules\u002F6.schema\u002F2.scalar",{"title":256,"icon":64,"defaultOpen":64,"path":257,"stem":258,"children":259,"page":64},"Nitro","\u002Fdocs\u002Fmodules\u002Fnitro","docs\u002F3.modules\u002F7.nitro",[260,263,266,270],{"title":78,"path":261,"stem":262},"\u002Fdocs\u002Fmodules\u002Fnitro\u002Foverview","docs\u002F3.modules\u002F7.nitro\u002F0.overview",{"title":215,"path":264,"stem":265},"\u002Fdocs\u002Fmodules\u002Fnitro\u002Fstorage","docs\u002F3.modules\u002F7.nitro\u002F1.storage",{"title":267,"path":268,"stem":269},"File-Based Routes","\u002Fdocs\u002Fmodules\u002Fnitro\u002Ffile-based-routes","docs\u002F3.modules\u002F7.nitro\u002F2.file-based-routes",{"title":271,"path":272,"stem":273},"Middleware","\u002Fdocs\u002Fmodules\u002Fnitro\u002Fmiddleware","docs\u002F3.modules\u002F7.nitro\u002F3.middleware",{"title":275,"icon":64,"defaultOpen":64,"path":276,"stem":277,"children":278,"page":64},"Vite","\u002Fdocs\u002Fmodules\u002Fvite","docs\u002F3.modules\u002F8.vite",[279],{"title":78,"path":280,"stem":281},"\u002Fdocs\u002Fmodules\u002Fvite\u002Foverview","docs\u002F3.modules\u002F8.vite\u002F0.overview",{"title":283,"icon":64,"defaultOpen":64,"path":284,"stem":285,"children":286,"page":64},"Cache","\u002Fdocs\u002Fmodules\u002Fcache","docs\u002F3.modules\u002F9.cache",[287,290],{"title":78,"path":288,"stem":289},"\u002Fdocs\u002Fmodules\u002Fcache\u002Foverview","docs\u002F3.modules\u002F9.cache\u002F0.overview",{"title":109,"path":291,"stem":292},"\u002Fdocs\u002Fmodules\u002Fcache\u002Fapi","docs\u002F3.modules\u002F9.cache\u002F1.api",{"title":294,"icon":295,"path":296,"stem":297,"children":298,"page":64},"Deployment","i-lucide-cloud-upload","\u002Fdocs\u002Fdeployment","docs\u002F4.deployment",[299,302,306,310,314],{"title":78,"path":300,"stem":301},"\u002Fdocs\u002Fdeployment\u002Foverview","docs\u002F4.deployment\u002F0.overview",{"title":303,"path":304,"stem":305},"Vercel","\u002Fdocs\u002Fdeployment\u002Fvercel","docs\u002F4.deployment\u002F1.vercel",{"title":307,"path":308,"stem":309},"AWS Lambda","\u002Fdocs\u002Fdeployment\u002Faws-lambda","docs\u002F4.deployment\u002F2.aws-lambda",{"title":311,"path":312,"stem":313},"Azure Functions","\u002Fdocs\u002Fdeployment\u002Fazure-functions","docs\u002F4.deployment\u002F3.azure-functions",{"title":315,"path":316,"stem":317},"Node.js Server","\u002Fdocs\u002Fdeployment\u002Fnode-server","docs\u002F4.deployment\u002F4.node-server",{"title":319,"icon":320,"path":321,"stem":322,"children":323,"page":64},"Advanced","i-lucide-brain","\u002Fdocs\u002Fadvanced","docs\u002F99.advanced",[324,328,332,336],{"title":325,"path":326,"stem":327},"Custom Decorator","\u002Fdocs\u002Fadvanced\u002Fcustom-decorator","docs\u002F99.advanced\u002F1.custom-decorator",{"title":329,"path":330,"stem":331},"Plugins","\u002Fdocs\u002Fadvanced\u002Fcustom-plugin","docs\u002F99.advanced\u002F2.custom-plugin",{"title":333,"path":334,"stem":335},"Custom CLI Command","\u002Fdocs\u002Fadvanced\u002Fcustom-cli-command","docs\u002F99.advanced\u002F3.custom-cli-command",{"title":337,"path":338,"stem":339},"Writing a Recipe","\u002Fdocs\u002Fadvanced\u002Fwriting-a-recipe","docs\u002F99.advanced\u002F4.writing-a-recipe",[341,343,345,346,347,348,349,351,352,353,354,355,356,357,358,360,362,363,364,365,367,368,369,371,372,373,374,376,377,378,379,380,382,383,384,385,386,388,389,390,391,392,393,395,396,397,398,400,401,402,403,405,406,408,409,410,411,413,414,415,417,418,419,420,422,423,424,425,426,428,429,431,432,433,435,436,437,438,439,440,442,443,444,445],{"path":342},"\u002Fdocs\u002F.navigation",{"path":344},"\u002Fdocs\u002Fgetting-started\u002F.navigation",{"path":12},{"path":19},{"path":23},{"path":27},{"path":350},"\u002Fdocs\u002Fcore-features\u002F.navigation",{"path":38},{"path":42},{"path":46},{"path":50},{"path":54},{"path":58},{"path":62},{"path":359},"\u002Fdocs\u002Fmodules\u002F.navigation",{"path":361},"\u002Fdocs\u002Fmodules\u002Fauth\u002F.navigation",{"path":79},{"path":83},{"path":87},{"path":366},"\u002Fdocs\u002Fmodules\u002Fdevtools\u002F.navigation",{"path":95},{"path":98},{"path":370},"\u002Fdocs\u002Fmodules\u002Ftelemetry\u002F.navigation",{"path":106},{"path":110},{"path":114},{"path":375},"\u002Fdocs\u002Fmodules\u002Fqueue\u002F.navigation",{"path":122},{"path":126},{"path":130},{"path":133},{"path":381},"\u002Fdocs\u002Fmodules\u002Fscheduler\u002F.navigation",{"path":141},{"path":145},{"path":149},{"path":152},{"path":387},"\u002Fdocs\u002Fmodules\u002Ftesting\u002F.navigation",{"path":160},{"path":164},{"path":168},{"path":172},{"path":175},{"path":394},"\u002Fdocs\u002Fmodules\u002Fclient\u002F.navigation",{"path":183},{"path":186},{"path":189},{"path":399},"\u002Fdocs\u002Fmodules\u002Flogger\u002F.navigation",{"path":197},{"path":201},{"path":204},{"path":404},"\u002Fdocs\u002Fmodules\u002Fserverless\u002F.navigation",{"path":212},{"path":407},"\u002Fdocs\u002Fmodules\u002Fstorage\u002F.navigation",{"path":220},{"path":224},{"path":227},{"path":412},"\u002Fdocs\u002Fmodules\u002Fweb-sockets\u002F.navigation",{"path":235},{"path":238},{"path":416},"\u002Fdocs\u002Fmodules\u002Fschema\u002F.navigation",{"path":246},{"path":249},{"path":253},{"path":421},"\u002Fdocs\u002Fmodules\u002Fnitro\u002F.navigation",{"path":261},{"path":264},{"path":268},{"path":272},{"path":427},"\u002Fdocs\u002Fmodules\u002Fvite\u002F.navigation",{"path":280},{"path":430},"\u002Fdocs\u002Fmodules\u002Fcache\u002F.navigation",{"path":288},{"path":291},{"path":434},"\u002Fdocs\u002Fdeployment\u002F.navigation",{"path":300},{"path":304},{"path":308},{"path":312},{"path":316},{"path":441},"\u002Fdocs\u002Fadvanced\u002F.navigation",{"path":326},{"path":330},{"path":334},{"path":338},{"id":447,"title":163,"body":448,"description":2894,"extension":2895,"links":2896,"meta":2897,"navigation":68,"path":186,"seo":2898,"stem":187,"__hash__":2899},"docs\u002Fdocs\u002F3.modules\u002F15.client\u002F1.requests.md",{"type":449,"value":450,"toc":2881},"minimark",[451,483,654,659,677,737,741,759,862,872,876,909,955,974,1063,1067,1074,1192,1199,1221,1225,1235,1409,1425,1429,1438,1442,1456,1627,1647,1652,1663,1949,1976,2244,2260,2281,2300,2310,2444,2447,2454,2458,2465,2589,2720,2744,2748,2753,2877],[452,453,454,455,459,460,459,463,459,466,459,469,459,472,459,475,478,479,482],"p",{},"Every route has a method shortcut (",[456,457,458],"code",{},"get",", ",[456,461,462],{},"post",[456,464,465],{},"put",[456,467,468],{},"patch",[456,470,471],{},"delete",[456,473,474],{},"head",[456,476,477],{},"options",") that takes the route template as written in the controller, and an options object when the route needs one. ",[456,480,481],{},"request()"," takes the method as its first argument.",[484,485,490],"pre",{"className":486,"code":487,"language":488,"meta":489,"style":489},"language-ts shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","await api.get('\u002Fusers\u002F:id', { params: { id: '42' } });\nawait api.request('PATCH', '\u002Fusers\u002F:id', {\n  params: { id: '42' },\n  body: { name: 'Ada' },\n});\n","ts","",[456,491,492,563,597,620,644],{"__ignoreMap":489},[493,494,497,501,505,509,512,515,518,522,524,527,530,534,537,539,542,544,547,550,552,555,557,560],"span",{"class":495,"line":496},"line",1,[493,498,500],{"class":499},"s7zQu","await",[493,502,504],{"class":503},"sTEyZ"," api",[493,506,508],{"class":507},"sMK4o",".",[493,510,458],{"class":511},"s2Zo4",[493,513,514],{"class":503},"(",[493,516,517],{"class":507},"'",[493,519,521],{"class":520},"sfazB","\u002Fusers\u002F:id",[493,523,517],{"class":507},[493,525,526],{"class":507},",",[493,528,529],{"class":507}," {",[493,531,533],{"class":532},"swJcz"," params",[493,535,536],{"class":507},":",[493,538,529],{"class":507},[493,540,541],{"class":532}," id",[493,543,536],{"class":507},[493,545,546],{"class":507}," '",[493,548,549],{"class":520},"42",[493,551,517],{"class":507},[493,553,554],{"class":507}," }",[493,556,554],{"class":507},[493,558,559],{"class":503},")",[493,561,562],{"class":507},";\n",[493,564,566,568,570,572,575,577,579,582,584,586,588,590,592,594],{"class":495,"line":565},2,[493,567,500],{"class":499},[493,569,504],{"class":503},[493,571,508],{"class":507},[493,573,574],{"class":511},"request",[493,576,514],{"class":503},[493,578,517],{"class":507},[493,580,581],{"class":520},"PATCH",[493,583,517],{"class":507},[493,585,526],{"class":507},[493,587,546],{"class":507},[493,589,521],{"class":520},[493,591,517],{"class":507},[493,593,526],{"class":507},[493,595,596],{"class":507}," {\n",[493,598,600,603,605,607,609,611,613,615,617],{"class":495,"line":599},3,[493,601,602],{"class":532},"  params",[493,604,536],{"class":507},[493,606,529],{"class":507},[493,608,541],{"class":532},[493,610,536],{"class":507},[493,612,546],{"class":507},[493,614,549],{"class":520},[493,616,517],{"class":507},[493,618,619],{"class":507}," },\n",[493,621,623,626,628,630,633,635,637,640,642],{"class":495,"line":622},4,[493,624,625],{"class":532},"  body",[493,627,536],{"class":507},[493,629,529],{"class":507},[493,631,632],{"class":532}," name",[493,634,536],{"class":507},[493,636,546],{"class":507},[493,638,639],{"class":520},"Ada",[493,641,517],{"class":507},[493,643,619],{"class":507},[493,645,647,650,652],{"class":495,"line":646},5,[493,648,649],{"class":507},"}",[493,651,559],{"class":503},[493,653,562],{"class":507},[655,656,658],"h2",{"id":657},"path-parameters","Path parameters",[452,660,661,664,665,668,669,672,673,676],{},[456,662,663],{},"params"," fills the ",[456,666,667],{},":segments"," of the template, encoded with ",[456,670,671],{},"encodeURIComponent",". A wildcard segment such as ",[456,674,675],{},"**:path"," keeps its slashes:",[484,678,680],{"className":486,"code":679,"language":488,"meta":489,"style":489},"await api.get('\u002Ffiles\u002F**:path', { params: { path: 'reports\u002F2026\u002Fq3.pdf' } });\n\u002F\u002F GET \u002Ffiles\u002Freports\u002F2026\u002Fq3.pdf\n",[456,681,682,731],{"__ignoreMap":489},[493,683,684,686,688,690,692,694,696,699,701,703,705,707,709,711,714,716,718,721,723,725,727,729],{"class":495,"line":496},[493,685,500],{"class":499},[493,687,504],{"class":503},[493,689,508],{"class":507},[493,691,458],{"class":511},[493,693,514],{"class":503},[493,695,517],{"class":507},[493,697,698],{"class":520},"\u002Ffiles\u002F**:path",[493,700,517],{"class":507},[493,702,526],{"class":507},[493,704,529],{"class":507},[493,706,533],{"class":532},[493,708,536],{"class":507},[493,710,529],{"class":507},[493,712,713],{"class":532}," path",[493,715,536],{"class":507},[493,717,546],{"class":507},[493,719,720],{"class":520},"reports\u002F2026\u002Fq3.pdf",[493,722,517],{"class":507},[493,724,554],{"class":507},[493,726,554],{"class":507},[493,728,559],{"class":503},[493,730,562],{"class":507},[493,732,733],{"class":495,"line":565},[493,734,736],{"class":735},"sHwdD","\u002F\u002F GET \u002Ffiles\u002Freports\u002F2026\u002Fq3.pdf\n",[655,738,740],{"id":739},"query-strings","Query strings",[452,742,743,746,747,750,751,754,755,758],{},[456,744,745],{},"query"," is serialized the way Vercube reads it back. ",[456,748,749],{},"null"," and ",[456,752,753],{},"undefined"," are left out, a ",[456,756,757],{},"Date"," is sent as ISO 8601, and an array repeats the key:",[484,760,762],{"className":486,"code":761,"language":488,"meta":489,"style":489},"await api.get('\u002Fusers', {\n  query: { sort: 'name', tag: ['admin', 'staff'], page: undefined },\n});\n\u002F\u002F GET \u002Fusers?sort=name&tag=admin&tag=staff\n",[456,763,764,787,849,857],{"__ignoreMap":489},[493,765,766,768,770,772,774,776,778,781,783,785],{"class":495,"line":496},[493,767,500],{"class":499},[493,769,504],{"class":503},[493,771,508],{"class":507},[493,773,458],{"class":511},[493,775,514],{"class":503},[493,777,517],{"class":507},[493,779,780],{"class":520},"\u002Fusers",[493,782,517],{"class":507},[493,784,526],{"class":507},[493,786,596],{"class":507},[493,788,789,792,794,796,799,801,803,806,808,810,813,815,818,820,823,825,827,829,832,834,837,839,842,844,847],{"class":495,"line":565},[493,790,791],{"class":532},"  query",[493,793,536],{"class":507},[493,795,529],{"class":507},[493,797,798],{"class":532}," sort",[493,800,536],{"class":507},[493,802,546],{"class":507},[493,804,805],{"class":520},"name",[493,807,517],{"class":507},[493,809,526],{"class":507},[493,811,812],{"class":532}," tag",[493,814,536],{"class":507},[493,816,817],{"class":503}," [",[493,819,517],{"class":507},[493,821,822],{"class":520},"admin",[493,824,517],{"class":507},[493,826,526],{"class":507},[493,828,546],{"class":507},[493,830,831],{"class":520},"staff",[493,833,517],{"class":507},[493,835,836],{"class":503},"]",[493,838,526],{"class":507},[493,840,841],{"class":532}," page",[493,843,536],{"class":507},[493,845,846],{"class":507}," undefined",[493,848,619],{"class":507},[493,850,851,853,855],{"class":495,"line":599},[493,852,649],{"class":507},[493,854,559],{"class":503},[493,856,562],{"class":507},[493,858,859],{"class":495,"line":622},[493,860,861],{"class":735},"\u002F\u002F GET \u002Fusers?sort=name&tag=admin&tag=staff\n",[452,863,864,865,868,869,508],{},"On the server a repeated key resolves to its first value unless the parameter opted in with ",[456,866,867],{},"@QueryParam({ name: 'tag', array: true })",". An array query parameter is optional in the client, because the server resolves a missing one to ",[456,870,871],{},"[]",[655,873,875],{"id":874},"bodies","Bodies",[452,877,878,879,882,883,886,887,459,890,459,893,896,897,900,901,904,905,908],{},"A ",[456,880,881],{},"body"," is sent as JSON with ",[456,884,885],{},"content-type: application\u002Fjson",". A ",[456,888,889],{},"Blob",[456,891,892],{},"ReadableStream",[456,894,895],{},"ArrayBuffer",", typed array, ",[456,898,899],{},"FormData"," or ",[456,902,903],{},"URLSearchParams"," is passed to ",[456,906,907],{},"fetch"," as it is, so a route that reads the raw request can still be called:",[484,910,912],{"className":486,"code":911,"language":488,"meta":489,"style":489},"await api.post('\u002Fimports', { body: file }); \u002F\u002F a File from an \u003Cinput type=\"file\">\n",[456,913,914],{"__ignoreMap":489},[493,915,916,918,920,922,924,926,928,931,933,935,937,940,942,945,947,949,952],{"class":495,"line":496},[493,917,500],{"class":499},[493,919,504],{"class":503},[493,921,508],{"class":507},[493,923,462],{"class":511},[493,925,514],{"class":503},[493,927,517],{"class":507},[493,929,930],{"class":520},"\u002Fimports",[493,932,517],{"class":507},[493,934,526],{"class":507},[493,936,529],{"class":507},[493,938,939],{"class":532}," body",[493,941,536],{"class":507},[493,943,944],{"class":503}," file ",[493,946,649],{"class":507},[493,948,559],{"class":503},[493,950,951],{"class":507},";",[493,953,954],{"class":735}," \u002F\u002F a File from an \u003Cinput type=\"file\">\n",[452,956,878,957,960,961,964,965,967,968,970,971,973],{},[456,958,959],{},"@MultipartFormData()"," route takes ",[456,962,963],{},"form"," instead of ",[456,966,881],{},". A plain object is turned into ",[456,969,899],{},", with ",[456,972,889],{}," values as uploads and arrays as repeated fields:",[484,975,977],{"className":486,"code":976,"language":488,"meta":489,"style":489},"await api.post('\u002Fusers\u002F:id\u002Favatar', {\n  params: { id: '42' },\n  form: { file: avatarBlob, caption: 'Me, in 2026' },\n});\n",[456,978,979,1002,1022,1055],{"__ignoreMap":489},[493,980,981,983,985,987,989,991,993,996,998,1000],{"class":495,"line":496},[493,982,500],{"class":499},[493,984,504],{"class":503},[493,986,508],{"class":507},[493,988,462],{"class":511},[493,990,514],{"class":503},[493,992,517],{"class":507},[493,994,995],{"class":520},"\u002Fusers\u002F:id\u002Favatar",[493,997,517],{"class":507},[493,999,526],{"class":507},[493,1001,596],{"class":507},[493,1003,1004,1006,1008,1010,1012,1014,1016,1018,1020],{"class":495,"line":565},[493,1005,602],{"class":532},[493,1007,536],{"class":507},[493,1009,529],{"class":507},[493,1011,541],{"class":532},[493,1013,536],{"class":507},[493,1015,546],{"class":507},[493,1017,549],{"class":520},[493,1019,517],{"class":507},[493,1021,619],{"class":507},[493,1023,1024,1027,1029,1031,1034,1036,1039,1041,1044,1046,1048,1051,1053],{"class":495,"line":599},[493,1025,1026],{"class":532},"  form",[493,1028,536],{"class":507},[493,1030,529],{"class":507},[493,1032,1033],{"class":532}," file",[493,1035,536],{"class":507},[493,1037,1038],{"class":503}," avatarBlob",[493,1040,526],{"class":507},[493,1042,1043],{"class":532}," caption",[493,1045,536],{"class":507},[493,1047,546],{"class":507},[493,1049,1050],{"class":520},"Me, in 2026",[493,1052,517],{"class":507},[493,1054,619],{"class":507},[493,1056,1057,1059,1061],{"class":495,"line":622},[493,1058,649],{"class":507},[493,1060,559],{"class":503},[493,1062,562],{"class":507},[655,1064,1066],{"id":1065},"headers","Headers",[452,1068,1069,1070,1073],{},"Headers given to ",[456,1071,1072],{},"createClient"," are sent with every request. A function is called before each one, which is where a token that expires belongs:",[484,1075,1077],{"className":486,"code":1076,"language":488,"meta":489,"style":489},"const api = createClient\u003CVercubeRoutes>({\n  baseURL: '\u002Fapi',\n  headers: async () => ({ authorization: `Bearer ${await auth.token()}` }),\n});\n",[456,1078,1079,1109,1126,1184],{"__ignoreMap":489},[493,1080,1081,1085,1088,1091,1094,1097,1101,1104,1106],{"class":495,"line":496},[493,1082,1084],{"class":1083},"spNyl","const",[493,1086,1087],{"class":503}," api ",[493,1089,1090],{"class":507},"=",[493,1092,1093],{"class":511}," createClient",[493,1095,1096],{"class":507},"\u003C",[493,1098,1100],{"class":1099},"sBMFI","VercubeRoutes",[493,1102,1103],{"class":507},">",[493,1105,514],{"class":503},[493,1107,1108],{"class":507},"{\n",[493,1110,1111,1114,1116,1118,1121,1123],{"class":495,"line":565},[493,1112,1113],{"class":532},"  baseURL",[493,1115,536],{"class":507},[493,1117,546],{"class":507},[493,1119,1120],{"class":520},"\u002Fapi",[493,1122,517],{"class":507},[493,1124,1125],{"class":507},",\n",[493,1127,1128,1131,1133,1136,1139,1142,1145,1148,1151,1153,1156,1159,1162,1164,1167,1169,1172,1175,1178,1180,1182],{"class":495,"line":599},[493,1129,1130],{"class":511},"  headers",[493,1132,536],{"class":507},[493,1134,1135],{"class":1083}," async",[493,1137,1138],{"class":507}," ()",[493,1140,1141],{"class":1083}," =>",[493,1143,1144],{"class":503}," (",[493,1146,1147],{"class":507},"{",[493,1149,1150],{"class":532}," authorization",[493,1152,536],{"class":507},[493,1154,1155],{"class":507}," `",[493,1157,1158],{"class":520},"Bearer ",[493,1160,1161],{"class":507},"${",[493,1163,500],{"class":499},[493,1165,1166],{"class":503}," auth",[493,1168,508],{"class":507},[493,1170,1171],{"class":511},"token",[493,1173,1174],{"class":503},"()",[493,1176,1177],{"class":507},"}`",[493,1179,554],{"class":507},[493,1181,559],{"class":503},[493,1183,1125],{"class":507},[493,1185,1186,1188,1190],{"class":495,"line":622},[493,1187,649],{"class":507},[493,1189,559],{"class":503},[493,1191,562],{"class":507},[452,1193,1194,1195,1198],{},"Headers given to a call are added on top. A header the handler reads with ",[456,1196,1197],{},"@Header('x-tenant')"," is required by the call's types; any other header is accepted.",[452,1200,1201,1202,1204,1205,459,1208,459,1211,459,1214,1217,1218,508],{},"Every other ",[456,1203,907],{}," option (",[456,1206,1207],{},"credentials",[456,1209,1210],{},"cache",[456,1212,1213],{},"keepalive",[456,1215,1216],{},"signal","...) is passed through: ",[456,1219,1220],{},"api.get('\u002Fme', { credentials: 'include' })",[655,1222,1224],{"id":1223},"hooks","Hooks",[452,1226,1227,1230,1231,1234],{},[456,1228,1229],{},"onRequest"," runs before a request is sent and ",[456,1232,1233],{},"onResponse"," after the response arrives, error responses included. Either may return a replacement:",[484,1236,1238],{"className":486,"code":1237,"language":488,"meta":489,"style":489},"const api = createClient\u003CVercubeRoutes>({\n  baseURL: 'http:\u002F\u002Flocalhost:3000',\n  onRequest: ({ request }) => {\n    request.headers.set('x-request-id', crypto.randomUUID());\n  },\n  onResponse: ({ request, response }) => {\n    metrics.record(request.url, response.status);\n  },\n});\n",[456,1239,1240,1260,1275,1296,1334,1339,1362,1395,1400],{"__ignoreMap":489},[493,1241,1242,1244,1246,1248,1250,1252,1254,1256,1258],{"class":495,"line":496},[493,1243,1084],{"class":1083},[493,1245,1087],{"class":503},[493,1247,1090],{"class":507},[493,1249,1093],{"class":511},[493,1251,1096],{"class":507},[493,1253,1100],{"class":1099},[493,1255,1103],{"class":507},[493,1257,514],{"class":503},[493,1259,1108],{"class":507},[493,1261,1262,1264,1266,1268,1271,1273],{"class":495,"line":565},[493,1263,1113],{"class":532},[493,1265,536],{"class":507},[493,1267,546],{"class":507},[493,1269,1270],{"class":520},"http:\u002F\u002Flocalhost:3000",[493,1272,517],{"class":507},[493,1274,1125],{"class":507},[493,1276,1277,1280,1282,1285,1289,1292,1294],{"class":495,"line":599},[493,1278,1279],{"class":511},"  onRequest",[493,1281,536],{"class":507},[493,1283,1284],{"class":507}," ({",[493,1286,1288],{"class":1287},"sHdIc"," request",[493,1290,1291],{"class":507}," })",[493,1293,1141],{"class":1083},[493,1295,596],{"class":507},[493,1297,1298,1301,1303,1305,1307,1310,1312,1314,1317,1319,1321,1324,1326,1329,1332],{"class":495,"line":622},[493,1299,1300],{"class":503},"    request",[493,1302,508],{"class":507},[493,1304,1065],{"class":503},[493,1306,508],{"class":507},[493,1308,1309],{"class":511},"set",[493,1311,514],{"class":532},[493,1313,517],{"class":507},[493,1315,1316],{"class":520},"x-request-id",[493,1318,517],{"class":507},[493,1320,526],{"class":507},[493,1322,1323],{"class":503}," crypto",[493,1325,508],{"class":507},[493,1327,1328],{"class":511},"randomUUID",[493,1330,1331],{"class":532},"())",[493,1333,562],{"class":507},[493,1335,1336],{"class":495,"line":646},[493,1337,1338],{"class":507},"  },\n",[493,1340,1342,1345,1347,1349,1351,1353,1356,1358,1360],{"class":495,"line":1341},6,[493,1343,1344],{"class":511},"  onResponse",[493,1346,536],{"class":507},[493,1348,1284],{"class":507},[493,1350,1288],{"class":1287},[493,1352,526],{"class":507},[493,1354,1355],{"class":1287}," response",[493,1357,1291],{"class":507},[493,1359,1141],{"class":1083},[493,1361,596],{"class":507},[493,1363,1365,1368,1370,1373,1375,1377,1379,1382,1384,1386,1388,1391,1393],{"class":495,"line":1364},7,[493,1366,1367],{"class":503},"    metrics",[493,1369,508],{"class":507},[493,1371,1372],{"class":511},"record",[493,1374,514],{"class":532},[493,1376,574],{"class":503},[493,1378,508],{"class":507},[493,1380,1381],{"class":503},"url",[493,1383,526],{"class":507},[493,1385,1355],{"class":503},[493,1387,508],{"class":507},[493,1389,1390],{"class":503},"status",[493,1392,559],{"class":532},[493,1394,562],{"class":507},[493,1396,1398],{"class":495,"line":1397},8,[493,1399,1338],{"class":507},[493,1401,1403,1405,1407],{"class":495,"line":1402},9,[493,1404,649],{"class":507},[493,1406,559],{"class":503},[493,1408,562],{"class":507},[452,1410,1411,1412,1414,1415,1417,1418,1421,1422,508],{},"To send requests somewhere other than the global ",[456,1413,907],{},", pass ",[456,1416,907],{},". It receives a ",[456,1419,1420],{},"Request",", so an application's own handler fits: ",[456,1423,1424],{},"createClient({ baseURL: 'http:\u002F\u002Fapp', fetch: (request) => app.fetch(request) })",[655,1426,1428],{"id":1427},"responses","Responses",[452,1430,1431,1432,1434,1435,508],{},"A successful call resolves to the body: parsed JSON when the response says it is JSON, the text otherwise, and ",[456,1433,753],{}," when the body is empty or the method is ",[456,1436,1437],{},"HEAD",[655,1439,1441],{"id":1440},"errors","Errors",[452,1443,1444,1445,1448,1449,1451,1452,1455],{},"Any status outside 200 to 299 rejects with a ",[456,1446,1447],{},"VercubeClientError",". Vercube answers errors with a JSON body, which is parsed into ",[456,1450,881],{},", and its ",[456,1453,1454],{},"message"," becomes the error's message:",[484,1457,1459],{"className":486,"code":1458,"language":488,"meta":489,"style":489},"import { VercubeClientError } from '@vercube\u002Fclient';\n\ntry {\n  await api.get('\u002Fusers\u002F:id', { params: { id: 'nope' } });\n} catch (error) {\n  if (error instanceof VercubeClientError && error.status === 404) {\n    return null;\n  }\n\n  throw error;\n}\n",[456,1460,1461,1485,1490,1497,1545,1557,1594,1602,1607,1611,1621],{"__ignoreMap":489},[493,1462,1463,1466,1468,1471,1473,1476,1478,1481,1483],{"class":495,"line":496},[493,1464,1465],{"class":499},"import",[493,1467,529],{"class":507},[493,1469,1470],{"class":503}," VercubeClientError",[493,1472,554],{"class":507},[493,1474,1475],{"class":499}," from",[493,1477,546],{"class":507},[493,1479,1480],{"class":520},"@vercube\u002Fclient",[493,1482,517],{"class":507},[493,1484,562],{"class":507},[493,1486,1487],{"class":495,"line":565},[493,1488,1489],{"emptyLinePlaceholder":68},"\n",[493,1491,1492,1495],{"class":495,"line":599},[493,1493,1494],{"class":499},"try",[493,1496,596],{"class":507},[493,1498,1499,1502,1504,1506,1508,1510,1512,1514,1516,1518,1520,1522,1524,1526,1528,1530,1532,1535,1537,1539,1541,1543],{"class":495,"line":622},[493,1500,1501],{"class":499},"  await",[493,1503,504],{"class":503},[493,1505,508],{"class":507},[493,1507,458],{"class":511},[493,1509,514],{"class":532},[493,1511,517],{"class":507},[493,1513,521],{"class":520},[493,1515,517],{"class":507},[493,1517,526],{"class":507},[493,1519,529],{"class":507},[493,1521,533],{"class":532},[493,1523,536],{"class":507},[493,1525,529],{"class":507},[493,1527,541],{"class":532},[493,1529,536],{"class":507},[493,1531,546],{"class":507},[493,1533,1534],{"class":520},"nope",[493,1536,517],{"class":507},[493,1538,554],{"class":507},[493,1540,554],{"class":507},[493,1542,559],{"class":532},[493,1544,562],{"class":507},[493,1546,1547,1549,1552,1555],{"class":495,"line":646},[493,1548,649],{"class":507},[493,1550,1551],{"class":499}," catch",[493,1553,1554],{"class":503}," (error) ",[493,1556,1108],{"class":507},[493,1558,1559,1562,1564,1567,1570,1572,1575,1578,1580,1582,1585,1589,1592],{"class":495,"line":1341},[493,1560,1561],{"class":499},"  if",[493,1563,1144],{"class":532},[493,1565,1566],{"class":503},"error",[493,1568,1569],{"class":507}," instanceof",[493,1571,1470],{"class":1099},[493,1573,1574],{"class":507}," &&",[493,1576,1577],{"class":503}," error",[493,1579,508],{"class":507},[493,1581,1390],{"class":503},[493,1583,1584],{"class":507}," ===",[493,1586,1588],{"class":1587},"sbssI"," 404",[493,1590,1591],{"class":532},") ",[493,1593,1108],{"class":507},[493,1595,1596,1599],{"class":495,"line":1364},[493,1597,1598],{"class":499},"    return",[493,1600,1601],{"class":507}," null;\n",[493,1603,1604],{"class":495,"line":1397},[493,1605,1606],{"class":507},"  }\n",[493,1608,1609],{"class":495,"line":1402},[493,1610,1489],{"emptyLinePlaceholder":68},[493,1612,1614,1617,1619],{"class":495,"line":1613},10,[493,1615,1616],{"class":499},"  throw",[493,1618,1577],{"class":503},[493,1620,562],{"class":507},[493,1622,1624],{"class":495,"line":1623},11,[493,1625,1626],{"class":507},"}\n",[452,1628,1629,1632,1633,1636,1637,1639,1640,1643,1644,1646],{},[456,1630,1631],{},"error.response"," is the ",[456,1634,1635],{},"Response"," itself, with its body already read. A network failure is not a ",[456,1638,1447],{},": it is the ",[456,1641,1642],{},"TypeError"," that ",[456,1645,907],{}," throws.",[1648,1649,1651],"h3",{"id":1650},"typed-errors","Typed errors",[452,1653,1654,1655,1662],{},"Declare what a route can answer with using ",[1656,1657,1659],"a",{"href":1658},"\u002Fdocs\u002Fcore-features\u002Fcontrollers#declaring-errors-with-throws",[456,1660,1661],{},"@Throws()",", and the generated route map carries it:",[484,1664,1667],{"className":486,"code":1665,"filename":1666,"language":488,"meta":489,"style":489},"@Get('\u002F:id')\n@Throws(NotFoundError)\npublic async getUser(@Param('id') id: string): Promise\u003CUser> {\n  const user = await this.users.find(id);\n\n  if (!user) {\n    throw new NotFoundError('No such user');\n  }\n\n  return user;\n}\n\n@Put('\u002F:id\u002Femail')\n@Throws(NotFoundError, ConflictError)\npublic async changeEmail(\n  @Param('id') id: string,\n  @Body() body: { email: string },\n): Promise\u003CUser> {\n  return this.users.changeEmail(id, body.email);\n}\n","src\u002FControllers\u002FUserController.ts",[456,1668,1669,1689,1699,1737,1761,1765,1781,1805,1809,1813,1818,1822,1827,1846,1861,1872,1893,1917,1933,1944],{"__ignoreMap":489},[493,1670,1671,1674,1677,1679,1681,1684,1686],{"class":495,"line":496},[493,1672,1673],{"class":507},"@",[493,1675,1676],{"class":511},"Get",[493,1678,514],{"class":503},[493,1680,517],{"class":507},[493,1682,1683],{"class":520},"\u002F:id",[493,1685,517],{"class":507},[493,1687,1688],{"class":503},")\n",[493,1690,1691,1693,1696],{"class":495,"line":565},[493,1692,1673],{"class":507},[493,1694,1695],{"class":511},"Throws",[493,1697,1698],{"class":503},"(NotFoundError)\n",[493,1700,1701,1704,1707,1710,1713,1715,1717,1720,1722,1725,1728,1730,1733,1735],{"class":495,"line":599},[493,1702,1703],{"class":503},"public async ",[493,1705,1706],{"class":511},"getUser",[493,1708,1709],{"class":503},"(@",[493,1711,1712],{"class":511},"Param",[493,1714,514],{"class":503},[493,1716,517],{"class":507},[493,1718,1719],{"class":520},"id",[493,1721,517],{"class":507},[493,1723,1724],{"class":503},") id: string): ",[493,1726,1727],{"class":1099},"Promise",[493,1729,1096],{"class":507},[493,1731,1732],{"class":503},"User",[493,1734,1103],{"class":507},[493,1736,596],{"class":507},[493,1738,1739,1742,1744,1747,1750,1753,1755,1758],{"class":495,"line":622},[493,1740,1741],{"class":503},"  const user ",[493,1743,1090],{"class":507},[493,1745,1746],{"class":499}," await",[493,1748,1749],{"class":507}," this.",[493,1751,1752],{"class":503},"users",[493,1754,508],{"class":507},[493,1756,1757],{"class":511},"find",[493,1759,1760],{"class":503},"(id);\n",[493,1762,1763],{"class":495,"line":646},[493,1764,1489],{"emptyLinePlaceholder":68},[493,1766,1767,1769,1771,1774,1777,1779],{"class":495,"line":1341},[493,1768,1561],{"class":532},[493,1770,1144],{"class":507},[493,1772,1773],{"class":503},"!",[493,1775,1776],{"class":1287},"user",[493,1778,559],{"class":507},[493,1780,596],{"class":507},[493,1782,1783,1786,1789,1792,1794,1796,1799,1801,1803],{"class":495,"line":1364},[493,1784,1785],{"class":499},"    throw",[493,1787,1788],{"class":507}," new",[493,1790,1791],{"class":511}," NotFoundError",[493,1793,514],{"class":532},[493,1795,517],{"class":507},[493,1797,1798],{"class":520},"No such user",[493,1800,517],{"class":507},[493,1802,559],{"class":532},[493,1804,562],{"class":507},[493,1806,1807],{"class":495,"line":1397},[493,1808,1606],{"class":507},[493,1810,1811],{"class":495,"line":1402},[493,1812,1489],{"emptyLinePlaceholder":68},[493,1814,1815],{"class":495,"line":1613},[493,1816,1817],{"class":503},"  return user;\n",[493,1819,1820],{"class":495,"line":1623},[493,1821,1626],{"class":507},[493,1823,1825],{"class":495,"line":1824},12,[493,1826,1489],{"emptyLinePlaceholder":68},[493,1828,1830,1832,1835,1837,1839,1842,1844],{"class":495,"line":1829},13,[493,1831,1673],{"class":507},[493,1833,1834],{"class":511},"Put",[493,1836,514],{"class":503},[493,1838,517],{"class":507},[493,1840,1841],{"class":520},"\u002F:id\u002Femail",[493,1843,517],{"class":507},[493,1845,1688],{"class":503},[493,1847,1849,1851,1853,1856,1858],{"class":495,"line":1848},14,[493,1850,1673],{"class":507},[493,1852,1695],{"class":511},[493,1854,1855],{"class":503},"(NotFoundError",[493,1857,526],{"class":507},[493,1859,1860],{"class":503}," ConflictError)\n",[493,1862,1864,1866,1869],{"class":495,"line":1863},15,[493,1865,1703],{"class":503},[493,1867,1868],{"class":511},"changeEmail",[493,1870,1871],{"class":503},"(\n",[493,1873,1875,1878,1880,1882,1884,1886,1888,1891],{"class":495,"line":1874},16,[493,1876,1877],{"class":503},"  @",[493,1879,1712],{"class":511},[493,1881,514],{"class":503},[493,1883,517],{"class":507},[493,1885,1719],{"class":520},[493,1887,517],{"class":507},[493,1889,1890],{"class":503},") id: string",[493,1892,1125],{"class":507},[493,1894,1896,1898,1901,1904,1906,1909,1911,1914],{"class":495,"line":1895},17,[493,1897,1877],{"class":503},[493,1899,1900],{"class":511},"Body",[493,1902,1903],{"class":503},"() body: ",[493,1905,1147],{"class":507},[493,1907,1908],{"class":532}," email",[493,1910,536],{"class":507},[493,1912,1913],{"class":503}," string ",[493,1915,1916],{"class":507},"},\n",[493,1918,1920,1923,1925,1927,1929,1931],{"class":495,"line":1919},18,[493,1921,1922],{"class":503},"): ",[493,1924,1727],{"class":1099},[493,1926,1096],{"class":507},[493,1928,1732],{"class":503},[493,1930,1103],{"class":507},[493,1932,596],{"class":507},[493,1934,1936,1939,1941],{"class":495,"line":1935},19,[493,1937,1938],{"class":503},"  return this.users.changeEmail(id",[493,1940,526],{"class":507},[493,1942,1943],{"class":503}," body.email);\n",[493,1945,1947],{"class":495,"line":1946},20,[493,1948,1626],{"class":507},[452,1950,1951,1954,1955,1958,1959,1961,1962,1964,1965,1968,1969,1972,1973,536],{},[456,1952,1953],{},"api.safe"," has the same calls, but resolves to ",[456,1956,1957],{},"{ data, error, response }"," instead of rejecting. ",[456,1960,1566],{}," is a union with one ",[456,1963,1447],{}," per declared status, so a ",[456,1966,1967],{},"switch"," on ",[456,1970,1971],{},"error.status"," narrows ",[456,1974,1975],{},"error.body",[484,1977,1979],{"className":486,"code":1978,"language":488,"meta":489,"style":489},"const res = await api.safe.put('\u002Fusers\u002F:id\u002Femail', {\n  params: { id },\n  body: { email },\n});\n\nif (res.error) {\n  switch (res.error.status) {\n    case 400:\n      \u002F\u002F validation issues, absent for a body that is not JSON\n      return showIssues(res.error.body.errors ?? []);\n    case 404:\n      return null; \u002F\u002F { status: 404; name: string; message?: string }\n    case 409:\n      return pickAnother(res.error.body.existingId); \u002F\u002F the ConflictError's own field\n    default:\n      throw res.error;\n  }\n}\n\nres.data; \u002F\u002F User\n",[456,1980,1981,2016,2029,2042,2050,2054,2069,2091,2102,2107,2139,2147,2157,2166,2197,2204,2218,2222,2226,2230],{"__ignoreMap":489},[493,1982,1983,1985,1988,1990,1992,1994,1996,1999,2001,2003,2005,2007,2010,2012,2014],{"class":495,"line":496},[493,1984,1084],{"class":1083},[493,1986,1987],{"class":503}," res ",[493,1989,1090],{"class":507},[493,1991,1746],{"class":499},[493,1993,504],{"class":503},[493,1995,508],{"class":507},[493,1997,1998],{"class":503},"safe",[493,2000,508],{"class":507},[493,2002,465],{"class":511},[493,2004,514],{"class":503},[493,2006,517],{"class":507},[493,2008,2009],{"class":520},"\u002Fusers\u002F:id\u002Femail",[493,2011,517],{"class":507},[493,2013,526],{"class":507},[493,2015,596],{"class":507},[493,2017,2018,2020,2022,2024,2027],{"class":495,"line":565},[493,2019,602],{"class":532},[493,2021,536],{"class":507},[493,2023,529],{"class":507},[493,2025,2026],{"class":503}," id ",[493,2028,1916],{"class":507},[493,2030,2031,2033,2035,2037,2040],{"class":495,"line":599},[493,2032,625],{"class":532},[493,2034,536],{"class":507},[493,2036,529],{"class":507},[493,2038,2039],{"class":503}," email ",[493,2041,1916],{"class":507},[493,2043,2044,2046,2048],{"class":495,"line":622},[493,2045,649],{"class":507},[493,2047,559],{"class":503},[493,2049,562],{"class":507},[493,2051,2052],{"class":495,"line":646},[493,2053,1489],{"emptyLinePlaceholder":68},[493,2055,2056,2059,2062,2064,2067],{"class":495,"line":1341},[493,2057,2058],{"class":499},"if",[493,2060,2061],{"class":503}," (res",[493,2063,508],{"class":507},[493,2065,2066],{"class":503},"error) ",[493,2068,1108],{"class":507},[493,2070,2071,2074,2076,2079,2081,2083,2085,2087,2089],{"class":495,"line":1364},[493,2072,2073],{"class":499},"  switch",[493,2075,1144],{"class":532},[493,2077,2078],{"class":503},"res",[493,2080,508],{"class":507},[493,2082,1566],{"class":503},[493,2084,508],{"class":507},[493,2086,1390],{"class":503},[493,2088,1591],{"class":532},[493,2090,1108],{"class":507},[493,2092,2093,2096,2099],{"class":495,"line":1397},[493,2094,2095],{"class":499},"    case",[493,2097,2098],{"class":1587}," 400",[493,2100,2101],{"class":507},":\n",[493,2103,2104],{"class":495,"line":1402},[493,2105,2106],{"class":735},"      \u002F\u002F validation issues, absent for a body that is not JSON\n",[493,2108,2109,2112,2115,2117,2119,2121,2123,2125,2127,2129,2131,2134,2137],{"class":495,"line":1613},[493,2110,2111],{"class":499},"      return",[493,2113,2114],{"class":511}," showIssues",[493,2116,514],{"class":532},[493,2118,2078],{"class":503},[493,2120,508],{"class":507},[493,2122,1566],{"class":503},[493,2124,508],{"class":507},[493,2126,881],{"class":503},[493,2128,508],{"class":507},[493,2130,1440],{"class":503},[493,2132,2133],{"class":507}," ??",[493,2135,2136],{"class":532}," [])",[493,2138,562],{"class":507},[493,2140,2141,2143,2145],{"class":495,"line":1623},[493,2142,2095],{"class":499},[493,2144,1588],{"class":1587},[493,2146,2101],{"class":507},[493,2148,2149,2151,2154],{"class":495,"line":1824},[493,2150,2111],{"class":499},[493,2152,2153],{"class":507}," null;",[493,2155,2156],{"class":735}," \u002F\u002F { status: 404; name: string; message?: string }\n",[493,2158,2159,2161,2164],{"class":495,"line":1829},[493,2160,2095],{"class":499},[493,2162,2163],{"class":1587}," 409",[493,2165,2101],{"class":507},[493,2167,2168,2170,2173,2175,2177,2179,2181,2183,2185,2187,2190,2192,2194],{"class":495,"line":1848},[493,2169,2111],{"class":499},[493,2171,2172],{"class":511}," pickAnother",[493,2174,514],{"class":532},[493,2176,2078],{"class":503},[493,2178,508],{"class":507},[493,2180,1566],{"class":503},[493,2182,508],{"class":507},[493,2184,881],{"class":503},[493,2186,508],{"class":507},[493,2188,2189],{"class":503},"existingId",[493,2191,559],{"class":532},[493,2193,951],{"class":507},[493,2195,2196],{"class":735}," \u002F\u002F the ConflictError's own field\n",[493,2198,2199,2202],{"class":495,"line":1863},[493,2200,2201],{"class":499},"    default",[493,2203,2101],{"class":507},[493,2205,2206,2209,2212,2214,2216],{"class":495,"line":1874},[493,2207,2208],{"class":499},"      throw",[493,2210,2211],{"class":503}," res",[493,2213,508],{"class":507},[493,2215,1566],{"class":503},[493,2217,562],{"class":507},[493,2219,2220],{"class":495,"line":1895},[493,2221,1606],{"class":507},[493,2223,2224],{"class":495,"line":1919},[493,2225,1626],{"class":507},[493,2227,2228],{"class":495,"line":1935},[493,2229,1489],{"emptyLinePlaceholder":68},[493,2231,2232,2234,2236,2239,2241],{"class":495,"line":1946},[493,2233,2078],{"class":503},[493,2235,508],{"class":507},[493,2237,2238],{"class":503},"data",[493,2240,951],{"class":507},[493,2242,2243],{"class":735}," \u002F\u002F User\n",[452,2245,2246,2247,2249,2250,2252,2253,2255,2256,2259],{},"The body type is the error's JSON: its own fields, ",[456,2248,1390],{}," fixed to the declared status, ",[456,2251,1454],{}," optional because an error created without one has none. A ",[456,2254,805],{}," the class declares as a literal (",[456,2257,2258],{},"override name = 'ConflictError' as const",") stays a literal.",[452,2261,2262,2263,2265,2266,2269,2270,2273,2274,2276,2277,2280],{},"The generator adds the errors the framework throws itself: a 400 with ",[456,2264,1440],{}," (the validation issues) on a route that reads a body or a form or validates an argument, and a 401 and a 403 on a route behind ",[456,2267,2268],{},"@Auth()",". A 500 is never added to the union implicitly (declare ",[456,2271,2272],{},"InternalServerError"," if you want it there). Any route can answer with one, and so with a status nobody declared, such as an error from a middleware: these arrive as a ",[456,2275,1447],{}," like the rest, which is why the ",[456,2278,2279],{},"default"," branch above rethrows.",[452,2282,2283,2284,2286,2287,2289,2290,2292,2293,2296,2297,508],{},"A route without declared errors still works with ",[456,2285,1953],{},"; its ",[456,2288,1566],{}," is a plain ",[456,2291,1447],{},". Network failures and aborts still reject, since the server never answered. ",[456,2294,2295],{},"api.safe.request()"," takes the method first, like ",[456,2298,2299],{},"api.request()",[452,2301,2302,2303,2306,2307,536],{},"With the throwing calls, ",[456,2304,2305],{},"api.isRouteError()"," gives the same narrowing in a ",[456,2308,2309],{},"catch",[484,2311,2313],{"className":486,"code":2312,"language":488,"meta":489,"style":489},"try {\n  return await api.get('\u002Fusers\u002F:id', { params: { id } });\n} catch (error) {\n  if (api.isRouteError(error, 'GET \u002Fusers\u002F:id') && error.status === 404) {\n    return null;\n  }\n\n  throw error;\n}\n",[456,2314,2315,2321,2362,2372,2418,2424,2428,2432,2440],{"__ignoreMap":489},[493,2316,2317,2319],{"class":495,"line":496},[493,2318,1494],{"class":499},[493,2320,596],{"class":507},[493,2322,2323,2326,2328,2330,2332,2334,2336,2338,2340,2342,2344,2346,2348,2350,2352,2354,2356,2358,2360],{"class":495,"line":565},[493,2324,2325],{"class":499},"  return",[493,2327,1746],{"class":499},[493,2329,504],{"class":503},[493,2331,508],{"class":507},[493,2333,458],{"class":511},[493,2335,514],{"class":532},[493,2337,517],{"class":507},[493,2339,521],{"class":520},[493,2341,517],{"class":507},[493,2343,526],{"class":507},[493,2345,529],{"class":507},[493,2347,533],{"class":532},[493,2349,536],{"class":507},[493,2351,529],{"class":507},[493,2353,541],{"class":503},[493,2355,554],{"class":507},[493,2357,554],{"class":507},[493,2359,559],{"class":532},[493,2361,562],{"class":507},[493,2363,2364,2366,2368,2370],{"class":495,"line":599},[493,2365,649],{"class":507},[493,2367,1551],{"class":499},[493,2369,1554],{"class":503},[493,2371,1108],{"class":507},[493,2373,2374,2376,2378,2381,2383,2386,2388,2390,2392,2394,2397,2399,2401,2404,2406,2408,2410,2412,2414,2416],{"class":495,"line":622},[493,2375,1561],{"class":499},[493,2377,1144],{"class":532},[493,2379,2380],{"class":503},"api",[493,2382,508],{"class":507},[493,2384,2385],{"class":511},"isRouteError",[493,2387,514],{"class":532},[493,2389,1566],{"class":503},[493,2391,526],{"class":507},[493,2393,546],{"class":507},[493,2395,2396],{"class":520},"GET \u002Fusers\u002F:id",[493,2398,517],{"class":507},[493,2400,1591],{"class":532},[493,2402,2403],{"class":507},"&&",[493,2405,1577],{"class":503},[493,2407,508],{"class":507},[493,2409,1390],{"class":503},[493,2411,1584],{"class":507},[493,2413,1588],{"class":1587},[493,2415,1591],{"class":532},[493,2417,1108],{"class":507},[493,2419,2420,2422],{"class":495,"line":646},[493,2421,1598],{"class":499},[493,2423,1601],{"class":507},[493,2425,2426],{"class":495,"line":1341},[493,2427,1606],{"class":507},[493,2429,2430],{"class":495,"line":1364},[493,2431,1489],{"emptyLinePlaceholder":68},[493,2433,2434,2436,2438],{"class":495,"line":1397},[493,2435,1616],{"class":499},[493,2437,1577],{"class":503},[493,2439,562],{"class":507},[493,2441,2442],{"class":495,"line":1402},[493,2443,1626],{"class":507},[452,2445,2446],{},"It checks that the error came from a call to that route template; the status union comes from the declaration.",[452,2448,2449,2450,2453],{},"When the generator cannot import an error class, for example one that is not exported from the controller's file or its imports, it types that status as ",[456,2451,2452],{},"{ status; name; message? }"," and logs a warning instead of failing.",[655,2455,2457],{"id":2456},"server-sent-events","Server-sent events",[452,2459,2460,2461,2464],{},"An ",[456,2462,2463],{},"@Sse()"," route resolves to an async iterable of events, each typed by what the handler yields:",[484,2466,2469],{"className":486,"code":2467,"filename":2468,"language":488,"meta":489,"style":489},"@Sse('\u002Fbuilds\u002F:id\u002Flog')\npublic async *log(\n  @Param('id') id: string,\n): AsyncGenerator\u003C{ event: 'line'; data: { text: string } } | { event: 'done' }> {\n  \u002F\u002F ...\n}\n","src\u002FControllers\u002FBuildController.ts",[456,2470,2471,2489,2501,2519,2580,2585],{"__ignoreMap":489},[493,2472,2473,2475,2478,2480,2482,2485,2487],{"class":495,"line":496},[493,2474,1673],{"class":507},[493,2476,2477],{"class":511},"Sse",[493,2479,514],{"class":503},[493,2481,517],{"class":507},[493,2483,2484],{"class":520},"\u002Fbuilds\u002F:id\u002Flog",[493,2486,517],{"class":507},[493,2488,1688],{"class":503},[493,2490,2491,2493,2496,2499],{"class":495,"line":565},[493,2492,1703],{"class":503},[493,2494,2495],{"class":507},"*",[493,2497,2498],{"class":511},"log",[493,2500,1871],{"class":503},[493,2502,2503,2505,2507,2509,2511,2513,2515,2517],{"class":495,"line":599},[493,2504,1877],{"class":503},[493,2506,1712],{"class":511},[493,2508,514],{"class":503},[493,2510,517],{"class":507},[493,2512,1719],{"class":520},[493,2514,517],{"class":507},[493,2516,1890],{"class":503},[493,2518,1125],{"class":507},[493,2520,2521,2524,2527,2530,2532,2534,2536,2538,2540,2543,2545,2547,2550,2552,2555,2557,2559,2562,2564,2566,2568,2570,2573,2575,2578],{"class":495,"line":622},[493,2522,2523],{"class":503},"): AsyncGenerator",[493,2525,2526],{"class":507},"\u003C{",[493,2528,2529],{"class":1099}," event",[493,2531,536],{"class":507},[493,2533,546],{"class":507},[493,2535,495],{"class":520},[493,2537,517],{"class":507},[493,2539,951],{"class":507},[493,2541,2542],{"class":1099}," data",[493,2544,536],{"class":507},[493,2546,529],{"class":507},[493,2548,2549],{"class":1099}," text",[493,2551,536],{"class":507},[493,2553,2554],{"class":503}," string",[493,2556,554],{"class":507},[493,2558,554],{"class":507},[493,2560,2561],{"class":507}," |",[493,2563,529],{"class":507},[493,2565,2529],{"class":1099},[493,2567,536],{"class":507},[493,2569,546],{"class":507},[493,2571,2572],{"class":520},"done",[493,2574,517],{"class":507},[493,2576,2577],{"class":507}," }>",[493,2579,596],{"class":507},[493,2581,2582],{"class":495,"line":646},[493,2583,2584],{"class":735},"  \u002F\u002F ...\n",[493,2586,2587],{"class":495,"line":1341},[493,2588,1626],{"class":507},[484,2590,2592],{"className":486,"code":2591,"language":488,"meta":489,"style":489},"for await (const message of await api.get('\u002Fbuilds\u002F:id\u002Flog', {\n  params: { id: '7' },\n})) {\n  if (message.event === 'line') {\n    console.log(message.data.text);\n  }\n}\n",[456,2593,2594,2631,2652,2661,2686,2712,2716],{"__ignoreMap":489},[493,2595,2596,2599,2601,2603,2605,2608,2611,2613,2615,2617,2619,2621,2623,2625,2627,2629],{"class":495,"line":496},[493,2597,2598],{"class":499},"for",[493,2600,1746],{"class":499},[493,2602,1144],{"class":503},[493,2604,1084],{"class":1083},[493,2606,2607],{"class":503}," message ",[493,2609,2610],{"class":507},"of",[493,2612,1746],{"class":499},[493,2614,504],{"class":503},[493,2616,508],{"class":507},[493,2618,458],{"class":511},[493,2620,514],{"class":503},[493,2622,517],{"class":507},[493,2624,2484],{"class":520},[493,2626,517],{"class":507},[493,2628,526],{"class":507},[493,2630,596],{"class":507},[493,2632,2633,2635,2637,2639,2641,2643,2645,2648,2650],{"class":495,"line":565},[493,2634,602],{"class":532},[493,2636,536],{"class":507},[493,2638,529],{"class":507},[493,2640,541],{"class":532},[493,2642,536],{"class":507},[493,2644,546],{"class":507},[493,2646,2647],{"class":520},"7",[493,2649,517],{"class":507},[493,2651,619],{"class":507},[493,2653,2654,2656,2659],{"class":495,"line":599},[493,2655,649],{"class":507},[493,2657,2658],{"class":503},")) ",[493,2660,1108],{"class":507},[493,2662,2663,2665,2667,2669,2671,2674,2676,2678,2680,2682,2684],{"class":495,"line":622},[493,2664,1561],{"class":499},[493,2666,1144],{"class":532},[493,2668,1454],{"class":503},[493,2670,508],{"class":507},[493,2672,2673],{"class":503},"event",[493,2675,1584],{"class":507},[493,2677,546],{"class":507},[493,2679,495],{"class":520},[493,2681,517],{"class":507},[493,2683,1591],{"class":532},[493,2685,1108],{"class":507},[493,2687,2688,2691,2693,2695,2697,2699,2701,2703,2705,2708,2710],{"class":495,"line":646},[493,2689,2690],{"class":503},"    console",[493,2692,508],{"class":507},[493,2694,2498],{"class":511},[493,2696,514],{"class":532},[493,2698,1454],{"class":503},[493,2700,508],{"class":507},[493,2702,2238],{"class":503},[493,2704,508],{"class":507},[493,2706,2707],{"class":503},"text",[493,2709,559],{"class":532},[493,2711,562],{"class":507},[493,2713,2714],{"class":495,"line":1341},[493,2715,1606],{"class":507},[493,2717,2718],{"class":495,"line":1364},[493,2719,1626],{"class":507},[452,2721,2722,2724,2725,2728,2729,2732,2733,2736,2737,900,2740,2743],{},[456,2723,2238],{}," is parsed as JSON when it is JSON, which is how Vercube sends anything that is not a string. A yielded string that happens to be valid JSON, like ",[456,2726,2727],{},"'42'",", therefore arrives parsed. Heartbeats are skipped, and unlike ",[456,2730,2731],{},"EventSource"," an event without data (",[456,2734,2735],{},"{ event: 'done' }",") is still delivered. Leaving the loop with ",[456,2738,2739],{},"break",[456,2741,2742],{},"return"," closes the connection.",[655,2745,2747],{"id":2746},"aborting","Aborting",[452,2749,2750,2752],{},[456,2751,1216],{}," cancels the request, and for a server-sent event stream, the stream:",[484,2754,2756],{"className":486,"code":2755,"language":488,"meta":489,"style":489},"const controller = new AbortController();\nsetTimeout(() => controller.abort(), 5000);\n\nfor await (const message of await api.get('\u002Fevents', {\n  signal: controller.signal,\n})) {\n  \u002F\u002F rejects with the abort reason once aborted\n}\n",[456,2757,2758,2776,2806,2810,2845,2860,2868,2873],{"__ignoreMap":489},[493,2759,2760,2762,2765,2767,2769,2772,2774],{"class":495,"line":496},[493,2761,1084],{"class":1083},[493,2763,2764],{"class":503}," controller ",[493,2766,1090],{"class":507},[493,2768,1788],{"class":507},[493,2770,2771],{"class":511}," AbortController",[493,2773,1174],{"class":503},[493,2775,562],{"class":507},[493,2777,2778,2781,2783,2785,2787,2790,2792,2795,2797,2799,2802,2804],{"class":495,"line":565},[493,2779,2780],{"class":511},"setTimeout",[493,2782,514],{"class":503},[493,2784,1174],{"class":507},[493,2786,1141],{"class":1083},[493,2788,2789],{"class":503}," controller",[493,2791,508],{"class":507},[493,2793,2794],{"class":511},"abort",[493,2796,1174],{"class":503},[493,2798,526],{"class":507},[493,2800,2801],{"class":1587}," 5000",[493,2803,559],{"class":503},[493,2805,562],{"class":507},[493,2807,2808],{"class":495,"line":599},[493,2809,1489],{"emptyLinePlaceholder":68},[493,2811,2812,2814,2816,2818,2820,2822,2824,2826,2828,2830,2832,2834,2836,2839,2841,2843],{"class":495,"line":622},[493,2813,2598],{"class":499},[493,2815,1746],{"class":499},[493,2817,1144],{"class":503},[493,2819,1084],{"class":1083},[493,2821,2607],{"class":503},[493,2823,2610],{"class":507},[493,2825,1746],{"class":499},[493,2827,504],{"class":503},[493,2829,508],{"class":507},[493,2831,458],{"class":511},[493,2833,514],{"class":503},[493,2835,517],{"class":507},[493,2837,2838],{"class":520},"\u002Fevents",[493,2840,517],{"class":507},[493,2842,526],{"class":507},[493,2844,596],{"class":507},[493,2846,2847,2850,2852,2854,2856,2858],{"class":495,"line":646},[493,2848,2849],{"class":532},"  signal",[493,2851,536],{"class":507},[493,2853,2789],{"class":503},[493,2855,508],{"class":507},[493,2857,1216],{"class":503},[493,2859,1125],{"class":507},[493,2861,2862,2864,2866],{"class":495,"line":1341},[493,2863,649],{"class":507},[493,2865,2658],{"class":503},[493,2867,1108],{"class":507},[493,2869,2870],{"class":495,"line":1364},[493,2871,2872],{"class":735},"  \u002F\u002F rejects with the abort reason once aborted\n",[493,2874,2875],{"class":495,"line":1397},[493,2876,1626],{"class":507},[2878,2879,2880],"style",{},"html pre.shiki code .s7zQu, html code.shiki .s7zQu{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}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 .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sHdIc, html code.shiki .sHdIc{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#EEFFFF;--shiki-default-font-style:italic;--shiki-dark:#BABED8;--shiki-dark-font-style:italic}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}",{"title":489,"searchDepth":496,"depth":565,"links":2882},[2883,2884,2885,2886,2887,2888,2889,2892,2893],{"id":657,"depth":565,"text":658},{"id":739,"depth":565,"text":740},{"id":874,"depth":565,"text":875},{"id":1065,"depth":565,"text":1066},{"id":1223,"depth":565,"text":1224},{"id":1427,"depth":565,"text":1428},{"id":1440,"depth":565,"text":1441,"children":2890},[2891],{"id":1650,"depth":599,"text":1651},{"id":2456,"depth":565,"text":2457},{"id":2746,"depth":565,"text":2747},"Bodies, query strings, headers, hooks, typed errors, server-sent events and aborting","md",null,{},{"title":163,"description":2894},"ItWmuPzV6E4ntZwmlCCVLBImnvTqbtkkgujVEexCQjs",[2901,2903],{"title":78,"path":183,"stem":184,"description":2902,"children":-1},"Call your Vercube API from a frontend, another service or a test, typed by your controllers",{"title":109,"path":189,"stem":190,"description":2904,"children":-1},"Reference for createClient, the client methods, VercubeClientError, RouteDef and typegen",1794396676406]