[{"data":1,"prerenderedAt":2264},["ShallowReactive",2],{"navigation":3,"-guide-options":56,"-guide-options-surround":2259},[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":32,"body":58,"description":2253,"extension":2254,"meta":2255,"navigation":2256,"path":33,"seo":2257,"stem":34,"__hash__":2258},"content/1.guide/5.options.md",{"type":59,"value":60,"toc":2230,"icon":35},"minimark",[61,70,223,226,236,241,247,250,260,270,275,278,296,305,311,314,324,329,336,341,360,461,466,475,608,611,616,625,735,744,749,752,762,782,787,790,795,861,866,886,899,909,912,917,927,934,938,1063,1069,1080,1107,1135,1139,1307,1347,1353,1384,1399,1437,1442,1464,1484,1505,1509,1582,1587,1591,1595,1599,1695,1711,1714,1718,1839,1844,1847,1851,1970,1976,1980,1986,2071,2084,2088,2091,2226],[62,63,64,65,69],"p",{},"When starting a new server, in addition to main ",[66,67,68],"code",{},"fetch"," handler, you can provide additional options to customize listening server.",[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\nserve({\n  // Generic options\n  port: 3000,\n  hostname: \"localhost\",\n\n  // Runtime specific options\n  node: {},\n  bun: {},\n  deno: {},\n\n  // Main server handler\n  fetch: () => new Response(\"👋 Hello there!\"),\n});\n","js","",[66,78,79,102,109,119,126,139,150,155,161,167,173,179,184,190,217],{"__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,116],{"class":82,"line":111},3,[80,113,115],{"class":114},"shcOC","serve",[80,117,118],{"class":90},"({\n",[80,120,122],{"class":82,"line":121},4,[80,123,125],{"class":124},"sCsY4","  // Generic options\n",[80,127,129,132,136],{"class":82,"line":128},5,[80,130,131],{"class":90},"  port: ",[80,133,135],{"class":134},"suiK_","3000",[80,137,138],{"class":90},",\n",[80,140,142,145,148],{"class":82,"line":141},6,[80,143,144],{"class":90},"  hostname: ",[80,146,147],{"class":97},"\"localhost\"",[80,149,138],{"class":90},[80,151,153],{"class":82,"line":152},7,[80,154,108],{"emptyLinePlaceholder":107},[80,156,158],{"class":82,"line":157},8,[80,159,160],{"class":124},"  // Runtime specific options\n",[80,162,164],{"class":82,"line":163},9,[80,165,166],{"class":90},"  node: {},\n",[80,168,170],{"class":82,"line":169},10,[80,171,172],{"class":90},"  bun: {},\n",[80,174,176],{"class":82,"line":175},11,[80,177,178],{"class":90},"  deno: {},\n",[80,180,182],{"class":82,"line":181},12,[80,183,108],{"emptyLinePlaceholder":107},[80,185,187],{"class":82,"line":186},13,[80,188,189],{"class":124},"  // Main server handler\n",[80,191,193,196,199,202,205,208,211,214],{"class":82,"line":192},14,[80,194,195],{"class":114},"  fetch",[80,197,198],{"class":90},": () ",[80,200,201],{"class":86},"=>",[80,203,204],{"class":86}," new",[80,206,207],{"class":114}," Response",[80,209,210],{"class":90},"(",[80,212,213],{"class":97},"\"👋 Hello there!\"",[80,215,216],{"class":90},"),\n",[80,218,220],{"class":82,"line":219},15,[80,221,222],{"class":90},"});\n",[62,224,225],{},"There are two kind of options:",[227,228,229,233],"ul",{},[230,231,232],"li",{},"Generic options: Top level options are intended to have exactly same functionality regardless of runtime",[230,234,235],{},"Runtime specific: Allow customizing more runtime specific options",[237,238,240],"h2",{"id":239},"generic-options","Generic Options",[242,243,245],"h3",{"id":244},"port",[66,246,244],{},[62,248,249],{},"The port server should be listening to.",[62,251,252,253,256,257,259],{},"Default is value of ",[66,254,255],{},"PORT"," environment variable or ",[66,258,135],{},".",[261,262,263],"tip",{},[62,264,265,266,269],{},"\nYou can set the port to ",[66,267,268],{},"0"," to use a random port.",[242,271,273],{"id":272},"hostname",[66,274,272],{},[62,276,277],{},"The hostname (IP or resolvable host) server listener should bound to.",[62,279,280,281,284,285,287,288,290,291,295],{},"Default is value of the ",[66,282,283],{},"HOST"," environment variable, if set. When neither ",[66,286,272],{}," nor ",[66,289,283],{}," is provided, the server will ",[292,293,294],"strong",{},"listen to all network interfaces"," by default.",[297,298,299],"important",{},[62,300,301,302,259],{},"\nIf you are running a server that should not be exposed to the network, use ",[66,303,304],{},"localhost",[242,306,308],{"id":307},"reuseport",[66,309,310],{},"reusePort",[62,312,313],{},"Enabling this option allows multiple processes to bind to the same port, which is useful for load balancing.",[315,316,317],"note",{},[62,318,319,320,323],{},"\nDespite Node.js built-in behavior that has ",[66,321,322],{},"exclusive"," flag enabled by default, srvx uses non-exclusive mode for consistency.",[242,325,327],{"id":326},"silent",[66,328,326],{},[62,330,331,332,335],{},"If enabled, no server listening message will be printed (enabled by default when ",[66,333,334],{},"TEST"," environment variable is set).",[242,337,339],{"id":338},"manual",[66,340,338],{},[62,342,343,344,347,348,351,352,359],{},"If set to ",[66,345,346],{},"true",", the server will ",[292,349,350],{},"not"," start listening automatically. You must call ",[353,354,356],"a",{"href":355},"/guide/server#serverserve",[66,357,358],{},"server.serve()"," yourself to begin accepting connections. Useful when you need to fully construct the server before it starts.",[71,361,363],{"className":73,"code":362,"language":75,"meta":76,"style":76},"import { serve } from \"srvx\";\n\nconst server = serve({\n  manual: true,\n  fetch: () => new Response(\"👋 Hello there!\"),\n});\n\n// ...later\nawait server.serve();\nawait server.ready();\n",[66,364,365,377,381,397,406,424,428,432,437,450],{"__ignoreMap":76},[80,366,367,369,371,373,375],{"class":82,"line":83},[80,368,87],{"class":86},[80,370,91],{"class":90},[80,372,94],{"class":86},[80,374,98],{"class":97},[80,376,101],{"class":90},[80,378,379],{"class":82,"line":104},[80,380,108],{"emptyLinePlaceholder":107},[80,382,383,386,389,392,395],{"class":82,"line":111},[80,384,385],{"class":86},"const",[80,387,388],{"class":134}," server",[80,390,391],{"class":86}," =",[80,393,394],{"class":114}," serve",[80,396,118],{"class":90},[80,398,399,402,404],{"class":82,"line":121},[80,400,401],{"class":90},"  manual: ",[80,403,346],{"class":134},[80,405,138],{"class":90},[80,407,408,410,412,414,416,418,420,422],{"class":82,"line":128},[80,409,195],{"class":114},[80,411,198],{"class":90},[80,413,201],{"class":86},[80,415,204],{"class":86},[80,417,207],{"class":114},[80,419,210],{"class":90},[80,421,213],{"class":97},[80,423,216],{"class":90},[80,425,426],{"class":82,"line":141},[80,427,222],{"class":90},[80,429,430],{"class":82,"line":152},[80,431,108],{"emptyLinePlaceholder":107},[80,433,434],{"class":82,"line":157},[80,435,436],{"class":124},"// ...later\n",[80,438,439,442,445,447],{"class":82,"line":163},[80,440,441],{"class":86},"await",[80,443,444],{"class":90}," server.",[80,446,115],{"class":114},[80,448,449],{"class":90},"();\n",[80,451,452,454,456,459],{"class":82,"line":169},[80,453,441],{"class":86},[80,455,444],{"class":90},[80,457,458],{"class":114},"ready",[80,460,449],{"class":90},[242,462,464],{"id":463},"middleware",[66,465,463],{},[62,467,468,469,471,472,474],{},"An array of ",[353,470,463],{"href":28}," handlers to run before the main ",[66,473,68],{}," handler.",[71,476,478],{"className":73,"code":477,"language":75,"meta":76,"style":76},"import { serve } from \"srvx\";\n\nserve({\n  middleware: [\n    (request, next) => {\n      console.log(`[${request.method}] ${request.url}`);\n      return next();\n    },\n  ],\n  fetch: () => new Response(\"👋 Hello there!\"),\n});\n",[66,479,480,492,496,502,507,530,566,576,581,586,604],{"__ignoreMap":76},[80,481,482,484,486,488,490],{"class":82,"line":83},[80,483,87],{"class":86},[80,485,91],{"class":90},[80,487,94],{"class":86},[80,489,98],{"class":97},[80,491,101],{"class":90},[80,493,494],{"class":82,"line":104},[80,495,108],{"emptyLinePlaceholder":107},[80,497,498,500],{"class":82,"line":111},[80,499,115],{"class":114},[80,501,118],{"class":90},[80,503,504],{"class":82,"line":121},[80,505,506],{"class":90},"  middleware: [\n",[80,508,509,512,516,519,522,525,527],{"class":82,"line":128},[80,510,511],{"class":90},"    (",[80,513,515],{"class":514},"sQHwn","request",[80,517,518],{"class":90},", ",[80,520,521],{"class":514},"next",[80,523,524],{"class":90},") ",[80,526,201],{"class":86},[80,528,529],{"class":90}," {\n",[80,531,532,535,538,540,543,545,547,550,553,555,557,560,563],{"class":82,"line":141},[80,533,534],{"class":90},"      console.",[80,536,537],{"class":114},"log",[80,539,210],{"class":90},[80,541,542],{"class":97},"`[${",[80,544,515],{"class":90},[80,546,259],{"class":97},[80,548,549],{"class":90},"method",[80,551,552],{"class":97},"}] ${",[80,554,515],{"class":90},[80,556,259],{"class":97},[80,558,559],{"class":90},"url",[80,561,562],{"class":97},"}`",[80,564,565],{"class":90},");\n",[80,567,568,571,574],{"class":82,"line":152},[80,569,570],{"class":86},"      return",[80,572,573],{"class":114}," next",[80,575,449],{"class":90},[80,577,578],{"class":82,"line":157},[80,579,580],{"class":90},"    },\n",[80,582,583],{"class":82,"line":163},[80,584,585],{"class":90},"  ],\n",[80,587,588,590,592,594,596,598,600,602],{"class":82,"line":169},[80,589,195],{"class":114},[80,591,198],{"class":90},[80,593,201],{"class":86},[80,595,204],{"class":86},[80,597,207],{"class":114},[80,599,210],{"class":90},[80,601,213],{"class":97},[80,603,216],{"class":90},[80,605,606],{"class":82,"line":175},[80,607,222],{"class":90},[609,610],"read-more",{"to":28,"title":27},[242,612,614],{"id":613},"plugins",[66,615,613],{},[62,617,468,618,620,621,624],{},[353,619,613],{"href":28}," to extend the server. A plugin is a ",[292,622,623],{},"synchronous"," function that receives the server instance and can register middleware, hook into the lifecycle, or augment requests.",[71,626,628],{"className":73,"code":627,"language":75,"meta":76,"style":76},"import { serve } from \"srvx\";\n\nconst myPlugin = (server) => {\n  server.options.middleware.push((request, next) => next());\n};\n\nserve({\n  plugins: [myPlugin],\n  fetch: () => new Response(\"👋 Hello there!\"),\n});\n",[66,629,630,642,646,667,693,698,702,708,713,731],{"__ignoreMap":76},[80,631,632,634,636,638,640],{"class":82,"line":83},[80,633,87],{"class":86},[80,635,91],{"class":90},[80,637,94],{"class":86},[80,639,98],{"class":97},[80,641,101],{"class":90},[80,643,644],{"class":82,"line":104},[80,645,108],{"emptyLinePlaceholder":107},[80,647,648,650,653,655,658,661,663,665],{"class":82,"line":111},[80,649,385],{"class":86},[80,651,652],{"class":114}," myPlugin",[80,654,391],{"class":86},[80,656,657],{"class":90}," (",[80,659,660],{"class":514},"server",[80,662,524],{"class":90},[80,664,201],{"class":86},[80,666,529],{"class":90},[80,668,669,672,675,678,680,682,684,686,688,690],{"class":82,"line":121},[80,670,671],{"class":90},"  server.options.middleware.",[80,673,674],{"class":114},"push",[80,676,677],{"class":90},"((",[80,679,515],{"class":514},[80,681,518],{"class":90},[80,683,521],{"class":514},[80,685,524],{"class":90},[80,687,201],{"class":86},[80,689,573],{"class":114},[80,691,692],{"class":90},"());\n",[80,694,695],{"class":82,"line":128},[80,696,697],{"class":90},"};\n",[80,699,700],{"class":82,"line":141},[80,701,108],{"emptyLinePlaceholder":107},[80,703,704,706],{"class":82,"line":152},[80,705,115],{"class":114},[80,707,118],{"class":90},[80,709,710],{"class":82,"line":157},[80,711,712],{"class":90},"  plugins: [myPlugin],\n",[80,714,715,717,719,721,723,725,727,729],{"class":82,"line":163},[80,716,195],{"class":114},[80,718,198],{"class":90},[80,720,201],{"class":86},[80,722,204],{"class":86},[80,724,207],{"class":114},[80,726,210],{"class":90},[80,728,213],{"class":97},[80,730,216],{"class":90},[80,732,733],{"class":82,"line":169},[80,734,222],{"class":90},[315,736,737],{},[62,738,739,740,743],{},"\nPlugins are sync-only (they return ",[66,741,742],{},"void","). All plugin-registered middleware is therefore in place before the first request is handled.",[242,745,747],{"id":746},"protocol",[66,748,746],{},[62,750,751],{},"The protocol to use for the server.",[62,753,754,755,758,759,259],{},"Possible values are ",[66,756,757],{},"http"," or ",[66,760,761],{},"https",[62,763,764,765,767,768,770,771,773,774,777,778,781],{},"If ",[66,766,746],{}," is not set, Server will use ",[66,769,757],{}," as the default protocol or ",[66,772,761],{}," if both ",[66,775,776],{},"tls.cert"," and ",[66,779,780],{},"tls.key"," options are provided.",[242,783,785],{"id":784},"tls",[66,786,784],{},[62,788,789],{},"TLS server options.",[62,791,792],{},[292,793,794],{},"Example:",[71,796,798],{"className":73,"code":797,"language":75,"meta":76,"style":76},"import { serve } from \"srvx\";\n\nserve({\n  tls: { cert: \"./server.crt\", key: \"./server.key\" },\n  fetch: () => new Response(\"👋 Hello there!\"),\n});\n",[66,799,800,812,816,822,839,857],{"__ignoreMap":76},[80,801,802,804,806,808,810],{"class":82,"line":83},[80,803,87],{"class":86},[80,805,91],{"class":90},[80,807,94],{"class":86},[80,809,98],{"class":97},[80,811,101],{"class":90},[80,813,814],{"class":82,"line":104},[80,815,108],{"emptyLinePlaceholder":107},[80,817,818,820],{"class":82,"line":111},[80,819,115],{"class":114},[80,821,118],{"class":90},[80,823,824,827,830,833,836],{"class":82,"line":121},[80,825,826],{"class":90},"  tls: { cert: ",[80,828,829],{"class":97},"\"./server.crt\"",[80,831,832],{"class":90},", key: ",[80,834,835],{"class":97},"\"./server.key\"",[80,837,838],{"class":90}," },\n",[80,840,841,843,845,847,849,851,853,855],{"class":82,"line":128},[80,842,195],{"class":114},[80,844,198],{"class":90},[80,846,201],{"class":86},[80,848,204],{"class":86},[80,850,207],{"class":114},[80,852,210],{"class":90},[80,854,213],{"class":97},[80,856,216],{"class":90},[80,858,859],{"class":82,"line":141},[80,860,222],{"class":90},[62,862,863],{},[292,864,865],{},"Options:",[227,867,868,874,880],{},[230,869,870,873],{},[66,871,872],{},"cert",": Path or inline content for the certificate in PEM format (required).",[230,875,876,879],{},[66,877,878],{},"key",": Path or inline content for the private key in PEM format (required).",[230,881,882,885],{},[66,883,884],{},"passphrase",": Passphrase for the private key (optional).",[261,887,888],{},[62,889,890,891,777,893,895,896,259],{},"\nYou can pass inline ",[66,892,872],{},[66,894,878],{}," values in PEM format starting with ",[66,897,898],{},"-----BEGIN ",[62,900,901,902,259],{},"Client certificates (mutual TLS) are available through the ",[353,903,905,908],{"href":904},"/guide/tls#mutual-tls-mtls",[66,906,907],{},"mtls()"," plugin",[609,910],{"to":38,"title":911},"TLS & mutual TLS",[242,913,915],{"id":914},"error",[66,916,914],{},[62,918,919,920,922,923,926],{},"Runtime agnostic error handler. It runs whenever the ",[66,921,68],{}," handler (or any middleware) throws or rejects, and returns the ",[66,924,925],{},"Response"," to send instead.",[315,928,929,931],{},[62,930],{},[62,932,933],{},"This handler will also take over the built-in error handlers of Deno and Bun.",[62,935,936],{},[292,937,794],{},[71,939,941],{"className":73,"code":940,"language":75,"meta":76,"style":76},"import { serve } from \"srvx\";\n\nserve({\n  fetch: () => new Response(\"👋 Hello there!\"),\n  error(error) {\n    return new Response(`\u003Cpre>${error}\\n${error.stack}\u003C/pre>`, {\n      headers: { \"Content-Type\": \"text/html\" },\n    });\n  },\n});\n",[66,942,943,955,959,965,983,995,1033,1049,1054,1059],{"__ignoreMap":76},[80,944,945,947,949,951,953],{"class":82,"line":83},[80,946,87],{"class":86},[80,948,91],{"class":90},[80,950,94],{"class":86},[80,952,98],{"class":97},[80,954,101],{"class":90},[80,956,957],{"class":82,"line":104},[80,958,108],{"emptyLinePlaceholder":107},[80,960,961,963],{"class":82,"line":111},[80,962,115],{"class":114},[80,964,118],{"class":90},[80,966,967,969,971,973,975,977,979,981],{"class":82,"line":121},[80,968,195],{"class":114},[80,970,198],{"class":90},[80,972,201],{"class":86},[80,974,204],{"class":86},[80,976,207],{"class":114},[80,978,210],{"class":90},[80,980,213],{"class":97},[80,982,216],{"class":90},[80,984,985,988,990,992],{"class":82,"line":128},[80,986,987],{"class":114},"  error",[80,989,210],{"class":90},[80,991,914],{"class":514},[80,993,994],{"class":90},") {\n",[80,996,997,1000,1002,1004,1006,1009,1011,1014,1017,1020,1022,1024,1027,1030],{"class":82,"line":141},[80,998,999],{"class":86},"    return",[80,1001,204],{"class":86},[80,1003,207],{"class":114},[80,1005,210],{"class":90},[80,1007,1008],{"class":97},"`\u003Cpre>${",[80,1010,914],{"class":90},[80,1012,1013],{"class":97},"}",[80,1015,1016],{"class":134},"\\n",[80,1018,1019],{"class":97},"${",[80,1021,914],{"class":90},[80,1023,259],{"class":97},[80,1025,1026],{"class":90},"stack",[80,1028,1029],{"class":97},"}\u003C/pre>`",[80,1031,1032],{"class":90},", {\n",[80,1034,1035,1038,1041,1044,1047],{"class":82,"line":152},[80,1036,1037],{"class":90},"      headers: { ",[80,1039,1040],{"class":97},"\"Content-Type\"",[80,1042,1043],{"class":90},": ",[80,1045,1046],{"class":97},"\"text/html\"",[80,1048,838],{"class":90},[80,1050,1051],{"class":82,"line":157},[80,1052,1053],{"class":90},"    });\n",[80,1055,1056],{"class":82,"line":163},[80,1057,1058],{"class":90},"  },\n",[80,1060,1061],{"class":82,"line":169},[80,1062,222],{"class":90},[242,1064,1066],{"id":1065},"maxrequestbodysize",[66,1067,1068],{},"maxRequestBodySize",[62,1070,1071,1072,1075,1076,1079],{},"Maximum allowed size ",[292,1073,1074],{},"in bytes"," for the request body. Defaults to ",[66,1077,1078],{},"undefined"," (no limit).",[62,1081,1082,1083,1086,1087,518,1090,777,1093,1096,1097,1102,1103,1106],{},"As the body is read, its accumulated length is tracked and, once it exceeds the limit, reading is aborted and rejects with a ",[66,1084,1085],{},"413","-style error. The error carries ",[66,1088,1089],{},"statusCode: 413",[66,1091,1092],{},"status: 413",[66,1094,1095],{},"code: \"ERR_BODY_TOO_LARGE\"",", so a handler (or ",[353,1098,1100],{"href":1099},"#error",[66,1101,914],{},") can map it to an HTTP ",[66,1104,1105],{},"413 Payload Too Large"," response.",[62,1108,1109,1110,1113,1114,1117,1118,1121,1122,1113,1125,1113,1128,1113,1131,1134],{},"The limit covers both buffered reads (",[66,1111,1112],{},"request.text()"," / ",[66,1115,1116],{},"request.json()",") and the streamed body (",[66,1119,1120],{},"request.body",", and therefore ",[66,1123,1124],{},"request.arrayBuffer()",[66,1126,1127],{},".blob()",[66,1129,1130],{},".bytes()",[66,1132,1133],{},".formData()",").",[62,1136,1137],{},[292,1138,794],{},[71,1140,1142],{"className":73,"code":1141,"language":75,"meta":76,"style":76},"import { serve } from \"srvx\";\n\nserve({\n  maxRequestBodySize: 1024 * 1024, // 1 MiB\n  fetch: async (request) => {\n    try {\n      return Response.json(await request.json());\n    } catch (error) {\n      if (error.code === \"ERR_BODY_TOO_LARGE\") {\n        return new Response(\"Payload Too Large\", { status: 413 });\n      }\n      throw error;\n    }\n  },\n});\n",[66,1143,1144,1156,1160,1166,1185,1204,1211,1232,1243,1259,1281,1286,1294,1299,1303],{"__ignoreMap":76},[80,1145,1146,1148,1150,1152,1154],{"class":82,"line":83},[80,1147,87],{"class":86},[80,1149,91],{"class":90},[80,1151,94],{"class":86},[80,1153,98],{"class":97},[80,1155,101],{"class":90},[80,1157,1158],{"class":82,"line":104},[80,1159,108],{"emptyLinePlaceholder":107},[80,1161,1162,1164],{"class":82,"line":111},[80,1163,115],{"class":114},[80,1165,118],{"class":90},[80,1167,1168,1171,1174,1177,1180,1182],{"class":82,"line":121},[80,1169,1170],{"class":90},"  maxRequestBodySize: ",[80,1172,1173],{"class":134},"1024",[80,1175,1176],{"class":86}," *",[80,1178,1179],{"class":134}," 1024",[80,1181,518],{"class":90},[80,1183,1184],{"class":124},"// 1 MiB\n",[80,1186,1187,1189,1191,1194,1196,1198,1200,1202],{"class":82,"line":128},[80,1188,195],{"class":114},[80,1190,1043],{"class":90},[80,1192,1193],{"class":86},"async",[80,1195,657],{"class":90},[80,1197,515],{"class":514},[80,1199,524],{"class":90},[80,1201,201],{"class":86},[80,1203,529],{"class":90},[80,1205,1206,1209],{"class":82,"line":141},[80,1207,1208],{"class":86},"    try",[80,1210,529],{"class":90},[80,1212,1213,1215,1218,1221,1223,1225,1228,1230],{"class":82,"line":152},[80,1214,570],{"class":86},[80,1216,1217],{"class":90}," Response.",[80,1219,1220],{"class":114},"json",[80,1222,210],{"class":90},[80,1224,441],{"class":86},[80,1226,1227],{"class":90}," request.",[80,1229,1220],{"class":114},[80,1231,692],{"class":90},[80,1233,1234,1237,1240],{"class":82,"line":157},[80,1235,1236],{"class":90},"    } ",[80,1238,1239],{"class":86},"catch",[80,1241,1242],{"class":90}," (error) {\n",[80,1244,1245,1248,1251,1254,1257],{"class":82,"line":163},[80,1246,1247],{"class":86},"      if",[80,1249,1250],{"class":90}," (error.code ",[80,1252,1253],{"class":86},"===",[80,1255,1256],{"class":97}," \"ERR_BODY_TOO_LARGE\"",[80,1258,994],{"class":90},[80,1260,1261,1264,1266,1268,1270,1273,1276,1278],{"class":82,"line":169},[80,1262,1263],{"class":86},"        return",[80,1265,204],{"class":86},[80,1267,207],{"class":114},[80,1269,210],{"class":90},[80,1271,1272],{"class":97},"\"Payload Too Large\"",[80,1274,1275],{"class":90},", { status: ",[80,1277,1085],{"class":134},[80,1279,1280],{"class":90}," });\n",[80,1282,1283],{"class":82,"line":175},[80,1284,1285],{"class":90},"      }\n",[80,1287,1288,1291],{"class":82,"line":181},[80,1289,1290],{"class":86},"      throw",[80,1292,1293],{"class":90}," error;\n",[80,1295,1296],{"class":82,"line":186},[80,1297,1298],{"class":90},"    }\n",[80,1300,1301],{"class":82,"line":192},[80,1302,1058],{"class":90},[80,1304,1305],{"class":82,"line":219},[80,1306,222],{"class":90},[315,1308,1309,1312],{},[62,1310,1311],{},"\nRuntime support:",[227,1313,1314,1320,1337],{},[230,1315,1316,1319],{},[292,1317,1318],{},"Node",": enforced by srvx (the request body stream is size-limited).",[230,1321,1322,1325,1326,1333,1334,1336],{},[292,1323,1324],{},"Bun",": forwarded to Bun's native ",[353,1327,1331],{"href":1328,"rel":1329},"https://bun.sh/docs/api/http",[1330],"nofollow",[66,1332,1068],{},", enforced by Bun (responds with ",[66,1335,1085],{}," before the handler runs).",[230,1338,1339,1342,1343,1346],{},[292,1340,1341],{},"Deno",": enforced by srvx (",[66,1344,1345],{},"Deno.serve"," has no native option).",[242,1348,1350],{"id":1349},"trustproxy",[66,1351,1352],{},"trustProxy",[62,1354,1355,1356,1359,1360,518,1363,518,1366,1369,1370,1373,1374,777,1377,1380,1381,259],{},"Whether to trust ",[66,1357,1358],{},"X-Forwarded-*"," headers (",[66,1361,1362],{},"X-Forwarded-Proto",[66,1364,1365],{},"X-Forwarded-Host",[66,1367,1368],{},"X-Forwarded-For",", and the HTTP/2 ",[66,1371,1372],{},":scheme",") when deriving ",[66,1375,1376],{},"request.url",[66,1378,1379],{},"request.ip",". Defaults to ",[66,1382,1383],{},"false",[62,1385,1386,1387,518,1390,758,1392,1394,1395,1398],{},"Any client can send ",[66,1388,1389],{},"X-Forwarded-Proto: https",[66,1391,1365],{},[66,1393,1368],{},", so trusting them lets a request masquerade as ",[66,1396,1397],{},"https:",", forge its host, or spoof its client IP. Only enable this when a proxy you control sits in front.",[227,1400,1401,1410,1418,1431],{},[230,1402,1403,1405,1406,1409],{},[66,1404,1383],{}," (default): ignore the headers; use the real connection protocol, the on-the-wire ",[66,1407,1408],{},"Host"," header and the socket peer address.",[230,1411,1412,1414,1415,1417],{},[66,1413,346],{},": trust every hop (the leftmost ",[66,1416,1368],{}," entry is the client).",[230,1419,1420,1423,1424,758,1427,1430],{},[66,1421,1422],{},"\"loopback\"",": trust hops on a loopback address (",[66,1425,1426],{},"127.0.0.0/8",[66,1428,1429],{},"::1","), i.e. a proxy on the same host.",[230,1432,1433,1436],{},[66,1434,1435],{},"string[]",": trust hops whose address is in the allowlist.",[1438,1439,1441],"h4",{"id":1440},"hop-aware-resolution","Hop-aware resolution",[62,1443,1444,1445,1448,1449,1451,1452,1455,1456,1459,1460,1463],{},"Real proxies ",[292,1446,1447],{},"append"," to ",[66,1450,1358],{},", so the chain grows left-to-right (outermost client first, nearest proxy last). srvx resolves it ",[292,1453,1454],{},"hop-aware, right-to-left",", matching Express (",[66,1457,1458],{},"trust proxy","), nginx (",[66,1461,1462],{},"$proxy_add_x_forwarded_for",") and AWS ALB:",[227,1465,1466,1469,1478,1481],{},[230,1467,1468],{},"Starting from the immediate peer, each address in the trusted set is treated as a proxy you control.",[230,1470,1471],{},[292,1472,1473,1474,1477],{},"The client is the rightmost address ",[1475,1476,350],"em",{}," in the trusted set.",[230,1479,1480],{},"If every address in the chain is trusted, the leftmost entry is the client.",[230,1482,1483],{},"If the immediate peer is not trusted, the headers are ignored entirely.",[62,1485,1486,1487,1489,1490,1493,1494,1497,1498,1501,1502,1504],{},"This is why a spoofed prefix cannot poison ",[66,1488,1379],{},": with ",[66,1491,1492],{},"trustProxy: \"loopback\""," and a request carrying ",[66,1495,1496],{},"X-Forwarded-For: 9.9.9.9",", the trusted proxy appends the real client address, so the forged ",[66,1499,1500],{},"9.9.9.9"," is skipped rather than returned. The same model gates the forwarded protocol and host: only the value contributed by the trusted proxy is honored, so an attacker cannot poison ",[66,1503,1376],{}," (e.g. cache keys or password-reset links).",[62,1506,1507],{},[292,1508,794],{},[71,1510,1512],{"className":73,"code":1511,"language":75,"meta":76,"style":76},"import { serve } from \"srvx\";\n\nserve({\n  // Behind a reverse proxy you control (e.g. Nginx, a load balancer):\n  trustProxy: true,\n  fetch: (request) => new Response(new URL(request.url).protocol),\n});\n",[66,1513,1514,1526,1530,1536,1541,1550,1578],{"__ignoreMap":76},[80,1515,1516,1518,1520,1522,1524],{"class":82,"line":83},[80,1517,87],{"class":86},[80,1519,91],{"class":90},[80,1521,94],{"class":86},[80,1523,98],{"class":97},[80,1525,101],{"class":90},[80,1527,1528],{"class":82,"line":104},[80,1529,108],{"emptyLinePlaceholder":107},[80,1531,1532,1534],{"class":82,"line":111},[80,1533,115],{"class":114},[80,1535,118],{"class":90},[80,1537,1538],{"class":82,"line":121},[80,1539,1540],{"class":124},"  // Behind a reverse proxy you control (e.g. Nginx, a load balancer):\n",[80,1542,1543,1546,1548],{"class":82,"line":128},[80,1544,1545],{"class":90},"  trustProxy: ",[80,1547,346],{"class":134},[80,1549,138],{"class":90},[80,1551,1552,1554,1557,1559,1561,1563,1565,1567,1569,1572,1575],{"class":82,"line":141},[80,1553,195],{"class":114},[80,1555,1556],{"class":90},": (",[80,1558,515],{"class":514},[80,1560,524],{"class":90},[80,1562,201],{"class":86},[80,1564,204],{"class":86},[80,1566,207],{"class":114},[80,1568,210],{"class":90},[80,1570,1571],{"class":86},"new",[80,1573,1574],{"class":114}," URL",[80,1576,1577],{"class":90},"(request.url).protocol),\n",[80,1579,1580],{"class":82,"line":152},[80,1581,222],{"class":90},[315,1583,1584],{},[62,1585,1586],{},"\nApplies to the Node, AWS Lambda, Bun and Deno adapters.",[237,1588,1590],{"id":1589},"runtime-specific-options","Runtime Specific Options",[242,1592,1594],{"id":1593},"nodejs","Node.js",[62,1596,1597],{},[292,1598,794],{},[71,1600,1602],{"className":73,"code":1601,"language":75,"meta":76,"style":76},"import { serve } from \"srvx\";\n\nserve({\n  node: {\n    maxHeaderSize: 16384 * 2, // Double default\n    ipv6Only: true, // Disable dual-stack support\n    // http2: false // Disable http2 support (enabled by default in TLS mode)\n  },\n  fetch: () => new Response(\"👋 Hello there!\"),\n});\n",[66,1603,1604,1616,1620,1626,1631,1649,1661,1669,1673,1691],{"__ignoreMap":76},[80,1605,1606,1608,1610,1612,1614],{"class":82,"line":83},[80,1607,87],{"class":86},[80,1609,91],{"class":90},[80,1611,94],{"class":86},[80,1613,98],{"class":97},[80,1615,101],{"class":90},[80,1617,1618],{"class":82,"line":104},[80,1619,108],{"emptyLinePlaceholder":107},[80,1621,1622,1624],{"class":82,"line":111},[80,1623,115],{"class":114},[80,1625,118],{"class":90},[80,1627,1628],{"class":82,"line":121},[80,1629,1630],{"class":90},"  node: {\n",[80,1632,1633,1636,1639,1641,1644,1646],{"class":82,"line":128},[80,1634,1635],{"class":90},"    maxHeaderSize: ",[80,1637,1638],{"class":134},"16384",[80,1640,1176],{"class":86},[80,1642,1643],{"class":134}," 2",[80,1645,518],{"class":90},[80,1647,1648],{"class":124},"// Double default\n",[80,1650,1651,1654,1656,1658],{"class":82,"line":141},[80,1652,1653],{"class":90},"    ipv6Only: ",[80,1655,346],{"class":134},[80,1657,518],{"class":90},[80,1659,1660],{"class":124},"// Disable dual-stack support\n",[80,1662,1663,1666],{"class":82,"line":152},[80,1664,1665],{"class":124},"    // http2: false",[80,1667,1668],{"class":124}," // Disable http2 support (enabled by default in TLS mode)\n",[80,1670,1671],{"class":82,"line":157},[80,1672,1058],{"class":90},[80,1674,1675,1677,1679,1681,1683,1685,1687,1689],{"class":82,"line":163},[80,1676,195],{"class":114},[80,1678,198],{"class":90},[80,1680,201],{"class":86},[80,1682,204],{"class":86},[80,1684,207],{"class":114},[80,1686,210],{"class":90},[80,1688,213],{"class":97},[80,1690,216],{"class":90},[80,1692,1693],{"class":82,"line":169},[80,1694,222],{"class":90},[609,1696,1697],{},[62,1698,1699,1700,777,1705,1710],{},"See Node.js documentation for ",[353,1701,1704],{"href":1702,"rel":1703},"https://nodejs.org/api/http.html#httpcreateserveroptions-requestlistener",[1330],"ServerOptions",[353,1706,1709],{"href":1707,"rel":1708},"https://nodejs.org/api/net.html#serverlistenoptions-callback",[1330],"ListenOptions"," for all available options.",[242,1712,1324],{"id":1713},"bun",[62,1715,1716],{},[292,1717,794],{},[71,1719,1721],{"className":73,"code":1720,"language":75,"meta":76,"style":76},"import { serve } from \"srvx\";\n\nserve({\n  bun: {\n    error(error) {\n      return new Response(`\u003Cpre>${error}\\n${error.stack}\u003C/pre>`, {\n        headers: { \"Content-Type\": \"text/html\" },\n      });\n    },\n  },\n  fetch: () => new Response(\"👋 Hello there!\"),\n});\n",[66,1722,1723,1735,1739,1745,1750,1761,1791,1804,1809,1813,1817,1835],{"__ignoreMap":76},[80,1724,1725,1727,1729,1731,1733],{"class":82,"line":83},[80,1726,87],{"class":86},[80,1728,91],{"class":90},[80,1730,94],{"class":86},[80,1732,98],{"class":97},[80,1734,101],{"class":90},[80,1736,1737],{"class":82,"line":104},[80,1738,108],{"emptyLinePlaceholder":107},[80,1740,1741,1743],{"class":82,"line":111},[80,1742,115],{"class":114},[80,1744,118],{"class":90},[80,1746,1747],{"class":82,"line":121},[80,1748,1749],{"class":90},"  bun: {\n",[80,1751,1752,1755,1757,1759],{"class":82,"line":128},[80,1753,1754],{"class":114},"    error",[80,1756,210],{"class":90},[80,1758,914],{"class":514},[80,1760,994],{"class":90},[80,1762,1763,1765,1767,1769,1771,1773,1775,1777,1779,1781,1783,1785,1787,1789],{"class":82,"line":141},[80,1764,570],{"class":86},[80,1766,204],{"class":86},[80,1768,207],{"class":114},[80,1770,210],{"class":90},[80,1772,1008],{"class":97},[80,1774,914],{"class":90},[80,1776,1013],{"class":97},[80,1778,1016],{"class":134},[80,1780,1019],{"class":97},[80,1782,914],{"class":90},[80,1784,259],{"class":97},[80,1786,1026],{"class":90},[80,1788,1029],{"class":97},[80,1790,1032],{"class":90},[80,1792,1793,1796,1798,1800,1802],{"class":82,"line":152},[80,1794,1795],{"class":90},"        headers: { ",[80,1797,1040],{"class":97},[80,1799,1043],{"class":90},[80,1801,1046],{"class":97},[80,1803,838],{"class":90},[80,1805,1806],{"class":82,"line":157},[80,1807,1808],{"class":90},"      });\n",[80,1810,1811],{"class":82,"line":163},[80,1812,580],{"class":90},[80,1814,1815],{"class":82,"line":169},[80,1816,1058],{"class":90},[80,1818,1819,1821,1823,1825,1827,1829,1831,1833],{"class":82,"line":175},[80,1820,195],{"class":114},[80,1822,198],{"class":90},[80,1824,201],{"class":86},[80,1826,204],{"class":86},[80,1828,207],{"class":114},[80,1830,210],{"class":90},[80,1832,213],{"class":97},[80,1834,216],{"class":90},[80,1836,1837],{"class":82,"line":181},[80,1838,222],{"class":90},[609,1840,1841],{"to":1328},[62,1842,1843],{},"See Bun HTTP documentation for all available options.",[242,1845,1341],{"id":1846},"deno",[62,1848,1849],{},[292,1850,794],{},[71,1852,1854],{"className":73,"code":1853,"language":75,"meta":76,"style":76},"import { serve } from \"srvx\";\n\nserve({\n  deno: {\n    onError(error) {\n      return new Response(`\u003Cpre>${error}\\n${error.stack}\u003C/pre>`, {\n        headers: { \"Content-Type\": \"text/html\" },\n      });\n    },\n  },\n  fetch: () => new Response(\"👋 Hello there!\"),\n});\n",[66,1855,1856,1868,1872,1878,1883,1894,1924,1936,1940,1944,1948,1966],{"__ignoreMap":76},[80,1857,1858,1860,1862,1864,1866],{"class":82,"line":83},[80,1859,87],{"class":86},[80,1861,91],{"class":90},[80,1863,94],{"class":86},[80,1865,98],{"class":97},[80,1867,101],{"class":90},[80,1869,1870],{"class":82,"line":104},[80,1871,108],{"emptyLinePlaceholder":107},[80,1873,1874,1876],{"class":82,"line":111},[80,1875,115],{"class":114},[80,1877,118],{"class":90},[80,1879,1880],{"class":82,"line":121},[80,1881,1882],{"class":90},"  deno: {\n",[80,1884,1885,1888,1890,1892],{"class":82,"line":128},[80,1886,1887],{"class":114},"    onError",[80,1889,210],{"class":90},[80,1891,914],{"class":514},[80,1893,994],{"class":90},[80,1895,1896,1898,1900,1902,1904,1906,1908,1910,1912,1914,1916,1918,1920,1922],{"class":82,"line":141},[80,1897,570],{"class":86},[80,1899,204],{"class":86},[80,1901,207],{"class":114},[80,1903,210],{"class":90},[80,1905,1008],{"class":97},[80,1907,914],{"class":90},[80,1909,1013],{"class":97},[80,1911,1016],{"class":134},[80,1913,1019],{"class":97},[80,1915,914],{"class":90},[80,1917,259],{"class":97},[80,1919,1026],{"class":90},[80,1921,1029],{"class":97},[80,1923,1032],{"class":90},[80,1925,1926,1928,1930,1932,1934],{"class":82,"line":152},[80,1927,1795],{"class":90},[80,1929,1040],{"class":97},[80,1931,1043],{"class":90},[80,1933,1046],{"class":97},[80,1935,838],{"class":90},[80,1937,1938],{"class":82,"line":157},[80,1939,1808],{"class":90},[80,1941,1942],{"class":82,"line":163},[80,1943,580],{"class":90},[80,1945,1946],{"class":82,"line":169},[80,1947,1058],{"class":90},[80,1949,1950,1952,1954,1956,1958,1960,1962,1964],{"class":82,"line":175},[80,1951,195],{"class":114},[80,1953,198],{"class":90},[80,1955,201],{"class":86},[80,1957,204],{"class":86},[80,1959,207],{"class":114},[80,1961,210],{"class":90},[80,1963,213],{"class":97},[80,1965,216],{"class":90},[80,1967,1968],{"class":82,"line":181},[80,1969,222],{"class":90},[609,1971,1973],{"to":1972},"https://docs.deno.com/api/deno/~/Deno.ServeOptions",[62,1974,1975],{},"See Deno serve documentation for all available options.",[242,1977,1979],{"id":1978},"service-worker","Service Worker",[62,1981,1982,1983,1134],{},"Options for the service worker adapter (",[66,1984,1985],{},"srvx/service-worker",[71,1987,1989],{"className":73,"code":1988,"language":75,"meta":76,"style":76},"import { serve } from \"srvx/service-worker\";\n\nserve({\n  serviceWorker: {\n    url: \"/sw.js\", // path to the service worker file to register\n    scope: \"/\", // service worker scope\n  },\n  fetch: () => new Response(\"👋 Hello there!\"),\n});\n",[66,1990,1991,2004,2008,2014,2019,2032,2045,2049,2067],{"__ignoreMap":76},[80,1992,1993,1995,1997,1999,2002],{"class":82,"line":83},[80,1994,87],{"class":86},[80,1996,91],{"class":90},[80,1998,94],{"class":86},[80,2000,2001],{"class":97}," \"srvx/service-worker\"",[80,2003,101],{"class":90},[80,2005,2006],{"class":82,"line":104},[80,2007,108],{"emptyLinePlaceholder":107},[80,2009,2010,2012],{"class":82,"line":111},[80,2011,115],{"class":114},[80,2013,118],{"class":90},[80,2015,2016],{"class":82,"line":121},[80,2017,2018],{"class":90},"  serviceWorker: {\n",[80,2020,2021,2024,2027,2029],{"class":82,"line":128},[80,2022,2023],{"class":90},"    url: ",[80,2025,2026],{"class":97},"\"/sw.js\"",[80,2028,518],{"class":90},[80,2030,2031],{"class":124},"// path to the service worker file to register\n",[80,2033,2034,2037,2040,2042],{"class":82,"line":141},[80,2035,2036],{"class":90},"    scope: ",[80,2038,2039],{"class":97},"\"/\"",[80,2041,518],{"class":90},[80,2043,2044],{"class":124},"// service worker scope\n",[80,2046,2047],{"class":82,"line":152},[80,2048,1058],{"class":90},[80,2050,2051,2053,2055,2057,2059,2061,2063,2065],{"class":82,"line":157},[80,2052,195],{"class":114},[80,2054,198],{"class":90},[80,2056,201],{"class":86},[80,2058,204],{"class":86},[80,2060,207],{"class":114},[80,2062,210],{"class":90},[80,2064,213],{"class":97},[80,2066,216],{"class":90},[80,2068,2069],{"class":82,"line":163},[80,2070,222],{"class":90},[227,2072,2073,2078],{},[230,2074,2075,2077],{},[66,2076,559],{},": The path to the service worker file to be registered.",[230,2079,2080,2083],{},[66,2081,2082],{},"scope",": The scope of the service worker.",[237,2085,2087],{"id":2086},"per-runtime-support","Per-runtime Support",[62,2089,2090],{},"srvx aims for identical behavior across runtimes, but a few options depend on capabilities the underlying runtime does not expose. The table below lists the intentional differences.",[2092,2093,2094,2107],"table",{},[2095,2096,2097],"thead",{},[2098,2099,2100,2104],"tr",{},[2101,2102,2103],"th",{},"Option / feature",[2101,2105,2106],{},"Behavior",[2108,2109,2110,2131,2144,2160,2169,2179,2201],"tbody",{},[2098,2111,2112,2119],{},[2113,2114,2115,2118],"td",{},[66,2116,2117],{},"close(true)"," (force close)",[2113,2120,2121,2122,2124,2125,2127,2128,259],{},"Honored on Node and Bun. On ",[292,2123,1341],{}," the force argument is currently ignored — ",[66,2126,2117],{}," behaves like a graceful ",[66,2129,2130],{},"close()",[2098,2132,2133,2137],{},[2113,2134,2135],{},[66,2136,1352],{},[2113,2138,2139,2140,2143],{},"Applies to the ",[292,2141,2142],{},"Node, AWS Lambda, Bun and Deno"," adapters only. Ignored on Cloudflare, Bunny and the generic/service-worker adapters.",[2098,2145,2146,2150],{},[2113,2147,2148],{},[66,2149,1068],{},[2113,2151,2152,2153,2155,2156,2159],{},"Node/Deno enforced by srvx (unlimited by default). ",[292,2154,1324],{}," forwards it to Bun's native option, which has its own ",[292,2157,2158],{},"128 MiB"," default even when unset. Dropped (not applied) when running under the CLI loader on any runtime.",[2098,2161,2162,2166],{},[2113,2163,2164],{},[66,2165,338],{},[2113,2167,2168],{},"Meaningless on module-worker runtimes (Cloudflare module syntax, Bunny) — there is no listening step to defer.",[2098,2170,2171,2176],{},[2113,2172,2173],{},[66,2174,2175],{},"gracefulShutdown",[2113,2177,2178],{},"Supported on Node, Deno and Bun. No-op on Cloudflare, Bunny and service-worker runtimes.",[2098,2180,2181,2188],{},[2113,2182,2183,2184,2187],{},"Cloudflare ",[66,2185,2186],{},"env"," bindings",[2113,2189,2190,2193,2194,2197,2198,2200],{},[66,2191,2192],{},"request.runtime.cloudflare.env"," is only populated in ",[292,2195,2196],{},"module-worker syntax",". In service-worker syntax (the global ",[66,2199,68],{}," listener) bindings are unavailable.",[2098,2202,2203,2211],{},[2113,2204,2205],{},[292,2206,2207,2210],{},[66,2208,2209],{},"upgrade"," / WebSocket",[2113,2212,2213,2214,2216,2217,2219,2220,2225],{},"srvx does ",[292,2215,350],{}," handle HTTP ",[66,2218,2209],{}," requests by default. Use ",[353,2221,2224],{"href":2222,"rel":2223},"https://crossws.h3.dev/guide",[1330],"crossws"," for WebSocket support.",[2227,2228,2229],"style",{},"html pre.shiki code .so5gQ, html code.shiki .so5gQ{--shiki-light:#D73A49;--shiki-default:#F97583;--shiki-dark:#F97583}html pre.shiki code .slsVL, html code.shiki .slsVL{--shiki-light:#24292E;--shiki-default:#E1E4E8;--shiki-dark:#E1E4E8}html pre.shiki code .sfrk1, html code.shiki .sfrk1{--shiki-light:#032F62;--shiki-default:#9ECBFF;--shiki-dark:#9ECBFF}html pre.shiki code .shcOC, html code.shiki .shcOC{--shiki-light:#6F42C1;--shiki-default:#B392F0;--shiki-dark:#B392F0}html pre.shiki code .sCsY4, html code.shiki .sCsY4{--shiki-light:#6A737D;--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .suiK_, html code.shiki .suiK_{--shiki-light:#005CC5;--shiki-default:#79B8FF;--shiki-dark:#79B8FF}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sQHwn, html code.shiki .sQHwn{--shiki-light:#E36209;--shiki-default:#FFAB70;--shiki-dark:#FFAB70}",{"title":76,"searchDepth":104,"depth":104,"links":2231},[2232,2246,2252],{"id":239,"depth":104,"text":240,"children":2233},[2234,2235,2236,2237,2238,2239,2240,2241,2242,2243,2244,2245],{"id":244,"depth":111,"text":244},{"id":272,"depth":111,"text":272},{"id":307,"depth":111,"text":310},{"id":326,"depth":111,"text":326},{"id":338,"depth":111,"text":338},{"id":463,"depth":111,"text":463},{"id":613,"depth":111,"text":613},{"id":746,"depth":111,"text":746},{"id":784,"depth":111,"text":784},{"id":914,"depth":111,"text":914},{"id":1065,"depth":111,"text":1068},{"id":1349,"depth":111,"text":1352},{"id":1589,"depth":104,"text":1590,"children":2247},[2248,2249,2250,2251],{"id":1593,"depth":111,"text":1594},{"id":1713,"depth":111,"text":1324},{"id":1846,"depth":111,"text":1341},{"id":1978,"depth":111,"text":1979},{"id":2086,"depth":104,"text":2087},"Provide additional options to customize listening server.","md",{"icon":35},{"icon":35},{"title":32,"description":2253},"Q17ehRZS4ZqIeHOem7u0T_Zy9e5wbvcWRzcMFSdKkYA",[2260,2262],{"title":27,"path":28,"stem":29,"description":2261,"icon":30,"children":-1},"Plugins and middleware allow adding reusable server extensions.",{"title":37,"path":38,"stem":39,"description":2263,"icon":40,"children":-1},"Serve over HTTPS and, optionally, require a client certificate (mutual TLS).",1784304575694]