web-listener 0.17.1 → 0.17.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (3) hide show
  1. package/index.d.ts +4 -3
  2. package/index.js +2 -2
  3. package/package.json +1 -1
package/index.d.ts CHANGED
@@ -53,6 +53,7 @@ type UpgradeErrorHandler = (error: unknown) => void;
53
53
  type SoftCloseHandler = (reason: string) => MaybePromise<void>;
54
54
  declare function setSoftCloseHandler(req: IncomingMessage, fn: SoftCloseHandler): void;
55
55
  declare const isSoftClosed: (req: IncomingMessage) => boolean;
56
+ declare function scheduleClose(req: IncomingMessage, reason: string, hardCloseTimestamp: number, softCloseBufferTime?: number, onSoftCloseError?: ServerErrorCallback): void;
56
57
  declare const defer: (req: IncomingMessage, fn: () => MaybePromise<void>) => void;
57
58
  declare const addTeardown: (req: IncomingMessage, fn: () => MaybePromise<void>) => void;
58
59
  declare const getAbortSignal: (req: IncomingMessage) => AbortSignal;
@@ -833,9 +834,9 @@ declare function decompressMime(definitions: string): Map<string, string>;
833
834
  declare function registerMime(definitions: Map<string, string>): void;
834
835
  declare function getMime(ext: string, charset?: string): string;
835
836
 
836
- declare function checkIfModified(req: IncomingMessage, res: ServerResponse, fileStats: Pick<Stats, 'mtimeMs' | 'size'>): boolean;
837
+ declare function checkIfModified(req: IncomingMessage, res: ServerResponse, fileStats: Pick<Stats, 'mtimeMs' | 'size'> | null): boolean;
837
838
  declare function checkIfRange(req: IncomingMessage, res: ServerResponse, fileStats: Pick<Stats, 'mtimeMs' | 'size'>): boolean;
838
- declare function compareETag(res: ServerResponse, fileStats: Pick<Stats, 'mtimeMs' | 'size'>, etags: string[]): boolean;
839
+ declare function compareETag(res: ServerResponse, fileStats: Pick<Stats, 'mtimeMs' | 'size'> | null, etags: string[]): boolean;
839
840
 
