[{"data":1,"prerenderedAt":627},["ShallowReactive",2],{"navigation":3,"-guide-server":56,"-guide-server-surround":622},[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":616,"extension":617,"meta":618,"navigation":619,"path":23,"seo":620,"stem":24,"__hash__":621},"content/1.guide/3.server.md",{"type":59,"value":60,"toc":600,"icon":25},"minimark",[61,70,258,263,270,273,276,282,285,291,302,442,446,452,455,461,476,482,485,492,503,507,550,554,560,566,569,572,578,581,584,590,593,596],[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},"serverwaituntil",[66,289,290],{},"server.waitUntil?",[62,292,293,294,301],{},"Register a background task that the server should await before closing. This is the same function as ",[295,296,298],"a",{"href":297},"/guide/handler#requestwaituntil",[66,299,300],{},"request.waitUntil"," but available at the server level for use outside of request handlers.",[71,303,305],{"className":73,"code":304,"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,306,307,319,323,335,362,366,370,390,401,423,427,431],{"__ignoreMap":76},[80,308,309,311,313,315,317],{"class":82,"line":83},[80,310,87],{"class":86},[80,312,91],{"class":90},[80,314,94],{"class":86},[80,316,98],{"class":97},[80,318,101],{"class":90},[80,320,321],{"class":82,"line":104},[80,322,108],{"emptyLinePlaceholder":107},[80,324,325,327,329,331,333],{"class":82,"line":111},[80,326,114],{"class":86},[80,328,118],{"class":117},[80,330,121],{"class":86},[80,332,125],{"class":124},[80,334,128],{"class":90},[80,336,337,339,342,344,347,350,352,354,356,359],{"class":82,"line":131},[80,338,134],{"class":124},[80,340,341],{"class":90},": (",[80,343,141],{"class":140},[80,345,346],{"class":90},") ",[80,348,349],{"class":86},"=>",[80,351,153],{"class":86},[80,353,156],{"class":124},[80,355,137],{"class":90},[80,357,358],{"class":97},"\"OK\"",[80,360,361],{"class":90},"),\n",[80,363,364],{"class":82,"line":147},[80,365,188],{"class":90},[80,367,368],{"class":82,"line":179},[80,369,108],{"emptyLinePlaceholder":107},[80,371,372,374,377,379,382,384,387],{"class":82,"line":185},[80,373,114],{"class":86},[80,375,376],{"class":117}," promise",[80,378,121],{"class":86},[80,380,381],{"class":124}," fetch",[80,383,137],{"class":90},[80,385,386],{"class":97},"\"https://telemetry.example.com\"",[80,388,389],{"class":90},", {\n",[80,391,392,395,398],{"class":82,"line":191},[80,393,394],{"class":90},"  method: ",[80,396,397],{"class":97},"\"POST\"",[80,399,400],{"class":90},",\n",[80,402,403,406,409,411,414,417,420],{"class":82,"line":196},[80,404,405],{"class":90},"  body: ",[80,407,408],{"class":117},"JSON",[80,410,167],{"class":90},[80,412,413],{"class":124},"stringify",[80,415,416],{"class":90},"({ event: ",[80,418,419],{"class":97},"\"server_started\"",[80,421,422],{"class":90}," }),\n",[80,424,425],{"class":82,"line":211},[80,426,188],{"class":90},[80,428,429],{"class":82,"line":216},[80,430,108],{"emptyLinePlaceholder":107},[80,432,433,436,439],{"class":82,"line":242},[80,434,435],{"class":90},"server.",[80,437,438],{"class":124},"waitUntil",[80,440,441],{"class":90},"?.(promise);\n",[259,443,445],{"id":444},"server-methods","Server Methods",[264,447,449],{"id":448},"serverready",[66,450,451],{},"server.ready()",[62,453,454],{},"Returns a promise that will be resolved when server is listening to the port and ready to accept connections.",[62,456,457],{},[458,459,460],"strong",{},"Example:",[71,462,464],{"className":73,"code":463,"language":75,"meta":76,"style":76},"await server.ready();\n",[66,465,466],{"__ignoreMap":76},[80,467,468,470,472,474],{"class":82,"line":83},[80,469,199],{"class":86},[80,471,202],{"class":90},[80,473,205],{"class":124},[80,475,208],{"class":90},[264,477,479],{"id":478},"serverclosecloseactiveconnections",[66,480,481],{},"server.close(closeActiveConnections?)",[62,483,484],{},"Stop listening to prevent new connections from being accepted.",[62,486,487,488,491],{},"By default, calling ",[66,489,490],{},"close"," does not cancel in-flight requests or websockets. That means it may take some time before all network activity stops.",[62,493,494,495,498,499,502],{},"If ",[66,496,497],{},"closeActiveConnections"," is set to ",[66,500,501],{},"true",", it will immediately terminate in-flight requests, websockets, and stop accepting new connections.",[62,504,505],{},[458,506,460],{},[71,508,510],{"className":73,"code":509,"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,511,512,517,527,531,536],{"__ignoreMap":76},[80,513,514],{"class":82,"line":83},[80,515,516],{"class":250},"// Stop accepting new requests\n",[80,518,519,521,523,525],{"class":82,"line":104},[80,520,199],{"class":86},[80,522,202],{"class":90},[80,524,490],{"class":124},[80,526,208],{"class":90},[80,528,529],{"class":82,"line":111},[80,530,108],{"emptyLinePlaceholder":107},[80,532,533],{"class":82,"line":131},[80,534,535],{"class":250},"// Stop accepting new requests and cancel all current connections\n",[80,537,538,540,542,544,546,548],{"class":82,"line":147},[80,539,199],{"class":86},[80,541,202],{"class":90},[80,543,490],{"class":124},[80,545,137],{"class":90},[80,547,501],{"class":117},[80,549,176],{"class":90},[259,551,553],{"id":552},"access-to-the-underlying-server","Access to the Underlying Server",[555,556,557],"note",{},[62,558,559],{},"\nsrvx tries to translate most common options to op level properties. This is only for advanced usage.",[264,561,563],{"id":562},"serverbunserver",[66,564,565],{},"server.bun.server",[62,567,568],{},"Access to the underlying Bun server instance when running in Bun.",[274,570],{"to":571},"https://bun.sh/docs/api/http",[264,573,575],{"id":574},"serverdenoserver",[66,576,577],{},"server.deno.server",[62,579,580],{},"Access to the underlying Deno server instance when running in Deno.",[274,582],{"to":583},"https://docs.deno.com/api/deno/~/Deno.HttpServer",[264,585,587],{"id":586},"servernodeserver",[66,588,589],{},"server.node.server",[62,591,592],{},"Access to the underlying Node.js server instance when running in Node.js",[274,594],{"to":595},"https://nodejs.org/api/http.html#class-httpserver",[597,598,599],"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":601},[602,607,611],{"id":261,"depth":104,"text":262,"children":603},[604,605,606],{"id":266,"depth":111,"text":269},{"id":278,"depth":111,"text":281},{"id":287,"depth":111,"text":290},{"id":444,"depth":104,"text":445,"children":608},[609,610],{"id":448,"depth":111,"text":451},{"id":478,"depth":111,"text":481},{"id":552,"depth":104,"text":553,"children":612},[613,614,615],{"id":562,"depth":111,"text":565},{"id":574,"depth":111,"text":577},{"id":586,"depth":111,"text":589},"Control srvx server lifecycle.","md",{"icon":25},{"icon":25},{"title":22,"description":616},"M88hWU6YAKHtVHblvFYz5_wgV5PS8bMv3LOHECcH1ZA",[623,625],{"title":17,"path":18,"stem":19,"description":624,"icon":20,"children":-1},"Get familiar with srvx fetch server handler and ServerRequest.",{"title":27,"path":28,"stem":29,"description":626,"icon":30,"children":-1},"Plugins and middleware allow adding reusable server extensions.",1784034230532]