web-listener 0.16.0 → 0.17.0

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 +47 -32
  2. package/index.js +2 -2
  3. package/package.json +1 -1
package/index.d.ts CHANGED
@@ -132,6 +132,7 @@ interface NativeListenersOptions {
132
132
  type ServerGeneralErrorCallback = (error: unknown, context: string, req: IncomingMessage | undefined) => void;
133
133
  interface NativeListeners {
134
134
  request: RequestListener;
135
+ checkContinue: RequestListener;
135
136
  upgrade: UpgradeListener;
136
137
  shouldUpgrade: ShouldUpgradeCallback;
137
138
  clientError: ClientErrorListener;
@@ -865,6 +866,7 @@ declare function getBodyText(req: IncomingMessage, options?: GetBodyTextOptions)
865
866
  declare function getBodyJson(req: IncomingMessage, options?: GetBodyJsonOptions): Promise<unknown>;
866
867
 
867
868
  declare function acceptBody(req: IncomingMessage): void;
869
+ declare function willSendBody(req: IncomingMessage): boolean;
868
870
 
869
871
  interface BusboyOptions {
870
872
  /**
@@ -872,7 +874,6 @@ interface BusboyOptions {
872
874
  * @default false
873
875
  */
874
876
  blockMultipart?: boolean;
875
- limits?: Limits;
876
877
  /**
877
878
  * `true` to preserve path information in filenames. `false` to only include the basename (omitting everything before the last `/` or `\`)
878
879
  * @default false
@@ -894,54 +895,68 @@ interface BusboyOptions {
894
895
  * @default 'utf-8'
895
896
  */
896
897
  defCharset?: string;
897
- }
898
- interface CommonFormField {
899
- name: string;
900
- mimeType: string;
901
- encoding: string;
902
- }
903
- interface FileFormField extends CommonFormField {
904
- type: 'file';
905
- value: Readable;
906
- filename: string;
907
- }
908
- interface StringFormField extends CommonFormField {
909
- type: 'string';
910
- value: string;
911
- }
912
- type FormField = StringFormField | FileFormField;
913
- interface Limits {
914
898
  /**
915
- * Max field name size (in bytes).
899
+ * The maximum content length as sent (including e.g. multipart boundaries and headers)
900
+ * @default Infinity
901
+ */
902
+ maxNetworkBytes?: number;
903
+ /**
904
+ * The maximum content length, combining all field names, values, and files
905
+ * @default maxNetworkBytes
906
+ */
907
+ maxContentBytes?: number;
908
+ /**
909
+ * The maximum field name size (in bytes).
916
910
  * @default 100
917
911
  */
918
- fieldNameSize?: number | undefined;
912
+ maxFieldNameSize?: number | undefined;
919
913
  /**
920
- * Max field value size (in bytes).
914
+ * The maximum field value size (in bytes).
921
915
  * @default 1048576 (1MB)
922
916
  */
923
- fieldSize?: number | undefined;
917
+ maxFieldSize?: number | undefined;
918
+ /**
919
+ * The maximum number of non-file fields.
920
+ * @default Infinity
921
+ */
922
+ maxFields?: number | undefined;
924
923
  /**
925
- * Max number of non-file fields.
924
+ * For multipart forms, the maximum file size (in bytes).
926
925
  * @default Infinity
927
926
  */
928
- fields?: number | undefined;
927
+ maxFileSize?: number | undefined;
929
928
  /**
930
- * For multipart forms, the max file size (in bytes).
929
+ * For multipart forms, the maximum combined file size (in bytes) for all files in the request.
931
930
  * @default Infinity
932
931
  */
933
- fileSize?: number | undefined;
932
+ maxTotalFileSize?: number | undefined;
934
933
  /**
935
- * For multipart forms, the max number of file fields.
934
+ * For multipart forms, the maximum number of files.
936
935
  * @default Infinity
937
936
  */
938
- files?: number | undefined;
937
+ maxFiles?: number | undefined;
939
938
  /**
940
- * For multipart forms, the max number of parts (fields + files).
939
+ * For multipart forms, the maximum number of parts (fields + files).
941
940
  * @default Infinity
942
941
  */
943
- parts?: number | undefined;
942
+ maxParts?: number | undefined;
943
+ }
944
+ interface CommonFormField {
945
+ name: string;
946
+ mimeType: string;
947
+ encoding: string;
944
948
  }
949
+ interface FileFormField extends CommonFormField {
950
+ type: 'file';
951
+ value: Readable;
952
+ filename: string;
953
+ sizeLimit: number;
954
+ }
955
+ interface StringFormField extends CommonFormField {
956
+ type: 'string';
957
+ value: string;
958
+ }
959
+ type FormField = StringFormField | FileFormField;
945
960
  declare global {
946
961
  interface Buffer {
947
962
  latin1Slice(begin?: number, end?: number): string;
@@ -970,7 +985,7 @@ interface PreCheckFileInfo {
970
985
  filename: string;
971
986
  encoding: string;
972
987
  mimeType: string;
973
- maxBytes: number | undefined;
988
+ maxBytes: number;
974
989
  }
975
990
  type PostCheckFile = (actual: PostCheckFileInfo) => MaybePromise<void>;
976
991
  interface PostCheckFileInfo {
@@ -1328,5 +1343,5 @@ declare class Property<T> {
1328
1343
  }
1329
1344
  declare const makeMemo: <T, Args extends any[] = []>(fn: (req: IncomingMessage, ...args: Args) => T, ...args: Args) => ((req: IncomingMessage) => T);
1330
1345
 
1331
- 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 };
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 };
1332
1347
  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 y,join as m,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 k,open as N,mkdtemp as O}from"node:fs/promises";import{tmpdir as A,platform as R}from"node:os";import{Agent as P,request as F}from"node:https";import{TransformStream as U,TextDecoderStream as C,DecompressionStream as I,ReadableStream as B}from"node:stream/web";import{Readable as M,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([J(t[1])|r,r]);continue}const i=/^\[?([\da-fA-F:]+)\]?(?:\/(\d+))?$/.exec(o);if(i?.[1]){const t=z(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=J(t.address);return n.some(([t,e])=>(o|e)===t);case"IPv6":const i=z(t.address);return r.some(([t,e])=>(i|e)===t);default:return!1}}}const q=/*@__PURE__*/BigInt("0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF");function J(t){const e=t.split(".").map(Number);return(e[0]<<24|e[1]<<16|e[2]<<8|e[3])>>>0}function z(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.k=!1}N(t){this.k?t!==this.O&&(this.O=new et(t,this.O)):(this.O=t,this.k=!0)}A(){this.k=!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={R:t,P:o,F:decodeURIComponent(o.pathname),U:new AbortController,C:e,I:[],B:[],M:n?at(t):null};return rt.set(t,i),i}function it(t,e,n){e||(t.M=null),t.D=n;const r=async()=>{t.U.abort(n.H.writableEnded?"complete":"client abort");const e=new nt;await st(t.I,e,t),await st(t.B,e,t,()=>{t.j=async e=>{try{await e()}catch(e){t.C(e,"tearing down",t.R)}}}),e.k&&t.C(e.O,"tearing down",t.R)};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.N(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 yt(t,e){const n=ct(t);n&&mt(n,e)}function mt(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.M){const e=t.D.H;e.headersSent||e.hasHeader("connection")||e.setHeader("connection","close")}t.D?.H.once("close",()=>t.R.socket.destroy()),t.Z={X:e,C:n},_t(t.V,t.Z,t),Et(t)}}function vt(t){if(t.D){if(t.M){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.R.socket.destroy())}else t.R.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.C(t,"soft closing",n.R),vt(n)}}const xt=(t,e)=>{const n=ut(t);n.j?n.j(e):n.I.push(e)},St=(t,e)=>{const n=ut(t);n.j?n.j(e):n.B.push(e)},Tt=t=>ut(t).U.signal;class $t extends Error{}const kt=/*@__PURE__*/new $t("STOP"),Nt=/*@__PURE__*/new $t("CONTINUE"),Ot=/*@__PURE__*/new $t("NEXT_ROUTE"),At=/*@__PURE__*/new $t("NEXT_ROUTER");async function Rt(t,e){const n=ut(t);if(!n.D)throw new TypeError("cannot call acceptUpgrade from shouldUpgrade");if(!n.M)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 kt;n.Y=1;const o=await e(t,r,n.D.i);return n.D.i=K,n.ot=o.onError,o.softCloseHandler&&mt(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.M)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"))),Ut=t=>t,Ct=t=>void 0===t?void 0:""===t?[]:t.split("/"),It=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"]])),Mt=(t,e)=>{Object.prototype.hasOwnProperty.call(t,e)&&delete t[e]},Dt=Object.freeze({});function Ht(t,e,n){const r=t.R.url,o=t.F,i=t.ct??Dt;return t.R.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.R.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 Jt(t){const e=ct(t);return e?e.P.pathname+e.P.search:t.url??"/"}function zt(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=[]}N(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?Ct:It})}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(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.N(null,null,null,!0,t.map(Yt))}mount(t,...e){return this.N(null,null,t,!0,e.map(Yt))}within(t){const e=new ee;return this.mount(t,e),e}at(t,...e){return this.N(null,null,t,!1,e.map(Yt))}onRequest(t,e,...n){return this.N(re(t),te,e,!1,n.map(Yt))}onUpgrade(t,e,n,...r){return this.N(re(t),e,n,!1,r.map(Kt))}onError(...t){return this.N(null,null,null,!0,t.map(Vt))}onReturn(...t){return this.ut.push(...t),this}get=(t,...e)=>this.N(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.N(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.kt(n,e);if(e.k)throw e.O;return r}async kt(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.Nt();o=Ht(t,r.$t,e)}catch(t){e.N(t);continue}try{const r=await ie(t,n.xt,this.ut,e);if(r===At)break;if(r===Ot)continue;return r}finally{o()}}return Nt}}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.R.method)return!1}else if(null!==e.bt&&!e.bt.has(t.R.method??""))return!1;if(e.vt===te){if(t.M)return!1}else if(null!==e.vt&&!t.M?.has(e.vt))return!1;if(null===e.Et)return!0;const n=e.Et.exec(t.F);return!!n&&{$t:"/"+(n.groups?.rest??""),Nt:()=>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!==Nt){if(!t.M&&!(e instanceof $t)&&n.length)try{const r="object"==typeof e?e:void 0,o=t.R,i=t.D.H;for(const t of n)await t(r,o,i)}catch(t){r.N(t);continue}return e}}return Ot}async function se(t,e,n){if(t instanceof ee)return t.kt(e,n);let r=Nt;try{if(n.k){if(t.handleError){const o=n.O,i=e.M?{socket:e.D.H,head:e.D.i,hasUpgraded:Boolean(e.Y)}:{response:e.D.H};t.shouldHandleError&&!t.shouldHandleError(o,e.R,i)||(n.A(),r=await t.handleError(o,e.R,i))}}else if(e.M){if(t.handleUpgrade){const n=e.D;r=await t.handleUpgrade(e.R,n.H,n.i)}}else t.handleRequest&&(r=await t.handleRequest(e.R,e.D.H))}catch(t){t instanceof $t?r=t:n.N(t)}finally{e.I.length&&await((t,e)=>st(t.I,e,t))(e,n)}return r===kt?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.R)}catch(t){return e.C(t,"checking should upgrade",e.R),!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)})};return{request:async(n,s)=>{let a;try{a=ot(n,e,!1)}catch(t){return e(t,"parsing request",n),void fe(new ce(400),0,{response:s})}if(it(a,!1,{H:s}),u(a),1===r)bt(a,o,i);else if(2===r)return vt(a),void ft(n);const c=new nt,f=await se(t,a,c);c.k||f!==Nt&&f!==Ot&&f!==At||c.N(new ce(404)),c.k&&(e(c.O,"handling request",n),fe(c.O,0,{response:s}),ft(n))},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.k||h!==Nt&&h!==Ot&&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.N(new ce(404))),l.k&&(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.Ot,o=t.code;n.writable&&!r?.headersSent&&n.end(we.get(o)??pe),n.destroy(t),"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 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}))&&he(e,n,r)},r=le(this.At,{...e,onError:n});!1===e.autoContinue&&t.addListener("checkContinue",r.request),!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.request),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 me=t=>ct(t)?.P??Q(t),ge=t=>me(t).search,be=t=>new URLSearchParams(me(t).searchParams),ve=(t,e)=>me(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:Ae(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=ke(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 ke(t){if(t&&/^\s*-?\d+\s*$/.test(t))return Number.parseInt(t,10)}const Ne=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 Ae(t){if("string"!=typeof t)return;const e=Date.parse(t);return Number.isNaN(e)?void 0:e/1e3|0}const Re=t=>"function"==typeof t?t:()=>t;class Pe{constructor(t=Ie){this.Rt=Re(t)}set(t,e){Ue(ut(t)).set(this,e)}get(t){return Ce(t,this,this.Rt)}clear(t){const e=ct(t);e?.Pt?.delete(this)}withValue(t){return Wt(e=>(this.set(e,t),Nt))}}const Fe=(t,...e)=>{const n=n=>t(n,...e);return t=>Ce(t,n,n)};function Ue(t){return t.Pt||(t.Pt=new Map),t.Pt}function Ce(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 Ie=()=>{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=Re(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,C:o??i.C}),Et(i))})(t,"token expired",e,o,i)}}return He.set(t,{Ft:c,Ut:!0,Ct:h,It:je(h)}),Nt}),getTokenData:t=>{const e=He.get(t);if(!e.Ut)throw new TypeError("cannot use getTokenData in an unauthenticated endpoint");return e.Ct}}}const Me=(t,e)=>He.get(t).It.has(e),De=t=>Wt(e=>{const n=He.get(e);if(!n.It.has(t))throw new ce(403,{headers:{"www-authenticate":`Bearer realm="${n.Ft}", scope="${t}"`},body:`scope required: ${t}`});return Nt}),He=/*@__PURE__*/new Pe({Ft:"",Ut:!1,Ct:null,It: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 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 ze={type:{Bt:"accept",Mt:"content-type"},language:{Bt:"accept-language",Mt:"content-language"},encoding:{Bt:"accept-encoding",Mt:"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.Dt=t.map(t=>{if(!Object.prototype.hasOwnProperty.call(ze,t.feature))throw new RangeError(`unknown negotiation feature: ${t.feature}`);return{Ht:t.feature,jt:Y(t.match,!0),qt:t.options.map(t=>({Jt:t.file,zt:t.value,jt:Y(t.for??t.value,!0)}))}}).filter(t=>t.qt.length>0),this.Lt=e}*options(t,e){const n=this.Dt,r=new Set,o=this.Lt,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.jt(t))return void(yield*c(f,u+1));const h=ze[l.Ht];s.add(ze[l.Ht].Bt),a=!0;const d=Ne(e[h.Bt])?.sort(Ve);if(!d?.length)return void(yield*c(f,u+1));const w=new Set,p=[];for(const t of l.qt){const e=d.find(e=>t.jt(e.name));e&&p.push({...e,Gt:t})}for(const t of p.sort(Ve)){const e=Ze(f,t.Gt.Jt);if(!w.has(e)&&(w.add(e),i[h.Mt]=t.Gt.zt,yield*c(e,u+1),r.size>=o))return}delete i[h.Mt],!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(/\.[^.]*$/,""):y(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(y(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=m(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=m(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(m(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.C(e,n??(r.M?"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)=>Ne(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.Wt=t,this.Vt=!0===e?Number.POSITIVE_INFINITY:e||0,this.Zt=n,this.Xt=r,this.Yt=o,this.Kt=i,this.Qt=c,this.te=["",...f],this.ee=new Set(s.map(t=>this.ne(t))),this.re=Y(a,!n),this.oe=new Set(c.map(t=>this.ne(t))),this.ie=u}static async build(t,e={}){return new hn(await k(t,{encoding:"utf-8"})+v,e)}ne(t){return"exact"===this.Zt?t:t.toLowerCase()}se(t){if(this.ee.has(t))return!0;const e=t.trim();return!(!("~"!==e[0]&&"~"!==e[e.length-1]||this.Yt)||"."===e[0]&&!this.Xt||this.re(e))}toNormalisedPath(t){const e=t[t.length-1];return e&&this.oe.has(this.ne(e))?t.slice(0,t.length-1):t}async find(t,e={},n){let r=t.join(v);if("force-lowercase"===this.Zt&&(r=r.toLowerCase()),/(^|[\\\/])\.\.($|[\\\/])|^[\\\/]/.test(r))return n?.push(`${JSON.stringify(r)} is not permitted`),null;let o=E(this.Wt,r);if(!o.startsWith(this.Wt)&&o+v!==this.Wt)return n?.push(`${JSON.stringify(o)} is not inside root ${JSON.stringify(this.Wt)}`),null;let i=null,s=null;for(const t of this.te){const e=o+t;if(i=e.substring(this.Wt.length).split(v).filter(t=>t),i.length-1>this.Vt)return n?.push(`${JSON.stringify(o)} is nested too deeply (${i.length-1} > ${this.Vt})`),null;if(i.some(t=>!this.se(this.ne(t))))return n?.push(`${JSON.stringify(o)} is not permitted`),null;const r=i[i.length-1]??"";if(!this.Kt&&this.oe.has(this.ne(r))&&!this.ee.has(this.ne(r)))return n?.push(`${JSON.stringify(o)} is a hidden index file`),null;if(s=await k(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.ne(s)!==this.ne(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.Vt)return n?.push(`${JSON.stringify(s)} index file is nested too deeply (${i.length} > ${this.Vt})`),null;for(const t of this.Qt){const e=m(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.ie)return wn({canonicalPath:a,negotiatedPath:a,headers:{}},n);const f=b(a),u=g(a);for(const t of this.ie.options(f,e)){if(!t.filename||t.filename.includes(v))continue;const e=await wn({canonicalPath:a,negotiatedPath:m(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.Wt],depth:0});for(const{dir:t,depth:r}of n){const o=await $(m(...t),{withFileTypes:!0,encoding:"utf-8"}),i=new Set(o.map(t=>this.ne(t.name)));for(const s of o){const o=this.ne(s.name);if(!this.se(o))continue;const a=[...t,s.name];if(s.isDirectory())r<this.Vt&&n.push({dir:a,depth:r+1}),e(this.ne(a.slice(1).join("/")),dn);else if(s.isFile()){const n={file:m(...a),dir:m(...t),basename:o,siblings:i},r=this.Qt.indexOf(o);if(-1!==r&&(e(this.ne(t.slice(1).join("/")),{...n,p:this.Qt.length+1-r}),!this.Kt&&!this.ee.has(o)))continue;const c=this.ne(a.slice(1).join("/"));for(let t=0;t<this.te.length;++t){const r=this.te[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.ne(e.join("/")));if(!o?.file)return r?.push(`${JSON.stringify(e.join("/"))} not found in static file paths`),null;if(!this.ie)return wn({canonicalPath:o.file,negotiatedPath:o.file,headers:{}},r);for(const t of this.ie.options(o.basename,n)){if(!o.siblings.has(this.ne(t.filename)))continue;const e=await wn({canonicalPath:o.file,negotiatedPath:m(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 N(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 kt;e.throwIfAborted();const n=await O(m(A(),"upload"));St(t,()=>S(n,{recursive:!0}));let r=0;const o=()=>{if(e.aborted)throw kt;return m(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()}}}});function yn(t){const e=ut(t);if(!e.D)throw new TypeError("cannot call acceptBody from shouldUpgrade");if(e.U.signal.aborted)throw kt;e.ae||e.M||(e.ae=!0,"100-continue"===t.headers.expect?.trim().toLowerCase()&&e.D.H.writeContinue())}function mn(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(kt);const p=Tt(t),y=t=>c(p.aborted?kt:new ce(502,{cause:t})),m=new URL(w+t.url?.substring(1));if(!m.pathname.startsWith(h)&&m.pathname!==l)return c(new ce(400,{message:"directory traversal blocked"}));yn(t);let g={...t.headers};gn(g,e);for(const e of n)g=e(t,g);const b=u(f,{agent:a,path:m.pathname+m.search,method:t.method,headers:g,signal:p});b.once("error",y),b.once("response",e=>{if(o.closed||!o.writable)return c(kt);if(!o.headersSent){let n={...e.headers};gn(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,c)}),d(t,b).catch(y)}))}function gn(t,e){for(const e of $e(t.connection)??[])Mt(t,e.toLowerCase());for(const n of e)Mt(t,n)}function bn({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=[vn(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 vn=t=>({client:{...H(t.socket.remoteAddress)??En,port:t.socket.remotePort},server:{...H(t.socket.localAddress)??En,port:t.socket.localPort},host:t.headers.host,proto:t.socket.encrypted?"https":"http"}),En={family:"alias",address:"_disconnected",port:void 0};function _n(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 xn(t,e){const n=_n(0,e);return n.forwarded=$n([vn(t)]),n}const Sn=(t,{onlyTrusted:e=!1}={})=>(n,r)=>{const o=_n(0,r),i=t(n);return o.forwarded=$n([...e?i.trusted:i.outwardChain].reverse()),o};function Tn(t,e){let n=t.headers.forwarded;const r=$n([vn(t)]);n?n+=", "+r:n=r;const o=_n(0,e);return o.forwarded=n,o}function $n(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 kn{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 Nn extends U{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 On=new Map;function An(t,e){On.set(t.toLowerCase(),e)}function Rn(){An("utf-32be",{decoder:t=>new kn(!1,t)}),An("utf-32le",{decoder:t=>new kn(!0,t)})}function Pn(t,e={}){const n=On.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 Fn(t,e={}){const n=On.get(t.toLowerCase());if(n)return n.decoderStream?n.decoderStream(e):new Nn(n.decoder(e));try{return new C(t,e)}catch{throw new ce(415,{body:`unsupported charset: ${t}`})}}const Un=["utf-32be",null,"utf-16be","utf-16be","utf-32le","utf-16le",null,"utf-8"];function Cn(t,e,n){const r=Ae(t.headers["if-modified-since"]),o=$e(t.headers["if-none-match"]);if(o){if(Bn(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&&=Bn(e,n,o.etag)),o.modifiedSeconds&&(r&&=(n.mtimeMs/1e3|0)===o.modifiedSeconds),r}function Bn(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 Mn extends U{constructor(t,e){super({transform(r,o){n+=r.byteLength,n>t?o.error(e):o.enqueue(r)}});let n=0}}function Dn(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 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=M.toWeb(t);void 0===o&&Number.isFinite(n)&&(s=s.pipeThrough(new Mn(n,new ce(413))));for(const t of i.reverse())s=s.pipeThrough(Jn(t));return Number.isFinite(e)&&(s=s.pipeThrough(new Mn(e,new ce(413,{body:"decoded content too large"})))),s}function Hn(t,e={}){const n=Dn(t,e),r=xe(t)??e.defaultCharset??"utf-8";return n.pipeThrough(Fn(r,e))}async function jn(t,e={}){const n=[];for await(const r of Hn(t,e))n.push(r);return n.join("")}async function qn(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=Un[(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=Fn(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)})(Dn(t,e),e),r=[];for await(const t of n)r.push(t);return JSON.parse(r.join(""))}function Jn(t){switch(t.toLowerCase()){case"gzip":case"x-gzip":return new I("gzip");case"deflate":return new I("deflate");case"br":try{return new I("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 zn(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 Ln(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(!Wn[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(!Zn[n]){if(39!==n)return!1;break}}if(e===o)return!1;const i=Pn(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!==Vn[n]){if(37===n){let n,r;if(e+2<o&&16!==(n=Yn[t[e+1]])&&16!==(r=Yn[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),!Xn[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(!Wn[n]){if(e===a)return!1;break}}n.has(s)||n.set(s,r.decode(t.subarray(a,e)))}return!0}const Gn=[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],Wn=/*@__PURE__*/(()=>{const t=new Uint8Array(256);return t.set([1,0,1,1,1,1,1,0,0,1,1,0,1,1,0,...Gn,0,1,0,1],33),t})(),Vn=/*@__PURE__*/(()=>{const t=new Uint8Array(256);return t.set([1,0,1,1,0,1,0,0,0,0,1,0,1,1,0,...Gn,0,1,0,1],33),t})(),Zn=/*@__PURE__*/(()=>{const t=new Uint8Array(256);return t.set([1,0,1,1,1,1,0,0,0,0,1,0,1,0,0,...Gn,1,0,1,1],33),t})(),Xn=/*@__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})(),Yn=/*@__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 Kn{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.ye=null,this.me=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.me;if(this.me){const a=this.ge,c=this.ye,f=r[o];if(i>0){const n=t[s+o];n!==f||t.compare(r,-s,o,0,s+o)?s+=a[n]:(this.we(K,0,0,!0),this.pe(),this.me=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.me+s,this.me)&&!t.compare(r,-s,o,0,s+o)){this.we(c,0,this.me+s,!1),this.pe(),this.me=0,e=s+=o+1;break}s+=a[n]}const l=this.me;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.me+=n-o);s=o+1-l}this.we(c,0,l,!1),this.me=0}}for(;s<i;){const n=t.indexOf(r,s);if(-1!==n){if(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.ye){this.ye=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.ye,0,i),this.me=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.me;t&&this.ye&&this.we(this.ye,0,t,!1),this.me=0}}class Qn{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&&Wn[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=rr.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 tr=0,er=1,nr=2,rr=new Map([["content-type",{_e:tr,xe:!1}],["content-disposition",{_e:er,xe:!1}],["content-transfer-encoding",{_e:nr,xe:!0}]]);class or extends M{}function ir(t){const e=this.Se;e&&(this.Se=void 0,e())}const sr=/*@__PURE__*/Buffer.from("\r\n"),ar=37,cr=43,fr=/*@__PURE__*/new Uint8Array(256);function ur(t,e={}){const n=t["content-type"];if(!n)throw new ce(400,{body:"missing content-type"});const r=zn(n);if(!r)throw new ce(400,{body:"malformed content-type"});if("application/x-www-form-urlencoded"===r.mime)return(({limits:t={},defCharset:e="utf-8"},n)=>{const r=n.get("charset")??e,o=t.fieldSize??1048576,i=t.fieldNameSize??100,s=/^utf-?8$/i.test(r)?1:/^(latin-?1|iso[\-_]?8859-?1|(us-)?ascii)$/i.test(r)?2:0,a=Pn(r);return(e,n)=>new Promise((c,f)=>{let u=t.fields??Number.POSITIVE_INFINITY,l=!0,h="",d=i,w=0,p="",y=-2;const m=()=>{const t=!s||1===s&&8&w?a.decode(Buffer.from(h,"latin1")):h;if(l){if(d<0)return v(new ce(400,{body:`field name ${JSON.stringify(t)}... too long`})),!1;t&&n({name:t,type:"string",value:"",encoding:r,mimeType:"text/plain"})}else{if(d<0)return v(new ce(400,{body:`value for ${JSON.stringify(p)} too long`})),!1;n({name:p,type:"string",value:t,encoding:r,mimeType:"text/plain"})}return!0},g=t=>{if(!t.byteLength)return;if(!u)return v(new ce(400,{body:"too many fields"}));const e=t.byteLength;let n=0,r=y;if(-2!==r){if(-1===r){if(16===(r=Yn[t[n++]]))return v(new ce(400,{body:"malformed urlencoded form"}));if(w|=r,n===e)return void(y=r)}const o=Yn[t[n++]];if(16===o)return v(new ce(400,{body:"malformed urlencoded form"}));if(h+=String.fromCharCode((r<<4)+o),y=-2,n===e)return}for(fr[37]=1,fr[38]=1,fr[43]=1,fr[61]=l?1:0;;){const r=n;for(;n<e&&!fr[t[n]];++n);if(n>r&&d>=0&&((d-=n-r)<0?h+=t.latin1Slice(r,n+d):h+=t.latin1Slice(r,n)),n===e)return;switch(t[n++]){case ar:for(;;){if(--d<0){fr[37]=0,fr[43]=0;break}if(n===e){y=-1;break}const r=Yn[t[n++]];if(16===r)return v(new ce(400,{body:"malformed urlencoded form"}));if(w|=r,n===e)return void(y=r);const o=Yn[t[n++]];if(16===o)return v(new ce(400,{body:"malformed urlencoded form"}));if(h+=String.fromCharCode((r<<4)+o),n===e)return;if(t[n]!==ar)break;n++}break;case 38:if(!m())return;if(p="",l=!0,fr[61]=1,fr[37]=1,fr[43]=1,h="",d=i,w=0,! --u)return v(new ce(400,{body:"too many fields"}));break;case cr:--d<0?(fr[37]=0,fr[43]=0):h+=" ";break;case 61:if(p=!s||1===s&&8&w?a.decode(Buffer.from(h,"latin1")):h,d<0)return v(new ce(400,{body:`field name ${JSON.stringify(p)}... too long`}));l=!1,fr[61]=0,fr[37]=1,fr[43]=1,h="",w=0,d=o}if(n===e)return}},b=()=>{if(-2!==y)return v(new ce(400,{body:"malformed urlencoded form"}));m()&&(e.off("data",g),e.off("end",b),e.off("error",v),c())},v=t=>{e.off("data",g),e.off("end",b),e.off("error",v),f(t)};e.on("data",g),e.once("end",b),e.once("error",v)})})(e,r.params);if("multipart/form-data"===r.mime&&!e.blockMultipart)return function({limits:t={},preservePath:e,fileHwm:n,defParamCharset:r="utf-8",defCharset:o="utf-8"},i){const s=i.get("boundary");if(!s)throw new ce(400,{body:"multipart boundary not found"});if(s.length>70)throw new ce(400,{body:"multipart boundary too long"});const a=Pn(r),c={autoDestroy:!0,emitClose:!0,highWaterMark:n,read:ir},f=t.fieldSize??1048576,u=t.fileSize??Number.POSITIVE_INFINITY,l=t.fieldNameSize??100;return(n,r)=>new Promise((i,h)=>{let d,w,p,y,m,g,b,v,E=5,_=t.parts??Number.POSITIVE_INFINITY,x=t.fields??Number.POSITIVE_INFINITY,S=t.files??Number.POSITIVE_INFINITY,T=0,$=!1,k=0;const N=new Qn(t=>{const n=t[er];if(!n)return void(E=5);const i=((t,e)=>{if(!t.byteLength)return null;const n=new Map;let r=0;for(;r<t.byteLength;++r)if(!Wn[t[r]]){if(!Ln(t,r,n,e))return null;break}return{type:t.latin1Slice(0,r).toLowerCase(),params:n}})(Buffer.from(n,"latin1"),a);if("form-data"!==i?.type)return void(E=5);if(v=i.params.get("name"),void 0===v)return F(new ce(400,{body:"missing field name"}));if(v.length>l)return F(new ce(400,{body:`field name ${JSON.stringify(v.substring(0,l))}... too long`}));p=i.params.get("filename*")??i.params.get("filename"),void 0===p||e||(p=(t=>{for(let e=t.length;e-- >0;)if("/"===t[e]||"\\"===t[e]){t=t.slice(e+1);break}return".."===t||"."===t?"":t})(p));const s=zn(t[tr]);b=s?.mime??"text/plain";const h=s?.params.get("charset")?.toLowerCase()??o;if(m=Pn(h),g=t[nr]?.toLowerCase()??"7bit","application/octet-stream"===b||void 0!==p){if(!S--)return F(new ce(400,{body:"too many files"}));if(!p)return void(E=5);const t=new or(c);t.once("error",()=>{}),t.once("close",()=>{ir.call(t),! --k&&w&&process.nextTick(w)}),d=t,++k,r({name:v,type:"file",value:t,filename:p,encoding:g,mimeType:b}),E=4,T=u}else{if(!x--)return F(new ce(400,{body:"too many fields"}));y="",E=4,T=f}}),O=Buffer.from(`\r\n--${s}`,"latin1"),A=new Kn(O,(t,e,r,o)=>{if(e!==r){if(E<=2){if(0===E){if(13===t[e])E=1;else{if(45!==t[e])return void(E=5);E=2}if(++e===r)return}if(1!==E)return 45!==t[e]?void(E=5):(E=6,n.off("data",R),void n.resume());if(10!==t[e++])return void(E=5);if(!_--)return F(new ce(400,{body:"too many parts"}));if(E=3,e===r)return}if(3===E){const n=N.push(t,e,r);if(-1===n)return F(new ce(400,{body:"malformed part header"}));if(n===r)return;e=n}if(4===E&&T>=0){const n=Math.min(r,e+T);if(T-=r-e,d){if(n>e){let r;o?r=t.subarray(e,n):(r=Buffer.allocUnsafe(n-e),t.copy(r,0,e,n)),d.push(r)||($=!0)}if(T<0)return F(new ce(400,{body:`uploaded file for ${JSON.stringify(v)}: ${JSON.stringify(p)} too large`}))}else void 0!==y&&(y+=t.latin1Slice(e,n))}}},()=>{if(!(E>=6)){if(3===E)return F(new ce(400,{body:"unexpected end of headers"}));if(d)d.push(null),d=void 0,$=!1;else if(void 0!==y){if(T<0)return F(new ce(400,{body:`value for ${JSON.stringify(v)} too long`}));r({name:v,type:"string",value:m.decode(Buffer.from(y,"latin1")),encoding:g,mimeType:b}),y=void 0}E=0}});A.push(sr);const R=t=>{$=!1,A.push(t),d&&$&&(n.pause(),d.Se=()=>n.resume())},P=()=>{if(7!==E){if(6!==E&&(A.destroy(),6!==E))return F(new ce(400,{body:"unexpected end of form"}));n.off("data",R),n.off("end",P),w=()=>{n.off("error",F),i()},k||w()}},F=t=>{7!==E&&(E=7,n.off("data",R),n.off("end",P),n.off("error",F),d&&d.destroy(t instanceof Error?t:new Error(String(t))),h(t))};n.on("data",R),n.once("end",P),n.once("error",F)})}(e,r.params);throw new ce(415)}function lr(t,{closeAfterErrorDelay:e=500,...n}={}){L(e,"closeAfterErrorDelay",!0);const r=ur(t.headers,n);yn(t);const o=new W;return r(t,t=>o.push(t)).then(()=>o.close("complete"),n=>{if(o.fail(t.readableAborted?kt:n),t.resume(),e>=0){const n=setTimeout(()=>t.socket.destroy(),e);t.once("end",()=>clearTimeout(n))}}),o}async function hr(t,e={}){const n=new FormData,r=new Map;for await(const o of lr(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:e.limits?.fileSize}));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 dr="win32"===/*@__PURE__*/R();function wr(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=dr?yr:pr;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 pr=/[\x00-\x1F\x7F/]|^(\.\.?|~)$/,yr=/[\x00-\x1F"*/:<>?\\|\x7F]|^[\s.]*$|^(CON|PRN|AUX|NUL|(COM|LPT)[\d\xB9\xB2\xB3])(\.|$)/i,mr=t=>new Promise(e=>{const n=()=>{t.cork(),e()};t instanceof s?t.write(K,n):t.once("drain",n),t.uncork()});async function gr(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&&br.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 mr(t),++e;else for await(const r of o)e&&t.write(n),l(r)||await mr(t),++e;t.write(r)||await mr(t)}}finally{t.uncork()}c&&t.end()}const br=/^[^"':;,\\\r\n\t ]*$/i;function vr(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 Er{constructor(t){(t=>"Te"in t&&"function"==typeof t.pipe)(t)&&(t=M.toWeb(t)),this.wt=t.getReader(),this.$e=null,this.ke=0,this.m=0}getRange(t,e){if(e<t)throw new RangeError("invalid range");if(t<this.ke)throw new RangeError("non-sequential range");if(this.m)throw new TypeError("previous range still active");let n=e-t+1,r=t-this.ke;this.ke=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 _r(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 xr(t,e,n,r){if(e.closed||!e.writable)return;if("string"==typeof n||vr(n)||(r=_r(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 Sr(n);try{if(e.closed||!e.writable)return;await d(i.Ne(o.start,o.end),e)}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"),Ae:t})),a=`--${i}--`;let c=a.length;for(const{i:t,Ae: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 Sr(n);try{for(const{i:t,Ae:n}of s){if(e.closed||!e.writable)return;e.write(f+t,"ascii"),await d(u.Ne(n.start,n.end),e,{end:!1}),f="\r\n"}e.end(f+a)}finally{u.Oe&&await u.Oe()}}async function Sr(t){if("string"==typeof t){const e=await N(t,"r");return{Ne:(t,n)=>e.createReadStream({start:t,end:n,autoClose:!1}),Oe:()=>e.close()}}if(vr(t))return{Ne:(e,n)=>t.createReadStream({start:e,end:n,autoClose:!1})};{const e=new Er(t);return{Ne:(t,n)=>e.getRange(t,n),Oe:()=>e.close()}}}async function Tr(t,e,n,r=null,o){if(!e.closed&&e.writable&&(r||("string"==typeof n?r=await T(n):vr(n)&&(r=await n.stat()),!e.closed&&e.writable))){if(r){if("GET"===t.method||"HEAD"===t.method){if(!Cn(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 xr(t,e,n,_r(i,o))}e.setHeader("content-length",r.size)}if(e.writeHead(e.statusCode,e.statusMessage),"HEAD"!==t.method)return"string"==typeof n?n=a(n):vr(n)&&(n=n.createReadStream({start:0,autoClose:!1})),d(n,e);e.end()}}function $r(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={Re:e=>t.write(e,i),Pe:()=>mr(t),Fe:n,Ue:r??""};if(t instanceof s&&!t.headersSent&&!t.hasHeader("content-type")&&t.setHeader("content-type","application/json"),e=Or(null,"",e,c),Ar(e))o&&c.Re("null");else{t.cork(),t.write(K);try{await Nr(c,e,r?"\n":"")}finally{t.uncork()}}a&&t.end()}async function Nr(t,e,n){const r=(r,o,i)=>{t.Re(r);const s=n+t.Ue,a=t.Ue?": ":":";let c=!0;return{o:async(n,r)=>{const o=Or(e,n,r,t);i&&Ar(o)||(c?c=!1:t.Re(","),t.Re(s),i&&(t.Re(JSON.stringify(n))||await t.Pe(),t.Re(a)),await Nr(t,o,s))},Oe:()=>{c||t.Re(n),t.Re(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||Rr(e))t.Re(JSON.stringify(e)??"null")||await t.Pe();else if(e instanceof M){t.Re('"');for await(const n of e){if("string"!=typeof n)throw new TypeError("Readables must have an encoding");const e=JSON.stringify(n);t.Re(e.substring(1,e.length-1))||await t.Pe()}t.Re('"')}else if(e instanceof Map){const t=r("{","}",!0);for(const[n,r]of e)await t.o(n,r);t.Oe()}else if(Pr(e)){let t=0;const n=r("[","]",!1);for(const r of e)await n.o(String(t++),r);n.Oe()}else if(Fr(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 Or(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,Rr=t=>JSON.isRawJSON?.(t)??!1,Pr=t=>Symbol.iterator in t,Fr=t=>Symbol.asyncIterator in t;class Ur{constructor(t,e,{keepaliveInterval:n=15e3,softCloseReconnectDelay:r=500,softCloseReconnectStagger:o=2e3}={}){L(n,"keepaliveInterval",!0),this.Ce=e,this.Ie=n,this.U=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()),yt(t,()=>this.close(r,o))}get signal(){return this.U.signal}get open(){return!this.U.signal.aborted}Be(){this.Ie>0&&(this.Me=setTimeout(this.ping,this.Ie))}ping(){!this.U.signal.aborted&&this.Ce.writable&&(clearTimeout(this.Me),this.Ce.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.U.signal.throwIfAborted(),this.Ce.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.Ce.write(e)," "===n[0]?this.Ce.write(": "):this.Ce.write(":"),this.Ce.write(n);/[\r\n]$/.test(r)?(this.Ce.write(e),this.Ce.write(":\n")):this.Ce.write("\n"),n=!0}if(!n)return;clearTimeout(this.Me),this.Ce.write("\n",()=>e())}finally{this.Ce.uncork()}await new Promise(t=>{e=t}),this.Be()}async close(t=0,e=0){if(this.U.signal.aborted){if(this.Ce.closed)return;return new Promise(t=>this.Ce.once("close",t))}this.Ie=0,clearTimeout(this.Me),this.U.abort(new Error("ServerSentEvents closed")),await new Promise(n=>{if(this.Ce.writable&&(t>0||e>0)){const r=t+Math.random()*e;this.Ce.end(`retry:${0|r}\n\n`,n)}else this.Ce.end(n)})}}const Cr=async(t,{mode:e="dynamic",fallback:n,verbose:r,callback:o=Ir,...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 Nt;let n=!1;const i=wr(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"),Nt;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(y(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 Tr(t,e,l.handle,l.stats)}finally{l.handle.close().catch(()=>{})}}}};function Ir(t,e,n){e.setHeader("etag",qe(e.getHeader("content-encoding"),n.stats)),e.setHeader("last-modified",n.stats.mtime.toUTCString())}class Br 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 Mr(t,{softCloseStatusCode:e=Br.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,Br);if(n)return void t.close(n.closeCode,n.closeReason);const r=V(e,ce)??new ce(500),o=r.statusCode>=500?Br.INTERNAL_SERVER_ERROR:4e3+r.statusCode;t.close(o,r.statusMessage)},softCloseHandler:n=>t.close(e,n)})})});return t=>Rt(t,r)}class Dr{constructor(t,e){this.data=t,this.isBinary=e}get text(){if(this.isBinary)throw new Br(Br.UNSUPPORTED_DATA,{closeReason:"expected text"});return this.data.toString("utf-8")}get binary(){if(!this.isBinary)throw new Br(Br.UNSUPPORTED_DATA,{closeReason:"expected binary"});return this.data}}class Hr{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 Dr(t,n)):"string"==typeof t?this.De.push(new Dr(Buffer.from(t,"utf-8"),!1)):this.De.push(new Dr(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 jr(t,{timeout:e,signal:n}={}){const r=new Hr(t,{limit:1,signal:n});return r.next(e).finally(()=>r.detach())}function qr(t){const e=ut(t);return"GET"===t.method&&(e.M?.has("websocket")??!1)}const Jr=t=>t.headers.origin??wt(t.headers["sec-websocket-origin"]),zr=(t,e=5e3)=>async n=>{if(!qr(n))return;const r=await t(n);let o;try{o=await jr(r,{timeout:e})}catch(t){if((r.readyState??0)>=2)throw kt;throw new Br(Br.POLICY_VIOLATION,{closeReason:"timeout waiting for authentication token",cause:t})}if(o.isBinary)throw new Br(Br.UNSUPPORTED_DATA,{closeReason:"authentication token must be sent as text"});return o.data.toString("utf-8")};export{W as BlockingQueue,Nt as CONTINUE,hn as FileFinder,ce as HTTPError,Ot as NEXT_ROUTE,At as NEXT_ROUTER,We as Negotiator,Pe as Property,G as Queue,ee as Router,kt as STOP,Ur as ServerSentEvents,ye as WebListener,Br as WebSocketError,Dr as WebSocketMessage,Hr as WebSocketMessages,yn as acceptBody,Rt as acceptUpgrade,St as addTeardown,Wt as anyHandler,Cn as checkIfModified,In as checkIfRange,Bn 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,Cr as fileServer,V as findCause,Je as generateStrongETag,qe as generateWeakETag,Tt as getAbortSignal,Jt as getAbsolutePath,Z as getAddressURL,_e as getAuthorization,qn as getBodyJson,Dn as getBodyStream,jn as getBodyText,Hn as getBodyTextStream,xe as getCharset,hr as getFormData,lr as getFormFields,Se as getIfRange,nn as getMime,qt as getPathParameter,jt as getPathParameters,ve as getQuery,Te as getRange,wr as getRemainingPathComponents,ge as getSearch,be as getSearchParams,Pn as getTextDecoder,Fn as getTextDecoderStream,Jr as getWebSocketOrigin,Me as hasAuthScope,gt as isSoftClosed,qr as isWebSocketRequest,un as jsonErrorHandler,Mr as makeAcceptWebSocket,j as makeAddressTester,bn as makeGetClient,Fe as makeMemo,pn as makeTempFileStorage,zr as makeWebSocketFallbackTokenFetcher,Ge as negotiateEncoding,jr as nextWebSocketMessage,H as parseAddress,mn as proxy,Ae as readHTTPDateSeconds,ke as readHTTPInteger,Oe as readHTTPKeyValues,Ne as readHTTPQualityValues,$e as readHTTPUnquotedCommaSeparated,Qe as readMimeTypes,An as registerCharset,en as registerMime,Rn as registerUTF32,_n as removeForwarded,xn as replaceForwarded,Lt as requestHandler,De as requireAuthScope,Be as requireBearerAuth,Ke as resetMime,zt as restoreAbsolutePath,Sn as sanitiseAndAppendForwarded,gr as sendCSVStream,Tr as sendFile,$r as sendJSON,kr as sendJSONStream,xr as sendRanges,Ir as setDefaultCacheHeaders,yt as setSoftCloseHandler,Tn as simpleAppendForwarded,_r as simplifyRange,Y as stringPredicate,le as toListeners,Zt as typedErrorHandler,Gt as upgradeHandler};
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 A,platform as R}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)}A(){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={R: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.R)}}}),e.N&&t.U(e.O,"tearing down",t.R)};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.R.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.R.socket.destroy())}else t.R.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.R),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"),At=/*@__PURE__*/new $t("NEXT_ROUTER");async function Rt(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.R.url,o=t.F,i=t.ct??Dt;return t.R.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.R.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===At)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.R.method)return!1}else if(null!==e.bt&&!e.bt.has(t.R.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.R,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.R,i)||(n.A(),r=await t.handleError(o,e.R,i))}}else if(e.I){if(t.handleUpgrade){const n=e.D;r=await t.handleUpgrade(e.R,n.H,n.i)}}else t.handleRequest&&(r=await t.handleRequest(e.R,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.R)}catch(t){return e.U(t,"checking should upgrade",e.R),!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!==At||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!==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 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.At,o=t.code;n.writable&&!r?.headersSent&&n.end(we.get(o)??pe),n.destroy(t),"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.Rt=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.Rt,{...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:Ae(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 Ae(t){if("string"!=typeof t)return;const e=Date.parse(t);return Number.isNaN(e)?void 0:e/1e3|0}const Re=t=>"function"==typeof t?t:()=>t;class Pe{constructor(t=Me){this.Pt=Re(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=Re(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(A(),"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()}}}});function mn(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 yn(t){const e=ut(t);return!e.C.signal.aborted&&!e.Ot}function gn(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"}));mn(t);let g={...t.headers};bn(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};bn(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,c)}),d(t,b).catch(m)}))}function bn(t,e){for(const e of $e(t.connection)??[])It(t,e.toLowerCase());for(const n of e)It(t,n)}function vn({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=[En(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 En=t=>({client:{...H(t.socket.remoteAddress)??_n,port:t.socket.remotePort},server:{...H(t.socket.localAddress)??_n,port:t.socket.localPort},host:t.headers.host,proto:t.socket.encrypted?"https":"http"}),_n={family:"alias",address:"_disconnected",port:void 0};function xn(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 Sn(t,e){const n=xn(0,e);return n.forwarded=Nn([En(t)]),n}const Tn=(t,{onlyTrusted:e=!1}={})=>(n,r)=>{const o=xn(0,r),i=t(n);return o.forwarded=Nn([...e?i.trusted:i.outwardChain].reverse()),o};function $n(t,e){let n=t.headers.forwarded;const r=Nn([En(t)]);n?n+=", "+r:n=r;const o=xn(0,e);return o.forwarded=n,o}function Nn(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 kn{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 On 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 Rn(t,e){An.set(t.toLowerCase(),e)}function Pn(){Rn("utf-32be",{decoder:t=>new kn(!1,t)}),Rn("utf-32le",{decoder:t=>new kn(!0,t)})}function Fn(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 Cn(t,e={}){const n=An.get(t.toLowerCase());if(n)return n.decoderStream?n.decoderStream(e):new On(n.decoder(e));try{return new U(t,e)}catch{throw new ce(415,{body:`unsupported charset: ${t}`})}}const Un=["utf-32be",null,"utf-16be","utf-16be","utf-32le","utf-16le",null,"utf-8"];function Mn(t,e,n){const r=Ae(t.headers["if-modified-since"]),o=$e(t.headers["if-none-match"]);if(o){if(In(e,n,o))return!1}else if(r&&(n.mtimeMs/1e3|0)<=r)return!1;return!0}function Bn(t,e,n){let r=!0;const o=Se(t);return o.etag&&(r&&=In(e,n,o.etag)),o.modifiedSeconds&&(r&&=(n.mtimeMs/1e3|0)===o.modifiedSeconds),r}function In(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 Dn extends C{constructor(t,e){super({transform(r,o){n+=r.byteLength,n>t?o.error(e):o.enqueue(r)}});let n=0}}function Hn(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"});mn(t);let s=I.toWeb(t);void 0===o&&Number.isFinite(n)&&(s=s.pipeThrough(new Dn(n,new ce(413))));for(const t of i.reverse())s=s.pipeThrough(Jn(t));return Number.isFinite(e)&&(s=s.pipeThrough(new Dn(e,new ce(413,{body:"decoded content too large"})))),s}function jn(t,e={}){const n=Hn(t,e),r=xe(t)??e.defaultCharset??"utf-8";return n.pipeThrough(Cn(r,e))}async function qn(t,e={}){const n=[];for await(const r of jn(t,e))n.push(r);return n.join("")}async function zn(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=Un[(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=Cn(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)})(Hn(t,e),e),r=[];for await(const t of n)r.push(t);return JSON.parse(r.join(""))}function Jn(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 Ln(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 Gn(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(!Wn[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(!Zn[n]){if(39!==n)return!1;break}}if(e===o)return!1;const i=Fn(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!==Vn[n]){if(37===n){let n,r;if(e+2<o&&16!==(n=Yn[t[e+1]])&&16!==(r=Yn[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),!Xn[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(!Wn[n]){if(e===a)return!1;break}}n.has(s)||n.set(s,r.decode(t.subarray(a,e)))}return!0}const Wn=/*@__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})(),Vn=/*@__PURE__*/(()=>{const t=new Uint8Array(Wn);return t.set([0,1,0,0,0,0],37),t})(),Zn=/*@__PURE__*/(()=>{const t=new Uint8Array(Wn);return t.set([0,0,0,0,1,0,1,0],39),t.set([1,0,1,1],123),t})(),Xn=/*@__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})(),Yn=/*@__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 Kn{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 Qn{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&&Wn[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=rr.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 tr=0,er=1,nr=2,rr=new Map([["content-type",{_e:tr,xe:!1}],["content-disposition",{_e:er,xe:!1}],["content-transfer-encoding",{_e:nr,xe:!0}]]);function or(t){const e=this.Se;e&&(this.Se=void 0,e())}const ir=/*@__PURE__*/Buffer.from("\r\n"),sr=()=>{},ar=37,cr=43,fr=/*@__PURE__*/new Uint8Array(256);function ur(t,e={}){const n=t["content-type"];if(!n)throw new ce(400,{body:"missing content-type"});const r=Ln(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=Fn(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=Yn[t[n++]]))return S(new ce(400,{body:"malformed urlencoded form"}));if(g|=i,n===e)return void(v=i)}const r=Yn[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(fr[37]=1,fr[38]=1,fr[43]=1,fr[61]=p?1:0;;){const i=n;for(;n<e&&!fr[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 ar:for(;;){if(--y<0){fr[37]=0,fr[43]=0;break}if(--d,n===e){v=-1;break}const r=Yn[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=Yn[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]!==ar)break;n++}break;case 38:if(!E())return;if(b="",p=!0,fr[61]=1,fr[37]=1,fr[43]=1,m="",y=Math.min(o,d),g=0,! --w)return S(new ce(413,{body:"too many fields"}));break;case cr:--y<0?(fr[37]=0,fr[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,fr[61]=0,fr[37]=1,fr[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=Fn(n),m={autoDestroy:!0,emitClose:!0,highWaterMark:e,read:or};return(e,n)=>new Promise((d,y)=>{let g,b,v,E,_,x,S,T=5,$=o,N=i,k=c,O=u,A=l,R=h,P=0,F=!1,C=0,U="";const M=new Qn(e=>{const o=e[er];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(!Wn[t[r]]){if(!Gn(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=Ln(e[tr]);if(_=l?.mime??"text/plain",x=e[nr]?.toLowerCase()??"7bit","application/octet-stream"===_||void 0!==E){if(!R--)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",sr),e.once("close",()=>{e.Se?.(),e.off("error",sr),! --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(!A--)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=Fn(t)}}),B=Buffer.from(`\r\n--${w}`,"latin1"),D=new Kn(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(ir);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 lr(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=ur(t.headers,n);mn(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 yn(t)&&(t.resume(),r()),e}}async function hr(t,e={}){const n=new FormData,r=new Map;for await(const o of lr(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 dr="win32"===/*@__PURE__*/R();function wr(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=dr?mr:pr;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 pr=/[\x00-\x1F\x7F/]|^(\.\.?|~)$/,mr=/[\x00-\x1F"*/:<>?\\|\x7F]|^[\s.]*$|^(CON|PRN|AUX|NUL|(COM|LPT)[\d\xB9\xB2\xB3])(\.|$)/i,yr=t=>new Promise(e=>{const n=()=>{t.cork(),e()};t instanceof s?t.write(K,n):t.once("drain",n),t.uncork()});async function gr(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&&br.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 yr(t),++e;else for await(const r of o)e&&t.write(n),l(r)||await yr(t),++e;t.write(r)||await yr(t)}}finally{t.uncork()}c&&t.end()}const br=/^[^"':;,\\\r\n\t ]*$/i;function vr(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 Er{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 _r(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 xr(t,e,n,r){if(e.closed||!e.writable)return;if("string"==typeof n||vr(n)||(r=_r(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 Sr(n);try{if(e.closed||!e.writable)return;await d(i.ke(o.start,o.end),e)}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"),Ae:t})),a=`--${i}--`;let c=a.length;for(const{i:t,Ae: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 Sr(n);try{for(const{i:t,Ae:n}of s){if(e.closed||!e.writable)return;e.write(f+t,"ascii"),await d(u.ke(n.start,n.end),e,{end:!1}),f="\r\n"}e.end(f+a)}finally{u.Oe&&await u.Oe()}}async function Sr(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(vr(t))return{ke:(e,n)=>t.createReadStream({start:e,end:n,autoClose:!1})};{const e=new Er(t);return{ke:(t,n)=>e.getRange(t,n),Oe:()=>e.close()}}}async function Tr(t,e,n,r=null,o){if(!e.closed&&e.writable&&(r||("string"==typeof n?r=await T(n):vr(n)&&(r=await n.stat()),!e.closed&&e.writable))){if(r){if("GET"===t.method||"HEAD"===t.method){if(!Mn(t,e,r))return void e.writeHead(304).end();e.setHeader("accept-ranges","bytes");const i=Te(t,r.size,o);if(i&&Bn(t,e,r))return xr(t,e,n,_r(i,o))}e.setHeader("content-length",r.size)}if(e.writeHead(e.statusCode,e.statusMessage),"HEAD"!==t.method)return"string"==typeof n?n=a(n):vr(n)&&(n=n.createReadStream({start:0,autoClose:!1})),d(n,e);e.end()}}function $r(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 Nr(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={Re:e=>t.write(e,i),Pe:()=>yr(t),Fe:n,Ce:r??""};if(t instanceof s&&!t.headersSent&&!t.hasHeader("content-type")&&t.setHeader("content-type","application/json"),e=Or(null,"",e,c),Ar(e))o&&c.Re("null");else{t.cork(),t.write(K);try{await kr(c,e,r?"\n":"")}finally{t.uncork()}}a&&t.end()}async function kr(t,e,n){const r=(r,o,i)=>{t.Re(r);const s=n+t.Ce,a=t.Ce?": ":":";let c=!0;return{o:async(n,r)=>{const o=Or(e,n,r,t);i&&Ar(o)||(c?c=!1:t.Re(","),t.Re(s),i&&(t.Re(JSON.stringify(n))||await t.Pe(),t.Re(a)),await kr(t,o,s))},Oe:()=>{c||t.Re(n),t.Re(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||Rr(e))t.Re(JSON.stringify(e)??"null")||await t.Pe();else if(e instanceof I){t.Re('"');for await(const n of e){if("string"!=typeof n)throw new TypeError("Readables must have an encoding");const e=JSON.stringify(n);t.Re(e.substring(1,e.length-1))||await t.Pe()}t.Re('"')}else if(e instanceof Map){const t=r("{","}",!0);for(const[n,r]of e)await t.o(n,r);t.Oe()}else if(Pr(e)){let t=0;const n=r("[","]",!1);for(const r of e)await n.o(String(t++),r);n.Oe()}else if(Fr(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 Or(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,Rr=t=>JSON.isRawJSON?.(t)??!1,Pr=t=>Symbol.iterator in t,Fr=t=>Symbol.asyncIterator in t;class Cr{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 Ur=async(t,{mode:e="dynamic",fallback:n,verbose:r,callback:o=Mr,...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=wr(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 Tr(t,e,l.handle,l.stats)}finally{l.handle.close().catch(()=>{})}}}};function Mr(t,e,n){e.setHeader("etag",qe(e.getHeader("content-encoding"),n.stats)),e.setHeader("last-modified",n.stats.mtime.toUTCString())}class Br 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 Ir(t,{softCloseStatusCode:e=Br.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,Br);if(n)return void t.close(n.closeCode,n.closeReason);const r=V(e,ce)??new ce(500),o=r.statusCode>=500?Br.INTERNAL_SERVER_ERROR:4e3+r.statusCode;t.close(o,r.statusMessage)},softCloseHandler:n=>t.close(e,n)})})});return t=>Rt(t,r)}class Dr{constructor(t,e){this.data=t,this.isBinary=e}get text(){if(this.isBinary)throw new Br(Br.UNSUPPORTED_DATA,{closeReason:"expected text"});return this.data.toString("utf-8")}get binary(){if(!this.isBinary)throw new Br(Br.UNSUPPORTED_DATA,{closeReason:"expected binary"});return this.data}}class Hr{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 Dr(t,n)):"string"==typeof t?this.De.push(new Dr(Buffer.from(t,"utf-8"),!1)):this.De.push(new Dr(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 jr(t,{timeout:e,signal:n}={}){const r=new Hr(t,{limit:1,signal:n});return r.next(e).finally(()=>r.detach())}function qr(t){const e=ut(t);return"GET"===t.method&&(e.I?.has("websocket")??!1)}const zr=t=>t.headers.origin??wt(t.headers["sec-websocket-origin"]),Jr=(t,e=5e3)=>async n=>{if(!qr(n))return;const r=await t(n);let o;try{o=await jr(r,{timeout:e})}catch(t){if((r.readyState??0)>=2)throw Nt;throw new Br(Br.POLICY_VIOLATION,{closeReason:"timeout waiting for authentication token",cause:t})}if(o.isBinary)throw new Br(Br.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,At as NEXT_ROUTER,We as Negotiator,Pe as Property,G as Queue,ee as Router,Nt as STOP,Cr as ServerSentEvents,me as WebListener,Br as WebSocketError,Dr as WebSocketMessage,Hr as WebSocketMessages,mn as acceptBody,Rt as acceptUpgrade,St as addTeardown,Wt as anyHandler,Mn as checkIfModified,Bn as checkIfRange,In 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,Ur as fileServer,V as findCause,ze as generateStrongETag,qe as generateWeakETag,Tt as getAbortSignal,zt as getAbsolutePath,Z as getAddressURL,_e as getAuthorization,zn as getBodyJson,Hn as getBodyStream,qn as getBodyText,jn as getBodyTextStream,xe as getCharset,hr as getFormData,lr as getFormFields,Se as getIfRange,nn as getMime,qt as getPathParameter,jt as getPathParameters,ve as getQuery,Te as getRange,wr as getRemainingPathComponents,ge as getSearch,be as getSearchParams,Fn as getTextDecoder,Cn as getTextDecoderStream,zr as getWebSocketOrigin,Ie as hasAuthScope,gt as isSoftClosed,qr as isWebSocketRequest,un as jsonErrorHandler,Ir as makeAcceptWebSocket,j as makeAddressTester,vn as makeGetClient,Fe as makeMemo,pn as makeTempFileStorage,Jr as makeWebSocketFallbackTokenFetcher,Ge as negotiateEncoding,jr as nextWebSocketMessage,H as parseAddress,gn as proxy,Ae as readHTTPDateSeconds,Ne as readHTTPInteger,Oe as readHTTPKeyValues,ke as readHTTPQualityValues,$e as readHTTPUnquotedCommaSeparated,Qe as readMimeTypes,Rn as registerCharset,en as registerMime,Pn as registerUTF32,xn as removeForwarded,Sn as replaceForwarded,Lt as requestHandler,De as requireAuthScope,Be as requireBearerAuth,Ke as resetMime,Jt as restoreAbsolutePath,Tn as sanitiseAndAppendForwarded,gr as sendCSVStream,Tr as sendFile,$r as sendJSON,Nr as sendJSONStream,xr as sendRanges,Mr as setDefaultCacheHeaders,mt as setSoftCloseHandler,$n as simpleAppendForwarded,_r as simplifyRange,Y as stringPredicate,le as toListeners,Zt as typedErrorHandler,Gt as upgradeHandler,yn as willSendBody};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "web-listener",
3
- "version": "0.16.0",
3
+ "version": "0.17.0",
4
4
  "description": "a small server abstraction for creating API and resource endpoints with middleware",
5
5
  "author": "David Evans",
6
6
  "license": "MIT",