840
841
  interface GetBodyOptions {
841
842
  /**
@@ -1343,5 +1344,5 @@ declare class Property<T> {
1343
1344
  }
1344
1345
  declare const makeMemo: <T, Args extends any[] = []>(fn: (req: IncomingMessage, ...args: Args) => T, ...args: Args) => ((req: IncomingMessage) => T);
1345
1346
 
1346
- export { BlockingQueue, CONTINUE, FileFinder, HTTPError, NEXT_ROUTE, NEXT_ROUTER, Negotiator, Property, Queue, Router, STOP, ServerSentEvents, WebListener, WebSocketError, WebSocketMessage, WebSocketMessages, acceptBody, acceptUpgrade, addTeardown, anyHandler, checkIfModified, checkIfRange, compareETag, compressFileOffline, compressFilesInDir, conditionalErrorHandler, decompressMime, defer, delegateUpgrade, emitError, errorHandler, fileServer, findCause, generateStrongETag, generateWeakETag, getAbortSignal, getAbsolutePath, getAddressURL, getAuthorization, getBodyJson, getBodyStream, getBodyText, getBodyTextStream, getCharset, getFormData, getFormFields, getIfRange, getMime, getPathParameter, getPathParameters, getQuery, getRange, getRemainingPathComponents, getSearch, getSearchParams, getTextDecoder, getTextDecoderStream, getWebSocketOrigin, hasAuthScope, isSoftClosed, isWebSocketRequest, jsonErrorHandler, makeAcceptWebSocket, makeAddressTester, makeGetClient, makeMemo, makeTempFileStorage, makeWebSocketFallbackTokenFetcher, negotiateEncoding, nextWebSocketMessage, parseAddress, proxy, readHTTPDateSeconds, readHTTPInteger, readHTTPKeyValues, readHTTPQualityValues, readHTTPUnquotedCommaSeparated, readMimeTypes, registerCharset, registerMime, registerUTF32, removeForwarded, replaceForwarded, requestHandler, requireAuthScope, requireBearerAuth, resetMime, restoreAbsolutePath, sanitiseAndAppendForwarded, sendCSVStream, sendFile, sendJSON, sendJSONStream, sendRanges, setDefaultCacheHeaders, setSoftCloseHandler, simpleAppendForwarded, simplifyRange, stringPredicate, toListeners, typedErrorHandler, upgradeHandler, willSendBody };
1347
+ export { BlockingQueue, CONTINUE, FileFinder, HTTPError, NEXT_ROUTE, NEXT_ROUTER, Negotiator, Property, Queue, Router, STOP, ServerSentEvents, WebListener, WebSocketError, WebSocketMessage, WebSocketMessages, acceptBody, acceptUpgrade, addTeardown, anyHandler, checkIfModified, checkIfRange, compareETag, compressFileOffline, compressFilesInDir, conditionalErrorHandler, decompressMime, defer, delegateUpgrade, emitError, errorHandler, fileServer, findCause, generateStrongETag, generateWeakETag, getAbortSignal, getAbsolutePath, getAddressURL, getAuthorization, getBodyJson, getBodyStream, getBodyText, getBodyTextStream, getCharset, getFormData, getFormFields, getIfRange, getMime, getPathParameter, getPathParameters, getQuery, getRange, getRemainingPathComponents, getSearch, getSearchParams, getTextDecoder, getTextDecoderStream, getWebSocketOrigin, hasAuthScope, isSoftClosed, isWebSocketRequest, jsonErrorHandler, makeAcceptWebSocket, makeAddressTester, makeGetClient, makeMemo, makeTempFileStorage, makeWebSocketFallbackTokenFetcher, negotiateEncoding, nextWebSocketMessage, parseAddress, proxy, readHTTPDateSeconds, readHTTPInteger, readHTTPKeyValues, readHTTPQualityValues, readHTTPUnquotedCommaSeparated, readMimeTypes, registerCharset, registerMime, registerUTF32, removeForwarded, replaceForwarded, requestHandler, requireAuthScope, requireBearerAuth, resetMime, restoreAbsolutePath, sanitiseAndAppendForwarded, scheduleClose, sendCSVStream, sendFile, sendJSON, sendJSONStream, sendRanges, setDefaultCacheHeaders, setSoftCloseHandler, simpleAppendForwarded, simplifyRange, stringPredicate, toListeners, typedErrorHandler, upgradeHandler, willSendBody };
1347
1348
  export type { AcceptUpgradeHandler, AcceptUpgradeResult, Address, AugmentedFormData, AugmentedServer, CSVOptions, CombinedServerOptions, CommonMethod, CommonUpgrade, CompressionInfo, CompressionOptions, ErrorHandler, FileFinderCore, FileFinderOptions, FileNegotiation, FileNegotiationOption, FileServerOptions, FormField, GetClient, GetClientOptions, GetFormDataOptions, GetFormFieldsOptions, GetRangeOptions, HTTPErrorOptions, HTTPRange, HandlerResult, JSONErrorHandlerOptions, JSONOptions, ListenOptions, ListenerOptions, NativeListeners, NegotiationOutput, NegotiationOutputHeaders, ParametersFromPath, PostCheckFile, PostCheckFileInfo, PreCheckFile, PreCheckFileInfo, ProxyChain, ProxyNode, ProxyOptions, ProxyRequestHeaderAdapter, ProxyResponseHeaderAdapter, QualityValue, RangePart, RequestHandler, ResolvedFileInfo, ServerErrorCallback, ServerGeneralErrorCallback, ServerSentEvent, SimplifyRangeOptions, TokenAuthHandler, UpgradeErrorHandler, UpgradeHandler, UpgradeListener, WithPathParameters };
package/index.js CHANGED
@@ -1,2 +1,2 @@
1
- import{isIPv4 as t,isIPv6 as e}from"node:net";import{STATUS_CODES as n,createServer as r,Agent as o,request as i,ServerResponse as s}from"node:http";import{createReadStream as a,constants as c,createWriteStream as f,openAsBlob as u}from"node:fs";import{createHash as l,randomUUID as h}from"node:crypto";import{pipeline as d}from"node:stream/promises";import w from"node:zlib";import{promisify as p}from"node:util";import{extname as m,join as y,dirname as g,basename as b,sep as v,resolve as E}from"node:path";import{readFile as _,writeFile as x,rm as S,stat as T,readdir as $,realpath as N,open as k,mkdtemp as O}from"node:fs/promises";import{tmpdir as R,platform as A}from"node:os";import{Agent as P,request as F}from"node:https";import{TransformStream as C,TextDecoderStream as U,DecompressionStream as M,ReadableStream as B}from"node:stream/web";import{Readable as I,Duplex as D}from"node:stream";function H(n){if(!n||"unknown"===n)return;const r=/^((?:\d{1,3}\.){3}\d{1,3})(?::(\d+))?$/.exec(n);if(r?.[1]&&t(r[1]))return{family:"IPv4",address:r[1],port:r[2]?Number.parseInt(r[2]):void 0};const o=/^\[([\da-fA-F:]+)\](?::(\d+))?$|^([\da-fA-F:]+)$/.exec(n);if(o?.[1]&&e(o[1]))return{family:"IPv6",address:o[1].toLowerCase(),port:o[2]?Number.parseInt(o[2]):void 0};if(o?.[3]&&e(o[3]))return{family:"IPv6",address:o[3].toLowerCase(),port:void 0};const i=/^(.*?):(\d+)$/i.exec(n);return i?.[2]?{family:"alias",address:i[1],port:Number.parseInt(i[2])}:{family:"alias",address:n,port:void 0}}function j(t){const e=new Set,n=[],r=[];for(const o of t){const t=/^((?:\d{1,3}\.){3}\d{1,3})(?:\/(\d+))?$/.exec(o);if(t?.[1]){const e=t[2]?Number.parseInt(t[2]):32,r=e<32?4294967295>>>e:0;n.push([z(t[1])|r,r]);continue}const i=/^\[?([\da-fA-F:]+)\]?(?:\/(\d+))?$/.exec(o);if(i?.[1]){const t=J(i[1]),e=i[2]?q>>BigInt(Number.parseInt(i[2])):0n;r.push([t|e,e]);continue}e.add(o)}return t=>{switch(t?.family){case"alias":return e.has(t.address);case"IPv4":const o=z(t.address);return n.some(([t,e])=>(o|e)===t);case"IPv6":const i=J(t.address);return r.some(([t,e])=>(i|e)===t);default:return!1}}}const q=/*@__PURE__*/BigInt("0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF");function z(t){const e=t.split(".").map(Number);return(e[0]<<24|e[1]<<16|e[2]<<8|e[3])>>>0}function J(t){const e=t.split(":").map(t=>t?Number.parseInt(t,16):-1);let n=0n;for(const t of e)t<0?n<<=16n*BigInt(9-e.length):n=n<<16n|BigInt(t);return n}function L(t,e,n){if(t>=2147483648||Number.isNaN(t)||!n&&t<0)throw new RangeError(`${e} must fit in a 31 bit integer - got ${t}`)}class G{constructor(t){const e={t:null,o:null};this.i=e,this.u=e,void 0!==t&&this.push(t)}isEmpty(){return!this.i.o}clear(){this.i.o=null,this.i.t=null,this.u=this.i}push(t){const e={t,o:null};this.u.o=e,this.u=e}shift(){if(!this.i.o)return null;this.i=this.i.o;const t=this.i.t;return this.i.t=null,t}remove(t){for(let e=this.i;e.o;e=e.o)if(e.o.t===t){e.o=e.o.o;break}}[Symbol.iterator](){return{next:()=>{if(!this.i.o)return{value:null,done:!0};this.i=this.i.o;const t=this.i.t;return this.i.t=null,{value:t,done:!1}}}}}class W{constructor(){this.l=new G,this.h=new G,this.m=0}push(t){if(this.m)return;const e=this.h.shift();e?(e.v&&clearTimeout(e.v),e._(t)):this.l.push(t)}shift(t){return L(t??0,"timeout"),this.l.isEmpty()?this.m?Promise.reject(this.S):new Promise((e,n)=>{const r={_:e,T:n,v:null};this.h.push(r),void 0!==t&&(r.v=setTimeout(()=>{this.h.remove(r),n(new Error(`timeout after ${t}ms`))},t))}):Promise.resolve(this.l.shift())}$(t){this.S=t;for(const e of this.h)e.T(t),e.v&&clearTimeout(e.v)}close(t){this.m||(this.m=1,this.$(t))}fail(t){this.m||(this.m=2,this.$(t))}[Symbol.asyncIterator](){return{next:()=>this.shift().then(t=>({value:t,done:!1}),t=>{if(2===this.m)throw t;return{value:null,done:!0}})}}}function V(t,e){if(t instanceof e)return t;if(t&&"object"==typeof t){if("cause"in t)return V(t.cause,e);if("error"in t)return V(t.error,e)}}function Z(t,e="http"){if(!t)throw new TypeError("no address");if("string"==typeof t)return t;const n=void 0===t.port?"":`:${t.port}`;if("IPv4"===t.family||"alias"===t.family)return`${e}://${t.address}${n}`;if("IPv6"===t.family)return`${e}://[${t.address}]${n}`;throw new TypeError(`unknown address family: ${t.family}`)}const X=(t,e)=>new RegExp(t,(t.unicodeSets?"v":t.unicode?"u":"")+(t.ignoreCase||e?"i":"")),Y=(t,e)=>{if(void 0===t)return()=>!0;if(Array.isArray(t)||(t=[t]),!t.length)return()=>!1;if(1===t.length){const n=t[0];if("string"==typeof n){if(e){const t=n.toLowerCase();return e=>e.toLowerCase()===t}return t=>t===n}const r=X(n,e);return t=>r.test(t)}const n=new Set,r=[];for(const o of t)"string"==typeof o?e?n.add(o.toLowerCase()):n.add(o):r.push(X(o,e));return t=>n.has(e?t.toLowerCase():t)||r.some(e=>e.test(t))},K=/*@__PURE__*/Buffer.alloc(0),Q=t=>new URL("http://localhost"+(t.url??"/"));class tt extends Error{constructor(t,e,n){super(n??""),this.error=t,this.suppressed=e}}const et=globalThis.SuppressedError??tt;class nt{constructor(){this.N=!1}k(t){this.N?t!==this.O&&(this.O=new et(t,this.O)):(this.O=t,this.N=!0)}R(){this.N=!1,this.O=void 0}}const rt=new WeakMap;function ot(t,e,n){const r=rt.get(t);if(r)return r;const o=Q(t),i={A:t,P:o,F:decodeURIComponent(o.pathname),C:new AbortController,U:e,M:[],B:[],I:n?at(t):null};return rt.set(t,i),i}function it(t,e,n){e||(t.I=null),t.D=n;const r=async()=>{t.C.abort(n.H.writableEnded?"complete":"client abort");const e=new nt;await st(t.M,e,t),await st(t.B,e,t,()=>{t.j=async e=>{try{await e()}catch(e){t.U(e,"tearing down",t.A)}}}),e.N&&t.U(e.O,"tearing down",t.A)};return n.H.closed?r():n.H.once("close",r),t}async function st(t,e,n,r){for(;n.J;)await n.J;const o=(async()=>{for(;;){const n=t.pop();if(!n)return void r?.();try{await n()}catch(t){e.k(t)}}})().then(()=>{n.J===o&&(n.J=void 0)});n.J=o,await o}function at(t){return new Set(t.headers.upgrade?.split(",").map(t=>t.trim().toLowerCase())??[])}const ct=t=>rt.get(t),ft=t=>rt.delete(t);function ut(t){const e=ct(t);if(!e)throw new RangeError("unknown request");return e}function lt(t,e,n=lt){throw t.code=e,Error.captureStackTrace(t,n),t}class ht{constructor(t){this.L=t,this.G=Object.create(null),this.W=!1}get headersSent(){return this.W}writeHead(t,e=n[t]??"-"){return this.W&&lt(new Error("Cannot write headers after they are sent to the client"),"ERR_HTTP_HEADERS_SENT"),this.L.write([`HTTP/1.1 ${t} ${pt(e)}`,...dt(this.G),"",""].join("\r\n"),"ascii"),this.W=!0,this}write(t,e="utf-8",n){return this.L.write(t,e,n)}end(t,e="utf-8",n){return this.L.end(t,e,n),this}setHeader(t,e){const n=t.toLowerCase();return this.G[n]="string"==typeof e||"number"==typeof e?e:[...e],this}setHeaders(t){for(const[e,n]of t)this.setHeader(e,n);return this}}function dt(t){const e=[];for(const[n,r]of Object.entries(t)){const t=wt(r);t&&e.push(`${pt(n)}: ${pt(t)}`)}return e}const wt=t=>"string"==typeof t?t:"number"==typeof t?String(t):t?t.join(", "):"",pt=t=>t.replaceAll(/[^ \t!-~]/g,"");function mt(t,e){const n=ct(t);n&&yt(n,e)}function yt(t,e){t.V=e;const n=t.Z;n&&queueMicrotask(()=>_t(e,n,t))}const gt=t=>Boolean(ct(t)?.Z);function bt(t,e,n){if(!t.Z){if(t.D&&!t.I){const e=t.D.H;e.headersSent||e.hasHeader("connection")||e.setHeader("connection","close")}t.D?.H.once("close",()=>t.A.socket.destroy()),t.Z={X:e,U:n},_t(t.V,t.Z,t),Et(t)}}function vt(t){if(t.D){if(t.I){if(!t.Y&&t.D.H.writable){const e=new ht(t.D.H);e.setHeader("connection","close"),e.writeHead(503)}}else{const e=t.D.H;e.headersSent||(e.hasHeader("connection")||e.setHeader("connection","close"),e.writeHead(503))}t.D.H.end(()=>t.A.socket.destroy())}else t.A.socket.destroy()}function Et(t){if(clearTimeout(t.K),!t.tt||t.j)return;const e=Date.now();if(e>=t.tt)return void vt(t);let n=t.tt;t.et&&!t.Z&&(e<t.et.nt?n=t.et.nt:(t.Z=t.et,_t(t.V,t.Z,t))),void 0===t.K&&t.B.push(()=>clearTimeout(t.K)),t.K=setTimeout(()=>Et(t),Math.min(n-e,6048e5))}async function _t(t,e,n){try{await(t?.(e.X))}catch(t){e.U(t,"soft closing",n.A),vt(n)}}const xt=(t,e)=>{const n=ut(t);n.j?n.j(e):n.M.push(e)},St=(t,e)=>{const n=ut(t);n.j?n.j(e):n.B.push(e)},Tt=t=>ut(t).C.signal;class $t extends Error{}const Nt=/*@__PURE__*/new $t("STOP"),kt=/*@__PURE__*/new $t("CONTINUE"),Ot=/*@__PURE__*/new $t("NEXT_ROUTE"),Rt=/*@__PURE__*/new $t("NEXT_ROUTER");async function At(t,e){const n=ut(t);if(!n.D)throw new TypeError("cannot call acceptUpgrade from shouldUpgrade");if(!n.I)throw new TypeError("not an upgrade request");if(3===n.Y)throw new TypeError("upgrade already delegated");if(2===n.Y)return n.rt;const r=n.D.H;if(!r.readable||!r.writable)throw Nt;n.Y=1;const o=await e(t,r,n.D.i);return n.D.i=K,n.ot=o.onError,o.softCloseHandler&&yt(n,o.softCloseHandler),n.Y=2,n.rt=o.return,o.return}function Pt(t){const e=ut(t);if(!e.D)throw new TypeError("cannot call delegateUpgrade from shouldUpgrade");if(!e.I)throw new TypeError("not an upgrade request");if(e.Y)throw new TypeError("upgrade already handled");e.Y=3}const Ft=RegExp.escape??(t=>t.replaceAll(/[^a-zA-Z0-9_ ]/g,t=>"\\u"+t.charCodeAt(0).toString(16).padStart(4,"0"))),Ct=t=>t,Ut=t=>void 0===t?void 0:""===t?[]:t.split("/"),Mt=t=>void 0===t?void 0:""===t?[]:t.split("/").filter(t=>t),Bt=/*@__PURE__*/(t=>e=>{const n=[];let r=0;for(;r<e.length;++r){const o=t.get(e[r]);if(!o)break;n.push([o,!0])}return[Object.fromEntries(n),e.substring(r)]})(
2
- /*@__PURE__*/new Map([["i","it"],["!","st"]])),It=(t,e)=>{Object.prototype.hasOwnProperty.call(t,e)&&delete t[e]},Dt=Object.freeze({});function Ht(t,e,n){const r=t.A.url,o=t.F,i=t.ct??Dt;return t.A.url=encodeURIComponent(e).replaceAll("%2F","/")+t.P.search,t.F=e,n.length>0&&(t.ct=Object.freeze(Object.fromEntries([...Object.entries(i),...n]))),()=>{t.A.url=r,t.F=o,t.ct=i}}function jt(t){return ct(t)?.ct??Dt}function qt(t,e){return n=jt(t),r=e,Object.prototype.hasOwnProperty.call(n,r)?n[r]:void 0;var n,r}function zt(t){const e=ct(t);return e?e.P.pathname+e.P.search:t.url??"/"}function Jt(t){const e=ct(t);e&&(t.url=e.P.pathname+e.P.search)}const Lt=t=>"function"==typeof t?{handleRequest:t}:t,Gt=(t,e)=>"function"==typeof t?{handleUpgrade:t,shouldUpgrade:e}:{shouldUpgrade:e,...t},Wt=(t,e=Qt)=>({handleRequest:t,handleUpgrade:t,shouldUpgrade:e}),Vt=t=>"function"==typeof t?{handleError:t}:t,Zt=(t,e)=>Xt(e=>e instanceof t,e),Xt=(t,e)=>({handleError:(n,r,o)=>{if(o.response&&t(n))return e(n,r,o.response);throw n},shouldHandleError:(e,n,r)=>Boolean(r.response)&&t(e)}),Yt=t=>"function"==typeof t?{handleRequest:t}:t,Kt=t=>"function"==typeof t?{handleUpgrade:t}:t,Qt=()=>!1,te=Symbol("http");class ee{constructor(){this.ft=[],this.ut=[]}k(t,e,n,r,o){const i=n?((t,e)=>{const n=["^"],r=[],o=/[{}]|\/+|\\(.)|[:*]([a-zA-Z0-9_]*)/g,[{it:i,st:s},a]=Bt(t);if("/"!==a[0])throw new TypeError("path must begin with '/' or flags");let c=0,f={lt:null,ht:!1};const u=[f];let l=!1;for(const t of a.matchAll(o)){if(t.index>c){const e=Ft(a.substring(c,t.index));null!==f.lt&&(f.lt+=e,f.ht=!1),n.push(e)}const e=t[0];if("{"===e)n.push("(?:"),f={...f},u.push(f);else if("}"===e){if(u.pop(),!u.length)throw new TypeError(`unbalanced optional braces in path at ${t.index}`);const e=f;if(f=u[u.length-1],null===f.lt?(f.lt=e.lt,f.ht=e.ht):null!==e.lt&&(f.lt=`(?:${f.lt}|${e.lt})`,f.ht||=e.ht),"(?:"===n[n.length-1])throw new Error(`empty optional section in path at ${t.index}`);n.push(")?")}else if("/"===e[0])f.lt=null,n.push(e),s||n.push("+");else if("\\"===e[0]){const e=Ft(t[1]);null!==f.lt&&(f.lt+=e,f.ht=!1),n.push(e)}else{const o=e[0],i=t[2];if(!i)throw new TypeError(`unnamed parameter or unescaped '${o}' at ${t.index}`);if(null!==f.lt&&f.ht)throw new TypeError(`path parameters must be separated by at least one character at ${t.index}`);if("*"===o){if(l)throw new TypeError("paths must not contain more than one multi-component path parameter");l=!0,null!==f.lt?n.push(`((?:(?!${f.lt})[^/])*?(?:/.*?)?)`):n.push("(.*?)"),r.push({dt:i,wt:s?Ut:Mt})}else null!==f.lt?n.push(`((?:(?!${f.lt})[^/])+?)`):n.push("([^/]+?)"),r.push({dt:i,wt:Ct});f.lt="",f.ht=!0}c=t.index+e.length}if(c<a.length&&n.push(Ft(a.substring(c))),u.length>1)throw new TypeError("unbalanced optional braces in path");return e&&(n.push("(?:"),s?n.push("(?:(?<=/)|/)"):n.push("(?:/+|(?<=/))"),n.push("(?<rest>.*))?")),n.push("$"),{yt:new RegExp(n.join(""),i?"i":""),gt:r}})(n,r):{yt:null,gt:[]};if(o.some(t=>t instanceof Promise))throw new TypeError("expected handler, got Promise (did you forget to await?)");return this.ft.push({bt:t,vt:"string"==typeof e?e.toLowerCase():e,Et:i.yt,_t:i.gt,xt:o}),this}use(...t){return this.k(null,null,null,!0,t.map(Yt))}mount(t,...e){return this.k(null,null,t,!0,e.map(Yt))}within(t){const e=new ee;return this.mount(t,e),e}at(t,...e){return this.k(null,null,t,!1,e.map(Yt))}onRequest(t,e,...n){return this.k(re(t),te,e,!1,n.map(Yt))}onUpgrade(t,e,n,...r){return this.k(re(t),e,n,!1,r.map(Kt))}onError(...t){return this.k(null,null,null,!0,t.map(Vt))}onReturn(...t){return this.ut.push(...t),this}get=(t,...e)=>this.k(ne,te,t,!1,e.map(Yt));delete=(...t)=>this.onRequest("DELETE",...t);getOnly=(...t)=>this.onRequest("GET",...t);head=(...t)=>this.onRequest("HEAD",...t);options=(...t)=>this.onRequest("OPTIONS",...t);patch=(...t)=>this.onRequest("PATCH",...t);post=(...t)=>this.onRequest("POST",...t);put=(...t)=>this.onRequest("PUT",...t);ws=(...t)=>this.onUpgrade("GET","websocket",...t);async handleRequest(t){return this.St(t,new nt)}async handleUpgrade(t){return this.St(t,new nt)}async handleError(t,e){const n=new nt;return n.k(t),this.St(e,n)}shouldUpgrade(t){return this.Tt(ut(t))}Tt(t){for(const e of this.ft){const n=oe(t,e);if(!n)continue;let r=()=>{};if(!0!==n)try{r=Ht(t,n.$t,[])}catch{continue}try{for(const n of e.xt)if(ae(n,t))return!0}finally{r()}}return!1}async St(t,e){const n=ut(t),r=await this.Nt(n,e);if(e.N)throw e.O;return r}async Nt(t,e){for(const n of this.ft){const r=oe(t,n);if(!r)continue;let o=()=>{};if(!0!==r)try{const e=r.kt();o=Ht(t,r.$t,e)}catch(t){e.k(t);continue}try{const r=await ie(t,n.xt,this.ut,e);if(r===Rt)break;if(r===Ot)continue;return r}finally{o()}}return kt}}const ne=new Set(["HEAD","GET"]),re=t=>t?"string"==typeof t?t:new Set(t):null;function oe(t,e){if("string"==typeof e.bt){if(e.bt!==t.A.method)return!1}else if(null!==e.bt&&!e.bt.has(t.A.method??""))return!1;if(e.vt===te){if(t.I)return!1}else if(null!==e.vt&&!t.I?.has(e.vt))return!1;if(null===e.Et)return!0;const n=e.Et.exec(t.F);return!!n&&{$t:"/"+(n.groups?.rest??""),kt:()=>e._t.map((t,e)=>[t.dt,t.wt(n[e+1])])}}async function ie(t,e,n,r){for(const o of e){let e=await se(o,t,r);if(e!==kt){if(!t.I&&!(e instanceof $t)&&n.length)try{const r="object"==typeof e?e:void 0,o=t.A,i=t.D.H;for(const t of n)await t(r,o,i)}catch(t){r.k(t);continue}return e}}return Ot}async function se(t,e,n){if(t instanceof ee)return t.Nt(e,n);let r=kt;try{if(n.N){if(t.handleError){const o=n.O,i=e.I?{socket:e.D.H,head:e.D.i,hasUpgraded:Boolean(e.Y)}:{response:e.D.H};t.shouldHandleError&&!t.shouldHandleError(o,e.A,i)||(n.R(),r=await t.handleError(o,e.A,i))}}else if(e.I){if(t.handleUpgrade){const n=e.D;r=await t.handleUpgrade(e.A,n.H,n.i)}}else t.handleRequest&&(r=await t.handleRequest(e.A,e.D.H))}catch(t){t instanceof $t?r=t:n.k(t)}finally{e.M.length&&await((t,e)=>st(t.M,e,t))(e,n)}return r===Nt?void 0:r}function ae(t,e){if(t instanceof ee)return t.Tt(e);if(!t.shouldUpgrade)return Boolean(t.handleUpgrade);try{return t.shouldUpgrade(e.A)}catch(t){return e.U(t,"checking should upgrade",e.A),!1}}class ce extends Error{constructor(t,{message:e,statusMessage:r,headers:o,body:i,...s}={}){super(e??i,s),this.statusCode=0|t,this.statusMessage=r??n[this.statusCode]??"-",this.headers=(t=>{if(!t||t instanceof Headers||Array.isArray(t))return new Headers(t);const e=t instanceof Map?[...t.entries()]:Object.entries(t);return new Headers(e.map(([t,e])=>[t,wt(e)]).filter(([t,e])=>e))})(o),this.body=i??"",this.name=`HTTPError(${this.statusCode} ${this.statusMessage})`}}const fe=(t,e,n)=>{const r=ue(n);if(!r)return;const o=V(t,ce)??new ce(500);r.setHeader("content-type","text/plain; charset=utf-8"),r.setHeader("x-content-type-options","nosniff"),r.setHeaders(o.headers),r.setHeader("content-length",String(Buffer.byteLength(o.body,"utf-8"))),n.response||r.setHeader("connection","close"),r.writeHead(o.statusCode,o.statusMessage),r.end(o.body,"utf-8")};function ue(t){if(t.response){const e=t.response;return e.headersSent?void e.end():e}const e=t.socket;if(!t.hasUpgraded&&e.writable)return e.addListener("finish",()=>e.destroy()),new ht(e);e.destroy()}function le(t,{onError:e=he,socketCloseTimeout:n=500}={}){L(n,"socketCloseTimeout");let r=0,o="",i=e;const s=[],a=new Set,c=()=>{const t=[...s];s.length=0;for(const e of t)e()},f=t=>{t&&(a.size?s.push(t):setImmediate(t))},u=t=>{a.add(t),t.B.push(()=>{a.delete(t),!a.size&&s.length&&setImmediate(c)})},l=async(n,s,a)=>{let c;try{c=ot(n,e,!1)}catch(t){return e(t,"parsing request",n),void fe(new ce(400),0,{response:s})}if(it(c,!1,{H:s}),a&&(c.Ot=!0),u(c),1===r)bt(c,o,i);else if(2===r)return vt(c),void ft(n);const f=new nt,l=await se(t,c,f);f.N||l!==kt&&l!==Ot&&l!==Rt||f.k(new ce(404)),f.N&&(e(f.O,"handling request",n),fe(f.O,0,{response:s}),ft(n))};return{request:(t,e)=>l(t,e,!1),checkContinue:(t,e)=>l(t,e,!0),upgrade:async(s,a,c)=>{let f;a.once("finish",()=>{const t=setTimeout(()=>a.destroy(),n);a.once("close",()=>clearTimeout(t))});try{f=ot(s,e,!0)}catch(t){return e(t,"parsing upgrade",s),void fe(new ce(400),0,{socket:a,hasUpgraded:!1})}if(it(f,!0,{H:a,i:c}),c=K,u(f),1===r)bt(f,o,i);else if(2===r)return vt(f),void ft(s);const l=new nt,h=await se(t,f,l);l.N||h!==kt&&h!==Ot&&h!==Rt||(console.warn(`Upgrade ${s.headers.upgrade} request for ${s.url} fell-through. This probably means you need to add shouldUpgrade to one of your upgrade handlers, or if this is intentional, explicitly reject the request (throw new HTTPError(404)) instead of using CONTINUE.`),l.k(new ce(404))),l.N&&(e(l.O,"handling upgrade",s),f.ot?f.ot(l.O):fe(l.O,0,{socket:a,head:f.D?.i??K,hasUpgraded:Boolean(f.Y)}),ft(s))},shouldUpgrade:n=>{try{const r=ot(n,e,!0);return ae(t,r)}catch{return!1}},clientError:(t,n)=>{const r=n.Rt,o=t.code;n.writable&&!r?.headersSent&&n.end(we.get(o)??pe),n.destroy(t),("EPIPE"!==o||n.writable)&&("ECONNRESET"!==o||n.writable)&&"HPE_INVALID_EOF_STATE"!==o&&e(t,"initialising request",void 0)},softClose(t,e,n){if(r<1){r=1,o=t,i=e;for(const n of a)bt(n,t,e)}f(n)},hardClose(t){if(r<2){r=2;for(const t of a)vt(t)}f(t)},countConnections:()=>a.size}}const he=(t,e,n)=>{(V(t,ce)?.statusCode??500)>=500&&console.error("%s",`unhandled error while ${e} ${n?.url??"(no request information)"}:`,t)},de=t=>Buffer.from(`HTTP/1.1 ${t} ${n[t]}\r\nConnection: close\r\n\r\n`),we=/*@__PURE__*/new Map([["HPE_HEADER_OVERFLOW",/*@__PURE__*/de(431)],["HPE_CHUNK_EXTENSIONS_OVERFLOW",/*@__PURE__*/de(413)],["ERR_HTTP_REQUEST_TIMEOUT",/*@__PURE__*/de(408)]]),pe=/*@__PURE__*/de(400);class me extends EventTarget{constructor(t){super(),this.At=t}attach(t,e={}){const n=(e,n,r)=>{const o={server:t,error:e,context:n,request:r};this.dispatchEvent(new CustomEvent("error",{detail:o,cancelable:!0}))&&he(e,n,r)},r=le(this.At,{...e,onError:n});!1===e.autoContinue&&t.addListener("checkContinue",r.checkContinue),!1===e.rejectNonStandardExpect&&t.addListener("checkExpectation",r.request),t.addListener("request",r.request),t.addListener("upgrade",r.upgrade);const o=t.shouldUpgradeCallback??(()=>!1);!1!==e.overrideShouldUpgradeCallback&&(t.shouldUpgradeCallback=r.shouldUpgrade),t.addListener("clientError",r.clientError);let i=()=>{i=void 0,t.removeListener("checkContinue",r.checkContinue),t.removeListener("checkExpectation",r.request),t.removeListener("request",r.request),t.removeListener("upgrade",r.upgrade),t.shouldUpgradeCallback===r.shouldUpgrade&&(t.shouldUpgradeCallback=o),t.removeListener("clientError",r.clientError)};return(t="",e=-1,o=!1,s)=>{if(L(e,"existingConnectionTimeout",!0),o||i?.(),e>0){const o=setTimeout(()=>{i?.(),r.hardClose()},e);r.softClose(t,n,()=>{i?.(),clearTimeout(o),s?.()})}else 0===e?(i?.(),r.hardClose(s)):(i?.(),s&&setImmediate(s));return r}}createServer(t={}){t.shouldUpgradeCallback&&(t={overrideShouldUpgradeCallback:!1,...t});const e=r(t),n=this.attach(e,t),o=Object.assign(e,{closeWithTimeout:(t,r)=>new Promise(o=>n(t,r,!0,()=>{e.close(()=>o()),e.closeAllConnections()}))});return o}listen(t,e,n={}){const r=this.createServer(n);return n.socketTimeout&&r.setTimeout(n.socketTimeout),new Promise((o,i)=>{r.once("error",i),r.listen(t,e,n.backlog??511,()=>{r.off("error",i),o(r)})})}}const ye=t=>ct(t)?.P??Q(t),ge=t=>ye(t).search,be=t=>new URLSearchParams(ye(t).searchParams),ve=(t,e)=>ye(t).searchParams.get(e);function Ee(t,e){const n=t.indexOf(e);return-1===n?[t]:[t.substring(0,n),t.substring(n+e.length)]}function _e(t){const e=t.headers.authorization;if(!e)return;const[n,r]=Ee(e," ");return void 0!==r?[n.trim().toLowerCase(),r.trim()]:void 0}function xe(t){const e=/^text\/.*;\s*charset=([^;]+)/i.exec(t.headers["content-type"]??"");return e?.[1]?.trim().toLowerCase()??void 0}function Se(t){const e=t.headers["if-range"];return e&&"string"==typeof e?/^("|W\/")/.test(e)?{etag:[e]}:{modifiedSeconds:Re(e)}:{}}function Te(t,e,{maxRanges:n=10,maxNonSequential:r=2,maxWithOverlap:o=2}={}){const i=t.headers.range;if(!i||0===e)return;const[s,a]=Ee(i,"=");if("bytes"!==s||!a)return;const c=new ce(416,{headers:{"content-range":`bytes */${e}`}}),f=t=>{const e=Ne(t);if(void 0===e)throw c;return e},u=[];for(const t of a.split(",")){const[r,o]=Ee(t.trim(),"-");if(void 0===o)throw c;let i;if(r)i={start:f(r),end:o?Math.min(f(o),e-1):e-1};else{if(!o)throw c;i={start:Math.max(e-f(o),0),end:e-1}}if(!(i.start>=e)){if(i.end<i.start||u.length>=n)throw c;u.push(i)}}if(!u.length)throw c;if(u.length>r)for(let t=0;t<u.length-1;++t)if(u[t].start>u[t+1].start)throw c;if(u.length>o)for(let t=1;t<u.length;++t){const e=u[t];for(let n=0;n<t;++n){const t=u[n];if(e.end>=t.start&&t.end>=e.start)throw c}}return{ranges:u,totalSize:e}}function $e(t){if(void 0!==t)return"number"==typeof t?[String(t)]:t.length?"string"==typeof t?t.split(",").map(t=>t.trim()):t.flatMap(t=>t.split(",").map(t=>t.trim())):[]}function Ne(t){if(t&&/^\s*-?\d+\s*$/.test(t))return Number.parseInt(t,10)}const ke=t=>$e(t)?.map(t=>{const[e,...n]=t.split(";"),r=new Map(n.map(t=>{const[e,n]=Ee(t,"=");return[e.trim(),n?.trim()??""]})),o=e.trim(),i="*/*"===o||"*"===o?0:o.endsWith("/*")?1:2,s=Math.max(0,Math.min(1,Number.parseFloat(r.get("q")??"1")));return{name:o,specifiers:r,specificity:i,q:s}});function Oe(t){const e=new Map,n=/\s*([^=]+)=(?:([^";]*)|"((?:[^\\"]|\\.)*)"\s*)(?:;|$)/y;for(;n.lastIndex<t.length;){const r=n.exec(t);if(!r)throw new ce(400,{body:"invalid HTTP key values"});const o=r[1].toLowerCase();void 0!==r[3]?e.set(o,r[3].replaceAll(/\\(.)/g,"$1")):e.set(o,r[2].trim())}return e}function Re(t){if("string"!=typeof t)return;const e=Date.parse(t);return Number.isNaN(e)?void 0:e/1e3|0}const Ae=t=>"function"==typeof t?t:()=>t;class Pe{constructor(t=Me){this.Pt=Ae(t)}set(t,e){Ce(ut(t)).set(this,e)}get(t){return Ue(t,this,this.Pt)}clear(t){const e=ct(t);e?.Ft?.delete(this)}withValue(t){return Wt(e=>(this.set(e,t),kt))}}const Fe=(t,...e)=>{const n=n=>t(n,...e);return t=>Ue(t,n,n)};function Ce(t){return t.Ft||(t.Ft=new Map),t.Ft}function Ue(t,e,n){const r=ct(t);if(!r)return n(t);const o=Ce(r);if(o.has(e))return o.get(e);const i=n(t);return o.set(e,i),i}const Me=()=>{throw new Error("property has not been set")};function Be({realm:t,extractAndValidateToken:e,fallbackTokenFetcher:n,closeOnExpiry:r=!0,softCloseBufferTime:o=0,onSoftCloseError:i}){const s=Ae(t);return{...Wt(async t=>{const a=Date.now(),c=await s(t),f={"www-authenticate":`Bearer realm="${c}"`},u=_e(t),l="bearer"===u?.[0]?u[1]:await(n?.(t));if(!l)throw new ce(401,{headers:f,body:"no token provided"});let h;try{h=await e(l,c,t)}catch(t){throw new ce(401,{headers:f,body:"invalid token",cause:t})}if(!h)throw new ce(401,{headers:f,body:"invalid token"});if("object"==typeof h){if("nbf"in h&&"number"==typeof h.nbf&&a<1e3*h.nbf)throw new ce(401,{headers:f,body:"token not valid yet"});if("exp"in h&&"number"==typeof h.exp){const e=1e3*h.exp;if(a>=e-o)throw new ce(401,{headers:f,body:"token expired"});r&&((t,e,n,r=0,o)=>{const i=ut(t),s=n-Math.max(r,0),a=i.tt??Number.POSITIVE_INFINITY,c=i.et?.nt??a;s>=c&&n>=a||(n<a&&(i.tt=n),s<c&&(i.et={nt:s,X:e,U:o??i.U}),Et(i))})(t,"token expired",e,o,i)}}return He.set(t,{Ct:c,Ut:!0,Mt:h,Bt:je(h)}),kt}),getTokenData:t=>{const e=He.get(t);if(!e.Ut)throw new TypeError("cannot use getTokenData in an unauthenticated endpoint");return e.Mt}}}const Ie=(t,e)=>He.get(t).Bt.has(e),De=t=>Wt(e=>{const n=He.get(e);if(!n.Bt.has(t))throw new ce(403,{headers:{"www-authenticate":`Bearer realm="${n.Ct}", scope="${t}"`},body:`scope required: ${t}`});return kt}),He=/*@__PURE__*/new Pe({Ct:"",Ut:!1,Mt:null,Bt:new Set});function je(t){if(!t||"object"!=typeof t||!("scopes"in t))return new Set;const{scopes:e}=t;return Array.isArray(e)?new Set(e):"string"==typeof e?new Set([e]):e&&"object"==typeof e?new Set(Object.entries(e).filter(([t,e])=>e).map(([t])=>t)):new Set}function qe(t,e){const n=`${0|e.mtimeMs} ${e.size} ${t??""}`;return`W/"${l("sha256").update(n).digest("base64").substring(0,12)}"`}async function ze(t){const e=l("sha256");return"string"==typeof t?await d(a(t),e):await d(t.createReadStream({start:0,autoClose:!1}),e),`"sha256-${e.digest("base64")}"`}const Je={type:{It:"accept",Dt:"content-type"},language:{It:"accept-language",Dt:"content-language"},encoding:{It:"accept-encoding",Dt:"content-encoding"}},Le=/*@__PURE__*/new Map([["zstd","{file}.zst"],["br","{file}.br"],["gzip","{file}.gz"],["deflate","{file}.deflate"],["identity","{file}"]]),Ge=t=>{return{feature:"encoding",options:(e=t,n=Le,Array.isArray(e)?e.map(t=>({value:t,file:n.get(t)})):Object.entries(e).map(([t,e])=>({value:t,file:e})))};var e,n};class We{constructor(t,{maxFailedAttempts:e=10}={}){this.Ht=t.map(t=>{if(!Object.prototype.hasOwnProperty.call(Je,t.feature))throw new RangeError(`unknown negotiation feature: ${t.feature}`);return{jt:t.feature,qt:Y(t.match,!0),zt:t.options.map(t=>({Jt:t.file,Lt:t.value,qt:Y(t.for??t.value,!0)}))}}).filter(t=>t.zt.length>0),this.Gt=e}*options(t,e){const n=this.Ht,r=new Set,o=this.Gt,i={},s=new Set;let a=!1;o>0&&(yield*function*c(f,u){const l=n[u];if(!l)return void(r.has(f)||(r.add(f),a&&(i.vary=[...s].join(", "),a=!1),yield{filename:f,headers:i}));if(!l.qt(t))return void(yield*c(f,u+1));const h=Je[l.jt];s.add(Je[l.jt].It),a=!0;const d=ke(e[h.It])?.sort(Ve);if(!d?.length)return void(yield*c(f,u+1));const w=new Set,p=[];for(const t of l.zt){const e=d.find(e=>t.qt(e.name));e&&p.push({...e,Wt:t})}for(const t of p.sort(Ve)){const e=Ze(f,t.Wt.Jt);if(!w.has(e)&&(w.add(e),i[h.Dt]=t.Wt.Lt,yield*c(e,u+1),r.size>=o))return}delete i[h.Dt],!w.has(f)&&r.size<o&&(yield*c(f,u+1))}(t,0)),r.has(t)||(a&&(i.vary=[...s].join(", ")),yield{filename:t,headers:i})}}const Ve=(t,e)=>e.q-t.q||e.specificity-t.specificity;function Ze(t,e){return e.replaceAll(/\{(?:file|base|ext)\}/g,e=>"{file}"===e?t:"{base}"===e?t.replace(/\.[^.]*$/,""):m(t))}const Xe=/*@__PURE__*/tn("bin=application/octet-stream;gz(ip),json,ogg,pdf,wasm,xml,y(a)ml,zip,zst(d)=application/{ext};webmanifest=application/manifest+json;aac,flac,mid(i),wav(e)=audio/{ext};mp3=audio/mpeg;oga,opus=audio/ogg;otf,ttf,woff,woff2=font/{ext};apng,avif,bmp,gif,heic,heif,jp(e)g,png,tif(f),webp=image/{ext};ico,cur=image/x-icon;svg=image/svg+xml;3mf,obj,stl,u3d=model/{ext};wrl=model/vrml;x3d=model/x3d+xml;x3db=model/x3d+binary;x3dv=model/x3d+vrml;css,csv,htm(l),rtf,vcard=text/{ext};(m)js=text/javascript;md=text/markdown;txt=text/plain;3gp(p),3g(pp)2,mp4,mp(e)g,h264=video/{ext};mov=video/quicktime;ogv=video/ogg");let Ye=/*@__PURE__*/new Map(Xe);function Ke(){Ye=new Map(Xe)}function Qe(t){const e=new Map;for(const n of t.split("\n")){const[t,...r]=n.replaceAll(/\s+/g," ").trim().split(" ");if(!t.startsWith("#"))for(const n of r)e.set(n.toLowerCase(),t)}return e}function tn(t){const e=new Map;for(const n of t.split(/[\n;]/g)){const[t,r,o]=/^ *([^ =]+)=(.*)$/.exec(n)??[null,null,""];for(const t of r?.split(",")??[]){const[n,r,i="",s=""]=/^([^(]*)(?:\(([^)]*)\)(.*))?$/.exec(t),a=r+i+s,c=o.replace("{ext}",a);e.set(a.toLowerCase(),c),i&&e.set((r+s).toLowerCase(),c)}}return e}function en(t){for(const[e,n]of t)Ye.set(e.toLowerCase(),n)}function nn(t,e="utf-8"){"."===t[0]&&(t=t.substring(1));const n=Ye.get(t)??"application/octet-stream";return n.startsWith("text/")&&!n.includes("charset=")?`${n}; charset=${e}`:n}const rn=(t,e)=>!["image","video","audio","font"].includes(e.split("/")[0]);async function on(t,e,{minCompression:n=0,deleteObsolete:r=!1,filter:o=rn}={}){const i=await _(t),s={file:t,mime:nn(m(t)),rawSize:i.byteLength,bestSize:i.byteLength,created:0};if(!o(t,s.mime))return s;const a=s.rawSize-n;for(const n of e){const e=cn.get(n.value),o=y(g(t),Ze(b(t),n.file));if(!e||o===n.file)continue;const c=a>0?await e(i):void 0;c&&c.byteLength<=a?(await x(o,c),s.bestSize=Math.min(s.bestSize,c.byteLength),++s.created):r&&await S(o).catch(()=>{})}return s}async function sn(t,e,n={}){const r=[];await an(t,r);const o=new Set(r);for(const t of o)for(const n of e){const e=y(g(t),Ze(b(t),n.file));e!==t&&o.delete(e)}return Promise.all([...o].map(t=>on(t,e,n)))}async function an(t,e){const n=await T(t);if(n.isDirectory())for(const n of await $(t))await an(y(t,n),e);else n.isFile()&&e.push(t)}const cn=/*@__PURE__*/new Map([["zstd",t=>p(w.zstdCompress)(t)],["br",t=>p(w.brotliCompress)(t,{params:{[w.constants.BROTLI_PARAM_QUALITY]:w.constants.BROTLI_MAX_QUALITY,[w.constants.BROTLI_PARAM_SIZE_HINT]:t.length}})],["gzip",t=>p(w.gzip)(t,{level:w.constants.Z_BEST_COMPRESSION})],["deflate",t=>p(w.deflate)(t)]]),fn=(t,e,n)=>{const r=ut(t);r.U(e,n??(r.I?"handling upgrade":"handling request"),t)},un=(t,{onlyIfRequested:e=!0,emitError:n=!0,forceStatus:r,contentType:o="application/json"}={})=>({handleError:(i,s,a)=>{if(a.hasUpgraded||e&&!ln(s,o))throw i;n&&fn(s,i);const c=ue(a);if(!c)return;const f=V(i,ce)??new ce(500),u=JSON.stringify(t(f));c.setHeaders(f.headers),c.setHeader("content-type",o),c.setHeader("x-content-type-options","nosniff"),c.setHeader("content-length",String(Buffer.byteLength(u,"utf-8"))),a.response||c.setHeader("connection","close"),r?c.writeHead(r):c.writeHead(f.statusCode,f.statusMessage),c.end(u,"utf-8")},shouldHandleError:(t,n,r)=>!r.hasUpgraded&&(!e||ln(n,o))}),ln=(t,e)=>ke(t.headers.accept)?.some(t=>t.name===e||"application/json"===t.name)??!1;class hn{constructor(t,{subDirectories:e=!0,caseSensitive:n="exact",allowAllDotfiles:r=!1,allowAllTildefiles:o=!1,allowDirectIndexAccess:i=!1,allow:s=[".well-known"],hide:a=[],indexFiles:c=["index.htm","index.html"],implicitSuffixes:f=[],negotiator:u}){this.Vt=t,this.Zt=!0===e?Number.POSITIVE_INFINITY:e||0,this.Xt=n,this.Yt=r,this.Kt=o,this.Qt=i,this.te=c,this.ee=["",...f],this.ne=new Set(s.map(t=>this.re(t))),this.oe=Y(a,!n),this.ie=new Set(c.map(t=>this.re(t))),this.se=u}static async build(t,e={}){return new hn(await N(t,{encoding:"utf-8"})+v,e)}re(t){return"exact"===this.Xt?t:t.toLowerCase()}ae(t){if(this.ne.has(t))return!0;const e=t.trim();return!(!("~"!==e[0]&&"~"!==e[e.length-1]||this.Kt)||"."===e[0]&&!this.Yt||this.oe(e))}toNormalisedPath(t){const e=t[t.length-1];return e&&this.ie.has(this.re(e))?t.slice(0,t.length-1):t}async find(t,e={},n){let r=t.join(v);if("force-lowercase"===this.Xt&&(r=r.toLowerCase()),/(^|[\\\/])\.\.($|[\\\/])|^[\\\/]/.test(r))return n?.push(`${JSON.stringify(r)} is not permitted`),null;let o=E(this.Vt,r);if(!o.startsWith(this.Vt)&&o+v!==this.Vt)return n?.push(`${JSON.stringify(o)} is not inside root ${JSON.stringify(this.Vt)}`),null;let i=null,s=null;for(const t of this.ee){const e=o+t;if(i=e.substring(this.Vt.length).split(v).filter(t=>t),i.length-1>this.Zt)return n?.push(`${JSON.stringify(o)} is nested too deeply (${i.length-1} > ${this.Zt})`),null;if(i.some(t=>!this.ae(this.re(t))))return n?.push(`${JSON.stringify(o)} is not permitted`),null;const r=i[i.length-1]??"";if(!this.Qt&&this.ie.has(this.re(r))&&!this.ne.has(this.re(r)))return n?.push(`${JSON.stringify(o)} is a hidden index file`),null;if(s=await N(e,{encoding:"utf-8"}).catch(()=>null),s){o=e;break}}if(!s||!i)return n?.push(`file ${JSON.stringify(o)} does not exist`),null;if(this.re(s)!==this.re(o))return n?.push(`realpath ${JSON.stringify(s)} does not match request ${JSON.stringify(o)}`),null;let a=s,c=await T(s).catch(()=>null);if(!c)return n?.push(`file ${JSON.stringify(s)} does not exist`),null;if(c.isDirectory()){if(i.length>this.Zt)return n?.push(`${JSON.stringify(s)} index file is nested too deeply (${i.length} > ${this.Zt})`),null;for(const t of this.te){const e=y(s,t);if(c=await T(e).catch(()=>null),c?.isFile()){a=e;break}}}if(!c?.isFile())return n?.push(`${JSON.stringify(s)} exists but is not a file`),null;if(!this.se)return wn({canonicalPath:a,negotiatedPath:a,headers:{}},n);const f=b(a),u=g(a);for(const t of this.se.options(f,e)){if(!t.filename||t.filename.includes(v))continue;const e=await wn({canonicalPath:a,negotiatedPath:y(u,t.filename),headers:t.headers},n);if(e)return e}return null}async debugAllPaths(){return(await this.precompute()).debugAllPaths()}async precompute(){const t=new Map,e=(e,n)=>{const r=t.get(e);(!r||n.p>r.p)&&t.set(e,n)},n=new G({dir:[this.Vt],depth:0});for(const{dir:t,depth:r}of n){const o=await $(y(...t),{withFileTypes:!0,encoding:"utf-8"}),i=new Set(o.map(t=>this.re(t.name)));for(const s of o){const o=this.re(s.name);if(!this.ae(o))continue;const a=[...t,s.name];if(s.isDirectory())r<this.Zt&&n.push({dir:a,depth:r+1}),e(this.re(a.slice(1).join("/")),dn);else if(s.isFile()){const n={file:y(...a),dir:y(...t),basename:o,siblings:i},r=this.te.indexOf(o);if(-1!==r&&(e(this.re(t.slice(1).join("/")),{...n,p:this.te.length+1-r}),!this.Qt&&!this.ne.has(o)))continue;const c=this.re(a.slice(1).join("/"));for(let t=0;t<this.ee.length;++t){const r=this.ee[t];s.name.endsWith(r)&&e(c.substring(0,c.length-r.length),{...n,p:-t})}}}}return{find:async(e,n={},r)=>{const o=t.get(this.re(e.join("/")));if(!o?.file)return r?.push(`${JSON.stringify(e.join("/"))} not found in static file paths`),null;if(!this.se)return wn({canonicalPath:o.file,negotiatedPath:o.file,headers:{}},r);for(const t of this.se.options(o.basename,n)){if(!o.siblings.has(this.re(t.filename)))continue;const e=await wn({canonicalPath:o.file,negotiatedPath:y(o.dir,t.filename),headers:t.headers},r);if(e)return e}return null},debugAllPaths:()=>Promise.resolve(new Set([...t].filter(([t,e])=>e.file).map(([t])=>t)))}}}const dn={file:"",dir:"",basename:"",siblings:new Set,p:1};async function wn(t,e){const n=await k(t.negotiatedPath,c.O_RDONLY).catch(()=>null);if(!n)return e?.push(`failed to open ${JSON.stringify(t.negotiatedPath)}`),null;const r=()=>(n.close().catch(()=>{}),null),o=await n.stat().catch(r);return o?.isFile()?{handle:n,stats:o,...t}:(e?.push(`${JSON.stringify(t.negotiatedPath)} exists but is not a file`),r())}const pn=/*@__PURE__*/Fe(async t=>{const e=Tt(t);if(e.aborted)throw Nt;e.throwIfAborted();const n=await O(y(R(),"upload"));St(t,()=>S(n,{recursive:!0}));let r=0;const o=()=>{if(e.aborted)throw Nt;return y(n,(++r).toString(10).padStart(6,"0"))};return{dir:n,nextFile:o,save:async(t,{mode:n=384}={})=>{const r=o(),i=f(r,{mode:n});try{return await d(t,i,{signal:e}),{path:r,size:i.bytesWritten}}finally{i.close()}}}}),mn=(t,e)=>e instanceof Error&&"ERR_STREAM_PREMATURE_CLOSE"===e.code&&t.closed;function yn(t){const e=ut(t);if(!e.D)throw new TypeError("cannot call acceptBody from shouldUpgrade");if(e.C.signal.aborted)throw Nt;e.Ot&&(e.Ot=!1,e.D.H.writeContinue())}function gn(t){const e=ut(t);return!e.C.signal.aborted&&!e.Ot}function bn(t,{blockRequestHeaders:e=["connection","expect","host","keep-alive","proxy-authorization","transfer-encoding","upgrade","via"],requestHeaders:n=[],blockResponseHeaders:r=["connection","keep-alive","transfer-encoding"],responseHeaders:s=[],agent:a,...c}={}){const f=new URL(t);let u;"https:"===f.protocol?(a??=new P({keepAlive:!0,...c}),u=i):(a??=new o({keepAlive:!0,...c}),u=F);const l=f.pathname,h=l+(l.endsWith("/")?"":"/"),w="a://a"+h;return Lt((t,o)=>new Promise((i,c)=>{if(o.closed||!o.writable)return c(Nt);const p=Tt(t),m=t=>c(p.aborted?Nt:new ce(502,{cause:t})),y=new URL(w+t.url?.substring(1));if(!y.pathname.startsWith(h)&&y.pathname!==l)return c(new ce(400,{message:"directory traversal blocked"}));yn(t);let g={...t.headers};vn(g,e);for(const e of n)g=e(t,g);const b=u(f,{agent:a,path:y.pathname+y.search,method:t.method,headers:g,signal:p});b.once("error",m),b.once("response",e=>{if(o.closed||!o.writable)return c(Nt);if(!o.headersSent){let n={...e.headers};vn(n,r);for(const r of s)n=r(t,e,n);o.writeHead(e.statusCode??200,e.statusMessage,n)}d(e,o).then(i,t=>c(mn(o,t)?Nt:t))}),d(t,b).catch(m)}))}function vn(t,e){for(const e of $e(t.connection)??[])It(t,e.toLowerCase());for(const n of e)It(t,n)}function En({trustedProxyCount:t,trustedProxyAddresses:e,trustedHeaders:n}){const r=e?j(e):()=>!0,o=t??(e?Number.POSITIVE_INFINITY:0),i=new Set(n);return Fe(t=>{const e=e=>{if(i.has(e))return $e(t.headers[e])?.reverse()},n=e("forwarded"),s=e("x-forwarded-for"),a=e("x-forwarded-host"),c=e("x-forwarded-proto"),f=e("x-forwarded-protocol"),u=e("x-url-scheme"),l=e("via")?.map(t=>{const e=/^([^/ ]+\/)?([^/ ]+) (.+)$/.exec(t);return e?.[3]?H(e[3]):void 0}),h=[_n(t)];if(n)for(const t of n)try{const e=Oe(t);h.push({client:H(e.get("for")),server:H(e.get("by")),host:e.get("host"),proto:e.get("proto")})}catch{h.push({client:void 0,server:void 0,host:void 0,proto:void 0})}else if(s){const t=s.map(H),e=a??[],n=c??f??u??[];let r=h[0].client;for(let o=0;o<t.length;++o){const i=t[o];h.push({client:i,server:l?.[o]??(r?{...r,port:void 0}:void 0),host:e[o],proto:n[o]}),r=i}}else if(l)for(const t of l)h.push({client:void 0,server:t,host:void 0,proto:void 0});let d=Math.min(1+o,h.length);for(let t=0;t<d-1;++t)r(h[t].client)||(d=t+1);return Object.freeze({trusted:h.slice(0,d),untrusted:h.slice(d),outwardChain:h,edge:h[d-1]})})}const _n=t=>({client:{...H(t.socket.remoteAddress)??xn,port:t.socket.remotePort},server:{...H(t.socket.localAddress)??xn,port:t.socket.localPort},host:t.headers.host,proto:t.socket.encrypted?"https":"http"}),xn={family:"alias",address:"_disconnected",port:void 0};function Sn(t,e){return delete e.forwarded,delete e["x-forwarded-for"],delete e["x-forwarded-host"],delete e["x-forwarded-proto"],delete e["x-forwarded-protocol"],delete e["x-url-scheme"],e}function Tn(t,e){const n=Sn(0,e);return n.forwarded=kn([_n(t)]),n}const $n=(t,{onlyTrusted:e=!1}={})=>(n,r)=>{const o=Sn(0,r),i=t(n);return o.forwarded=kn([...e?i.trusted:i.outwardChain].reverse()),o};function Nn(t,e){let n=t.headers.forwarded;const r=kn([_n(t)]);n?n+=", "+r:n=r;const o=Sn(0,e);return o.forwarded=n,o}function kn(t){return t.filter(t=>t.server||t.client).map(t=>Object.entries({for:t.client?.address,by:t.server?.address,host:t.host,proto:t.proto}).filter(([t,e])=>e).map(([t,e])=>e&&/[^a-zA-Z0-9._]/.test(e)?`${t}="${e.replaceAll("\\","\\\\").replaceAll('"','\\"').replaceAll(",","-")}"`:`${t}=${e}`).join("; ")).join(", ")}class On{constructor(t,{fatal:e=!1}={}){this.ce=t,this.fe=e,this.ue=new Uint8Array(4),this.le=new DataView(this.ue.buffer),this.he=0}decode(t,{stream:e=!1}={}){const n=t.byteLength,r=[];let o=0;if(this.he>0){if(o=4-this.he,n<o)return this.ue.set(t,this.he),this.he+=n,"";this.ue.set(t.subarray(0,o),this.he),r.push(this.le.getUint32(0,this.ce)),this.he=0}const i=new DataView(t.buffer,t.byteOffset,t.byteLength);let s=o;for(const t=n-3;s<t;s+=4)r.push(i.getUint32(s,this.ce));if(e?(s<n&&this.ue.set(t.subarray(s)),this.he=n-s):(this.he=0,s<n&&(this.fe?lt(new TypeError("The encoded data was not valid for encoding utf-32"),"ERR_ENCODING_INVALID_ENCODED_DATA"):r.push(65533))),r.length>0){try{return String.fromCodePoint(...r)}catch{this.fe&&lt(new TypeError("The encoded data was not valid for encoding utf-32"),"ERR_ENCODING_INVALID_ENCODED_DATA")}for(let t=0;t<r.length;++t)r[t]>1114111&&(r[t]=65533);return String.fromCodePoint(...r)}return""}}class Rn extends C{constructor(t){super({transform(e,n){try{const r=t.decode(e,{stream:!0});r&&n.enqueue(r)}catch(t){n.error(t)}},flush(e){try{const n=t.decode(K);n&&e.enqueue(n)}catch(t){e.error(t)}}})}}const An=new Map;function Pn(t,e){An.set(t.toLowerCase(),e)}function Fn(){Pn("utf-32be",{decoder:t=>new On(!1,t)}),Pn("utf-32le",{decoder:t=>new On(!0,t)})}function Cn(t,e={}){const n=An.get(t.toLowerCase());if(n)return n.decoder(e);try{return new TextDecoder(t,e)}catch{throw new ce(415,{body:`unsupported charset: ${t}`})}}function Un(t,e={}){const n=An.get(t.toLowerCase());if(n)return n.decoderStream?n.decoderStream(e):new Rn(n.decoder(e));try{return new U(t,e)}catch{throw new ce(415,{body:`unsupported charset: ${t}`})}}const Mn=["utf-32be",null,"utf-16be","utf-16be","utf-32le","utf-16le",null,"utf-8"];function Bn(t,e,n){const r=Re(t.headers["if-modified-since"]),o=$e(t.headers["if-none-match"]);if(o){if(Dn(e,n,o))return!1}else if(r&&(n.mtimeMs/1e3|0)<=r)return!1;return!0}function In(t,e,n){let r=!0;const o=Se(t);return o.etag&&(r&&=Dn(e,n,o.etag)),o.modifiedSeconds&&(r&&=(n.mtimeMs/1e3|0)===o.modifiedSeconds),r}function Dn(t,e,n){if(n.includes("*"))return!0;const r=t.getHeader("etag");if("string"==typeof r){if(n.includes(r))return!0;if(r.startsWith('W/"'))return!1}return!!n.some(t=>t.startsWith('W/"'))&&n.includes(qe(t.getHeader("content-encoding"),e))}class Hn extends C{constructor(t,e){super({transform(r,o){n+=r.byteLength,n>t?o.error(e):o.enqueue(r)}});let n=0}}function jn(t,{maxContentBytes:e=Number.POSITIVE_INFINITY,maxNetworkBytes:n=e,maxEncodingSteps:r=1}={}){const o=Ne(t.headers["content-length"]);if(void 0!==o&&o>n)throw new ce(413);const i=$e(t.headers["content-encoding"])??[];if(i.length>r)throw new ce(415,{body:"too many content-encoding stages"});yn(t);let s=I.toWeb(t);void 0===o&&Number.isFinite(n)&&(s=s.pipeThrough(new Hn(n,new ce(413))));for(const t of i.reverse())s=s.pipeThrough(Ln(t));return Number.isFinite(e)&&(s=s.pipeThrough(new Hn(e,new ce(413,{body:"decoded content too large"})))),s}function qn(t,e={}){const n=jn(t,e),r=xe(t)??e.defaultCharset??"utf-8";return n.pipeThrough(Un(r,e))}async function zn(t,e={}){const n=[];for await(const r of qn(t,e))n.push(r);return n.join("")}async function Jn(t,e={}){const n=await(async(t,e)=>{const n=t.getReader(),r=new Uint8Array(3);let o=0,i=null;for(;;){const t=await n.read(),e=3-o;if(t.done){0===o?(r[0]=1,r[1]=1):1===o&&(r[1]=r[0]),r[2]=r[0],i=null;break}if(i=t.value,i.byteLength>=e){r.set(i.subarray(0,e),o);break}r.set(i,o),o+=i.byteLength}const s=Mn[(r[0]?4:0)|(r[1]?2:0)|(r[2]?1:0)];if(!s)throw n.cancel(),new ce(415,{body:"invalid JSON encoding"});const a=Un(s,e),c=a.writable.getWriter();return o&&c.write(r.subarray(0,o)),i&&c.write(i),n.releaseLock(),c.releaseLock(),t.pipeThrough(a)})(jn(t,e),e),r=[];for await(const t of n)r.push(t);return JSON.parse(r.join(""))}function Ln(t){switch(t.toLowerCase()){case"gzip":case"x-gzip":return new M("gzip");case"deflate":return new M("deflate");case"br":try{return new M("brotli")}catch{return D.toWeb(w.createBrotliDecompress())}case"zstd":try{return D.toWeb(w.createZstdDecompress())}catch{throw new ce(415,{body:"unsupported content encoding"})}default:throw new ce(415,{body:"unknown content encoding"})}}function Gn(t){if(!t)return null;const[e,n]=Ee(t,";"),r=new Map;if(n){const t=/\s*([!#-'*+\-.0-:>-Z^-z|~]+)=(?:([!#-'*+\-.0-:>-Z^-z|~]+)|"((?:[^\x00-\x08\x0a-\x1f"\\\x7f]|\\.)*)")\s*(;|$)/gy;for(;t.lastIndex!==n.length;){const e=t.exec(n);if(!e)return null;const o=e[1].toLowerCase(),i=e[2]??e[3]?.replaceAll(/\\(.)/g,"$1")??"";r.has(o)||r.set(o,i)}}return{mime:e.trim().toLowerCase(),params:r}}function Wn(t,e,n,r){const o=t.byteLength;for(;e<o;){for(;e<o;++e){const n=t[e];if(32!==n&&9!==n)break}if(e===o)break;if(59!==t[e++])return!1;for(;e<o;++e){const n=t[e];if(32!==n&&9!==n)break}if(e===o)return!1;const i=e;for(;e<o;++e){const n=t[e];if(!Vn[n]){if(61===n)break;return!1}}if(e===o)return!1;const s=t.latin1Slice(i,e).toLowerCase();if("*"===s[s.length-1]){const r=++e;for(;e<o;++e){const n=t[e];if(!Xn[n]){if(39!==n)return!1;break}}if(e===o)return!1;const i=Cn(t.latin1Slice(r,e));for(++e;e<o&&39!==t[e];++e);if(e===o)return!1;if(++e===o)return!1;let a=e;const c=[];for(;e<o;++e){const n=t[e];if(1!==Zn[n]){if(37===n){let n,r;if(e+2<o&&16!==(n=Kn[t[e+1]])&&16!==(r=Kn[t[e+2]])){const o=(n<<4)+r;e>a&&c.push(i.decode(t.subarray(a,e),{stream:!0})),c.push(i.decode(Buffer.from([o]),{stream:!0})),a=(e+=2)+1;continue}return!1}break}}c.push(i.decode(t.subarray(a,e)));const f=c.join("");n.has(s)||n.set(s,f);continue}if(++e===o)return!1;if(34===t[e]){let i=++e,a=!1;const c=[];for(;e<o;++e){const n=t[e];if(92!==n){if(34===n){if(a){i=e,a=!1;continue}c.push(r.decode(t.subarray(i,e)));break}if(a&&(i=e-1,a=!1),!Yn[n])return!1}else a?(i=e,a=!1):(c.push(r.decode(t.subarray(i,e),{stream:!0})),a=!0)}if(e===o)return!1;++e,n.has(s)||n.set(s,c.join(""));continue}let a=e;for(;e<o;++e){const n=t[e];if(!Vn[n]){if(e===a)return!1;break}}n.has(s)||n.set(s,r.decode(t.subarray(a,e)))}return!0}const Vn=/*@__PURE__*/(()=>{const t=new Uint8Array(256);return t.set([1,0,1,1,1,1,1,0,0,1,1,0,1,1,0,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,0,1],33),t})(),Zn=/*@__PURE__*/(()=>{const t=new Uint8Array(Vn);return t.set([0,1,0,0,0,0],37),t})(),Xn=/*@__PURE__*/(()=>{const t=new Uint8Array(Vn);return t.set([0,0,0,0,1,0,1,0],39),t.set([1,0,1,1],123),t})(),Yn=/*@__PURE__*/(()=>{const t=new Uint8Array(256);return t.fill(1,32,256),t[9]=1,t[34]=0,t[92]=0,t[127]=0,t})(),Kn=/*@__PURE__*/(()=>{const t=new Uint8Array(256).fill(16);for(let e=0;e<10;++e)t[48+e]=e;for(let e=0;e<6;++e)t[65+e]=e+10,t[97+e]=e+10;return t})();class Qn{constructor(t,e,n){const r=t.byteLength;if(!r||r>65535)throw new RangeError("invalid needle");this.de=t,this.we=e,this.pe=n,this.me=null,this.ye=0,this.ge=null}push(t){let e=0;const n=t.byteLength,r=this.de,o=r.byteLength-1,i=n-o;let s=-this.ye;if(this.ye){const a=this.ge,c=this.me,f=r[o];if(s<i){const n=t[s+o];n!==f||t.compare(r,-s,o,0,s+o)?s+=a[n]:(this.pe(),this.ye=0,e=s+=o+1)}const u=i<0?i:0;for(;s<u;){const n=t[s+o];if(n===f&&!c.compare(r,0,-s,this.ye+s,this.ye)&&!t.compare(r,-s,o,0,s+o)){this.we(c,0,this.ye+s,!1),this.pe(),this.ye=0,e=s+=o+1;break}s+=a[n]}const l=this.ye;if(l>0){const e=r[0];for(;s<0;){const o=c.subarray(0,l).indexOf(e,l+s);if(-1===o){s=0;break}const i=l-o;if(!c.compare(r,1,i,o+1,l)&&!t.compare(r,i,i+n))return o&&(this.we(c,0,o,!1),c.copy(c,0,o,i)),c.set(t,i),void(this.ye+=n-o);s=o+1-l}this.we(c,0,l,!1),this.ye=0}}for(;s<i;){const n=t.indexOf(r,s);if(-1!==n){if(n>e&&this.we(t,e,n,!0),this.pe(),n===i+1)return;e=s=n+o+1}else s=i}const a=r[0];for(;s<n;){const i=t.indexOf(a,s);if(-1===i)return void this.we(t,e,n,!0);if(!t.compare(r,1,n-i,i+1)){if(!this.me){this.me=Buffer.allocUnsafe(o),this.ge=new Uint16Array(256).fill(o+1);for(let t=0;t<o;++t)this.ge[r[t]]=o-t}return t.copy(this.me,0,i),this.ye=n-i,void(i>e&&this.we(t,e,i,!0))}s=i+1}n>e&&this.we(t,e,n,!0)}destroy(){const t=this.ye;t&&this.me&&this.we(this.me,0,t,!1),this.ye=0}}class tr{constructor(t){this.we=t,this.reset()}reset(){this.G=[],this.be=16384,this.m=0,this.ve="",this.Ee=void 0}push(t,e,n){let r=e,o=e;const i=Math.min(n,e+this.be);for(;o<i;)switch(this.m){case 0:for(;o<i&&Vn[t[o]];++o);if(o>r&&(this.ve+=t.latin1Slice(r,o)),o<i){if(58!==t[o])return-1;if(!this.ve)return-1;++o,this.Ee=or.get(this.ve.toLowerCase()),this.ve="",this.m=1}break;case 1:for(;o<i;++o){const e=t[o];if(32!==e&&9!==e){r=o,this.m=2;break}}break;case 2:for(;o<i;++o){const e=t[o];if(e<32||127===e){if(13!==e)return-1;this.m=3;break}}this.Ee&&(this.ve+=t.latin1Slice(r,o)),++o;break;case 3:if(10!==t[o++])return-1;this.m=4;break;case 4:{const e=t[o];if(32===e||9===e)r=o,this.m=2;else{if(this.Ee){const t=this.Ee._e;void 0===this.G[t]?this.G[t]=this.ve:this.Ee.xe&&(this.G[t]+=","+this.ve)}13===e?(this.m=5,++o):(r=o,this.m=0,this.ve="",this.Ee=void 0)}break}case 5:{if(10!==t[o++])return-1;const e=this.G;return this.reset(),this.we(e),o}}return i<n?-1:(this.be-=i-e,i)}}const er=0,nr=1,rr=2,or=new Map([["content-type",{_e:er,xe:!1}],["content-disposition",{_e:nr,xe:!1}],["content-transfer-encoding",{_e:rr,xe:!0}]]);function ir(t){const e=this.Se;e&&(this.Se=void 0,e())}const sr=/*@__PURE__*/Buffer.from("\r\n"),ar=()=>{},cr=37,fr=43,ur=/*@__PURE__*/new Uint8Array(256);function lr(t,e={}){const n=t["content-type"];if(!n)throw new ce(400,{body:"missing content-type"});const r=Gn(n);if(!r)throw new ce(400,{body:"malformed content-type"});const o=Ne(t["content-length"]);if(void 0!==o&&void 0!==e.maxNetworkBytes&&o>e.maxNetworkBytes)throw new ce(413,{body:"content too large"});if("application/x-www-form-urlencoded"===r.mime)return(({defCharset:t="utf-8",maxNetworkBytes:e=Number.POSITIVE_INFINITY,maxContentBytes:n=e,maxFieldSize:r=1048576,maxFieldNameSize:o=100,maxFields:i=Number.POSITIVE_INFINITY},s)=>{const a=s.get("charset")??t,c=/^utf-?8$/i.test(a)?1:/^(latin-?1|iso[\-_]?8859-?1|(us-)?ascii)$/i.test(a)?2:0,f=Cn(a);return(t,s)=>new Promise((u,l)=>{let h=e,d=n,w=i,p=!0,m="",y=Math.min(o,d),g=0,b="",v=-2;const E=()=>{const t=!c||1===c&&8&g?f.decode(Buffer.from(m,"latin1")):m;if(p){if(y<0)return S(new ce(413,{body:`field name ${JSON.stringify(t)}... too long`})),!1;t&&s({name:t,type:"string",value:"",encoding:a,mimeType:"text/plain"})}else{if(y<0)return S(new ce(413,{body:`value for ${JSON.stringify(b)} too long`})),!1;s({name:b,type:"string",value:t,encoding:a,mimeType:"text/plain"})}return!0},_=t=>{if(!t.byteLength)return;if((h-=t.byteLength)<0)return S(new ce(413,{body:"content too large"}));if(!w)return S(new ce(413,{body:"too many fields"}));const e=t.byteLength;let n=0,i=v;if(-2!==i){if(-1===i){if(16===(i=Kn[t[n++]]))return S(new ce(400,{body:"malformed urlencoded form"}));if(g|=i,n===e)return void(v=i)}const r=Kn[t[n++]];if(16===r)return S(new ce(400,{body:"malformed urlencoded form"}));if(m+=String.fromCharCode((i<<4)+r),v=-2,n===e)return}for(ur[37]=1,ur[38]=1,ur[43]=1,ur[61]=p?1:0;;){const i=n;for(;n<e&&!ur[t[n]];++n);if(n>i&&y>=0&&((y-=n-i)<0?m+=t.latin1Slice(i,n+y):(d-=n-i,m+=t.latin1Slice(i,n))),n===e)return;switch(t[n++]){case cr:for(;;){if(--y<0){ur[37]=0,ur[43]=0;break}if(--d,n===e){v=-1;break}const r=Kn[t[n++]];if(16===r)return S(new ce(400,{body:"malformed urlencoded form"}));if(g|=r,n===e)return void(v=r);const o=Kn[t[n++]];if(16===o)return S(new ce(400,{body:"malformed urlencoded form"}));if(m+=String.fromCharCode((r<<4)+o),n===e)return;if(t[n]!==cr)break;n++}break;case 38:if(!E())return;if(b="",p=!0,ur[61]=1,ur[37]=1,ur[43]=1,m="",y=Math.min(o,d),g=0,! --w)return S(new ce(413,{body:"too many fields"}));break;case fr:--y<0?(ur[37]=0,ur[43]=0):(--d,m+=" ");break;case 61:if(b=!c||1===c&&8&g?f.decode(Buffer.from(m,"latin1")):m,y<0)return S(new ce(413,{body:`field name ${JSON.stringify(b)}... too long`}));p=!1,ur[61]=0,ur[37]=1,ur[43]=1,m="",g=0,y=Math.min(r,d)}if(n===e)return}},x=()=>{if(-2!==v)return S(new ce(400,{body:"malformed urlencoded form"}));E()&&(t.off("data",_),t.off("end",x),t.off("error",S),u())},S=e=>{t.off("data",_),t.off("end",x),t.off("error",S),l(e)};t.on("data",_),t.once("end",x),t.once("error",S)})})(e,r.params);if("multipart/form-data"===r.mime&&!e.blockMultipart)return function({preservePath:t,fileHwm:e,defParamCharset:n="utf-8",defCharset:r="utf-8",maxNetworkBytes:o=Number.POSITIVE_INFINITY,maxContentBytes:i=o,maxFieldSize:s=1048576,maxFileSize:a=Number.POSITIVE_INFINITY,maxTotalFileSize:c=Number.POSITIVE_INFINITY,maxFieldNameSize:f=100,maxParts:u=Number.POSITIVE_INFINITY,maxFields:l=Number.POSITIVE_INFINITY,maxFiles:h=Number.POSITIVE_INFINITY},d){const w=d.get("boundary");if(!w)throw new ce(400,{body:"multipart boundary not found"});if(w.length>70)throw new ce(400,{body:"multipart boundary too long"});const p=Cn(n),m={autoDestroy:!0,emitClose:!0,highWaterMark:e,read:ir};return(e,n)=>new Promise((d,y)=>{let g,b,v,E,_,x,S,T=5,$=o,N=i,k=c,O=u,R=l,A=h,P=0,F=!1,C=0,U="";const M=new tr(e=>{const o=e[nr];if(!o)return void(T=5);const i=((t,e)=>{if(!t.byteLength)return null;const n=new Map;let r=0;for(;r<t.byteLength;++r)if(!Vn[t[r]]){if(!Wn(t,r,n,e))return null;break}return{type:t.latin1Slice(0,r).toLowerCase(),params:n}})(Buffer.from(o,"latin1"),p);if("form-data"!==i?.type)return void(T=5);if(v=i.params.get("name"),void 0===v)return q(new ce(400,{body:"missing field name"}));const c=Buffer.byteLength(v,"utf-8"),u=Math.min(f,N);if(c>u)return q(new ce(413,{body:`field name ${JSON.stringify(v.substring(0,u))}... too long`}));N-=c,E=i.params.get("filename*")??i.params.get("filename");const l=Gn(e[er]);if(_=l?.mime??"text/plain",x=e[rr]?.toLowerCase()??"7bit","application/octet-stream"===_||void 0!==E){if(!A--)return q(new ce(413,{body:"too many files"}));if(!E)return void(T=5);t||(E=(t=>{for(let e=t.length;e-- >0;)if("/"===t[e]||"\\"===t[e]){t=t.slice(e+1);break}return".."===t||"."===t?"":t})(E));const e=new I(m);e.once("error",ar),e.once("close",()=>{e.Se?.(),e.off("error",ar),! --C&&b&&process.nextTick(b)}),g=e,++C,P=Math.min(a,k,N,$),n({name:v,type:"file",value:e,filename:E,encoding:x,mimeType:_,sizeLimit:P}),T=4}else{if(!R--)return q(new ce(413,{body:"too many fields"}));T=4,P=Math.min(s,N,$);const t=l?.params.get("charset")?.toLowerCase()??r;S=Cn(t)}}),B=Buffer.from(`\r\n--${w}`,"latin1"),D=new Qn(B,(t,n,r,o)=>{if(T<=2){if(0===T){if(13===t[n])T=1;else{if(45!==t[n])return void(T=5);T=2}if(++n===r)return}if(1!==T)return 45!==t[n]?void(T=5):(T=6,e.off("data",H),void e.resume());if(10!==t[n++])return void(T=5);if(!O--)return q(new ce(413,{body:"too many parts"}));if(T=3,n===r)return}if(3===T){if(-1===(n=M.push(t,n,r)))return q(new ce(400,{body:"malformed part header"}));if(n===r)return}if(4===T){const e=Math.min(r,n+P);if(P-=r-n,N-=r-n,g){if(k-=r-n,e>n){let r;o?r=t.subarray(n,e):(r=Buffer.allocUnsafe(e-n),t.copy(r,0,n,e)),g.push(r)||(F=!0)}if(P<0)return q(new ce(413,{body:`uploaded file for ${JSON.stringify(v)}: ${JSON.stringify(E)} too large`}))}else{if(P<0)return q(new ce(413,{body:`value for ${JSON.stringify(v)} too long`}));U+=t.latin1Slice(n,e)}}},()=>{if(3===T)return q(new ce(400,{body:"unexpected end of headers"}));if(4===T)if(g)g.push(null),g=void 0,F=!1;else{const t=Buffer.from(U,"latin1");U="",n({name:v,type:"string",value:S.decode(t),encoding:x,mimeType:_})}T<6&&(T=0)});D.push(sr);const H=t=>{if(($-=t.byteLength)<0)return q(new ce(413,{body:"content too large"}));F=!1,D.push(t),g&&F&&(e.pause(),g.Se=()=>e.resume())},j=()=>{if(7!==T){if(6!==T&&(D.destroy(),6!==T))return q(new ce(400,{body:"unexpected end of form"}));e.off("data",H),e.off("end",j),b=()=>{e.off("error",q),d()},C||b()}},q=t=>{7!==T&&(T=7,e.off("data",H),e.off("end",j),e.off("error",q),g?.destroy(t),g=void 0,y(t))};e.on("data",H),e.once("end",j),e.once("error",q)})}(e,r.params);throw new ce(415)}function hr(t,{closeAfterErrorDelay:e=500,...n}={}){L(e,"closeAfterErrorDelay",!0);const r=()=>{if(e>=0&&t.readable){const n=setTimeout(()=>t.socket.destroy(),e);t.once("end",()=>clearTimeout(n))}};try{const e=lr(t.headers,n);yn(t);const o=new W;return e(t,t=>o.push(t)).then(()=>o.close("complete"),e=>{o.fail(t.readableAborted?Nt:e),t.resume(),r()}),o}catch(e){throw gn(t)&&(t.resume(),r()),e}}async function dr(t,e={}){const n=new FormData,r=new Map;for await(const o of hr(t,e))if("file"===o.type){const i=o.value;let s=await(e.preCheckFile?.({fieldName:o.name,filename:o.filename,encoding:o.encoding,mimeType:o.mimeType,maxBytes:o.sizeLimit}));const a=t=>{if("function"==typeof s){const e=s;return s=void 0,e({actualBytes:t})}};St(t,()=>a(0));const c=await pn(t),f=await c.save(i,{mode:384});await a(f.size);const l=new File([await u(f.path)],o.filename,{type:o.mimeType});r.set(l,f.path),n.append(o.name,l)}else{let t=o.value;e.trimAllValues&&(t=t.trim()),n.append(o.name,t)}return Object.assign(n,{getTempFilePath(t){const e=r.get(t);if(!e)throw new RangeError("unknown file");return e},getBoolean(t){const e=n.get(t);return null===e?null:"true"===e||"on"===e},getString(t){const e=n.get(t);return"string"==typeof e?e:null},getAllStrings:t=>n.getAll(t).filter(t=>"string"==typeof t),getFile(t){const e=n.get(t);return"string"==typeof e?null:e},getAllFiles:t=>n.getAll(t).filter(t=>"string"!=typeof t)})}const wr="win32"===/*@__PURE__*/A();function pr(t,{rejectPotentiallyUnsafe:e=!0}={}){let n=[];const r=ct(t);if(r){if("/"===r.F)return[];n=r.F.split("/")}else{const e=Q(t).pathname;if("/"===e)return[];n=e.split("/").map(decodeURIComponent)}if(""!==n[0])throw new ce(400,{body:"invalid path"});if(n.shift(),e){const t=wr?yr:mr;if(n.some(e=>t.test(e)||e.includes(v)))throw new ce(400,{body:"invalid path"});if(n.slice(0,n.length-1).includes(""))throw new ce(400,{body:"invalid path"})}return n}const mr=/[\x00-\x1F\x7F/]|^(\.\.?|~)$/,yr=/[\x00-\x1F"*/:<>?\\|\x7F]|^[\s.]*$|^(CON|PRN|AUX|NUL|(COM|LPT)[\d\xB9\xB2\xB3])(\.|$)/i,gr=t=>new Promise(e=>{const n=()=>{t.cork(),e()};t instanceof s?t.write(K,n):t.once("drain",n),t.uncork()});async function br(t,e,{delimiter:n=",",newline:r="\n",quote:o='"',encoding:i="utf-8",headerRow:a,end:c=!0}={}){"string"==typeof n&&(n=Buffer.from(n,i)),"string"==typeof r&&(r=Buffer.from(r,i));const f="string"==typeof o?Buffer.from(o,i):o,u=o+o,l=e=>{if(!e)return!0;const n=e.includes(o);return!n&&vr.test(e)?t.write(e,i):(t.write(f),n?t.write(e.replaceAll(o,u),i):t.write(e,i),t.write(f))};t instanceof s&&!t.headersSent&&!t.hasHeader("content-type")&&t.setHeader("content-type","text/csv; charset="+i+(a?"; header=present":!1===a?"; header=absent":"")),t.cork();try{t.write(K);for await(const o of e){if(t.writableAborted)break;let e=0;if(Symbol.iterator in o)for(const r of o)e&&t.write(n),l(r)||await gr(t),++e;else for await(const r of o)e&&t.write(n),l(r)||await gr(t),++e;t.write(r)||await gr(t)}}finally{t.uncork()}c&&t.end()}const vr=/^[^"':;,\\\r\n\t ]*$/i;function Er(t){if(!t||"object"!=typeof t)return!1;const e=t;return"number"==typeof e.fd&&"function"==typeof e.stat&&"function"==typeof e.createReadStream}class _r{constructor(t){(t=>"Te"in t&&"function"==typeof t.pipe)(t)&&(t=I.toWeb(t)),this.wt=t.getReader(),this.$e=null,this.Ne=0,this.m=0}getRange(t,e){if(e<t)throw new RangeError("invalid range");if(t<this.Ne)throw new RangeError("non-sequential range");if(this.m)throw new TypeError("previous range still active");let n=e-t+1,r=t-this.Ne;this.Ne=e+1,this.m=1;const o=this,i=(t,e)=>{const o=t.byteLength;o<=r?r-=o:o>r+n?(this.$e=t.subarray(r+n),e.enqueue(t.subarray(r,r+n)),n=0):r>0?(e.enqueue(t.subarray(r)),n-=o-r,r=0):(e.enqueue(t),n-=o)};return new B({start(t){if(o.$e){const e=o.$e;o.$e=null,i(e,t)}},async pull(t){if(n<=0)return o.m=0,void t.close();const e=await o.wt.read();e.done?t.error(new RangeError("range exceeds content")):"string"==typeof e.value?i(Buffer.from(e.value,"utf-8"),t):e.value instanceof Uint8Array?i(e.value,t):t.error(new TypeError("invalid stream type: must contain bytes or UTF-8 text"))}})}async close(){await this.wt.cancel(),this.wt.releaseLock()}}function xr(t,{forceSequential:e=!1,mergeOverlapDistance:n=100}={}){const r=[];if(n>=0)for(const e of t.ranges){let t=null,o=0;for(let i=0;i<r.length;++i){const s=r[i];e.end>=s.start-n-1&&s.end>=e.start-n-1?t?(++o,t.start=Math.min(t.start,s.start),t.end=Math.max(t.end,s.end)):(t=s,t.start=Math.min(t.start,e.start),t.end=Math.max(t.end,e.end)):o>0&&(r[i-o]=s)}t?r.length-=o:r.push({...e})}else r.push(...t.ranges);if(e)for(let t=0;t<r.length-1;++t)if(r[t].start>r[t+1].start){r.sort((t,e)=>t.start-e.start);break}return{ranges:r,totalSize:t.totalSize}}async function Sr(t,e,n,r){if(e.closed||!e.writable)throw Nt;if("string"==typeof n||Er(n)||(r=xr(r,{mergeOverlapDistance:0,forceSequential:!0})),1===r.ranges.length){const o=r.ranges[0];if(e.setHeader("content-length",o.end-o.start+1),e.setHeader("content-range",`bytes ${o.start}-${o.end}/${r.totalSize??"*"}`),e.writeHead(206),"HEAD"===t.method)return void e.end();const i=await Tr(n);try{if(e.closed||!e.writable)throw Nt;await d(i.ke(o.start,o.end),e)}catch(t){throw mn(e,t)?Nt:t}finally{i.Oe&&await i.Oe()}return}const o=e.getHeader("content-type"),i=h()+h()+"ABCDEFGHIJKLMNOPQRSTUVWXYZ";e.setHeader("content-type",`multipart/byteranges; boundary=${i}`);const s=r.ranges.map(t=>({i:[`--${i}`,...dt({"content-type":o,"content-range":`bytes ${t.start}-${t.end}/${r.totalSize??"*"}`}),"",""].join("\r\n"),Re:t})),a=`--${i}--`;let c=a.length;for(const{i:t,Re:e}of s)c+=t.length+e.end-e.start+1+2;if(e.setHeader("content-length",c),"HEAD"===t.method)return void e.end();let f="";const u=await Tr(n);try{for(const{i:t,Re:n}of s){if(e.closed||!e.writable)throw Nt;e.write(f+t,"ascii"),await d(u.ke(n.start,n.end),e,{end:!1}),f="\r\n"}e.end(f+a)}catch(t){throw mn(e,t)?Nt:t}finally{u.Oe&&await u.Oe()}}async function Tr(t){if("string"==typeof t){const e=await k(t,"r");return{ke:(t,n)=>e.createReadStream({start:t,end:n,autoClose:!1}),Oe:()=>e.close()}}if(Er(t))return{ke:(e,n)=>t.createReadStream({start:e,end:n,autoClose:!1})};{const e=new _r(t);return{ke:(t,n)=>e.getRange(t,n),Oe:()=>e.close()}}}async function $r(t,e,n,r=null,o){if(e.closed||!e.writable)throw Nt;if(!r&&("string"==typeof n?r=await T(n):Er(n)&&(r=await n.stat()),e.closed||!e.writable))throw Nt;if(r){if("GET"===t.method||"HEAD"===t.method){if(!Bn(t,e,r))return void e.writeHead(304).end();e.setHeader("accept-ranges","bytes");const i=Te(t,r.size,o);if(i&&In(t,e,r))return Sr(t,e,n,xr(i,o))}e.setHeader("content-length",r.size)}if(e.writeHead(e.statusCode,e.statusMessage),"HEAD"!==t.method){"string"==typeof n?n=a(n):Er(n)&&(n=n.createReadStream({start:0,autoClose:!1}));try{await d(n,e)}catch(t){throw mn(e,t)?Nt:t}}else e.end()}function Nr(t,e,{replacer:n,space:r,undefinedAsNull:o=!1,encoding:i="utf-8",end:a=!0}={}){const c=JSON.stringify(e,n,r??void 0)??(o?"null":void 0);t instanceof s&&!t.headersSent&&(t.hasHeader("content-type")||t.setHeader("content-type","application/json"),a&&t.setHeader("content-length",Buffer.byteLength(c,i))),a?t.end(c,i):c&&t.write(c,i)}async function kr(t,e,{replacer:n=null,space:r=null,undefinedAsNull:o=!1,encoding:i="utf-8",end:a=!0}={}){if(Array.isArray(n)){const t=new Set(n.map(t=>String(t)));n=function(e,n){return null===this||Array.isArray(this)||t.has(e)?n:void 0}}"number"==typeof r&&(r=" ".substring(0,r));const c={Ae:e=>t.write(e,i),Pe:()=>gr(t),Fe:n,Ce:r??""};if(t instanceof s&&!t.headersSent&&!t.hasHeader("content-type")&&t.setHeader("content-type","application/json"),e=Rr(null,"",e,c),Ar(e))o&&c.Ae("null");else{t.cork(),t.write(K);try{await Or(c,e,r?"\n":"")}finally{t.uncork()}}a&&t.end()}async function Or(t,e,n){const r=(r,o,i)=>{t.Ae(r);const s=n+t.Ce,a=t.Ce?": ":":";let c=!0;return{o:async(n,r)=>{const o=Rr(e,n,r,t);i&&Ar(o)||(c?c=!1:t.Ae(","),t.Ae(s),i&&(t.Ae(JSON.stringify(n))||await t.Pe(),t.Ae(a)),await Or(t,o,s))},Oe:()=>{c||t.Ae(n),t.Ae(o)}}};if(null===e||"object"!=typeof e||e instanceof String||e instanceof Number||e instanceof Boolean||e instanceof Function||e instanceof Symbol||e instanceof BigInt||Pr(e))t.Ae(JSON.stringify(e)??"null")||await t.Pe();else if(e instanceof I){t.Ae('"');for await(const n of e){if("string"!=typeof n)throw new TypeError("Readables must have an encoding");const e=JSON.stringify(n);t.Ae(e.substring(1,e.length-1))||await t.Pe()}t.Ae('"')}else if(e instanceof Map){const t=r("{","}",!0);for(const[n,r]of e)await t.o(n,r);t.Oe()}else if(Fr(e)){let t=0;const n=r("[","]",!1);for(const r of e)await n.o(String(t++),r);n.Oe()}else if(Cr(e)){let t=0;const n=r("[","]",!1);for await(const r of e)await n.o(String(t++),r);n.Oe()}else{const t=r("{","}",!0);for(const[n,r]of Object.entries(e))await t.o(n,r);t.Oe()}}function Rr(t,e,n,r){return r.Fe&&(n=r.Fe.call(t,e,n)),n&&"object"==typeof n&&"function"==typeof n.toJSON&&(n=n.toJSON(e)),n}const Ar=t=>void 0===t||"function"==typeof t||"symbol"==typeof t||t instanceof Function||t instanceof Symbol,Pr=t=>JSON.isRawJSON?.(t)??!1,Fr=t=>Symbol.iterator in t,Cr=t=>Symbol.asyncIterator in t;class Ur{constructor(t,e,{keepaliveInterval:n=15e3,softCloseReconnectDelay:r=500,softCloseReconnectStagger:o=2e3}={}){L(n,"keepaliveInterval",!0),this.Ue=e,this.Me=n,this.C=new AbortController,e.setHeader("content-type","text/event-stream"),e.setHeader("x-accel-buffering","no"),e.setHeader("cache-control","no-store"),e.writeHead(200),e.flushHeaders(),this.ping=this.ping.bind(this),this.Be(),t.once("close",()=>this.close()),mt(t,()=>this.close(r,o))}get signal(){return this.C.signal}get open(){return!this.C.signal.aborted}Be(){this.Me>0&&(this.Ie=setTimeout(this.ping,this.Me))}ping(){!this.C.signal.aborted&&this.Ue.writable&&(clearTimeout(this.Ie),this.Ue.write(":\n\n",()=>this.Be()))}send({event:t,id:e,data:n,reconnectDelay:r=-1}){return this.sendFields([["event",t],["id",e],["data",n],["retry",r>=0?String(0|r):void 0]])}async sendFields(t){let e;this.C.signal.throwIfAborted(),this.Ue.cork();try{let n=!1;for(const[e,r]of t){if(void 0===r)continue;const t=r.split(/(?<=\n)|(?<=\r)(?!\n)/g);for(let n of t)this.Ue.write(e)," "===n[0]?this.Ue.write(": "):this.Ue.write(":"),this.Ue.write(n);/[\r\n]$/.test(r)?(this.Ue.write(e),this.Ue.write(":\n")):this.Ue.write("\n"),n=!0}if(!n)return;clearTimeout(this.Ie),this.Ue.write("\n",()=>e())}finally{this.Ue.uncork()}await new Promise(t=>{e=t}),this.Be()}async close(t=0,e=0){if(this.C.signal.aborted){if(this.Ue.closed)return;return new Promise(t=>this.Ue.once("close",t))}this.Me=0,clearTimeout(this.Ie),this.C.abort(new Error("ServerSentEvents closed")),await new Promise(n=>{if(this.Ue.writable&&(t>0||e>0)){const r=t+Math.random()*e;this.Ue.end(`retry:${0|r}\n\n`,n)}else this.Ue.end(n)})}}const Mr=async(t,{mode:e="dynamic",fallback:n,verbose:r,callback:o=Br,...i}={})=>{const s=await hn.build(E(process.cwd(),t),i);let a=null;const c=n?.statusCode??200;if(n){let t=n.filePath;t.startsWith("/")&&(t=t.substring(1)),a=s.toNormalisedPath(t.split("/"))}const f="dynamic"===e?{}:{rejectPotentiallyUnsafe:!1},u="dynamic"===e?s:await s.precompute();return{handleRequest:async(t,e)=>{if("GET"!==t.method&&"HEAD"!==t.method)return kt;let n=!1;const i=pr(t,f),s=[];let l=await u.find(i,t.headers,r?s:void 0);if(!l){if(!a)return r&&fn(t,new Error(s.join(", ")),"serving static content"),kt;if(n=!0,l=await u.find(a,t.headers,s),!l)throw new ce(500,{message:`failed to find fallback file: ${s.join(", ")}`})}try{n&&(e.statusCode=c);const r=l.headers["content-type"]??nn(m(l.canonicalPath));e.setHeader("content-type",r);const i=l.headers["content-language"];i&&e.setHeader("content-language",i);const s=l.headers["content-encoding"];s&&"identity"!==s&&e.setHeader("content-encoding",s);const a=l.headers.vary;if(a){const t=e.getHeader("vary")??"";e.setHeader("vary",(t?t+", ":"")+a)}await o(t,e,l,n),await $r(t,e,l.handle,l.stats)}finally{l.handle.close().catch(()=>{})}}}};function Br(t,e,n){e.setHeader("etag",qe(e.getHeader("content-encoding"),n.stats)),e.setHeader("last-modified",n.stats.mtime.toUTCString())}class Ir extends Error{constructor(t,{message:e,closeReason:n,...r}={}){super(e,r),this.closeCode=0|t,this.closeReason=n??"",this.name=`WebSocketError(${this.closeCode} ${this.closeReason})`}static NORMAL_CLOSURE=1e3;static GOING_AWAY=1001;static UNSUPPORTED_DATA=1003;static POLICY_VIOLATION=1008;static MESSAGE_TOO_BIG=1009;static INTERNAL_SERVER_ERROR=1011;static SERVICE_RESTART=1012;static TRY_AGAIN_LATER=1013;static BAD_GATEWAY=1014}function Dr(t,{softCloseStatusCode:e=Ir.GOING_AWAY,...n}={}){const r=(r,o,i)=>new Promise((s,a)=>{const c=new t({...n,noServer:!0,clientTracking:!1});c.once("wsClientError",a),c.handleUpgrade(r,o,i,t=>{c.off("wsClientError",a),i=K,s({return:t,onError:e=>{const n=V(e,Ir);if(n)return void t.close(n.closeCode,n.closeReason);const r=V(e,ce)??new ce(500),o=r.statusCode>=500?Ir.INTERNAL_SERVER_ERROR:4e3+r.statusCode;t.close(o,r.statusMessage)},softCloseHandler:n=>t.close(e,n)})})});return t=>At(t,r)}class Hr{constructor(t,e){this.data=t,this.isBinary=e}get text(){if(this.isBinary)throw new Ir(Ir.UNSUPPORTED_DATA,{closeReason:"expected text"});return this.data.toString("utf-8")}get binary(){if(!this.isBinary)throw new Ir(Ir.UNSUPPORTED_DATA,{closeReason:"expected binary"});return this.data}}class jr{constructor(t,{limit:e=-1,signal:n}={}){this.De=new W;const r=e=>{t.off("message",i),t.off("close",o),this.De.close(new Error(e))},o=()=>r("connection closed"),i=(t,n)=>{void 0!==n?this.De.push(new Hr(t,n)):"string"==typeof t?this.De.push(new Hr(Buffer.from(t,"utf-8"),!1)):this.De.push(new Hr(t,!0)),e>0&&0===--e&&this.detach()};this.detach=()=>{},n?.aborted?this.De.close(n.reason):2===t.readyState||3===t.readyState?this.De.close(new Error("connection closed")):(t.on("message",i),t.on("close",o),n?.addEventListener("abort",()=>r("signal aborted")),this.detach=()=>r("WebSocket listener detached"))}next(t){return this.De.shift(t)}[Symbol.asyncIterator](){return this.De[Symbol.asyncIterator]()}}function qr(t,{timeout:e,signal:n}={}){const r=new jr(t,{limit:1,signal:n});return r.next(e).finally(()=>r.detach())}function zr(t){const e=ut(t);return"GET"===t.method&&(e.I?.has("websocket")??!1)}const Jr=t=>t.headers.origin??wt(t.headers["sec-websocket-origin"]),Lr=(t,e=5e3)=>async n=>{if(!zr(n))return;const r=await t(n);let o;try{o=await qr(r,{timeout:e})}catch(t){if((r.readyState??0)>=2)throw Nt;throw new Ir(Ir.POLICY_VIOLATION,{closeReason:"timeout waiting for authentication token",cause:t})}if(o.isBinary)throw new Ir(Ir.UNSUPPORTED_DATA,{closeReason:"authentication token must be sent as text"});return o.data.toString("utf-8")};export{W as BlockingQueue,kt as CONTINUE,hn as FileFinder,ce as HTTPError,Ot as NEXT_ROUTE,Rt as NEXT_ROUTER,We as Negotiator,Pe as Property,G as Queue,ee as Router,Nt as STOP,Ur as ServerSentEvents,me as WebListener,Ir as WebSocketError,Hr as WebSocketMessage,jr as WebSocketMessages,yn as acceptBody,At as acceptUpgrade,St as addTeardown,Wt as anyHandler,Bn as checkIfModified,In as checkIfRange,Dn as compareETag,on as compressFileOffline,sn as compressFilesInDir,Xt as conditionalErrorHandler,tn as decompressMime,xt as defer,Pt as delegateUpgrade,fn as emitError,Vt as errorHandler,Mr as fileServer,V as findCause,ze as generateStrongETag,qe as generateWeakETag,Tt as getAbortSignal,zt as getAbsolutePath,Z as getAddressURL,_e as getAuthorization,Jn as getBodyJson,jn as getBodyStream,zn as getBodyText,qn as getBodyTextStream,xe as getCharset,dr as getFormData,hr as getFormFields,Se as getIfRange,nn as getMime,qt as getPathParameter,jt as getPathParameters,ve as getQuery,Te as getRange,pr as getRemainingPathComponents,ge as getSearch,be as getSearchParams,Cn as getTextDecoder,Un as getTextDecoderStream,Jr as getWebSocketOrigin,Ie as hasAuthScope,gt as isSoftClosed,zr as isWebSocketRequest,un as jsonErrorHandler,Dr as makeAcceptWebSocket,j as makeAddressTester,En as makeGetClient,Fe as makeMemo,pn as makeTempFileStorage,Lr as makeWebSocketFallbackTokenFetcher,Ge as negotiateEncoding,qr as nextWebSocketMessage,H as parseAddress,bn as proxy,Re as readHTTPDateSeconds,Ne as readHTTPInteger,Oe as readHTTPKeyValues,ke as readHTTPQualityValues,$e as readHTTPUnquotedCommaSeparated,Qe as readMimeTypes,Pn as registerCharset,en as registerMime,Fn as registerUTF32,Sn as removeForwarded,Tn as replaceForwarded,Lt as requestHandler,De as requireAuthScope,Be as requireBearerAuth,Ke as resetMime,Jt as restoreAbsolutePath,$n as sanitiseAndAppendForwarded,br as sendCSVStream,$r as sendFile,Nr as sendJSON,kr as sendJSONStream,Sr as sendRanges,Br as setDefaultCacheHeaders,mt as setSoftCloseHandler,Nn as simpleAppendForwarded,xr as simplifyRange,Y as stringPredicate,le as toListeners,Zt as typedErrorHandler,Gt as upgradeHandler,gn as willSendBody};
1
+ import{isIPv4 as t,isIPv6 as e}from"node:net";import{STATUS_CODES as n,createServer as r,Agent as o,request as i,ServerResponse as s}from"node:http";import{createReadStream as a,constants as c,createWriteStream as f,openAsBlob as u}from"node:fs";import{createHash as l,randomUUID as h}from"node:crypto";import{pipeline as d}from"node:stream/promises";import w from"node:zlib";import{promisify as p}from"node:util";import{extname as m,join as y,dirname as g,basename as b,sep as v,resolve as E}from"node:path";import{readFile as _,writeFile as x,rm as S,stat as T,readdir as $,realpath as N,open as k,mkdtemp as O}from"node:fs/promises";import{tmpdir as R,platform as A}from"node:os";import{Agent as P,request as F}from"node:https";import{TransformStream as C,TextDecoderStream as U,DecompressionStream as M,ReadableStream as B}from"node:stream/web";import{Readable as I,Duplex as D}from"node:stream";function H(n){if(!n||"unknown"===n)return;const r=/^((?:\d{1,3}\.){3}\d{1,3})(?::(\d+))?$/.exec(n);if(r?.[1]&&t(r[1]))return{family:"IPv4",address:r[1],port:r[2]?Number.parseInt(r[2]):void 0};const o=/^\[([\da-fA-F:]+)\](?::(\d+))?$|^([\da-fA-F:]+)$/.exec(n);if(o?.[1]&&e(o[1]))return{family:"IPv6",address:o[1].toLowerCase(),port:o[2]?Number.parseInt(o[2]):void 0};if(o?.[3]&&e(o[3]))return{family:"IPv6",address:o[3].toLowerCase(),port:void 0};const i=/^(.*?):(\d+)$/i.exec(n);return i?.[2]?{family:"alias",address:i[1],port:Number.parseInt(i[2])}:{family:"alias",address:n,port:void 0}}function j(t){const e=new Set,n=[],r=[];for(const o of t){const t=/^((?:\d{1,3}\.){3}\d{1,3})(?:\/(\d+))?$/.exec(o);if(t?.[1]){const e=t[2]?Number.parseInt(t[2]):32,r=e<32?4294967295>>>e:0;n.push([z(t[1])|r,r]);continue}const i=/^\[?([\da-fA-F:]+)\]?(?:\/(\d+))?$/.exec(o);if(i?.[1]){const t=J(i[1]),e=i[2]?q>>BigInt(Number.parseInt(i[2])):0n;r.push([t|e,e]);continue}e.add(o)}return t=>{switch(t?.family){case"alias":return e.has(t.address);case"IPv4":const o=z(t.address);return n.some(([t,e])=>(o|e)===t);case"IPv6":const i=J(t.address);return r.some(([t,e])=>(i|e)===t);default:return!1}}}const q=/*@__PURE__*/BigInt("0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF");function z(t){const e=t.split(".").map(Number);return(e[0]<<24|e[1]<<16|e[2]<<8|e[3])>>>0}function J(t){const e=t.split(":").map(t=>t?Number.parseInt(t,16):-1);let n=0n;for(const t of e)t<0?n<<=16n*BigInt(9-e.length):n=n<<16n|BigInt(t);return n}function L(t,e,n){if(t>=2147483648||Number.isNaN(t)||!n&&t<0)throw new RangeError(`${e} must fit in a 31 bit integer - got ${t}`)}class G{constructor(t){const e={t:null,o:null};this.i=e,this.u=e,void 0!==t&&this.push(t)}isEmpty(){return!this.i.o}clear(){this.i.o=null,this.i.t=null,this.u=this.i}push(t){const e={t,o:null};this.u.o=e,this.u=e}shift(){if(!this.i.o)return null;this.i=this.i.o;const t=this.i.t;return this.i.t=null,t}remove(t){for(let e=this.i;e.o;e=e.o)if(e.o.t===t){e.o=e.o.o;break}}[Symbol.iterator](){return{next:()=>{if(!this.i.o)return{value:null,done:!0};this.i=this.i.o;const t=this.i.t;return this.i.t=null,{value:t,done:!1}}}}}class W{constructor(){this.l=new G,this.h=new G,this.m=0}push(t){if(this.m)return;const e=this.h.shift();e?(e.v&&clearTimeout(e.v),e._(t)):this.l.push(t)}shift(t){return L(t??0,"timeout"),this.l.isEmpty()?this.m?Promise.reject(this.S):new Promise((e,n)=>{const r={_:e,T:n,v:null};this.h.push(r),void 0!==t&&(r.v=setTimeout(()=>{this.h.remove(r),n(new Error(`timeout after ${t}ms`))},t))}):Promise.resolve(this.l.shift())}$(t){this.S=t;for(const e of this.h)e.T(t),e.v&&clearTimeout(e.v)}close(t){this.m||(this.m=1,this.$(t))}fail(t){this.m||(this.m=2,this.$(t))}[Symbol.asyncIterator](){return{next:()=>this.shift().then(t=>({value:t,done:!1}),t=>{if(2===this.m)throw t;return{value:null,done:!0}})}}}function V(t,e){if(t instanceof e)return t;if(t&&"object"==typeof t){if("cause"in t)return V(t.cause,e);if("error"in t)return V(t.error,e)}}function Z(t,e="http"){if(!t)throw new TypeError("no address");if("string"==typeof t)return t;const n=void 0===t.port?"":`:${t.port}`;if("IPv4"===t.family||"alias"===t.family)return`${e}://${t.address}${n}`;if("IPv6"===t.family)return`${e}://[${t.address}]${n}`;throw new TypeError(`unknown address family: ${t.family}`)}const X=(t,e)=>new RegExp(t,(t.unicodeSets?"v":t.unicode?"u":"")+(t.ignoreCase||e?"i":"")),Y=(t,e)=>{if(void 0===t)return()=>!0;if(Array.isArray(t)||(t=[t]),!t.length)return()=>!1;if(1===t.length){const n=t[0];if("string"==typeof n){if(e){const t=n.toLowerCase();return e=>e.toLowerCase()===t}return t=>t===n}const r=X(n,e);return t=>r.test(t)}const n=new Set,r=[];for(const o of t)"string"==typeof o?e?n.add(o.toLowerCase()):n.add(o):r.push(X(o,e));return t=>n.has(e?t.toLowerCase():t)||r.some(e=>e.test(t))},K=/*@__PURE__*/Buffer.alloc(0),Q=t=>new URL("http://localhost"+(t.url??"/"));class tt extends Error{constructor(t,e,n){super(n??""),this.error=t,this.suppressed=e}}const et=globalThis.SuppressedError??tt;class nt{constructor(){this.N=!1}k(t){this.N?t!==this.O&&(this.O=new et(t,this.O)):(this.O=t,this.N=!0)}R(){this.N=!1,this.O=void 0}}const rt=new WeakMap;function ot(t,e,n){const r=rt.get(t);if(r)return r;const o=Q(t),i={A:t,P:o,F:decodeURIComponent(o.pathname),C:new AbortController,U:e,M:[],B:[],I:n?at(t):null};return rt.set(t,i),i}function it(t,e,n){e||(t.I=null),t.D=n;const r=async()=>{t.C.abort(n.H.writableEnded?"complete":"client abort");const e=new nt;await st(t.M,e,t),await st(t.B,e,t,()=>{t.j=async e=>{try{await e()}catch(e){t.U(e,"tearing down",t.A)}}}),e.N&&t.U(e.O,"tearing down",t.A)};return n.H.closed?r():n.H.once("close",r),t}async function st(t,e,n,r){for(;n.J;)await n.J;const o=(async()=>{for(;;){const n=t.pop();if(!n)return void r?.();try{await n()}catch(t){e.k(t)}}})().then(()=>{n.J===o&&(n.J=void 0)});n.J=o,await o}function at(t){return new Set(t.headers.upgrade?.split(",").map(t=>t.trim().toLowerCase())??[])}const ct=t=>rt.get(t),ft=t=>rt.delete(t);function ut(t){const e=ct(t);if(!e)throw new RangeError("unknown request");return e}function lt(t,e,n=lt){throw t.code=e,Error.captureStackTrace(t,n),t}class ht{constructor(t){this.L=t,this.G=Object.create(null),this.W=!1}get headersSent(){return this.W}writeHead(t,e=n[t]??"-"){return this.W&&lt(new Error("Cannot write headers after they are sent to the client"),"ERR_HTTP_HEADERS_SENT"),this.L.write([`HTTP/1.1 ${t} ${pt(e)}`,...dt(this.G),"",""].join("\r\n"),"ascii"),this.W=!0,this}write(t,e="utf-8",n){return this.L.write(t,e,n)}end(t,e="utf-8",n){return this.L.end(t,e,n),this}setHeader(t,e){const n=t.toLowerCase();return this.G[n]="string"==typeof e||"number"==typeof e?e:[...e],this}setHeaders(t){for(const[e,n]of t)this.setHeader(e,n);return this}}function dt(t){const e=[];for(const[n,r]of Object.entries(t)){const t=wt(r);t&&e.push(`${pt(n)}: ${pt(t)}`)}return e}const wt=t=>"string"==typeof t?t:"number"==typeof t?String(t):t?t.join(", "):"",pt=t=>t.replaceAll(/[^ \t!-~]/g,"");function mt(t,e){const n=ct(t);n&&yt(n,e)}function yt(t,e){t.V=e;const n=t.Z;n&&queueMicrotask(()=>xt(e,n,t))}const gt=t=>Boolean(ct(t)?.Z);function bt(t,e,n,r=0,o){const i=ut(t),s=n-Math.max(r,0),a=i.X??Number.POSITIVE_INFINITY,c=i.K?.Y??a;s>=c&&n>=a||(n<a&&(i.X=n),s<c&&(i.K={Y:s,tt:e,U:o??i.U}),_t(i))}function vt(t,e,n){if(!t.Z){if(t.D&&!t.I){const e=t.D.H;e.headersSent||e.hasHeader("connection")||e.setHeader("connection","close")}t.D?.H.once("close",()=>t.A.socket.destroy()),t.Z={tt:e,U:n},xt(t.V,t.Z,t),_t(t)}}function Et(t){if(t.D){if(t.I){if(!t.et&&t.D.H.writable){const e=new ht(t.D.H);e.setHeader("connection","close"),e.writeHead(503)}}else{const e=t.D.H;e.headersSent||(e.hasHeader("connection")||e.setHeader("connection","close"),e.writeHead(503))}t.D.H.end(()=>t.A.socket.destroy())}else t.A.socket.destroy()}function _t(t){if(clearTimeout(t.nt),!t.X||t.j)return;const e=Date.now();if(e>=t.X)return void Et(t);let n=t.X;t.K&&!t.Z&&(e<t.K.Y?n=t.K.Y:(t.Z=t.K,xt(t.V,t.Z,t))),void 0===t.nt&&t.B.push(()=>clearTimeout(t.nt)),t.nt=setTimeout(()=>_t(t),Math.min(n-e,6048e5))}async function xt(t,e,n){try{await(t?.(e.tt))}catch(t){e.U(t,"soft closing",n.A),Et(n)}}const St=(t,e)=>{const n=ut(t);n.j?n.j(e):n.M.push(e)},Tt=(t,e)=>{const n=ut(t);n.j?n.j(e):n.B.push(e)},$t=t=>ut(t).C.signal;class Nt extends Error{}const kt=/*@__PURE__*/new Nt("STOP"),Ot=/*@__PURE__*/new Nt("CONTINUE"),Rt=/*@__PURE__*/new Nt("NEXT_ROUTE"),At=/*@__PURE__*/new Nt("NEXT_ROUTER");async function Pt(t,e){const n=ut(t);if(!n.D)throw new TypeError("cannot call acceptUpgrade from shouldUpgrade");if(!n.I)throw new TypeError("not an upgrade request");if(3===n.et)throw new TypeError("upgrade already delegated");if(2===n.et)return n.rt;const r=n.D.H;if(!r.readable||!r.writable)throw kt;n.et=1;const o=await e(t,r,n.D.i);return n.D.i=K,n.ot=o.onError,o.softCloseHandler&&yt(n,o.softCloseHandler),n.et=2,n.rt=o.return,o.return}function Ft(t){const e=ut(t);if(!e.D)throw new TypeError("cannot call delegateUpgrade from shouldUpgrade");if(!e.I)throw new TypeError("not an upgrade request");if(e.et)throw new TypeError("upgrade already handled");e.et=3}const Ct=RegExp.escape??(t=>t.replaceAll(/[^a-zA-Z0-9_ ]/g,t=>"\\u"+t.charCodeAt(0).toString(16).padStart(4,"0"))),Ut=t=>t,Mt=t=>void 0===t?void 0:""===t?[]:t.split("/"),Bt=t=>void 0===t?void 0:""===t?[]:t.split("/").filter(t=>t),It=/*@__PURE__*/(t=>e=>{const n=[];let r=0;for(;r<e.length;++r){const o=t.get(e[r]);if(!o)break;n.push([o,!0])}return[Object.fromEntries(n),e.substring(r)]})(
2
+ /*@__PURE__*/new Map([["i","it"],["!","st"]])),Dt=(t,e)=>{Object.prototype.hasOwnProperty.call(t,e)&&delete t[e]},Ht=Object.freeze({});function jt(t,e,n){const r=t.A.url,o=t.F,i=t.ct??Ht;return t.A.url=encodeURIComponent(e).replaceAll("%2F","/")+t.P.search,t.F=e,n.length>0&&(t.ct=Object.freeze(Object.fromEntries([...Object.entries(i),...n]))),()=>{t.A.url=r,t.F=o,t.ct=i}}function qt(t){return ct(t)?.ct??Ht}function zt(t,e){return n=qt(t),r=e,Object.prototype.hasOwnProperty.call(n,r)?n[r]:void 0;var n,r}function Jt(t){const e=ct(t);return e?e.P.pathname+e.P.search:t.url??"/"}function Lt(t){const e=ct(t);e&&(t.url=e.P.pathname+e.P.search)}const Gt=t=>"function"==typeof t?{handleRequest:t}:t,Wt=(t,e)=>"function"==typeof t?{handleUpgrade:t,shouldUpgrade:e}:{shouldUpgrade:e,...t},Vt=(t,e=te)=>({handleRequest:t,handleUpgrade:t,shouldUpgrade:e}),Zt=t=>"function"==typeof t?{handleError:t}:t,Xt=(t,e)=>Yt(e=>e instanceof t,e),Yt=(t,e)=>({handleError:(n,r,o)=>{if(o.response&&t(n))return e(n,r,o.response);throw n},shouldHandleError:(e,n,r)=>Boolean(r.response)&&t(e)}),Kt=t=>"function"==typeof t?{handleRequest:t}:t,Qt=t=>"function"==typeof t?{handleUpgrade:t}:t,te=()=>!1,ee=Symbol("http");class ne{constructor(){this.ft=[],this.ut=[]}k(t,e,n,r,o){const i=n?((t,e)=>{const n=["^"],r=[],o=/[{}]|\/+|\\(.)|[:*]([a-zA-Z0-9_]*)/g,[{it:i,st:s},a]=It(t);if("/"!==a[0])throw new TypeError("path must begin with '/' or flags");let c=0,f={lt:null,ht:!1};const u=[f];let l=!1;for(const t of a.matchAll(o)){if(t.index>c){const e=Ct(a.substring(c,t.index));null!==f.lt&&(f.lt+=e,f.ht=!1),n.push(e)}const e=t[0];if("{"===e)n.push("(?:"),f={...f},u.push(f);else if("}"===e){if(u.pop(),!u.length)throw new TypeError(`unbalanced optional braces in path at ${t.index}`);const e=f;if(f=u[u.length-1],null===f.lt?(f.lt=e.lt,f.ht=e.ht):null!==e.lt&&(f.lt=`(?:${f.lt}|${e.lt})`,f.ht||=e.ht),"(?:"===n[n.length-1])throw new Error(`empty optional section in path at ${t.index}`);n.push(")?")}else if("/"===e[0])f.lt=null,n.push(e),s||n.push("+");else if("\\"===e[0]){const e=Ct(t[1]);null!==f.lt&&(f.lt+=e,f.ht=!1),n.push(e)}else{const o=e[0],i=t[2];if(!i)throw new TypeError(`unnamed parameter or unescaped '${o}' at ${t.index}`);if(null!==f.lt&&f.ht)throw new TypeError(`path parameters must be separated by at least one character at ${t.index}`);if("*"===o){if(l)throw new TypeError("paths must not contain more than one multi-component path parameter");l=!0,null!==f.lt?n.push(`((?:(?!${f.lt})[^/])*?(?:/.*?)?)`):n.push("(.*?)"),r.push({dt:i,wt:s?Mt:Bt})}else null!==f.lt?n.push(`((?:(?!${f.lt})[^/])+?)`):n.push("([^/]+?)"),r.push({dt:i,wt:Ut});f.lt="",f.ht=!0}c=t.index+e.length}if(c<a.length&&n.push(Ct(a.substring(c))),u.length>1)throw new TypeError("unbalanced optional braces in path");return e&&(n.push("(?:"),s?n.push("(?:(?<=/)|/)"):n.push("(?:/+|(?<=/))"),n.push("(?<rest>.*))?")),n.push("$"),{yt:new RegExp(n.join(""),i?"i":""),gt:r}})(n,r):{yt:null,gt:[]};if(o.some(t=>t instanceof Promise))throw new TypeError("expected handler, got Promise (did you forget to await?)");return this.ft.push({bt:t,vt:"string"==typeof e?e.toLowerCase():e,Et:i.yt,_t:i.gt,xt:o}),this}use(...t){return this.k(null,null,null,!0,t.map(Kt))}mount(t,...e){return this.k(null,null,t,!0,e.map(Kt))}within(t){const e=new ne;return this.mount(t,e),e}at(t,...e){return this.k(null,null,t,!1,e.map(Kt))}onRequest(t,e,...n){return this.k(oe(t),ee,e,!1,n.map(Kt))}onUpgrade(t,e,n,...r){return this.k(oe(t),e,n,!1,r.map(Qt))}onError(...t){return this.k(null,null,null,!0,t.map(Zt))}onReturn(...t){return this.ut.push(...t),this}get=(t,...e)=>this.k(re,ee,t,!1,e.map(Kt));delete=(...t)=>this.onRequest("DELETE",...t);getOnly=(...t)=>this.onRequest("GET",...t);head=(...t)=>this.onRequest("HEAD",...t);options=(...t)=>this.onRequest("OPTIONS",...t);patch=(...t)=>this.onRequest("PATCH",...t);post=(...t)=>this.onRequest("POST",...t);put=(...t)=>this.onRequest("PUT",...t);ws=(...t)=>this.onUpgrade("GET","websocket",...t);async handleRequest(t){return this.St(t,new nt)}async handleUpgrade(t){return this.St(t,new nt)}async handleError(t,e){const n=new nt;return n.k(t),this.St(e,n)}shouldUpgrade(t){return this.Tt(ut(t))}Tt(t){for(const e of this.ft){const n=ie(t,e);if(!n)continue;let r=()=>{};if(!0!==n)try{r=jt(t,n.$t,[])}catch{continue}try{for(const n of e.xt)if(ce(n,t))return!0}finally{r()}}return!1}async St(t,e){const n=ut(t),r=await this.Nt(n,e);if(e.N)throw e.O;return r}async Nt(t,e){for(const n of this.ft){const r=ie(t,n);if(!r)continue;let o=()=>{};if(!0!==r)try{const e=r.kt();o=jt(t,r.$t,e)}catch(t){e.k(t);continue}try{const r=await se(t,n.xt,this.ut,e);if(r===At)break;if(r===Rt)continue;return r}finally{o()}}return Ot}}const re=new Set(["HEAD","GET"]),oe=t=>t?"string"==typeof t?t:new Set(t):null;function ie(t,e){if("string"==typeof e.bt){if(e.bt!==t.A.method)return!1}else if(null!==e.bt&&!e.bt.has(t.A.method??""))return!1;if(e.vt===ee){if(t.I)return!1}else if(null!==e.vt&&!t.I?.has(e.vt))return!1;if(null===e.Et)return!0;const n=e.Et.exec(t.F);return!!n&&{$t:"/"+(n.groups?.rest??""),kt:()=>e._t.map((t,e)=>[t.dt,t.wt(n[e+1])])}}async function se(t,e,n,r){for(const o of e){let e=await ae(o,t,r);if(e!==Ot){if(!t.I&&!(e instanceof Nt)&&n.length)try{const r="object"==typeof e?e:void 0,o=t.A,i=t.D.H;for(const t of n)await t(r,o,i)}catch(t){r.k(t);continue}return e}}return Rt}async function ae(t,e,n){if(t instanceof ne)return t.Nt(e,n);let r=Ot;try{if(n.N){if(t.handleError){const o=n.O,i=e.I?{socket:e.D.H,head:e.D.i,hasUpgraded:Boolean(e.et)}:{response:e.D.H};t.shouldHandleError&&!t.shouldHandleError(o,e.A,i)||(n.R(),r=await t.handleError(o,e.A,i))}}else if(e.I){if(t.handleUpgrade){const n=e.D;r=await t.handleUpgrade(e.A,n.H,n.i)}}else t.handleRequest&&(r=await t.handleRequest(e.A,e.D.H))}catch(t){t instanceof Nt?r=t:n.k(t)}finally{e.M.length&&await((t,e)=>st(t.M,e,t))(e,n)}return r===kt?void 0:r}function ce(t,e){if(t instanceof ne)return t.Tt(e);if(!t.shouldUpgrade)return Boolean(t.handleUpgrade);try{return t.shouldUpgrade(e.A)}catch(t){return e.U(t,"checking should upgrade",e.A),!1}}class fe extends Error{constructor(t,{message:e,statusMessage:r,headers:o,body:i,...s}={}){super(e??i,s),this.statusCode=0|t,this.statusMessage=r??n[this.statusCode]??"-",this.headers=(t=>{if(!t||t instanceof Headers||Array.isArray(t))return new Headers(t);const e=t instanceof Map?[...t.entries()]:Object.entries(t);return new Headers(e.map(([t,e])=>[t,wt(e)]).filter(([t,e])=>e))})(o),this.body=i??"",this.name=`HTTPError(${this.statusCode} ${this.statusMessage})`}}const ue=(t,e,n)=>{const r=le(n);if(!r)return;const o=V(t,fe)??new fe(500);r.setHeader("content-type","text/plain; charset=utf-8"),r.setHeader("x-content-type-options","nosniff"),r.setHeaders(o.headers),r.setHeader("content-length",String(Buffer.byteLength(o.body,"utf-8"))),n.response||r.setHeader("connection","close"),r.writeHead(o.statusCode,o.statusMessage),r.end(o.body,"utf-8")};function le(t){if(t.response){const e=t.response;return e.headersSent?void e.end():e}const e=t.socket;if(!t.hasUpgraded&&e.writable)return e.addListener("finish",()=>e.destroy()),new ht(e);e.destroy()}function he(t,{onError:e=de,socketCloseTimeout:n=500}={}){L(n,"socketCloseTimeout");let r=0,o="",i=e;const s=[],a=new Set,c=()=>{const t=[...s];s.length=0;for(const e of t)e()},f=t=>{t&&(a.size?s.push(t):setImmediate(t))},u=t=>{a.add(t),t.B.push(()=>{a.delete(t),!a.size&&s.length&&setImmediate(c)})},l=async(n,s,a)=>{let c;try{c=ot(n,e,!1)}catch(t){return e(t,"parsing request",n),void ue(new fe(400),0,{response:s})}if(it(c,!1,{H:s}),a&&(c.Ot=!0),u(c),1===r)vt(c,o,i);else if(2===r)return Et(c),void ft(n);const f=new nt,l=await ae(t,c,f);f.N||l!==Ot&&l!==Rt&&l!==At||f.k(new fe(404)),f.N&&(e(f.O,"handling request",n),ue(f.O,0,{response:s}),ft(n))};return{request:(t,e)=>l(t,e,!1),checkContinue:(t,e)=>l(t,e,!0),upgrade:async(s,a,c)=>{let f;a.once("finish",()=>{const t=setTimeout(()=>a.destroy(),n);a.once("close",()=>clearTimeout(t))});try{f=ot(s,e,!0)}catch(t){return e(t,"parsing upgrade",s),void ue(new fe(400),0,{socket:a,hasUpgraded:!1})}if(it(f,!0,{H:a,i:c}),c=K,u(f),1===r)vt(f,o,i);else if(2===r)return Et(f),void ft(s);const l=new nt,h=await ae(t,f,l);l.N||h!==Ot&&h!==Rt&&h!==At||(console.warn(`Upgrade ${s.headers.upgrade} request for ${s.url} fell-through. This probably means you need to add shouldUpgrade to one of your upgrade handlers, or if this is intentional, explicitly reject the request (throw new HTTPError(404)) instead of using CONTINUE.`),l.k(new fe(404))),l.N&&(e(l.O,"handling upgrade",s),f.ot?f.ot(l.O):ue(l.O,0,{socket:a,head:f.D?.i??K,hasUpgraded:Boolean(f.et)}),ft(s))},shouldUpgrade:n=>{try{const r=ot(n,e,!0);return ce(t,r)}catch{return!1}},clientError:(t,n)=>{const r=n.Rt,o=t.code;n.writable&&!r?.headersSent&&n.end(pe.get(o)??me),n.destroy(t),("EPIPE"!==o||n.writable)&&("ECONNRESET"!==o||n.writable)&&"HPE_INVALID_EOF_STATE"!==o&&e(t,"initialising request",void 0)},softClose(t,e,n){if(r<1){r=1,o=t,i=e;for(const n of a)vt(n,t,e)}f(n)},hardClose(t){if(r<2){r=2;for(const t of a)Et(t)}f(t)},countConnections:()=>a.size}}const de=(t,e,n)=>{(V(t,fe)?.statusCode??500)>=500&&console.error("%s",`unhandled error while ${e} ${n?.url??"(no request information)"}:`,t)},we=t=>Buffer.from(`HTTP/1.1 ${t} ${n[t]}\r\nConnection: close\r\n\r\n`),pe=/*@__PURE__*/new Map([["HPE_HEADER_OVERFLOW",/*@__PURE__*/we(431)],["HPE_CHUNK_EXTENSIONS_OVERFLOW",/*@__PURE__*/we(413)],["ERR_HTTP_REQUEST_TIMEOUT",/*@__PURE__*/we(408)]]),me=/*@__PURE__*/we(400);class ye extends EventTarget{constructor(t){super(),this.At=t}attach(t,e={}){const n=(e,n,r)=>{const o={server:t,error:e,context:n,request:r};this.dispatchEvent(new CustomEvent("error",{detail:o,cancelable:!0}))&&de(e,n,r)},r=he(this.At,{...e,onError:n});!1===e.autoContinue&&t.addListener("checkContinue",r.checkContinue),!1===e.rejectNonStandardExpect&&t.addListener("checkExpectation",r.request),t.addListener("request",r.request),t.addListener("upgrade",r.upgrade);const o=t.shouldUpgradeCallback??(()=>!1);!1!==e.overrideShouldUpgradeCallback&&(t.shouldUpgradeCallback=r.shouldUpgrade),t.addListener("clientError",r.clientError);let i=()=>{i=void 0,t.removeListener("checkContinue",r.checkContinue),t.removeListener("checkExpectation",r.request),t.removeListener("request",r.request),t.removeListener("upgrade",r.upgrade),t.shouldUpgradeCallback===r.shouldUpgrade&&(t.shouldUpgradeCallback=o),t.removeListener("clientError",r.clientError)};return(t="",e=-1,o=!1,s)=>{if(L(e,"existingConnectionTimeout",!0),o||i?.(),e>0){const o=setTimeout(()=>{i?.(),r.hardClose()},e);r.softClose(t,n,()=>{i?.(),clearTimeout(o),s?.()})}else 0===e?(i?.(),r.hardClose(s)):(i?.(),s&&setImmediate(s));return r}}createServer(t={}){t.shouldUpgradeCallback&&(t={overrideShouldUpgradeCallback:!1,...t});const e=r(t),n=this.attach(e,t),o=Object.assign(e,{closeWithTimeout:(t,r)=>new Promise(o=>n(t,r,!0,()=>{e.close(()=>o()),e.closeAllConnections()}))});return o}listen(t,e,n={}){const r=this.createServer(n);return n.socketTimeout&&r.setTimeout(n.socketTimeout),new Promise((o,i)=>{r.once("error",i),r.listen(t,e,n.backlog??511,()=>{r.off("error",i),o(r)})})}}const ge=t=>ct(t)?.P??Q(t),be=t=>ge(t).search,ve=t=>new URLSearchParams(ge(t).searchParams),Ee=(t,e)=>ge(t).searchParams.get(e);function _e(t,e){const n=t.indexOf(e);return-1===n?[t]:[t.substring(0,n),t.substring(n+e.length)]}function xe(t){const e=t.headers.authorization;if(!e)return;const[n,r]=_e(e," ");return void 0!==r?[n.trim().toLowerCase(),r.trim()]:void 0}function Se(t){const e=/^text\/.*;\s*charset=([^;]+)/i.exec(t.headers["content-type"]??"");return e?.[1]?.trim().toLowerCase()??void 0}function Te(t){const e=t.headers["if-range"];return e&&"string"==typeof e?/^("|W\/")/.test(e)?{etag:[e]}:{modifiedSeconds:Ae(e)}:{}}function $e(t,e,{maxRanges:n=10,maxNonSequential:r=2,maxWithOverlap:o=2}={}){const i=t.headers.range;if(!i||0===e)return;const[s,a]=_e(i,"=");if("bytes"!==s||!a)return;const c=new fe(416,{headers:{"content-range":`bytes */${e}`}}),f=t=>{const e=ke(t);if(void 0===e)throw c;return e},u=[];for(const t of a.split(",")){const[r,o]=_e(t.trim(),"-");if(void 0===o)throw c;let i;if(r)i={start:f(r),end:o?Math.min(f(o),e-1):e-1};else{if(!o)throw c;i={start:Math.max(e-f(o),0),end:e-1}}if(!(i.start>=e)){if(i.end<i.start||u.length>=n)throw c;u.push(i)}}if(!u.length)throw c;if(u.length>r)for(let t=0;t<u.length-1;++t)if(u[t].start>u[t+1].start)throw c;if(u.length>o)for(let t=1;t<u.length;++t){const e=u[t];for(let n=0;n<t;++n){const t=u[n];if(e.end>=t.start&&t.end>=e.start)throw c}}return{ranges:u,totalSize:e}}function Ne(t){if(void 0!==t)return"number"==typeof t?[String(t)]:t.length?"string"==typeof t?t.split(",").map(t=>t.trim()):t.flatMap(t=>t.split(",").map(t=>t.trim())):[]}function ke(t){if(t&&/^\s*-?\d+\s*$/.test(t))return Number.parseInt(t,10)}const Oe=t=>Ne(t)?.map(t=>{const[e,...n]=t.split(";"),r=new Map(n.map(t=>{const[e,n]=_e(t,"=");return[e.trim(),n?.trim()??""]})),o=e.trim(),i="*/*"===o||"*"===o?0:o.endsWith("/*")?1:2,s=Math.max(0,Math.min(1,Number.parseFloat(r.get("q")??"1")));return{name:o,specifiers:r,specificity:i,q:s}});function Re(t){const e=new Map,n=/\s*([^=]+)=(?:([^";]*)|"((?:[^\\"]|\\.)*)"\s*)(?:;|$)/y;for(;n.lastIndex<t.length;){const r=n.exec(t);if(!r)throw new fe(400,{body:"invalid HTTP key values"});const o=r[1].toLowerCase();void 0!==r[3]?e.set(o,r[3].replaceAll(/\\(.)/g,"$1")):e.set(o,r[2].trim())}return e}function Ae(t){if("string"!=typeof t)return;const e=Date.parse(t);return Number.isNaN(e)?void 0:e/1e3|0}const Pe=t=>"function"==typeof t?t:()=>t;class Fe{constructor(t=Be){this.Pt=Pe(t)}set(t,e){Ue(ut(t)).set(this,e)}get(t){return Me(t,this,this.Pt)}clear(t){const e=ct(t);e?.Ft?.delete(this)}withValue(t){return Vt(e=>(this.set(e,t),Ot))}}const Ce=(t,...e)=>{const n=n=>t(n,...e);return t=>Me(t,n,n)};function Ue(t){return t.Ft||(t.Ft=new Map),t.Ft}function Me(t,e,n){const r=ct(t);if(!r)return n(t);const o=Ue(r);if(o.has(e))return o.get(e);const i=n(t);return o.set(e,i),i}const Be=()=>{throw new Error("property has not been set")};function Ie({realm:t,extractAndValidateToken:e,fallbackTokenFetcher:n,closeOnExpiry:r=!0,softCloseBufferTime:o=0,onSoftCloseError:i}){const s=Pe(t);return{...Vt(async t=>{const a=Date.now(),c=await s(t),f={"www-authenticate":`Bearer realm="${c}"`},u=xe(t),l="bearer"===u?.[0]?u[1]:await(n?.(t));if(!l)throw new fe(401,{headers:f,body:"no token provided"});let h;try{h=await e(l,c,t)}catch(t){throw new fe(401,{headers:f,body:"invalid token",cause:t})}if(!h)throw new fe(401,{headers:f,body:"invalid token"});if("object"==typeof h){if("nbf"in h&&"number"==typeof h.nbf&&a<1e3*h.nbf)throw new fe(401,{headers:f,body:"token not valid yet"});if("exp"in h&&"number"==typeof h.exp){const e=1e3*h.exp;if(a>=e-o)throw new fe(401,{headers:f,body:"token expired"});r&&bt(t,"token expired",e,o,i)}}return je.set(t,{Ct:c,Ut:!0,Mt:h,Bt:qe(h)}),Ot}),getTokenData:t=>{const e=je.get(t);if(!e.Ut)throw new TypeError("cannot use getTokenData in an unauthenticated endpoint");return e.Mt}}}const De=(t,e)=>je.get(t).Bt.has(e),He=t=>Vt(e=>{const n=je.get(e);if(!n.Bt.has(t))throw new fe(403,{headers:{"www-authenticate":`Bearer realm="${n.Ct}", scope="${t}"`},body:`scope required: ${t}`});return Ot}),je=/*@__PURE__*/new Fe({Ct:"",Ut:!1,Mt:null,Bt:new Set});function qe(t){if(!t||"object"!=typeof t||!("scopes"in t))return new Set;const{scopes:e}=t;return Array.isArray(e)?new Set(e):"string"==typeof e?new Set([e]):e&&"object"==typeof e?new Set(Object.entries(e).filter(([t,e])=>e).map(([t])=>t)):new Set}function ze(t,e){const n=`${0|e.mtimeMs} ${e.size} ${t??""}`;return`W/"${l("sha256").update(n).digest("base64").substring(0,12)}"`}async function Je(t){const e=l("sha256");return"string"==typeof t?await d(a(t),e):await d(t.createReadStream({start:0,autoClose:!1}),e),`"sha256-${e.digest("base64")}"`}const Le={type:{It:"accept",Dt:"content-type"},language:{It:"accept-language",Dt:"content-language"},encoding:{It:"accept-encoding",Dt:"content-encoding"}},Ge=/*@__PURE__*/new Map([["zstd","{file}.zst"],["br","{file}.br"],["gzip","{file}.gz"],["deflate","{file}.deflate"],["identity","{file}"]]),We=t=>{return{feature:"encoding",options:(e=t,n=Ge,Array.isArray(e)?e.map(t=>({value:t,file:n.get(t)})):Object.entries(e).map(([t,e])=>({value:t,file:e})))};var e,n};class Ve{constructor(t,{maxFailedAttempts:e=10}={}){this.Ht=t.map(t=>{if(!Object.prototype.hasOwnProperty.call(Le,t.feature))throw new RangeError(`unknown negotiation feature: ${t.feature}`);return{jt:t.feature,qt:Y(t.match,!0),zt:t.options.map(t=>({Jt:t.file,Lt:t.value,qt:Y(t.for??t.value,!0)}))}}).filter(t=>t.zt.length>0),this.Gt=e}*options(t,e){const n=this.Ht,r=new Set,o=this.Gt,i={},s=new Set;let a=!1;o>0&&(yield*function*c(f,u){const l=n[u];if(!l)return void(r.has(f)||(r.add(f),a&&(i.vary=[...s].join(", "),a=!1),yield{filename:f,headers:i}));if(!l.qt(t))return void(yield*c(f,u+1));const h=Le[l.jt];s.add(Le[l.jt].It),a=!0;const d=Oe(e[h.It])?.sort(Ze);if(!d?.length)return void(yield*c(f,u+1));const w=new Set,p=[];for(const t of l.zt){const e=d.find(e=>t.qt(e.name));e&&p.push({...e,Wt:t})}for(const t of p.sort(Ze)){const e=Xe(f,t.Wt.Jt);if(!w.has(e)&&(w.add(e),i[h.Dt]=t.Wt.Lt,yield*c(e,u+1),r.size>=o))return}delete i[h.Dt],!w.has(f)&&r.size<o&&(yield*c(f,u+1))}(t,0)),r.has(t)||(a&&(i.vary=[...s].join(", ")),yield{filename:t,headers:i})}}const Ze=(t,e)=>e.q-t.q||e.specificity-t.specificity;function Xe(t,e){return e.replaceAll(/\{(?:file|base|ext)\}/g,e=>"{file}"===e?t:"{base}"===e?t.replace(/\.[^.]*$/,""):m(t))}const Ye=/*@__PURE__*/en("bin=application/octet-stream;gz(ip),json,ogg,pdf,wasm,xml,y(a)ml,zip,zst(d)=application/{ext};webmanifest=application/manifest+json;aac,flac,mid(i),wav(e)=audio/{ext};mp3=audio/mpeg;oga,opus=audio/ogg;otf,ttf,woff,woff2=font/{ext};apng,avif,bmp,gif,heic,heif,jp(e)g,png,tif(f),webp=image/{ext};ico,cur=image/x-icon;svg=image/svg+xml;3mf,obj,stl,u3d=model/{ext};wrl=model/vrml;x3d=model/x3d+xml;x3db=model/x3d+binary;x3dv=model/x3d+vrml;css,csv,htm(l),rtf,vcard=text/{ext};(m)js=text/javascript;md=text/markdown;txt=text/plain;3gp(p),3g(pp)2,mp4,mp(e)g,h264=video/{ext};mov=video/quicktime;ogv=video/ogg");let Ke=/*@__PURE__*/new Map(Ye);function Qe(){Ke=new Map(Ye)}function tn(t){const e=new Map;for(const n of t.split("\n")){const[t,...r]=n.replaceAll(/\s+/g," ").trim().split(" ");if(!t.startsWith("#"))for(const n of r)e.set(n.toLowerCase(),t)}return e}function en(t){const e=new Map;for(const n of t.split(/[\n;]/g)){const[t,r,o]=/^ *([^ =]+)=(.*)$/.exec(n)??[null,null,""];for(const t of r?.split(",")??[]){const[n,r,i="",s=""]=/^([^(]*)(?:\(([^)]*)\)(.*))?$/.exec(t),a=r+i+s,c=o.replace("{ext}",a);e.set(a.toLowerCase(),c),i&&e.set((r+s).toLowerCase(),c)}}return e}function nn(t){for(const[e,n]of t)Ke.set(e.toLowerCase(),n)}function rn(t,e="utf-8"){"."===t[0]&&(t=t.substring(1));const n=Ke.get(t)??"application/octet-stream";return n.startsWith("text/")&&!n.includes("charset=")?`${n}; charset=${e}`:n}const on=(t,e)=>!["image","video","audio","font"].includes(e.split("/")[0]);async function sn(t,e,{minCompression:n=0,deleteObsolete:r=!1,filter:o=on}={}){const i=await _(t),s={file:t,mime:rn(m(t)),rawSize:i.byteLength,bestSize:i.byteLength,created:0};if(!o(t,s.mime))return s;const a=s.rawSize-n;for(const n of e){const e=fn.get(n.value),o=y(g(t),Xe(b(t),n.file));if(!e||o===n.file)continue;const c=a>0?await e(i):void 0;c&&c.byteLength<=a?(await x(o,c),s.bestSize=Math.min(s.bestSize,c.byteLength),++s.created):r&&await S(o).catch(()=>{})}return s}async function an(t,e,n={}){const r=[];await cn(t,r);const o=new Set(r);for(const t of o)for(const n of e){const e=y(g(t),Xe(b(t),n.file));e!==t&&o.delete(e)}return Promise.all([...o].map(t=>sn(t,e,n)))}async function cn(t,e){const n=await T(t);if(n.isDirectory())for(const n of await $(t))await cn(y(t,n),e);else n.isFile()&&e.push(t)}const fn=/*@__PURE__*/new Map([["zstd",t=>p(w.zstdCompress)(t)],["br",t=>p(w.brotliCompress)(t,{params:{[w.constants.BROTLI_PARAM_QUALITY]:w.constants.BROTLI_MAX_QUALITY,[w.constants.BROTLI_PARAM_SIZE_HINT]:t.length}})],["gzip",t=>p(w.gzip)(t,{level:w.constants.Z_BEST_COMPRESSION})],["deflate",t=>p(w.deflate)(t)]]),un=(t,e,n)=>{const r=ut(t);r.U(e,n??(r.I?"handling upgrade":"handling request"),t)},ln=(t,{onlyIfRequested:e=!0,emitError:n=!0,forceStatus:r,contentType:o="application/json"}={})=>({handleError:(i,s,a)=>{if(a.hasUpgraded||e&&!hn(s,o))throw i;n&&un(s,i);const c=le(a);if(!c)return;const f=V(i,fe)??new fe(500),u=JSON.stringify(t(f));c.setHeaders(f.headers),c.setHeader("content-type",o),c.setHeader("x-content-type-options","nosniff"),c.setHeader("content-length",String(Buffer.byteLength(u,"utf-8"))),a.response||c.setHeader("connection","close"),r?c.writeHead(r):c.writeHead(f.statusCode,f.statusMessage),c.end(u,"utf-8")},shouldHandleError:(t,n,r)=>!r.hasUpgraded&&(!e||hn(n,o))}),hn=(t,e)=>Oe(t.headers.accept)?.some(t=>t.name===e||"application/json"===t.name)??!1;class dn{constructor(t,{subDirectories:e=!0,caseSensitive:n="exact",allowAllDotfiles:r=!1,allowAllTildefiles:o=!1,allowDirectIndexAccess:i=!1,allow:s=[".well-known"],hide:a=[],indexFiles:c=["index.htm","index.html"],implicitSuffixes:f=[],negotiator:u}){this.Vt=t,this.Zt=!0===e?Number.POSITIVE_INFINITY:e||0,this.Xt=n,this.Yt=r,this.Kt=o,this.Qt=i,this.te=c,this.ee=["",...f],this.ne=new Set(s.map(t=>this.re(t))),this.oe=Y(a,!n),this.ie=new Set(c.map(t=>this.re(t))),this.se=u}static async build(t,e={}){return new dn(await N(t,{encoding:"utf-8"})+v,e)}re(t){return"exact"===this.Xt?t:t.toLowerCase()}ae(t){if(this.ne.has(t))return!0;const e=t.trim();return!(!("~"!==e[0]&&"~"!==e[e.length-1]||this.Kt)||"."===e[0]&&!this.Yt||this.oe(e))}toNormalisedPath(t){const e=t[t.length-1];return e&&this.ie.has(this.re(e))?t.slice(0,t.length-1):t}async find(t,e={},n){let r=t.join(v);if("force-lowercase"===this.Xt&&(r=r.toLowerCase()),/(^|[\\\/])\.\.($|[\\\/])|^[\\\/]/.test(r))return n?.push(`${JSON.stringify(r)} is not permitted`),null;let o=E(this.Vt,r);if(!o.startsWith(this.Vt)&&o+v!==this.Vt)return n?.push(`${JSON.stringify(o)} is not inside root ${JSON.stringify(this.Vt)}`),null;let i=null,s=null;for(const t of this.ee){const e=o+t;if(i=e.substring(this.Vt.length).split(v).filter(t=>t),i.length-1>this.Zt)return n?.push(`${JSON.stringify(o)} is nested too deeply (${i.length-1} > ${this.Zt})`),null;if(i.some(t=>!this.ae(this.re(t))))return n?.push(`${JSON.stringify(o)} is not permitted`),null;const r=i[i.length-1]??"";if(!this.Qt&&this.ie.has(this.re(r))&&!this.ne.has(this.re(r)))return n?.push(`${JSON.stringify(o)} is a hidden index file`),null;if(s=await N(e,{encoding:"utf-8"}).catch(()=>null),s){o=e;break}}if(!s||!i)return n?.push(`file ${JSON.stringify(o)} does not exist`),null;if(this.re(s)!==this.re(o))return n?.push(`realpath ${JSON.stringify(s)} does not match request ${JSON.stringify(o)}`),null;let a=s,c=await T(s).catch(()=>null);if(!c)return n?.push(`file ${JSON.stringify(s)} does not exist`),null;if(c.isDirectory()){if(i.length>this.Zt)return n?.push(`${JSON.stringify(s)} index file is nested too deeply (${i.length} > ${this.Zt})`),null;for(const t of this.te){const e=y(s,t);if(c=await T(e).catch(()=>null),c?.isFile()){a=e;break}}}if(!c?.isFile())return n?.push(`${JSON.stringify(s)} exists but is not a file`),null;if(!this.se)return pn({canonicalPath:a,negotiatedPath:a,headers:{}},n);const f=b(a),u=g(a);for(const t of this.se.options(f,e)){if(!t.filename||t.filename.includes(v))continue;const e=await pn({canonicalPath:a,negotiatedPath:y(u,t.filename),headers:t.headers},n);if(e)return e}return null}async debugAllPaths(){return(await this.precompute()).debugAllPaths()}async precompute(){const t=new Map,e=(e,n)=>{const r=t.get(e);(!r||n.p>r.p)&&t.set(e,n)},n=new G({dir:[this.Vt],depth:0});for(const{dir:t,depth:r}of n){const o=await $(y(...t),{withFileTypes:!0,encoding:"utf-8"}),i=new Set(o.map(t=>this.re(t.name)));for(const s of o){const o=this.re(s.name);if(!this.ae(o))continue;const a=[...t,s.name];if(s.isDirectory())r<this.Zt&&n.push({dir:a,depth:r+1}),e(this.re(a.slice(1).join("/")),wn);else if(s.isFile()){const n={file:y(...a),dir:y(...t),basename:o,siblings:i},r=this.te.indexOf(o);if(-1!==r&&(e(this.re(t.slice(1).join("/")),{...n,p:this.te.length+1-r}),!this.Qt&&!this.ne.has(o)))continue;const c=this.re(a.slice(1).join("/"));for(let t=0;t<this.ee.length;++t){const r=this.ee[t];s.name.endsWith(r)&&e(c.substring(0,c.length-r.length),{...n,p:-t})}}}}return{find:async(e,n={},r)=>{const o=t.get(this.re(e.join("/")));if(!o?.file)return r?.push(`${JSON.stringify(e.join("/"))} not found in static file paths`),null;if(!this.se)return pn({canonicalPath:o.file,negotiatedPath:o.file,headers:{}},r);for(const t of this.se.options(o.basename,n)){if(!o.siblings.has(this.re(t.filename)))continue;const e=await pn({canonicalPath:o.file,negotiatedPath:y(o.dir,t.filename),headers:t.headers},r);if(e)return e}return null},debugAllPaths:()=>Promise.resolve(new Set([...t].filter(([t,e])=>e.file).map(([t])=>t)))}}}const wn={file:"",dir:"",basename:"",siblings:new Set,p:1};async function pn(t,e){const n=await k(t.negotiatedPath,c.O_RDONLY).catch(()=>null);if(!n)return e?.push(`failed to open ${JSON.stringify(t.negotiatedPath)}`),null;const r=()=>(n.close().catch(()=>{}),null),o=await n.stat().catch(r);return o?.isFile()?{handle:n,stats:o,...t}:(e?.push(`${JSON.stringify(t.negotiatedPath)} exists but is not a file`),r())}const mn=/*@__PURE__*/Ce(async t=>{const e=$t(t);if(e.aborted)throw kt;e.throwIfAborted();const n=await O(y(R(),"upload"));Tt(t,()=>S(n,{recursive:!0}));let r=0;const o=()=>{if(e.aborted)throw kt;return y(n,(++r).toString(10).padStart(6,"0"))};return{dir:n,nextFile:o,save:async(t,{mode:n=384}={})=>{const r=o(),i=f(r,{mode:n});try{return await d(t,i,{signal:e}),{path:r,size:i.bytesWritten}}finally{i.close()}}}}),yn=(t,e)=>e instanceof Error&&"ERR_STREAM_PREMATURE_CLOSE"===e.code&&t.closed;function gn(t){const e=ut(t);if(!e.D)throw new TypeError("cannot call acceptBody from shouldUpgrade");if(e.C.signal.aborted)throw kt;e.Ot&&(e.Ot=!1,e.D.H.writeContinue())}function bn(t){const e=ut(t);return!e.C.signal.aborted&&!e.Ot}function vn(t,{blockRequestHeaders:e=["connection","expect","host","keep-alive","proxy-authorization","transfer-encoding","upgrade","via"],requestHeaders:n=[],blockResponseHeaders:r=["connection","keep-alive","transfer-encoding"],responseHeaders:s=[],agent:a,...c}={}){const f=new URL(t);let u;"https:"===f.protocol?(a??=new P({keepAlive:!0,...c}),u=i):(a??=new o({keepAlive:!0,...c}),u=F);const l=f.pathname,h=l+(l.endsWith("/")?"":"/"),w="a://a"+h;return Gt((t,o)=>new Promise((i,c)=>{if(o.closed||!o.writable)return c(kt);const p=$t(t),m=t=>c(p.aborted?kt:new fe(502,{cause:t})),y=new URL(w+t.url?.substring(1));if(!y.pathname.startsWith(h)&&y.pathname!==l)return c(new fe(400,{message:"directory traversal blocked"}));gn(t);let g={...t.headers};En(g,e);for(const e of n)g=e(t,g);const b=u(f,{agent:a,path:y.pathname+y.search,method:t.method,headers:g,signal:p});b.once("error",m),b.once("response",e=>{if(o.closed||!o.writable)return c(kt);if(!o.headersSent){let n={...e.headers};En(n,r);for(const r of s)n=r(t,e,n);o.writeHead(e.statusCode??200,e.statusMessage,n)}d(e,o).then(i,t=>c(yn(o,t)?kt:t))}),d(t,b).catch(m)}))}function En(t,e){for(const e of Ne(t.connection)??[])Dt(t,e.toLowerCase());for(const n of e)Dt(t,n)}function _n({trustedProxyCount:t,trustedProxyAddresses:e,trustedHeaders:n}){const r=e?j(e):()=>!0,o=t??(e?Number.POSITIVE_INFINITY:0),i=new Set(n);return Ce(t=>{const e=e=>{if(i.has(e))return Ne(t.headers[e])?.reverse()},n=e("forwarded"),s=e("x-forwarded-for"),a=e("x-forwarded-host"),c=e("x-forwarded-proto"),f=e("x-forwarded-protocol"),u=e("x-url-scheme"),l=e("via")?.map(t=>{const e=/^([^/ ]+\/)?([^/ ]+) (.+)$/.exec(t);return e?.[3]?H(e[3]):void 0}),h=[xn(t)];if(n)for(const t of n)try{const e=Re(t);h.push({client:H(e.get("for")),server:H(e.get("by")),host:e.get("host"),proto:e.get("proto")})}catch{h.push({client:void 0,server:void 0,host:void 0,proto:void 0})}else if(s){const t=s.map(H),e=a??[],n=c??f??u??[];let r=h[0].client;for(let o=0;o<t.length;++o){const i=t[o];h.push({client:i,server:l?.[o]??(r?{...r,port:void 0}:void 0),host:e[o],proto:n[o]}),r=i}}else if(l)for(const t of l)h.push({client:void 0,server:t,host:void 0,proto:void 0});let d=Math.min(1+o,h.length);for(let t=0;t<d-1;++t)r(h[t].client)||(d=t+1);return Object.freeze({trusted:h.slice(0,d),untrusted:h.slice(d),outwardChain:h,edge:h[d-1]})})}const xn=t=>({client:{...H(t.socket.remoteAddress)??Sn,port:t.socket.remotePort},server:{...H(t.socket.localAddress)??Sn,port:t.socket.localPort},host:t.headers.host,proto:t.socket.encrypted?"https":"http"}),Sn={family:"alias",address:"_disconnected",port:void 0};function Tn(t,e){return delete e.forwarded,delete e["x-forwarded-for"],delete e["x-forwarded-host"],delete e["x-forwarded-proto"],delete e["x-forwarded-protocol"],delete e["x-url-scheme"],e}function $n(t,e){const n=Tn(0,e);return n.forwarded=On([xn(t)]),n}const Nn=(t,{onlyTrusted:e=!1}={})=>(n,r)=>{const o=Tn(0,r),i=t(n);return o.forwarded=On([...e?i.trusted:i.outwardChain].reverse()),o};function kn(t,e){let n=t.headers.forwarded;const r=On([xn(t)]);n?n+=", "+r:n=r;const o=Tn(0,e);return o.forwarded=n,o}function On(t){return t.filter(t=>t.server||t.client).map(t=>Object.entries({for:t.client?.address,by:t.server?.address,host:t.host,proto:t.proto}).filter(([t,e])=>e).map(([t,e])=>e&&/[^a-zA-Z0-9._]/.test(e)?`${t}="${e.replaceAll("\\","\\\\").replaceAll('"','\\"').replaceAll(",","-")}"`:`${t}=${e}`).join("; ")).join(", ")}class Rn{constructor(t,{fatal:e=!1}={}){this.ce=t,this.fe=e,this.ue=new Uint8Array(4),this.le=new DataView(this.ue.buffer),this.he=0}decode(t,{stream:e=!1}={}){const n=t.byteLength,r=[];let o=0;if(this.he>0){if(o=4-this.he,n<o)return this.ue.set(t,this.he),this.he+=n,"";this.ue.set(t.subarray(0,o),this.he),r.push(this.le.getUint32(0,this.ce)),this.he=0}const i=new DataView(t.buffer,t.byteOffset,t.byteLength);let s=o;for(const t=n-3;s<t;s+=4)r.push(i.getUint32(s,this.ce));if(e?(s<n&&this.ue.set(t.subarray(s)),this.he=n-s):(this.he=0,s<n&&(this.fe?lt(new TypeError("The encoded data was not valid for encoding utf-32"),"ERR_ENCODING_INVALID_ENCODED_DATA"):r.push(65533))),r.length>0){try{return String.fromCodePoint(...r)}catch{this.fe&&lt(new TypeError("The encoded data was not valid for encoding utf-32"),"ERR_ENCODING_INVALID_ENCODED_DATA")}for(let t=0;t<r.length;++t)r[t]>1114111&&(r[t]=65533);return String.fromCodePoint(...r)}return""}}class An extends C{constructor(t){super({transform(e,n){try{const r=t.decode(e,{stream:!0});r&&n.enqueue(r)}catch(t){n.error(t)}},flush(e){try{const n=t.decode(K);n&&e.enqueue(n)}catch(t){e.error(t)}}})}}const Pn=new Map;function Fn(t,e){Pn.set(t.toLowerCase(),e)}function Cn(){Fn("utf-32be",{decoder:t=>new Rn(!1,t)}),Fn("utf-32le",{decoder:t=>new Rn(!0,t)})}function Un(t,e={}){const n=Pn.get(t.toLowerCase());if(n)return n.decoder(e);try{return new TextDecoder(t,e)}catch{throw new fe(415,{body:`unsupported charset: ${t}`})}}function Mn(t,e={}){const n=Pn.get(t.toLowerCase());if(n)return n.decoderStream?n.decoderStream(e):new An(n.decoder(e));try{return new U(t,e)}catch{throw new fe(415,{body:`unsupported charset: ${t}`})}}const Bn=["utf-32be",null,"utf-16be","utf-16be","utf-32le","utf-16le",null,"utf-8"];function In(t,e,n){const r=Ae(t.headers["if-modified-since"]),o=Ne(t.headers["if-none-match"]);if(o){if(Hn(e,n,o))return!1}else if(n&&r&&(n.mtimeMs/1e3|0)<=r)return!1;return!0}function Dn(t,e,n){let r=!0;const o=Te(t);return o.etag&&(r&&=Hn(e,n,o.etag)),o.modifiedSeconds&&(r&&=(n.mtimeMs/1e3|0)===o.modifiedSeconds),r}function Hn(t,e,n){if(n.includes("*"))return!0;const r=t.getHeader("etag");if("string"==typeof r){if(n.includes(r))return!0;if(r.startsWith('W/"'))return!1}return!(!e||!n.some(t=>t.startsWith('W/"')))&&n.includes(ze(t.getHeader("content-encoding"),e))}class jn extends C{constructor(t,e){super({transform(r,o){n+=r.byteLength,n>t?o.error(e):o.enqueue(r)}});let n=0}}function qn(t,{maxContentBytes:e=Number.POSITIVE_INFINITY,maxNetworkBytes:n=e,maxEncodingSteps:r=1}={}){const o=ke(t.headers["content-length"]);if(void 0!==o&&o>n)throw new fe(413);const i=Ne(t.headers["content-encoding"])??[];if(i.length>r)throw new fe(415,{body:"too many content-encoding stages"});gn(t);let s=I.toWeb(t);void 0===o&&Number.isFinite(n)&&(s=s.pipeThrough(new jn(n,new fe(413))));for(const t of i.reverse())s=s.pipeThrough(Gn(t));return Number.isFinite(e)&&(s=s.pipeThrough(new jn(e,new fe(413,{body:"decoded content too large"})))),s}function zn(t,e={}){const n=qn(t,e),r=Se(t)??e.defaultCharset??"utf-8";return n.pipeThrough(Mn(r,e))}async function Jn(t,e={}){const n=[];for await(const r of zn(t,e))n.push(r);return n.join("")}async function Ln(t,e={}){const n=await(async(t,e)=>{const n=t.getReader(),r=new Uint8Array(3);let o=0,i=null;for(;;){const t=await n.read(),e=3-o;if(t.done){0===o?(r[0]=1,r[1]=1):1===o&&(r[1]=r[0]),r[2]=r[0],i=null;break}if(i=t.value,i.byteLength>=e){r.set(i.subarray(0,e),o);break}r.set(i,o),o+=i.byteLength}const s=Bn[(r[0]?4:0)|(r[1]?2:0)|(r[2]?1:0)];if(!s)throw n.cancel(),new fe(415,{body:"invalid JSON encoding"});const a=Mn(s,e),c=a.writable.getWriter();return o&&c.write(r.subarray(0,o)),i&&c.write(i),n.releaseLock(),c.releaseLock(),t.pipeThrough(a)})(qn(t,e),e),r=[];for await(const t of n)r.push(t);return JSON.parse(r.join(""))}function Gn(t){switch(t.toLowerCase()){case"gzip":case"x-gzip":return new M("gzip");case"deflate":return new M("deflate");case"br":try{return new M("brotli")}catch{return D.toWeb(w.createBrotliDecompress())}case"zstd":try{return D.toWeb(w.createZstdDecompress())}catch{throw new fe(415,{body:"unsupported content encoding"})}default:throw new fe(415,{body:"unknown content encoding"})}}function Wn(t){if(!t)return null;const[e,n]=_e(t,";"),r=new Map;if(n){const t=/\s*([!#-'*+\-.0-:>-Z^-z|~]+)=(?:([!#-'*+\-.0-:>-Z^-z|~]+)|"((?:[^\x00-\x08\x0a-\x1f"\\\x7f]|\\.)*)")\s*(;|$)/gy;for(;t.lastIndex!==n.length;){const e=t.exec(n);if(!e)return null;const o=e[1].toLowerCase(),i=e[2]??e[3]?.replaceAll(/\\(.)/g,"$1")??"";r.has(o)||r.set(o,i)}}return{mime:e.trim().toLowerCase(),params:r}}function Vn(t,e,n,r){const o=t.byteLength;for(;e<o;){for(;e<o;++e){const n=t[e];if(32!==n&&9!==n)break}if(e===o)break;if(59!==t[e++])return!1;for(;e<o;++e){const n=t[e];if(32!==n&&9!==n)break}if(e===o)return!1;const i=e;for(;e<o;++e){const n=t[e];if(!Zn[n]){if(61===n)break;return!1}}if(e===o)return!1;const s=t.latin1Slice(i,e).toLowerCase();if("*"===s[s.length-1]){const r=++e;for(;e<o;++e){const n=t[e];if(!Yn[n]){if(39!==n)return!1;break}}if(e===o)return!1;const i=Un(t.latin1Slice(r,e));for(++e;e<o&&39!==t[e];++e);if(e===o)return!1;if(++e===o)return!1;let a=e;const c=[];for(;e<o;++e){const n=t[e];if(1!==Xn[n]){if(37===n){let n,r;if(e+2<o&&16!==(n=Qn[t[e+1]])&&16!==(r=Qn[t[e+2]])){const o=(n<<4)+r;e>a&&c.push(i.decode(t.subarray(a,e),{stream:!0})),c.push(i.decode(Buffer.from([o]),{stream:!0})),a=(e+=2)+1;continue}return!1}break}}c.push(i.decode(t.subarray(a,e)));const f=c.join("");n.has(s)||n.set(s,f);continue}if(++e===o)return!1;if(34===t[e]){let i=++e,a=!1;const c=[];for(;e<o;++e){const n=t[e];if(92!==n){if(34===n){if(a){i=e,a=!1;continue}c.push(r.decode(t.subarray(i,e)));break}if(a&&(i=e-1,a=!1),!Kn[n])return!1}else a?(i=e,a=!1):(c.push(r.decode(t.subarray(i,e),{stream:!0})),a=!0)}if(e===o)return!1;++e,n.has(s)||n.set(s,c.join(""));continue}let a=e;for(;e<o;++e){const n=t[e];if(!Zn[n]){if(e===a)return!1;break}}n.has(s)||n.set(s,r.decode(t.subarray(a,e)))}return!0}const Zn=/*@__PURE__*/(()=>{const t=new Uint8Array(256);return t.set([1,0,1,1,1,1,1,0,0,1,1,0,1,1,0,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,0,1],33),t})(),Xn=/*@__PURE__*/(()=>{const t=new Uint8Array(Zn);return t.set([0,1,0,0,0,0],37),t})(),Yn=/*@__PURE__*/(()=>{const t=new Uint8Array(Zn);return t.set([0,0,0,0,1,0,1,0],39),t.set([1,0,1,1],123),t})(),Kn=/*@__PURE__*/(()=>{const t=new Uint8Array(256);return t.fill(1,32,256),t[9]=1,t[34]=0,t[92]=0,t[127]=0,t})(),Qn=/*@__PURE__*/(()=>{const t=new Uint8Array(256).fill(16);for(let e=0;e<10;++e)t[48+e]=e;for(let e=0;e<6;++e)t[65+e]=e+10,t[97+e]=e+10;return t})();class tr{constructor(t,e,n){const r=t.byteLength;if(!r||r>65535)throw new RangeError("invalid needle");this.de=t,this.we=e,this.pe=n,this.me=null,this.ye=0,this.ge=null}push(t){let e=0;const n=t.byteLength,r=this.de,o=r.byteLength-1,i=n-o;let s=-this.ye;if(this.ye){const a=this.ge,c=this.me,f=r[o];if(s<i){const n=t[s+o];n!==f||t.compare(r,-s,o,0,s+o)?s+=a[n]:(this.pe(),this.ye=0,e=s+=o+1)}const u=i<0?i:0;for(;s<u;){const n=t[s+o];if(n===f&&!c.compare(r,0,-s,this.ye+s,this.ye)&&!t.compare(r,-s,o,0,s+o)){this.we(c,0,this.ye+s,!1),this.pe(),this.ye=0,e=s+=o+1;break}s+=a[n]}const l=this.ye;if(l>0){const e=r[0];for(;s<0;){const o=c.subarray(0,l).indexOf(e,l+s);if(-1===o){s=0;break}const i=l-o;if(!c.compare(r,1,i,o+1,l)&&!t.compare(r,i,i+n))return o&&(this.we(c,0,o,!1),c.copy(c,0,o,i)),c.set(t,i),void(this.ye+=n-o);s=o+1-l}this.we(c,0,l,!1),this.ye=0}}for(;s<i;){const n=t.indexOf(r,s);if(-1!==n){if(n>e&&this.we(t,e,n,!0),this.pe(),n===i+1)return;e=s=n+o+1}else s=i}const a=r[0];for(;s<n;){const i=t.indexOf(a,s);if(-1===i)return void this.we(t,e,n,!0);if(!t.compare(r,1,n-i,i+1)){if(!this.me){this.me=Buffer.allocUnsafe(o),this.ge=new Uint16Array(256).fill(o+1);for(let t=0;t<o;++t)this.ge[r[t]]=o-t}return t.copy(this.me,0,i),this.ye=n-i,void(i>e&&this.we(t,e,i,!0))}s=i+1}n>e&&this.we(t,e,n,!0)}destroy(){const t=this.ye;t&&this.me&&this.we(this.me,0,t,!1),this.ye=0}}class er{constructor(t){this.we=t,this.reset()}reset(){this.G=[],this.be=16384,this.m=0,this.ve="",this.Ee=void 0}push(t,e,n){let r=e,o=e;const i=Math.min(n,e+this.be);for(;o<i;)switch(this.m){case 0:for(;o<i&&Zn[t[o]];++o);if(o>r&&(this.ve+=t.latin1Slice(r,o)),o<i){if(58!==t[o])return-1;if(!this.ve)return-1;++o,this.Ee=ir.get(this.ve.toLowerCase()),this.ve="",this.m=1}break;case 1:for(;o<i;++o){const e=t[o];if(32!==e&&9!==e){r=o,this.m=2;break}}break;case 2:for(;o<i;++o){const e=t[o];if(e<32||127===e){if(13!==e)return-1;this.m=3;break}}this.Ee&&(this.ve+=t.latin1Slice(r,o)),++o;break;case 3:if(10!==t[o++])return-1;this.m=4;break;case 4:{const e=t[o];if(32===e||9===e)r=o,this.m=2;else{if(this.Ee){const t=this.Ee._e;void 0===this.G[t]?this.G[t]=this.ve:this.Ee.xe&&(this.G[t]+=","+this.ve)}13===e?(this.m=5,++o):(r=o,this.m=0,this.ve="",this.Ee=void 0)}break}case 5:{if(10!==t[o++])return-1;const e=this.G;return this.reset(),this.we(e),o}}return i<n?-1:(this.be-=i-e,i)}}const nr=0,rr=1,or=2,ir=new Map([["content-type",{_e:nr,xe:!1}],["content-disposition",{_e:rr,xe:!1}],["content-transfer-encoding",{_e:or,xe:!0}]]);function sr(t){const e=this.Se;e&&(this.Se=void 0,e())}const ar=/*@__PURE__*/Buffer.from("\r\n"),cr=()=>{},fr=37,ur=43,lr=/*@__PURE__*/new Uint8Array(256);function hr(t,e={}){const n=t["content-type"];if(!n)throw new fe(400,{body:"missing content-type"});const r=Wn(n);if(!r)throw new fe(400,{body:"malformed content-type"});const o=ke(t["content-length"]);if(void 0!==o&&void 0!==e.maxNetworkBytes&&o>e.maxNetworkBytes)throw new fe(413,{body:"content too large"});if("application/x-www-form-urlencoded"===r.mime)return(({defCharset:t="utf-8",maxNetworkBytes:e=Number.POSITIVE_INFINITY,maxContentBytes:n=e,maxFieldSize:r=1048576,maxFieldNameSize:o=100,maxFields:i=Number.POSITIVE_INFINITY},s)=>{const a=s.get("charset")??t,c=/^utf-?8$/i.test(a)?1:/^(latin-?1|iso[\-_]?8859-?1|(us-)?ascii)$/i.test(a)?2:0,f=Un(a);return(t,s)=>new Promise((u,l)=>{let h=e,d=n,w=i,p=!0,m="",y=Math.min(o,d),g=0,b="",v=-2;const E=()=>{const t=!c||1===c&&8&g?f.decode(Buffer.from(m,"latin1")):m;if(p){if(y<0)return S(new fe(413,{body:`field name ${JSON.stringify(t)}... too long`})),!1;t&&s({name:t,type:"string",value:"",encoding:a,mimeType:"text/plain"})}else{if(y<0)return S(new fe(413,{body:`value for ${JSON.stringify(b)} too long`})),!1;s({name:b,type:"string",value:t,encoding:a,mimeType:"text/plain"})}return!0},_=t=>{if(!t.byteLength)return;if((h-=t.byteLength)<0)return S(new fe(413,{body:"content too large"}));if(!w)return S(new fe(413,{body:"too many fields"}));const e=t.byteLength;let n=0,i=v;if(-2!==i){if(-1===i){if(16===(i=Qn[t[n++]]))return S(new fe(400,{body:"malformed urlencoded form"}));if(g|=i,n===e)return void(v=i)}const r=Qn[t[n++]];if(16===r)return S(new fe(400,{body:"malformed urlencoded form"}));if(m+=String.fromCharCode((i<<4)+r),v=-2,n===e)return}for(lr[37]=1,lr[38]=1,lr[43]=1,lr[61]=p?1:0;;){const i=n;for(;n<e&&!lr[t[n]];++n);if(n>i&&y>=0&&((y-=n-i)<0?m+=t.latin1Slice(i,n+y):(d-=n-i,m+=t.latin1Slice(i,n))),n===e)return;switch(t[n++]){case fr:for(;;){if(--y<0){lr[37]=0,lr[43]=0;break}if(--d,n===e){v=-1;break}const r=Qn[t[n++]];if(16===r)return S(new fe(400,{body:"malformed urlencoded form"}));if(g|=r,n===e)return void(v=r);const o=Qn[t[n++]];if(16===o)return S(new fe(400,{body:"malformed urlencoded form"}));if(m+=String.fromCharCode((r<<4)+o),n===e)return;if(t[n]!==fr)break;n++}break;case 38:if(!E())return;if(b="",p=!0,lr[61]=1,lr[37]=1,lr[43]=1,m="",y=Math.min(o,d),g=0,! --w)return S(new fe(413,{body:"too many fields"}));break;case ur:--y<0?(lr[37]=0,lr[43]=0):(--d,m+=" ");break;case 61:if(b=!c||1===c&&8&g?f.decode(Buffer.from(m,"latin1")):m,y<0)return S(new fe(413,{body:`field name ${JSON.stringify(b)}... too long`}));p=!1,lr[61]=0,lr[37]=1,lr[43]=1,m="",g=0,y=Math.min(r,d)}if(n===e)return}},x=()=>{if(-2!==v)return S(new fe(400,{body:"malformed urlencoded form"}));E()&&(t.off("data",_),t.off("end",x),t.off("error",S),u())},S=e=>{t.off("data",_),t.off("end",x),t.off("error",S),l(e)};t.on("data",_),t.once("end",x),t.once("error",S)})})(e,r.params);if("multipart/form-data"===r.mime&&!e.blockMultipart)return function({preservePath:t,fileHwm:e,defParamCharset:n="utf-8",defCharset:r="utf-8",maxNetworkBytes:o=Number.POSITIVE_INFINITY,maxContentBytes:i=o,maxFieldSize:s=1048576,maxFileSize:a=Number.POSITIVE_INFINITY,maxTotalFileSize:c=Number.POSITIVE_INFINITY,maxFieldNameSize:f=100,maxParts:u=Number.POSITIVE_INFINITY,maxFields:l=Number.POSITIVE_INFINITY,maxFiles:h=Number.POSITIVE_INFINITY},d){const w=d.get("boundary");if(!w)throw new fe(400,{body:"multipart boundary not found"});if(w.length>70)throw new fe(400,{body:"multipart boundary too long"});const p=Un(n),m={autoDestroy:!0,emitClose:!0,highWaterMark:e,read:sr};return(e,n)=>new Promise((d,y)=>{let g,b,v,E,_,x,S,T=5,$=o,N=i,k=c,O=u,R=l,A=h,P=0,F=!1,C=0,U="";const M=new er(e=>{const o=e[rr];if(!o)return void(T=5);const i=((t,e)=>{if(!t.byteLength)return null;const n=new Map;let r=0;for(;r<t.byteLength;++r)if(!Zn[t[r]]){if(!Vn(t,r,n,e))return null;break}return{type:t.latin1Slice(0,r).toLowerCase(),params:n}})(Buffer.from(o,"latin1"),p);if("form-data"!==i?.type)return void(T=5);if(v=i.params.get("name"),void 0===v)return q(new fe(400,{body:"missing field name"}));const c=Buffer.byteLength(v,"utf-8"),u=Math.min(f,N);if(c>u)return q(new fe(413,{body:`field name ${JSON.stringify(v.substring(0,u))}... too long`}));N-=c,E=i.params.get("filename*")??i.params.get("filename");const l=Wn(e[nr]);if(_=l?.mime??"text/plain",x=e[or]?.toLowerCase()??"7bit","application/octet-stream"===_||void 0!==E){if(!A--)return q(new fe(413,{body:"too many files"}));if(!E)return void(T=5);t||(E=(t=>{for(let e=t.length;e-- >0;)if("/"===t[e]||"\\"===t[e]){t=t.slice(e+1);break}return".."===t||"."===t?"":t})(E));const e=new I(m);e.once("error",cr),e.once("close",()=>{e.Se?.(),e.off("error",cr),! --C&&b&&process.nextTick(b)}),g=e,++C,P=Math.min(a,k,N,$),n({name:v,type:"file",value:e,filename:E,encoding:x,mimeType:_,sizeLimit:P}),T=4}else{if(!R--)return q(new fe(413,{body:"too many fields"}));T=4,P=Math.min(s,N,$);const t=l?.params.get("charset")?.toLowerCase()??r;S=Un(t)}}),B=Buffer.from(`\r\n--${w}`,"latin1"),D=new tr(B,(t,n,r,o)=>{if(T<=2){if(0===T){if(13===t[n])T=1;else{if(45!==t[n])return void(T=5);T=2}if(++n===r)return}if(1!==T)return 45!==t[n]?void(T=5):(T=6,e.off("data",H),void e.resume());if(10!==t[n++])return void(T=5);if(!O--)return q(new fe(413,{body:"too many parts"}));if(T=3,n===r)return}if(3===T){if(-1===(n=M.push(t,n,r)))return q(new fe(400,{body:"malformed part header"}));if(n===r)return}if(4===T){const e=Math.min(r,n+P);if(P-=r-n,N-=r-n,g){if(k-=r-n,e>n){let r;r=o?t.subarray(n,e):Buffer.copyBytesFrom(t,n,e-n),g.push(r)||(F=!0)}if(P<0)return q(new fe(413,{body:`uploaded file for ${JSON.stringify(v)}: ${JSON.stringify(E)} too large`}))}else{if(P<0)return q(new fe(413,{body:`value for ${JSON.stringify(v)} too long`}));U+=t.latin1Slice(n,e)}}},()=>{if(3===T)return q(new fe(400,{body:"unexpected end of headers"}));if(4===T)if(g)g.push(null),g=void 0,F=!1;else{const t=Buffer.from(U,"latin1");U="",n({name:v,type:"string",value:S.decode(t),encoding:x,mimeType:_})}T<6&&(T=0)});D.push(ar);const H=t=>{if(($-=t.byteLength)<0)return q(new fe(413,{body:"content too large"}));F=!1,D.push(t),g&&F&&(e.pause(),g.Se=()=>e.resume())},j=()=>{if(7!==T){if(6!==T&&(D.destroy(),6!==T))return q(new fe(400,{body:"unexpected end of form"}));e.off("data",H),e.off("end",j),b=()=>{e.off("error",q),d()},C||b()}},q=t=>{7!==T&&(T=7,e.off("data",H),e.off("end",j),e.off("error",q),g?.destroy(t),g=void 0,y(t))};e.on("data",H),e.once("end",j),e.once("error",q)})}(e,r.params);throw new fe(415)}function dr(t,{closeAfterErrorDelay:e=500,...n}={}){L(e,"closeAfterErrorDelay",!0);const r=()=>{if(e>=0&&t.readable){const n=setTimeout(()=>t.socket.destroy(),e);t.once("end",()=>clearTimeout(n))}};try{const e=hr(t.headers,n);gn(t);const o=new W;return e(t,t=>o.push(t)).then(()=>o.close("complete"),e=>{o.fail(t.readableAborted?kt:e),t.resume(),r()}),o}catch(e){throw bn(t)&&(t.resume(),r()),e}}async function wr(t,e={}){const n=new FormData,r=new Map;for await(const o of dr(t,e))if("file"===o.type){const i=o.value;let s=await(e.preCheckFile?.({fieldName:o.name,filename:o.filename,encoding:o.encoding,mimeType:o.mimeType,maxBytes:o.sizeLimit}));const a=t=>{if("function"==typeof s){const e=s;return s=void 0,e({actualBytes:t})}};Tt(t,()=>a(0));const c=await mn(t),f=await c.save(i,{mode:384});await a(f.size);const l=new File([await u(f.path)],o.filename,{type:o.mimeType});r.set(l,f.path),n.append(o.name,l)}else{let t=o.value;e.trimAllValues&&(t=t.trim()),n.append(o.name,t)}return Object.assign(n,{getTempFilePath(t){const e=r.get(t);if(!e)throw new RangeError("unknown file");return e},getBoolean(t){const e=n.get(t);return null===e?null:"true"===e||"on"===e},getString(t){const e=n.get(t);return"string"==typeof e?e:null},getAllStrings:t=>n.getAll(t).filter(t=>"string"==typeof t),getFile(t){const e=n.get(t);return"string"==typeof e?null:e},getAllFiles:t=>n.getAll(t).filter(t=>"string"!=typeof t)})}const pr="win32"===/*@__PURE__*/A();function mr(t,{rejectPotentiallyUnsafe:e=!0}={}){let n=[];const r=ct(t);if(r){if("/"===r.F)return[];n=r.F.split("/")}else{const e=Q(t).pathname;if("/"===e)return[];n=e.split("/").map(decodeURIComponent)}if(""!==n[0])throw new fe(400,{body:"invalid path"});if(n.shift(),e){const t=pr?gr:yr;if(n.some(e=>t.test(e)||e.includes(v)))throw new fe(400,{body:"invalid path"});if(n.slice(0,n.length-1).includes(""))throw new fe(400,{body:"invalid path"})}return n}const yr=/[\x00-\x1F\x7F/]|^(\.\.?|~)$/,gr=/[\x00-\x1F"*/:<>?\\|\x7F]|^[\s.]*$|^(CON|PRN|AUX|NUL|(COM|LPT)[\d\xB9\xB2\xB3])(\.|$)/i,br=t=>new Promise(e=>{const n=()=>{t.cork(),e()};t instanceof s?t.write(K,n):t.once("drain",n),t.uncork()});async function vr(t,e,{delimiter:n=",",newline:r="\n",quote:o='"',encoding:i="utf-8",headerRow:a,end:c=!0}={}){"string"==typeof n&&(n=Buffer.from(n,i)),"string"==typeof r&&(r=Buffer.from(r,i));const f="string"==typeof o?Buffer.from(o,i):o,u=o+o,l=e=>{if(!e)return!0;const n=e.includes(o);return!n&&Er.test(e)?t.write(e,i):(t.write(f),n?t.write(e.replaceAll(o,u),i):t.write(e,i),t.write(f))};t instanceof s&&!t.headersSent&&!t.hasHeader("content-type")&&t.setHeader("content-type","text/csv; charset="+i+(a?"; header=present":!1===a?"; header=absent":"")),t.cork();try{t.write(K);for await(const o of e){if(t.writableAborted)break;let e=0;if(Symbol.iterator in o)for(const r of o)e&&t.write(n),l(r)||await br(t),++e;else for await(const r of o)e&&t.write(n),l(r)||await br(t),++e;t.write(r)||await br(t)}}finally{t.uncork()}c&&t.end()}const Er=/^[^"':;,\\\r\n\t ]*$/i;function _r(t){if(!t||"object"!=typeof t)return!1;const e=t;return"number"==typeof e.fd&&"function"==typeof e.stat&&"function"==typeof e.createReadStream}class xr{constructor(t){(t=>"Te"in t&&"function"==typeof t.pipe)(t)&&(t=I.toWeb(t)),this.wt=t.getReader(),this.$e=null,this.Ne=0,this.m=0}getRange(t,e){if(e<t)throw new RangeError("invalid range");if(t<this.Ne)throw new RangeError("non-sequential range");if(this.m)throw new TypeError("previous range still active");let n=e-t+1,r=t-this.Ne;this.Ne=e+1,this.m=1;const o=this,i=(t,e)=>{const o=t.byteLength;o<=r?r-=o:o>r+n?(this.$e=t.subarray(r+n),e.enqueue(t.subarray(r,r+n)),n=0):r>0?(e.enqueue(t.subarray(r)),n-=o-r,r=0):(e.enqueue(t),n-=o)};return new B({start(t){if(o.$e){const e=o.$e;o.$e=null,i(e,t)}},async pull(t){if(n<=0)return o.m=0,void t.close();const e=await o.wt.read();e.done?t.error(new RangeError("range exceeds content")):"string"==typeof e.value?i(Buffer.from(e.value,"utf-8"),t):e.value instanceof Uint8Array?i(e.value,t):t.error(new TypeError("invalid stream type: must contain bytes or UTF-8 text"))}})}async close(){await this.wt.cancel(),this.wt.releaseLock()}}function Sr(t,{forceSequential:e=!1,mergeOverlapDistance:n=100}={}){const r=[];if(n>=0)for(const e of t.ranges){let t=null,o=0;for(let i=0;i<r.length;++i){const s=r[i];e.end>=s.start-n-1&&s.end>=e.start-n-1?t?(++o,t.start=Math.min(t.start,s.start),t.end=Math.max(t.end,s.end)):(t=s,t.start=Math.min(t.start,e.start),t.end=Math.max(t.end,e.end)):o>0&&(r[i-o]=s)}t?r.length-=o:r.push({...e})}else r.push(...t.ranges);if(e)for(let t=0;t<r.length-1;++t)if(r[t].start>r[t+1].start){r.sort((t,e)=>t.start-e.start);break}return{ranges:r,totalSize:t.totalSize}}async function Tr(t,e,n,r){if(e.closed||!e.writable)throw kt;if("string"==typeof n||_r(n)||(r=Sr(r,{mergeOverlapDistance:0,forceSequential:!0})),1===r.ranges.length){const o=r.ranges[0];if(e.setHeader("content-length",o.end-o.start+1),e.setHeader("content-range",`bytes ${o.start}-${o.end}/${r.totalSize??"*"}`),e.writeHead(206),"HEAD"===t.method)return void e.end();const i=await $r(n);try{if(e.closed||!e.writable)throw kt;await d(i.ke(o.start,o.end),e)}catch(t){throw yn(e,t)?kt:t}finally{i.Oe&&await i.Oe()}return}const o=e.getHeader("content-type"),i=h()+h()+"ABCDEFGHIJKLMNOPQRSTUVWXYZ";e.setHeader("content-type",`multipart/byteranges; boundary=${i}`);const s=r.ranges.map(t=>({i:[`--${i}`,...dt({"content-type":o,"content-range":`bytes ${t.start}-${t.end}/${r.totalSize??"*"}`}),"",""].join("\r\n"),Re:t})),a=`--${i}--`;let c=a.length;for(const{i:t,Re:e}of s)c+=t.length+e.end-e.start+1+2;if(e.setHeader("content-length",c),"HEAD"===t.method)return void e.end();let f="";const u=await $r(n);try{for(const{i:t,Re:n}of s){if(e.closed||!e.writable)throw kt;e.write(f+t,"ascii"),await d(u.ke(n.start,n.end),e,{end:!1}),f="\r\n"}e.end(f+a)}catch(t){throw yn(e,t)?kt:t}finally{u.Oe&&await u.Oe()}}async function $r(t){if("string"==typeof t){const e=await k(t,"r");return{ke:(t,n)=>e.createReadStream({start:t,end:n,autoClose:!1}),Oe:()=>e.close()}}if(_r(t))return{ke:(e,n)=>t.createReadStream({start:e,end:n,autoClose:!1})};{const e=new xr(t);return{ke:(t,n)=>e.getRange(t,n),Oe:()=>e.close()}}}async function Nr(t,e,n,r=null,o){if(e.closed||!e.writable)throw kt;if(!r&&("string"==typeof n?r=await T(n):_r(n)&&(r=await n.stat()),e.closed||!e.writable))throw kt;if(r){if("GET"===t.method||"HEAD"===t.method){if(!In(t,e,r))return void e.writeHead(304).end();e.setHeader("accept-ranges","bytes");const i=$e(t,r.size,o);if(i&&Dn(t,e,r))return Tr(t,e,n,Sr(i,o))}e.setHeader("content-length",r.size)}if(e.writeHead(e.statusCode,e.statusMessage),"HEAD"!==t.method){"string"==typeof n?n=a(n):_r(n)&&(n=n.createReadStream({start:0,autoClose:!1}));try{await d(n,e)}catch(t){throw yn(e,t)?kt:t}}else e.end()}function kr(t,e,{replacer:n,space:r,undefinedAsNull:o=!1,encoding:i="utf-8",end:a=!0}={}){const c=JSON.stringify(e,n,r??void 0)??(o?"null":void 0);t instanceof s&&!t.headersSent&&(t.hasHeader("content-type")||t.setHeader("content-type","application/json"),a&&t.setHeader("content-length",Buffer.byteLength(c,i))),a?t.end(c,i):c&&t.write(c,i)}async function Or(t,e,{replacer:n=null,space:r=null,undefinedAsNull:o=!1,encoding:i="utf-8",end:a=!0}={}){if(Array.isArray(n)){const t=new Set(n.map(t=>String(t)));n=function(e,n){return null===this||Array.isArray(this)||t.has(e)?n:void 0}}"number"==typeof r&&(r=" ".substring(0,r));const c={Ae:e=>t.write(e,i),Pe:()=>br(t),Fe:n,Ce:r??""};if(t instanceof s&&!t.headersSent&&!t.hasHeader("content-type")&&t.setHeader("content-type","application/json"),e=Ar(null,"",e,c),Pr(e))o&&c.Ae("null");else{t.cork(),t.write(K);try{await Rr(c,e,r?"\n":"")}finally{t.uncork()}}a&&t.end()}async function Rr(t,e,n){const r=(r,o,i)=>{t.Ae(r);const s=n+t.Ce,a=t.Ce?": ":":";let c=!0;return{o:async(n,r)=>{const o=Ar(e,n,r,t);i&&Pr(o)||(c?c=!1:t.Ae(","),t.Ae(s),i&&(t.Ae(JSON.stringify(n))||await t.Pe(),t.Ae(a)),await Rr(t,o,s))},Oe:()=>{c||t.Ae(n),t.Ae(o)}}};if(null===e||"object"!=typeof e||e instanceof String||e instanceof Number||e instanceof Boolean||e instanceof Function||e instanceof Symbol||e instanceof BigInt||Fr(e))t.Ae(JSON.stringify(e)??"null")||await t.Pe();else if(e instanceof I){t.Ae('"');for await(const n of e){if("string"!=typeof n)throw new TypeError("Readables must have an encoding");const e=JSON.stringify(n);t.Ae(e.substring(1,e.length-1))||await t.Pe()}t.Ae('"')}else if(e instanceof Map){const t=r("{","}",!0);for(const[n,r]of e)await t.o(n,r);t.Oe()}else if(Cr(e)){let t=0;const n=r("[","]",!1);for(const r of e)await n.o(String(t++),r);n.Oe()}else if(Ur(e)){let t=0;const n=r("[","]",!1);for await(const r of e)await n.o(String(t++),r);n.Oe()}else{const t=r("{","}",!0);for(const[n,r]of Object.entries(e))await t.o(n,r);t.Oe()}}function Ar(t,e,n,r){return r.Fe&&(n=r.Fe.call(t,e,n)),n&&"object"==typeof n&&"function"==typeof n.toJSON&&(n=n.toJSON(e)),n}const Pr=t=>void 0===t||"function"==typeof t||"symbol"==typeof t||t instanceof Function||t instanceof Symbol,Fr=t=>JSON.isRawJSON?.(t)??!1,Cr=t=>Symbol.iterator in t,Ur=t=>Symbol.asyncIterator in t;class Mr{constructor(t,e,{keepaliveInterval:n=15e3,softCloseReconnectDelay:r=500,softCloseReconnectStagger:o=2e3}={}){L(n,"keepaliveInterval",!0),this.Ue=e,this.Me=n,this.C=new AbortController,e.setHeader("content-type","text/event-stream"),e.setHeader("x-accel-buffering","no"),e.setHeader("cache-control","no-store"),e.writeHead(200),e.flushHeaders(),this.ping=this.ping.bind(this),this.Be(),t.once("close",()=>this.close()),mt(t,()=>this.close(r,o))}get signal(){return this.C.signal}get open(){return!this.C.signal.aborted}Be(){this.Me>0&&(this.Ie=setTimeout(this.ping,this.Me))}ping(){!this.C.signal.aborted&&this.Ue.writable&&(clearTimeout(this.Ie),this.Ue.write(":\n\n",()=>this.Be()))}send({event:t,id:e,data:n,reconnectDelay:r=-1}){return this.sendFields([["event",t],["id",e],["data",n],["retry",r>=0?String(0|r):void 0]])}async sendFields(t){let e;this.C.signal.throwIfAborted(),this.Ue.cork();try{let n=!1;for(const[e,r]of t){if(void 0===r)continue;const t=r.split(/(?<=\n)|(?<=\r)(?!\n)/g);for(let n of t)this.Ue.write(e)," "===n[0]?this.Ue.write(": "):this.Ue.write(":"),this.Ue.write(n);/[\r\n]$/.test(r)?(this.Ue.write(e),this.Ue.write(":\n")):this.Ue.write("\n"),n=!0}if(!n)return;clearTimeout(this.Ie),this.Ue.write("\n",()=>e())}finally{this.Ue.uncork()}await new Promise(t=>{e=t}),this.Be()}async close(t=0,e=0){if(this.C.signal.aborted){if(this.Ue.closed)return;return new Promise(t=>this.Ue.once("close",t))}this.Me=0,clearTimeout(this.Ie),this.C.abort(new Error("ServerSentEvents closed")),await new Promise(n=>{if(this.Ue.writable&&(t>0||e>0)){const r=t+Math.random()*e;this.Ue.end(`retry:${0|r}\n\n`,n)}else this.Ue.end(n)})}}const Br=async(t,{mode:e="dynamic",fallback:n,verbose:r,callback:o=Ir,...i}={})=>{const s=await dn.build(E(process.cwd(),t),i);let a=null;const c=n?.statusCode??200;if(n){let t=n.filePath;t.startsWith("/")&&(t=t.substring(1)),a=s.toNormalisedPath(t.split("/"))}const f="dynamic"===e?{}:{rejectPotentiallyUnsafe:!1},u="dynamic"===e?s:await s.precompute();return{handleRequest:async(t,e)=>{if("GET"!==t.method&&"HEAD"!==t.method)return Ot;let n=!1;const i=mr(t,f),s=[];let l=await u.find(i,t.headers,r?s:void 0);if(!l){if(!a)return r&&un(t,new Error(s.join(", ")),"serving static content"),Ot;if(n=!0,l=await u.find(a,t.headers,s),!l)throw new fe(500,{message:`failed to find fallback file: ${s.join(", ")}`})}try{n&&(e.statusCode=c);const r=l.headers["content-type"]??rn(m(l.canonicalPath));e.setHeader("content-type",r);const i=l.headers["content-language"];i&&e.setHeader("content-language",i);const s=l.headers["content-encoding"];s&&"identity"!==s&&e.setHeader("content-encoding",s);const a=l.headers.vary;if(a){const t=e.getHeader("vary")??"";e.setHeader("vary",(t?t+", ":"")+a)}await o(t,e,l,n),await Nr(t,e,l.handle,l.stats)}finally{l.handle.close().catch(()=>{})}}}};function Ir(t,e,n){e.setHeader("etag",ze(e.getHeader("content-encoding"),n.stats)),e.setHeader("last-modified",n.stats.mtime.toUTCString())}class Dr extends Error{constructor(t,{message:e,closeReason:n,...r}={}){super(e,r),this.closeCode=0|t,this.closeReason=n??"",this.name=`WebSocketError(${this.closeCode} ${this.closeReason})`}static NORMAL_CLOSURE=1e3;static GOING_AWAY=1001;static UNSUPPORTED_DATA=1003;static POLICY_VIOLATION=1008;static MESSAGE_TOO_BIG=1009;static INTERNAL_SERVER_ERROR=1011;static SERVICE_RESTART=1012;static TRY_AGAIN_LATER=1013;static BAD_GATEWAY=1014}function Hr(t,{softCloseStatusCode:e=Dr.GOING_AWAY,...n}={}){const r=(r,o,i)=>new Promise((s,a)=>{const c=new t({...n,noServer:!0,clientTracking:!1});c.once("wsClientError",a),c.handleUpgrade(r,o,i,t=>{c.off("wsClientError",a),i=K,s({return:t,onError:e=>{const n=V(e,Dr);if(n)return void t.close(n.closeCode,n.closeReason);const r=V(e,fe)??new fe(500),o=r.statusCode>=500?Dr.INTERNAL_SERVER_ERROR:4e3+r.statusCode;t.close(o,r.statusMessage)},softCloseHandler:n=>t.close(e,n)})})});return t=>Pt(t,r)}class jr{constructor(t,e){this.data=t,this.isBinary=e}get text(){if(this.isBinary)throw new Dr(Dr.UNSUPPORTED_DATA,{closeReason:"expected text"});return this.data.toString("utf-8")}get binary(){if(!this.isBinary)throw new Dr(Dr.UNSUPPORTED_DATA,{closeReason:"expected binary"});return this.data}}class qr{constructor(t,{limit:e=-1,signal:n}={}){this.De=new W;const r=e=>{t.off("message",i),t.off("close",o),this.De.close(new Error(e))},o=()=>r("connection closed"),i=(t,n)=>{void 0!==n?this.De.push(new jr(t,n)):"string"==typeof t?this.De.push(new jr(Buffer.from(t,"utf-8"),!1)):this.De.push(new jr(t,!0)),e>0&&0===--e&&this.detach()};this.detach=()=>{},n?.aborted?this.De.close(n.reason):2===t.readyState||3===t.readyState?this.De.close(new Error("connection closed")):(t.on("message",i),t.on("close",o),n?.addEventListener("abort",()=>r("signal aborted")),this.detach=()=>r("WebSocket listener detached"))}next(t){return this.De.shift(t)}[Symbol.asyncIterator](){return this.De[Symbol.asyncIterator]()}}function zr(t,{timeout:e,signal:n}={}){const r=new qr(t,{limit:1,signal:n});return r.next(e).finally(()=>r.detach())}function Jr(t){const e=ut(t);return"GET"===t.method&&(e.I?.has("websocket")??!1)}const Lr=t=>t.headers.origin??wt(t.headers["sec-websocket-origin"]),Gr=(t,e=5e3)=>async n=>{if(!Jr(n))return;const r=await t(n);let o;try{o=await zr(r,{timeout:e})}catch(t){if((r.readyState??0)>=2)throw kt;throw new Dr(Dr.POLICY_VIOLATION,{closeReason:"timeout waiting for authentication token",cause:t})}if(o.isBinary)throw new Dr(Dr.UNSUPPORTED_DATA,{closeReason:"authentication token must be sent as text"});return o.data.toString("utf-8")};export{W as BlockingQueue,Ot as CONTINUE,dn as FileFinder,fe as HTTPError,Rt as NEXT_ROUTE,At as NEXT_ROUTER,Ve as Negotiator,Fe as Property,G as Queue,ne as Router,kt as STOP,Mr as ServerSentEvents,ye as WebListener,Dr as WebSocketError,jr as WebSocketMessage,qr as WebSocketMessages,gn as acceptBody,Pt as acceptUpgrade,Tt as addTeardown,Vt as anyHandler,In as checkIfModified,Dn as checkIfRange,Hn as compareETag,sn as compressFileOffline,an as compressFilesInDir,Yt as conditionalErrorHandler,en as decompressMime,St as defer,Ft as delegateUpgrade,un as emitError,Zt as errorHandler,Br as fileServer,V as findCause,Je as generateStrongETag,ze as generateWeakETag,$t as getAbortSignal,Jt as getAbsolutePath,Z as getAddressURL,xe as getAuthorization,Ln as getBodyJson,qn as getBodyStream,Jn as getBodyText,zn as getBodyTextStream,Se as getCharset,wr as getFormData,dr as getFormFields,Te as getIfRange,rn as getMime,zt as getPathParameter,qt as getPathParameters,Ee as getQuery,$e as getRange,mr as getRemainingPathComponents,be as getSearch,ve as getSearchParams,Un as getTextDecoder,Mn as getTextDecoderStream,Lr as getWebSocketOrigin,De as hasAuthScope,gt as isSoftClosed,Jr as isWebSocketRequest,ln as jsonErrorHandler,Hr as makeAcceptWebSocket,j as makeAddressTester,_n as makeGetClient,Ce as makeMemo,mn as makeTempFileStorage,Gr as makeWebSocketFallbackTokenFetcher,We as negotiateEncoding,zr as nextWebSocketMessage,H as parseAddress,vn as proxy,Ae as readHTTPDateSeconds,ke as readHTTPInteger,Re as readHTTPKeyValues,Oe as readHTTPQualityValues,Ne as readHTTPUnquotedCommaSeparated,tn as readMimeTypes,Fn as registerCharset,nn as registerMime,Cn as registerUTF32,Tn as removeForwarded,$n as replaceForwarded,Gt as requestHandler,He as requireAuthScope,Ie as requireBearerAuth,Qe as resetMime,Lt as restoreAbsolutePath,Nn as sanitiseAndAppendForwarded,bt as scheduleClose,vr as sendCSVStream,Nr as sendFile,kr as sendJSON,Or as sendJSONStream,Tr as sendRanges,Ir as setDefaultCacheHeaders,mt as setSoftCloseHandler,kn as simpleAppendForwarded,Sr as simplifyRange,Y as stringPredicate,he as toListeners,Xt as typedErrorHandler,Wt as upgradeHandler,bn as willSendBody};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "web-listener",
3
- "version": "0.17.1",
3
+ "version": "0.17.3",
4
4
  "description": "a small server abstraction for creating API and resource endpoints with middleware",
5
5
  "author": "David Evans",
6
6
  "license": "MIT",