[{"data":1,"prerenderedAt":650},["ShallowReactive",2],{"navigation":3,"-guide-server":56,"-guide-server-surround":645},[4],{"title":5,"path":6,"stem":7,"children":8,"icon":10},"Getting Started","/guide","1.guide/1.index",[9,11,16,21,26,31,36,41,46,51],{"title":5,"path":6,"stem":7,"icon":10},"ph:book-open-duotone",{"title":12,"path":13,"stem":14,"icon":15},"Using CLI","/guide/cli","1.guide/10.cli","garden:terminal-cli-stroke-12",{"title":17,"path":18,"stem":19,"icon":20},"Fetch Handler","/guide/handler","1.guide/2.handler","i-fluent:target-24-regular",{"title":22,"path":23,"stem":24,"icon":25},"Server Instance","/guide/server","1.guide/3.server","radix-icons:component-instance",{"title":27,"path":28,"stem":29,"icon":30},"Middleware","/guide/middleware","1.guide/4.middleware","clarity:plugin-line",{"title":32,"path":33,"stem":34,"icon":35},"Server Options","/guide/options","1.guide/5.options","ri:settings-3-line",{"title":37,"path":38,"stem":39,"icon":40},"TLS","/guide/tls","1.guide/6.tls","ri:lock-2-line",{"title":42,"path":43,"stem":44,"icon":45},"Bundler Usage","/guide/bundler","1.guide/7.bundler","clarity:bundle-line",{"title":47,"path":48,"stem":49,"icon":50},"Node.js Support","/guide/node","1.guide/8.node","akar-icons:node-fill",{"title":52,"path":53,"stem":54,"icon":55},"AWS Lambda","/guide/aws-lambda","1.guide/9.aws-lambda","clarity:cloud-traffic-line",{"id":57,"title":22,"body":58,"description":639,"extension":640,"meta":641,"navigation":642,"path":23,"seo":643,"stem":24,"__hash__":644},"content/1.guide/3.server.md",{"type":59,"value":60,"toc":621,"icon":25},"minimark",[61,70,258,263,270,273,276,282,285,291,294,300,303,306,312,323,463,467,473,476,482,497,503,506,513,524,528,571,575,581,587,590,593,599,602,605,611,614,617],[62,63,64,65,69],"p",{},"When calling ",[66,67,68],"code",{},"serve"," to start a server, a server instance will be immediately returned in order to control the server instance.",[71,72,77],"pre",{"className":73,"code":74,"language":75,"meta":76,"style":76},"language-js shiki shiki-themes github-light github-dark github-dark","import { serve } from \"srvx\";\n\nconst server = serve({\n  fetch(request) {\n    return new Response(`🔥 Server is powered by ${server.runtime}.`);\n  },\n});\n\nawait server.ready();\n\nconsole.log(`🚀 Server is ready at ${server.url}`);\n\n// When server is no longer needed\n// await server.close(true /* closeActiveConnections */)\n","js","",[66,78,79,102,109,129,145,177,183,189,194,209,214,240,245,252],{"__ignoreMap":76},[80,81,84,88,92,95,99],"span",{"class":82,"line":83},"line",1,[80,85,87],{"class":86},"so5gQ","import",[80,89,91],{"class":90},"slsVL"," { serve } ",[80,93,94],{"class":86},"from",[80,96,98],{"class":97},"sfrk1"," \"srvx\"",[80,100,101],{"class":90},";\n",[80,103,105],{"class":82,"line":104},2,[80,106,108],{"emptyLinePlaceholder":107},true,"\n",[80,110,112,115,119,122,126],{"class":82,"line":111},3,[80,113,114],{"class":86},"const",[80,116,118],{"class":117},"suiK_"," server",[80,120,121],{"class":86}," =",[80,123,125],{"class":124},"shcOC"," serve",[80,127,128],{"class":90},"({\n",[80,130,132,135,138,142],{"class":82,"line":131},4,[80,133,134],{"class":124},"  fetch",[80,136,137],{"class":90},"(",[80,139,141],{"class":140},"sQHwn","request",[80,143,144],{"class":90},") {\n",[80,146,148,151,154,157,159,162,165,168,171,174],{"class":82,"line":147},5,[80,149,150],{"class":86},"    return",[80,152,153],{"class":86}," new",[80,155,156],{"class":124}," Response",[80,158,137],{"class":90},[80,160,161],{"class":97},"`🔥 Server is powered by ${",[80,163,164],{"class":90},"server",[80,166,167],{"class":97},".",[80,169,170],{"class":90},"runtime",[80,172,173],{"class":97},"}.`",[80,175,176],{"class":90},");\n",[80,178,180],{"class":82,"line":179},6,[80,181,182],{"class":90},"  },\n",[80,184,186],{"class":82,"line":185},7,[80,187,188],{"class":90},"});\n",[80,190,192],{"class":82,"line":191},8,[80,193,108],{"emptyLinePlaceholder":107},[80,195,197,200,203,206],{"class":82,"line":196},9,[80,198,199],{"class":86},"await",[80,201,202],{"class":90}," server.",[80,204,205],{"class":124},"ready",[80,207,208],{"class":90},"();\n",[80,210,212],{"class":82,"line":211},10,[80,213,108],{"emptyLinePlaceholder":107},[80,215,217,220,223,225,228,230,232,235,238],{"class":82,"line":216},11,[80,218,219],{"class":90},"console.",[80,221,222],{"class":124},"log",[80,224,137],{"class":90},[80,226,227],{"class":97},"`🚀 Server is ready at ${",[80,229,164],{"class":90},[80,231,167],{"class":97},[80,233,234],{"class":90},"url",[80,236,237],{"class":97},"}`",[80,239,176],{"class":90},[80,241,243],{"class":82,"line":242},12,[80,244,108],{"emptyLinePlaceholder":107},[80,246,248],{"class":82,"line":247},13,[80,249,251],{"class":250},"sCsY4","// When server is no longer needed\n",[80,253,255],{"class":82,"line":254},14,[80,256,257],{"class":250},"// await server.close(true /* closeActiveConnections */)\n",[259,260,262],"h2",{"id":261},"server-properties","Server Properties",[264,265,267],"h3",{"id":266},"serveroptions",[66,268,269],{},"server.options",[62,271,272],{},"Access to the sever options set during initialization.",[274,275],"read-more",{"to":33},[264,277,279],{"id":278},"serverurl",[66,280,281],{},"server.url",[62,283,284],{},"Get the computed server listening URL.",[264,286,288],{"id":287},"serveraddr",[66,289,290],{},"server.addr",[62,292,293],{},"Listening address (hostname or ipv4/ipv6).",[264,295,297],{"id":296},"serverport",[66,298,299],{},"server.port",[62,301,302],{},"Listening port number.",[274,304],{"to":305},"/guide/options#port-required",[264,307,309],{"id":308},"serverwaituntil",[66,310,311],{},"server.waitUntil?",[62,313,314,315,322],{},"Register a background task that the server should await before closing. This is the same function as ",[316,317,319],"a",{"href":318},"/guide/handler#requestwaituntil",[66,320,321],{},"request.waitUntil"," but available at the server level for use outside of request handlers.",[71,324,326],{"className":73,"code":325,"language":75,"meta":76,"style":76},"import { serve } from \"srvx\";\n\nconst server = serve({\n  fetch: (request) => new Response(\"OK\"),\n});\n\nconst promise = fetch(\"https://telemetry.example.com\", {\n  method: \"POST\",\n  body: JSON.stringify({ event: \"server_started\" }),\n});\n\nserver.waitUntil?.(promise);\n",[66,327,328,340,344,356,383,387,391,411,422,444,448,452],{"__ignoreMap":76},[80,329,330,332,334,336,338],{"class":82,"line":83},[80,331,87],{"class":86},[80,333,91],{"class":90},[80,335,94],{"class":86},[80,337,98],{"class":97},[80,339,101],{"class":90},[80,341,342],{"class":82,"line":104},[80,343,108],{"emptyLinePlaceholder":107},[80,345,346,348,350,352,354],{"class":82,"line":111},[80,347,114],{"class":86},[80,349,118],{"class":117},[80,351,121],{"class":86},[80,353,125],{"class":124},[80,355,128],{"class":90},[80,357,358,360,363,365,368,371,373,375,377,380],{"class":82,"line":131},[80,359,134],{"class":124},[80,361,362],{"class":90},": (",[80,364,141],{"class":140},[80,366,367],{"class":90},") ",[80,369,370],{"class":86},"=>",[80,372,153],{"class":86},[80,374,156],{"class":124},[80,376,137],{"class":90},[80,378,379],{"class":97},"\"OK\"",[80,381,382],{"class":90},"),\n",[80,384,385],{"class":82,"line":147},[80,386,188],{"class":90},[80,388,389],{"class":82,"line":179},[80,390,108],{"emptyLinePlaceholder":107},[80,392,393,395,398,400,403,405,408],{"class":82,"line":185},[80,394,114],{"class":86},[80,396,397],{"class":117}," promise",[80,399,121],{"class":86},[80,401,402],{"class":124}," fetch",[80,404,137],{"class":90},[80,406,407],{"class":97},"\"https://telemetry.example.com\"",[80,409,410],{"class":90},", {\n",[80,412,413,416,419],{"class":82,"line":191},[80,414,415],{"class":90},"  method: ",[80,417,418],{"class":97},"\"POST\"",[80,420,421],{"class":90},",\n",[80,423,424,427,430,432,435,438,441],{"class":82,"line":196},[80,425,426],{"class":90},"  body: ",[80,428,429],{"class":117},"JSON",[80,431,167],{"class":90},[80,433,434],{"class":124},"stringify",[80,436,437],{"class":90},"({ event: ",[80,439,440],{"class":97},"\"server_started\"",[80,442,443],{"class":90}," }),\n",[80,445,446],{"class":82,"line":211},[80,447,188],{"class":90},[80,449,450],{"class":82,"line":216},[80,451,108],{"emptyLinePlaceholder":107},[80,453,454,457,460],{"class":82,"line":242},[80,455,456],{"class":90},"server.",[80,458,459],{"class":124},"waitUntil",[80,461,462],{"class":90},"?.(promise);\n",[259,464,466],{"id":465},"server-methods","Server Methods",[264,468,470],{"id":469},"serverready",[66,471,472],{},"server.ready()",[62,474,475],{},"Returns a promise that will be resolved when server is listening to the port and ready to accept connections.",[62,477,478],{},[479,480,481],"strong",{},"Example:",[71,483,485],{"className":73,"code":484,"language":75,"meta":76,"style":76},"await server.ready();\n",[66,486,487],{"__ignoreMap":76},[80,488,489,491,493,495],{"class":82,"line":83},[80,490,199],{"class":86},[80,492,202],{"class":90},[80,494,205],{"class":124},[80,496,208],{"class":90},[264,498,500],{"id":499},"serverclosecloseactiveconnections",[66,501,502],{},"server.close(closeActiveConnections?)",[62,504,505],{},"Stop listening to prevent new connections from being accepted.",[62,507,508,509,512],{},"By default, calling ",[66,510,511],{},"close"," does not cancel in-flight requests or websockets. That means it may take some time before all network activity stops.",[62,514,515,516,519,520,523],{},"If ",[66,517,518],{},"closeActiveConnections"," is set to ",[66,521,522],{},"true",", it will immediately terminate in-flight requests, websockets, and stop accepting new connections.",[62,525,526],{},[479,527,481],{},[71,529,531],{"className":73,"code":530,"language":75,"meta":76,"style":76},"// Stop accepting new requests\nawait server.close();\n\n// Stop accepting new requests and cancel all current connections\nawait server.close(true);\n",[66,532,533,538,548,552,557],{"__ignoreMap":76},[80,534,535],{"class":82,"line":83},[80,536,537],{"class":250},"// Stop accepting new requests\n",[80,539,540,542,544,546],{"class":82,"line":104},[80,541,199],{"class":86},[80,543,202],{"class":90},[80,545,511],{"class":124},[80,547,208],{"class":90},[80,549,550],{"class":82,"line":111},[80,551,108],{"emptyLinePlaceholder":107},[80,553,554],{"class":82,"line":131},[80,555,556],{"class":250},"// Stop accepting new requests and cancel all current connections\n",[80,558,559,561,563,565,567,569],{"class":82,"line":147},[80,560,199],{"class":86},[80,562,202],{"class":90},[80,564,511],{"class":124},[80,566,137],{"class":90},[80,568,522],{"class":117},[80,570,176],{"class":90},[259,572,574],{"id":573},"access-to-the-underlying-server","Access to the Underlying Server",[576,577,578],"note",{},[62,579,580],{},"\nsrvx tries to translate most common options to op level properties. This is only for advanced usage.",[264,582,584],{"id":583},"serverbunserver",[66,585,586],{},"server.bun.server",[62,588,589],{},"Access to the underlying Bun server instance when running in Bun.",[274,591],{"to":592},"https://bun.sh/docs/api/http",[264,594,596],{"id":595},"serverdenoserver",[66,597,598],{},"server.deno.server",[62,600,601],{},"Access to the underlying Bun server instance when running in Deno.",[274,603],{"to":604},"https://docs.deno.com/api/deno/~/Deno.HttpServer",[264,606,608],{"id":607},"servernodeserver",[66,609,610],{},"server.node.server",[62,612,613],{},"Access to the underlying Node.js server instance when running in Node.js",[274,615],{"to":616},"https://nodejs.org/api/http.html#class-httpserver",[618,619,620],"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 .suiK_, html code.shiki .suiK_{--shiki-light:#005CC5;--shiki-default:#79B8FF;--shiki-dark:#79B8FF}html pre.shiki code .shcOC, html code.shiki .shcOC{--shiki-light:#6F42C1;--shiki-default:#B392F0;--shiki-dark:#B392F0}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}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);}",{"title":76,"searchDepth":104,"depth":104,"links":622},[623,630,634],{"id":261,"depth":104,"text":262,"children":624},[625,626,627,628,629],{"id":266,"depth":111,"text":269},{"id":278,"depth":111,"text":281},{"id":287,"depth":111,"text":290},{"id":296,"depth":111,"text":299},{"id":308,"depth":111,"text":311},{"id":465,"depth":104,"text":466,"children":631},[632,633],{"id":469,"depth":111,"text":472},{"id":499,"depth":111,"text":502},{"id":573,"depth":104,"text":574,"children":635},[636,637,638],{"id":583,"depth":111,"text":586},{"id":595,"depth":111,"text":598},{"id":607,"depth":111,"text":610},"Control srvx server lifecycle.","md",{"icon":25},{"icon":25},{"title":22,"description":639},"kL4tt9pK8sJjEZqp2PWXhaFX5bYoR6yKRC5Tsegkm9E",[646,648],{"title":17,"path":18,"stem":19,"description":647,"icon":20,"children":-1},"Get familiar with srvx fetch server handler and ServerRequest.",{"title":27,"path":28,"stem":29,"description":649,"icon":30,"children":-1},"Plugins and middleware allow adding reusable server extensions.",1784030713103]