webhoster 0.3.3 → 0.3.5

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 (157) hide show
  1. package/README.md +4 -4
  2. package/data/CookieObject.js +1 -1
  3. package/{types/index.js → data/custom-types.js} +1 -1
  4. package/{types/typings.d.ts → data/middleware.d.ts} +1 -1
  5. package/helpers/RequestReader.js +1 -1
  6. package/helpers/ResponseHeaders.js +9 -10
  7. package/lib/HttpHandler.js +4 -4
  8. package/lib/HttpRequest.js +2 -2
  9. package/lib/HttpResponse.js +2 -2
  10. package/lib/HttpTransaction.js +2 -2
  11. package/middleware/AutoHeadersMiddleware.js +2 -2
  12. package/middleware/CORSMiddleware.js +3 -3
  13. package/middleware/CaseInsensitiveHeadersMiddleware.js +2 -2
  14. package/middleware/ContentDecoderMiddleware.js +1 -1
  15. package/middleware/ContentEncoderMiddleware.js +2 -2
  16. package/middleware/ContentLengthMiddleware.js +2 -2
  17. package/middleware/HashMiddleware.js +2 -2
  18. package/middleware/HeadMethodMiddleware.js +3 -3
  19. package/middleware/MethodMiddleware.js +3 -3
  20. package/middleware/PathMiddleware.js +4 -4
  21. package/middleware/ReadFormData.js +1 -1
  22. package/middleware/SendJsonMiddleware.js +4 -4
  23. package/middleware/SendStringMiddleware.js +3 -3
  24. package/package.json +21 -4
  25. package/templates/starter.js +2 -2
  26. package/types/data/CookieObject.d.ts +34 -0
  27. package/types/data/CookieObject.d.ts.map +1 -0
  28. package/types/data/custom-types.d.ts +111 -0
  29. package/types/data/custom-types.d.ts.map +1 -0
  30. package/types/errata/socketio.d.ts +11 -0
  31. package/types/errata/socketio.d.ts.map +1 -0
  32. package/types/examples/starter.d.ts +2 -0
  33. package/types/examples/starter.d.ts.map +1 -0
  34. package/types/helpers/HeadersParser.d.ts +27 -0
  35. package/types/helpers/HeadersParser.d.ts.map +1 -0
  36. package/types/helpers/HttpListener.d.ts +84 -0
  37. package/types/helpers/HttpListener.d.ts.map +1 -0
  38. package/types/helpers/RequestHeaders.d.ts +25 -0
  39. package/types/helpers/RequestHeaders.d.ts.map +1 -0
  40. package/types/helpers/RequestReader.d.ts +52 -0
  41. package/types/helpers/RequestReader.d.ts.map +1 -0
  42. package/types/helpers/ResponseHeaders.d.ts +126 -0
  43. package/types/helpers/ResponseHeaders.d.ts.map +1 -0
  44. package/types/helpers/index.d.ts +6 -0
  45. package/types/helpers/index.d.ts.map +1 -0
  46. package/types/lib/HttpHandler.d.ts +79 -0
  47. package/types/lib/HttpHandler.d.ts.map +1 -0
  48. package/types/lib/HttpRequest.d.ts +175 -0
  49. package/types/lib/HttpRequest.d.ts.map +1 -0
  50. package/types/lib/HttpResponse.d.ts +117 -0
  51. package/types/lib/HttpResponse.d.ts.map +1 -0
  52. package/types/lib/HttpTransaction.d.ts +114 -0
  53. package/types/lib/HttpTransaction.d.ts.map +1 -0
  54. package/types/middleware/AutoHeadersMiddleware.d.ts +27 -0
  55. package/types/middleware/AutoHeadersMiddleware.d.ts.map +1 -0
  56. package/types/middleware/CORSMiddleware.d.ts +65 -0
  57. package/types/middleware/CORSMiddleware.d.ts.map +1 -0
  58. package/types/middleware/CaseInsensitiveHeadersMiddleware.d.ts +27 -0
  59. package/types/middleware/CaseInsensitiveHeadersMiddleware.d.ts.map +1 -0
  60. package/types/middleware/ContentDecoderMiddleware.d.ts +17 -0
  61. package/types/middleware/ContentDecoderMiddleware.d.ts.map +1 -0
  62. package/types/middleware/ContentEncoderMiddleware.d.ts +48 -0
  63. package/types/middleware/ContentEncoderMiddleware.d.ts.map +1 -0
  64. package/types/middleware/ContentLengthMiddleware.d.ts +38 -0
  65. package/types/middleware/ContentLengthMiddleware.d.ts.map +1 -0
  66. package/types/middleware/HashMiddleware.d.ts +28 -0
  67. package/types/middleware/HashMiddleware.d.ts.map +1 -0
  68. package/types/middleware/HeadMethodMiddleware.d.ts +12 -0
  69. package/types/middleware/HeadMethodMiddleware.d.ts.map +1 -0
  70. package/types/middleware/MethodMiddleware.d.ts +40 -0
  71. package/types/middleware/MethodMiddleware.d.ts.map +1 -0
  72. package/types/middleware/PathMiddleware.d.ts +81 -0
  73. package/types/middleware/PathMiddleware.d.ts.map +1 -0
  74. package/types/middleware/ReadFormData.d.ts +7 -0
  75. package/types/middleware/ReadFormData.d.ts.map +1 -0
  76. package/types/middleware/SendJsonMiddleware.d.ts +51 -0
  77. package/types/middleware/SendJsonMiddleware.d.ts.map +1 -0
  78. package/types/middleware/SendStringMiddleware.d.ts +35 -0
  79. package/types/middleware/SendStringMiddleware.d.ts.map +1 -0
  80. package/types/templates/starter.d.ts +15 -0
  81. package/types/templates/starter.d.ts.map +1 -0
  82. package/types/utils/AsyncObject.d.ts +38 -0
  83. package/types/utils/AsyncObject.d.ts.map +1 -0
  84. package/types/utils/CaseInsensitiveObject.d.ts +9 -0
  85. package/types/utils/CaseInsensitiveObject.d.ts.map +1 -0
  86. package/types/utils/function.d.ts +2 -0
  87. package/types/utils/function.d.ts.map +1 -0
  88. package/types/utils/headers.d.ts +7 -0
  89. package/types/utils/headers.d.ts.map +1 -0
  90. package/types/utils/qualityValues.d.ts +12 -0
  91. package/types/utils/qualityValues.d.ts.map +1 -0
  92. package/types/utils/stream.d.ts +6 -0
  93. package/types/utils/stream.d.ts.map +1 -0
  94. package/utils/headers.js +1 -1
  95. package/.eslintrc.json +0 -96
  96. package/.github/FUNDING.yml +0 -4
  97. package/.github/copilot-instructions.md +0 -100
  98. package/.github/workflows/publish.yml +0 -29
  99. package/.github/workflows/test-matrix.yml +0 -37
  100. package/.test/benchmark.js +0 -28
  101. package/.test/constants.js +0 -4
  102. package/.test/cookietester.js +0 -19
  103. package/.test/http2server.js +0 -35
  104. package/.test/httpserver.js +0 -32
  105. package/.test/index.js +0 -498
  106. package/.test/multipromise.js +0 -32
  107. package/.test/tls.js +0 -75
  108. package/.test/urlencoded.js +0 -54
  109. package/.vscode/launch.json +0 -35
  110. package/.vscode/settings.json +0 -5
  111. package/CHANGELOG.md +0 -10
  112. package/CODE_OF_CONDUCT.md +0 -76
  113. package/errata/index.js +0 -1
  114. package/examples/starter.js +0 -11
  115. package/index.js +0 -4
  116. package/jsconfig.json +0 -12
  117. package/lib/index.js +0 -3
  118. package/middleware/ContentReaderMiddleware.js +0 -249
  119. package/middleware/ContentWriterMiddleware.js +0 -161
  120. package/middleware/SendHeadersMiddleware.js +0 -47
  121. package/middleware/index.js +0 -11
  122. package/polyfill/FormData.js +0 -164
  123. package/rollup.config.js +0 -8
  124. package/scripts/check-teapot.mjs +0 -40
  125. package/scripts/test-all-sync.sh +0 -6
  126. package/scripts/test-all.sh +0 -7
  127. package/test/fixtures/stream.js +0 -68
  128. package/test/helpers/HttpListener/construct.js +0 -18
  129. package/test/helpers/HttpListener/customOptions.js +0 -22
  130. package/test/helpers/HttpListener/doubleCreate.js +0 -40
  131. package/test/helpers/HttpListener/events.js +0 -77
  132. package/test/helpers/HttpListener/http.js +0 -31
  133. package/test/helpers/HttpListener/http2.js +0 -41
  134. package/test/helpers/HttpListener/https.js +0 -38
  135. package/test/helpers/HttpListener/startAll.js +0 -31
  136. package/test/helpers/HttpListener/stopNotStarted.js +0 -23
  137. package/test/lib/HttpHandler/class.js +0 -8
  138. package/test/lib/HttpHandler/handleRequest.js +0 -11
  139. package/test/lib/HttpHandler/middleware.js +0 -941
  140. package/test/lib/HttpHandler/parse.js +0 -41
  141. package/test/lib/HttpRequest/class.js +0 -8
  142. package/test/lib/HttpRequest/downstream.js +0 -171
  143. package/test/lib/HttpRequest/properties.js +0 -101
  144. package/test/lib/HttpRequest/read.js +0 -518
  145. package/test/lib/HttpResponse/async-iterable-middleware.js +0 -37
  146. package/test/lib/HttpResponse/async-iterable.js +0 -31
  147. package/test/lib/HttpResponse/class.js +0 -8
  148. package/test/lib/HttpResponse/properties.js +0 -59
  149. package/test/lib/HttpResponse/send.js +0 -275
  150. package/test/lib/HttpTransaction/class.js +0 -8
  151. package/test/lib/HttpTransaction/ping.js +0 -50
  152. package/test/lib/HttpTransaction/push.js +0 -89
  153. package/test/middleware/SendJsonMiddleware.js +0 -222
  154. package/test/sanity.js +0 -10
  155. package/test/templates/error-teapot.js +0 -47
  156. package/test/templates/starter.js +0 -93
  157. package/tsconfig.json +0 -30
@@ -0,0 +1,84 @@
1
+ export const SERVER_ALREADY_CREATED: "SERVER_ALREADY_CREATED";
2
+ export default class HttpListener {
3
+ /** @return {HttpListener} */
4
+ static get defaultInstance(): HttpListener;
5
+ /** @param {HttpListenerOptions} options */
6
+ constructor(options?: HttpListenerOptions);
7
+ /** @param {HttpListenerOptions} options */
8
+ configure(options?: HttpListenerOptions): void;
9
+ httpHandler: HttpHandler;
10
+ insecurePort: number;
11
+ insecureHost: string;
12
+ securePort: number;
13
+ secureHost: string;
14
+ useHttp: boolean;
15
+ useHttps: boolean;
16
+ useHttp2: boolean;
17
+ tlsOptions: import("tls").TlsOptions;
18
+ /**
19
+ * @param {import('node:http').ServerOptions} [options]
20
+ * @return {import('node:http').Server}
21
+ */
22
+ createHttpServer(options?: import("node:http").ServerOptions): import("node:http").Server;
23
+ httpServer: import("http").Server<typeof import("http").IncomingMessage, typeof import("http").ServerResponse>;
24
+ /**
25
+ * @param {import('node:https').ServerOptions} [options]
26
+ * @return {import('node:https').Server}
27
+ */
28
+ createHttpsServer(options?: import("node:https").ServerOptions): import("node:https").Server;
29
+ httpsServer: import("https").Server<typeof import("http").IncomingMessage, typeof import("http").ServerResponse>;
30
+ /**
31
+ * @param {import('node:http2').ServerOptions} [options]
32
+ * @return {import('node:http2').Http2SecureServer}
33
+ */
34
+ createHttp2Server(options?: import("node:http2").ServerOptions): import("node:http2").Http2SecureServer;
35
+ http2Server: import("http2").Http2SecureServer<typeof import("http").IncomingMessage, typeof import("http").ServerResponse, typeof import("http2").Http2ServerRequest, typeof import("http2").Http2ServerResponse>;
36
+ /** @return {Promise<import('node:http').Server>} */
37
+ startHttpServer(): Promise<import("node:http").Server>;
38
+ /** @return {Promise<import('node:https').Server>} */
39
+ startHttpsServer(): Promise<import("node:https").Server>;
40
+ /** @return {Promise<import('node:http2').Http2SecureServer>} */
41
+ startHttp2Server(): Promise<import("node:http2").Http2SecureServer>;
42
+ /** @return {Promise<void>} */
43
+ stopHttpServer(): Promise<void>;
44
+ /** @return {Promise<void>} */
45
+ stopHttpsServer(): Promise<void>;
46
+ /** @return {Promise<void>} */
47
+ stopHttp2Server(): Promise<void>;
48
+ /**
49
+ * @return {Promise<[
50
+ * import('node:http').Server,
51
+ * import('node:https').Server,
52
+ * import('node:http2').Http2SecureServer
53
+ * ]>
54
+ * }
55
+ */
56
+ startAll(): Promise<[import("node:http").Server, import("node:https").Server, import("node:http2").Http2SecureServer]>;
57
+ /**
58
+ * @return {Promise<void>}
59
+ */
60
+ stopAll(): Promise<void>;
61
+ #private;
62
+ }
63
+ export type TlsOptions = import("tls").TlsOptions;
64
+ export type Http2Session = import("http2").Http2Session;
65
+ export type Http2Stream = import("http2").Http2Stream;
66
+ export type HttpListenerOptions = {
67
+ httpHandler?: HttpHandler;
68
+ insecurePort?: number;
69
+ /**
70
+ * blank defaults to '::' or '0.0.0.0'
71
+ */
72
+ insecureHost?: string;
73
+ securePort?: number;
74
+ /**
75
+ * blank defaults to '::' or '0.0.0.0'
76
+ */
77
+ secureHost?: string;
78
+ useHttp?: boolean;
79
+ useHttps?: boolean;
80
+ useHttp2?: boolean;
81
+ tlsOptions?: TlsOptions;
82
+ };
83
+ import HttpHandler from '../lib/HttpHandler.js';
84
+ //# sourceMappingURL=HttpListener.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"HttpListener.d.ts","sourceRoot":"","sources":["../../helpers/HttpListener.js"],"names":[],"mappings":"AAOA,qCAAsC,wBAAwB,CAAC;AAsB/D;IACE,6BAA6B;IAC7B,8BADa,YAAY,CAMxB;IAsCD,2CAA2C;IAC3C,sBADY,mBAAmB,EAG9B;IAED,2CAA2C;IAC3C,oBADY,mBAAmB,QAW9B;IATC,yBAAqE;IACrE,qBAAgD;IAChD,qBAAwC;IACxC,mBAA4C;IAC5C,mBAAoC;IACpC,iBAAwC;IACxC,kBAAyC;IACzC,kBAA0C;IAC1C,qCAA0C;IAG5C;;;OAGG;IACH,2BAHW,OAAO,WAAW,EAAE,aAAa,GAChC,OAAO,WAAW,EAAE,MAAM,CASrC;IALG,+GAA2C;IAO/C;;;OAGG;IACH,4BAHW,OAAO,YAAY,EAAE,aAAa,GACjC,OAAO,YAAY,EAAE,MAAM,CAYtC;IARG,iHAGE;IAON;;;OAGG;IACH,4BAHW,OAAO,YAAY,EAAE,aAAa,GACjC,OAAO,YAAY,EAAE,iBAAiB,CAajD;IATG,mNAIE;IAON,oDAAoD;IACpD,mBADa,OAAO,CAAC,OAAO,WAAW,EAAE,MAAM,CAAC,CA8C/C;IAED,qDAAqD;IACrD,oBADa,OAAO,CAAC,OAAO,YAAY,EAAE,MAAM,CAAC,CA8ChD;IAED,gEAAgE;IAChE,oBADa,OAAO,CAAC,OAAO,YAAY,EAAE,iBAAiB,CAAC,CA0I3D;IAED,8BAA8B;IAC9B,kBADa,OAAO,CAAC,IAAI,CAAC,CAwBzB;IAED,8BAA8B;IAC9B,mBADa,OAAO,CAAC,IAAI,CAAC,CAwBzB;IAED,8BAA8B;IAC9B,mBADa,OAAO,CAAC,IAAI,CAAC,CAmCzB;IAED;;;;;;;OAOG;IACH,YAPY,OAAO,CAAC,CACnB,OAAU,WAAW,EAAE,MAAM,EAC7B,OAAU,YAAY,EAAE,MAAM,EAC9B,OAAU,YAAY,EAAE,iBAAiB,CACtC,CAAC,CASJ;IAED;;OAEG;IACH,WAFY,OAAO,CAAC,IAAI,CAAC,CAQxB;;CACF;yBAhea,OAAO,KAAK,EAAE,UAAU;2BACxB,OAAO,OAAO,EAAE,YAAY;0BAC5B,OAAO,OAAO,EAAE,WAAW;;kBAI/B,WAAW;mBACX,MAAM;;;;mBACN,MAAM;iBACN,MAAM;;;;iBACN,MAAM;cACN,OAAO;eACP,OAAO;eACP,OAAO;iBACP,UAAU;;wBAlBI,uBAAuB"}
@@ -0,0 +1,25 @@
1
+ export default class RequestHeaders extends HeadersHandler {
2
+ /**
3
+ * @param {HttpRequest} request
4
+ * @return {{get:(name:string)=>string,all:(name:string)=>string[]}}
5
+ */
6
+ static cookies(request: HttpRequest): {
7
+ get: (name: string) => string;
8
+ all: (name: string) => string[];
9
+ };
10
+ /** @param {HttpRequest} request */
11
+ constructor(request: HttpRequest);
12
+ /** @return {{get:(name:string)=>string,all:(name:string)=>string[]}} */
13
+ get cookies(): {
14
+ get: (name: string) => string;
15
+ all: (name: string) => string[];
16
+ };
17
+ /** @return {Object<string,string[]>} */
18
+ get cookieEntries(): {
19
+ [x: string]: string[];
20
+ };
21
+ #private;
22
+ }
23
+ export type HttpRequest = import("../lib/HttpRequest.js").default;
24
+ import HeadersHandler from './HeadersParser.js';
25
+ //# sourceMappingURL=RequestHeaders.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RequestHeaders.d.ts","sourceRoot":"","sources":["../../helpers/RequestHeaders.js"],"names":[],"mappings":"AAgCA;IASE;;;OAGG;IACH,wBAHW,WAAW,GACV;QAAC,GAAG,EAAC,CAAC,IAAI,EAAC,MAAM,KAAG,MAAM,CAAC;QAAA,GAAG,EAAC,CAAC,IAAI,EAAC,MAAM,KAAG,MAAM,EAAE,CAAA;KAAC,CAKlE;IAfD,mCAAmC;IACnC,qBADY,WAAW,EAMtB;IAcD,wEAAwE;IACxE,eADa;QAAC,GAAG,EAAC,CAAC,IAAI,EAAC,MAAM,KAAG,MAAM,CAAC;QAAA,GAAG,EAAC,CAAC,IAAI,EAAC,MAAM,KAAG,MAAM,EAAE,CAAA;KAAC,CAYnE;IAED,wCAAwC;IACxC;;MAqFC;;CACF;0BAxJa,OAAO,uBAAuB,EAAE,OAAO;2BAF1B,oBAAoB"}
@@ -0,0 +1,52 @@
1
+ export default class RequestReader {
2
+ /**
3
+ * @param {HttpRequest} request
4
+ * @param {RequestReaderOptions} [options]
5
+ */
6
+ constructor(request: HttpRequest, options?: RequestReaderOptions);
7
+ request: import("../lib/HttpRequest.js").default;
8
+ /** @return {Promise<Buffer>} */
9
+ readBuffer(): Promise<Buffer>;
10
+ /** @return {Promise<string>} */
11
+ readString(): Promise<string>;
12
+ /** @return {Promise<Object<string,any>>} */
13
+ readJSON(): Promise<{
14
+ [x: string]: any;
15
+ }>;
16
+ /**
17
+ * The application/x-www-form-urlencoded format is in many ways an aberrant monstrosity,
18
+ * the result of many years of implementation accidents and compromises leading to a set of
19
+ * requirements necessary for interoperability, but in no way representing good design practices.
20
+ * In particular, readers are cautioned to pay close attention to the twisted details
21
+ * involving repeated (and in some cases nested) conversions between character encodings and byte sequences.
22
+ * Unfortunately the format is in widespread use due to the prevalence of HTML forms. [HTML]
23
+ * @return {Promise<[string, string][]>}
24
+ */
25
+ readUrlEncoded(): Promise<[string, string][]>;
26
+ /** @return {Promise<Map<string,string>>} */
27
+ readUrlEncodedAsMap(): Promise<Map<string, string>>;
28
+ /** @return {Promise<Object<string,string>>} */
29
+ readUrlEncodedAsObject(): Promise<{
30
+ [x: string]: string;
31
+ }>;
32
+ /**
33
+ * Returns `readJSON()`, `readUrlEncodedAsObject`, or `Promise<null>` based on Content-Type
34
+ * @return {Promise<Object<string, any>|null>}
35
+ */
36
+ readObject(): Promise<{
37
+ [x: string]: any;
38
+ } | null>;
39
+ /**
40
+ * Returns `readJSON()`, `readUrlEncoded`, `readBuffer()`, or `readString()` based on Content-Type
41
+ * @return {Promise<Object<string,any>|string|Buffer>}
42
+ */
43
+ read(): Promise<{
44
+ [x: string]: any;
45
+ } | string | Buffer>;
46
+ #private;
47
+ }
48
+ export type HttpRequest = import("../data/custom-types.js").HttpRequest;
49
+ export type RequestReaderOptions = {
50
+ cache?: boolean;
51
+ };
52
+ //# sourceMappingURL=RequestReader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RequestReader.d.ts","sourceRoot":"","sources":["../../helpers/RequestReader.js"],"names":[],"mappings":"AAgBA;IAIE;;;OAGG;IACH,qBAHW,WAAW,YACX,oBAAoB,EAc9B;IADC,iDAAsB;IAGxB,gCAAgC;IAChC,cADa,OAAO,CAAC,MAAM,CAAC,CA0C3B;IAED,gCAAgC;IAChC,cADa,OAAO,CAAC,MAAM,CAAC,CAQ3B;IAED,4CAA4C;IAC5C,YADa,OAAO,CAAC;YAAO,MAAM,GAAC,GAAG;KAAC,CAAC,CAGvC;IAED;;;;;;;;OAQG;IACH,kBAFY,OAAO,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC,CAuDtC;IAED,4CAA4C;IAC5C,uBADa,OAAO,CAAC,GAAG,CAAC,MAAM,EAAC,MAAM,CAAC,CAAC,CAGvC;IAED,+CAA+C;IAC/C,0BADa,OAAO,CAAC;YAAO,MAAM,GAAC,MAAM;KAAC,CAAC,CAG1C;IAED;;;OAGG;IACH,cAFY,OAAO,CAAC;YAAO,MAAM,GAAE,GAAG;KAAC,GAAC,IAAI,CAAC,CAa5C;IAED;;;OAGG;IACH,QAFY,OAAO,CAAC;YAAO,MAAM,GAAC,GAAG;KAAC,GAAC,MAAM,GAAC,MAAM,CAAC,CAmBpD;;CACF;0BAlNa,OAAO,yBAAyB,EAAE,WAAW;;YAQjD,OAAO"}
@@ -0,0 +1,126 @@
1
+ export default class ResponseHeaders extends HeadersHandler {
2
+ /** @param {HttpResponse} response */
3
+ static cookies(response: HttpResponse): {
4
+ /**
5
+ * @param {string|CookieDetails|CookieObject} nameOrDetails
6
+ * @return {boolean}
7
+ */
8
+ has(nameOrDetails: string | CookieDetails | CookieObject): boolean;
9
+ /**
10
+ * @param {string|CookieDetails} partial
11
+ * @return {CookieObject}
12
+ */
13
+ get(partial: string | CookieDetails): CookieObject;
14
+ /**
15
+ * @param {string|CookieDetails} [partial]
16
+ * @return {CookieObject[]}
17
+ */
18
+ getAll(partial?: string | CookieDetails): CookieObject[];
19
+ /**
20
+ * @param {CookieDetails} details
21
+ * @return {CookieObject}
22
+ */
23
+ find(details: CookieDetails): CookieObject;
24
+ /**
25
+ * @param {CookieDetails} [details]
26
+ * @return {CookieObject[]}
27
+ */
28
+ findAll(details?: CookieDetails): CookieObject[];
29
+ /**
30
+ * @param {string|CookieDetails} cookie
31
+ * @return {CookieObject}
32
+ */
33
+ set(cookie: string | CookieDetails): CookieObject;
34
+ /**
35
+ * @param {string|CookieDetails} partial
36
+ * @return {number} count
37
+ */
38
+ remove(partial: string | CookieDetails): number;
39
+ /**
40
+ * @param {string|CookieDetails} partial name or details
41
+ * @return {CookieObject}
42
+ */
43
+ expire(partial: string | CookieDetails): CookieObject;
44
+ /**
45
+ * @param {string|CookieDetails} [partial]
46
+ * @return {CookieObject[]}
47
+ */
48
+ expireAll(partial?: string | CookieDetails): CookieObject[];
49
+ };
50
+ /** @param {HttpResponse} response */
51
+ constructor(response: HttpResponse);
52
+ /** @param {string} contentType */
53
+ set contentType(contentType: string);
54
+ get contentType(): string;
55
+ /** @param {string} mediaType */
56
+ set mediaType(mediaType: string);
57
+ get mediaType(): string;
58
+ /** @param {string} charset */
59
+ set charset(charset: string);
60
+ get charset(): string;
61
+ /** @param {BufferEncoding} bufferEncoding */
62
+ set charsetAsBufferEncoding(bufferEncoding: BufferEncoding);
63
+ /** @return {BufferEncoding} */
64
+ get charsetAsBufferEncoding(): BufferEncoding;
65
+ /** @param {string} boundary */
66
+ set boundary(boundary: string);
67
+ get boundary(): string;
68
+ /** @param {number} value */
69
+ set contentLength(value: number);
70
+ get contentLength(): number;
71
+ get cookies(): {
72
+ /**
73
+ * @param {string|CookieDetails|CookieObject} nameOrDetails
74
+ * @return {boolean}
75
+ */
76
+ has(nameOrDetails: string | CookieDetails | CookieObject): boolean;
77
+ /**
78
+ * @param {string|CookieDetails} partial
79
+ * @return {CookieObject}
80
+ */
81
+ get(partial: string | CookieDetails): CookieObject;
82
+ /**
83
+ * @param {string|CookieDetails} [partial]
84
+ * @return {CookieObject[]}
85
+ */
86
+ getAll(partial?: string | CookieDetails): CookieObject[];
87
+ /**
88
+ * @param {CookieDetails} details
89
+ * @return {CookieObject}
90
+ */
91
+ find(details: CookieDetails): CookieObject;
92
+ /**
93
+ * @param {CookieDetails} [details]
94
+ * @return {CookieObject[]}
95
+ */
96
+ findAll(details?: CookieDetails): CookieObject[];
97
+ /**
98
+ * @param {string|CookieDetails} cookie
99
+ * @return {CookieObject}
100
+ */
101
+ set(cookie: string | CookieDetails): CookieObject;
102
+ /**
103
+ * @param {string|CookieDetails} partial
104
+ * @return {number} count
105
+ */
106
+ remove(partial: string | CookieDetails): number;
107
+ /**
108
+ * @param {string|CookieDetails} partial name or details
109
+ * @return {CookieObject}
110
+ */
111
+ expire(partial: string | CookieDetails): CookieObject;
112
+ /**
113
+ * @param {string|CookieDetails} [partial]
114
+ * @return {CookieObject[]}
115
+ */
116
+ expireAll(partial?: string | CookieDetails): CookieObject[];
117
+ };
118
+ /** @return {Array<CookieObject>} */
119
+ get cookieEntries(): Array<CookieObject>;
120
+ #private;
121
+ }
122
+ export type HttpResponse = import("../lib/HttpResponse.js").default;
123
+ export type CookieDetails = import("../data/custom-types.js").CookieDetails;
124
+ import HeadersHandler from './HeadersParser.js';
125
+ import CookieObject from '../data/CookieObject.js';
126
+ //# sourceMappingURL=ResponseHeaders.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ResponseHeaders.d.ts","sourceRoot":"","sources":["../../helpers/ResponseHeaders.js"],"names":[],"mappings":"AAuBA;IASE,qCAAqC;IACrC,yBADY,YAAY;QAsIpB;;;WAGG;2BAFQ,MAAM,GAAC,aAAa,GAAC,YAAY,GAChC,OAAO;QAKnB;;;WAGG;qBAFQ,MAAM,GAAC,aAAa,GACnB,YAAY;QAKxB;;;WAGG;yBAFQ,MAAM,GAAC,aAAa,GACnB,YAAY,EAAE;QAW1B;;;WAGG;sBAFQ,aAAa,GACZ,YAAY;QAKxB;;;WAGG;0BAFQ,aAAa,GACZ,YAAY,EAAE;QAmB1B;;;WAGG;oBAFQ,MAAM,GAAC,aAAa,GACnB,YAAY;QAmBxB;;;WAGG;wBAFQ,MAAM,GAAC,aAAa,GACnB,MAAM;QAUlB;;;WAGG;wBAFQ,MAAM,GAAC,aAAa,GACnB,YAAY;QAcxB;;;WAGG;4BAFQ,MAAM,GAAC,aAAa,GACnB,YAAY,EAAE;MA5O7B;IAZD,qCAAqC;IACrC,sBADY,YAAY,EAMvB;IA4BD,kCAAkC;IAClC,6BADY,MAAM,EAGjB;IAPD,mBAIY,MAAM,CAFjB;IAWD,gCAAgC;IAChC,yBADY,MAAM,EAQjB;IAZD,iBAIY,MAAM,CAFjB;IAgBD,8BAA8B;IAC9B,qBADY,MAAM,EAQjB;IAZD,eAIY,MAAM,CAFjB;IAoCD,6CAA6C;IAC7C,4CADY,cAAc,EAsBzB;IA9CD,+BAA+B;IAC/B,+BADa,cAAc,CAsB1B;IA8BD,+BAA+B;IAC/B,uBADY,MAAM,EAQjB;IAZD,gBAIY,MAAM,CAFjB;IAgBD,4BAA4B;IAC5B,yBADY,MAAM,EAGjB;IAPD,qBAIY,MAAM,CAFjB;IAOD;QAII;;;WAGG;2BAFQ,MAAM,GAAC,aAAa,GAAC,YAAY,GAChC,OAAO;QAKnB;;;WAGG;qBAFQ,MAAM,GAAC,aAAa,GACnB,YAAY;QAKxB;;;WAGG;yBAFQ,MAAM,GAAC,aAAa,GACnB,YAAY,EAAE;QAW1B;;;WAGG;sBAFQ,aAAa,GACZ,YAAY;QAKxB;;;WAGG;0BAFQ,aAAa,GACZ,YAAY,EAAE;QAmB1B;;;WAGG;oBAFQ,MAAM,GAAC,aAAa,GACnB,YAAY;QAmBxB;;;WAGG;wBAFQ,MAAM,GAAC,aAAa,GACnB,MAAM;QAUlB;;;WAGG;wBAFQ,MAAM,GAAC,aAAa,GACnB,YAAY;QAcxB;;;WAGG;4BAFQ,MAAM,GAAC,aAAa,GACnB,YAAY,EAAE;MAY7B;IAED,oCAAoC;IACpC,qBADa,KAAK,CAAC,YAAY,CAAC,CAoD/B;;CACF;2BA/Ua,OAAO,wBAAwB,EAAE,OAAO;4BACxC,OAAO,yBAAyB,EAAE,aAAa;2BAHlC,oBAAoB;yBAFtB,yBAAyB"}
@@ -0,0 +1,6 @@
1
+ export { default as HttpListener } from "./HttpListener.js";
2
+ export { default as HeadersParser } from "./HeadersParser.js";
3
+ export { default as RequestHeaders } from "./RequestHeaders.js";
4
+ export { default as RequestReader } from "./RequestReader.js";
5
+ export { default as ResponseHeaders } from "./ResponseHeaders.js";
6
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../helpers/index.js"],"names":[],"mappings":""}
@@ -0,0 +1,79 @@
1
+ /**
2
+ * @typedef {Object} HttpHandlerOptions
3
+ * @prop {Middleware[]} [middleware]
4
+ * @prop {MiddlewareErrorHandler[]} [errorHandlers]
5
+ */
6
+ export default class HttpHandler {
7
+ /** @type {true} */
8
+ static CONTINUE: true;
9
+ /** @type {false} */
10
+ static BREAK: false;
11
+ /** @type {0} */
12
+ static END: 0;
13
+ /** @return {HttpHandler} */
14
+ static get defaultInstance(): HttpHandler;
15
+ /**
16
+ * @param {any} result
17
+ * @return {?MiddlewareFlowInstruction}
18
+ */
19
+ static ParseResultSync(result: any): MiddlewareFlowInstruction | null;
20
+ /**
21
+ * @param {string} scheme
22
+ * @param {string} authority
23
+ * @param {string} path
24
+ */
25
+ static parseURL(scheme: string, authority: string, path: string): {
26
+ href: string;
27
+ origin: string;
28
+ protocol: string;
29
+ username: string;
30
+ password: string;
31
+ host: string;
32
+ hostname: string;
33
+ port: string;
34
+ pathname: string;
35
+ search: string;
36
+ hash: string;
37
+ query: string;
38
+ fragment: string;
39
+ url: string;
40
+ };
41
+ /** @param {HttpHandlerOptions} options */
42
+ constructor(options?: HttpHandlerOptions);
43
+ middleware: import("../data/middleware.js").Middleware[];
44
+ errorHandlers: import("../data/custom-types.js").MiddlewareErrorHandler[];
45
+ /**
46
+ * @param {HttpTransaction} transaction
47
+ * @return {Promise<HttpTransaction>}
48
+ */
49
+ handleTransaction(transaction: HttpTransaction): Promise<HttpTransaction>;
50
+ /**
51
+ * @param {import('http').IncomingMessage} incomingMessage
52
+ * @param {import('http').ServerResponse} serverResponse
53
+ * @return {Promise<HttpTransaction>}
54
+ */
55
+ handleHttp1Request(incomingMessage: import("http").IncomingMessage, serverResponse: import("http").ServerResponse): Promise<HttpTransaction>;
56
+ /**
57
+ * @param {import('http2').ServerHttp2Stream} stream
58
+ * @param {import('http2').IncomingHttpHeaders} headers
59
+ * @param {Partial<import('./HttpTransaction.js').HttpTransactionOptions<unknown>>} [transactionOptions]
60
+ * @return {Promise<HttpTransaction>}
61
+ */
62
+ handleHttp2Stream(stream: import("http2").ServerHttp2Stream, headers: import("http2").IncomingHttpHeaders, transactionOptions?: Partial<import("./HttpTransaction.js").HttpTransactionOptions<unknown>>): Promise<HttpTransaction>;
63
+ /**
64
+ * @param {HttpTransaction} transaction
65
+ * @param {Middleware} middleware
66
+ * @return {Promise<MiddlewareFlowInstruction>}
67
+ */
68
+ processMiddleware(transaction: HttpTransaction, middleware: Middleware): Promise<MiddlewareFlowInstruction>;
69
+ }
70
+ export type Middleware = import("../data/custom-types.js").Middleware;
71
+ export type MiddlewareErrorHandler = import("../data/custom-types.js").MiddlewareErrorHandler;
72
+ export type MiddlewareFlowInstruction = import("../data/custom-types.js").MiddlewareFlowInstruction;
73
+ export type RequestMethod = import("../data/custom-types.js").RequestMethod;
74
+ export type HttpHandlerOptions = {
75
+ middleware?: Middleware[];
76
+ errorHandlers?: MiddlewareErrorHandler[];
77
+ };
78
+ import HttpTransaction from './HttpTransaction.js';
79
+ //# sourceMappingURL=HttpHandler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"HttpHandler.d.ts","sourceRoot":"","sources":["../../lib/HttpHandler.js"],"names":[],"mappings":"AAiBA;;;;GAIG;AACH;IACE,mBAAmB;IACnB,iBADW,IAAI,CACQ;IAEvB,oBAAoB;IACpB,cADW,KAAK,CACK;IAErB,gBAAgB;IAChB,YADW,CAAC,CACG;IAEf,4BAA4B;IAC5B,8BADa,WAAW,CAMvB;IAED;;;OAGG;IACH,+BAHW,GAAG,GACD,yBAAyB,OAAA,CAkBrC;IAED;;;;OAIG;IACH,wBAJW,MAAM,aACN,MAAM,QACN,MAAM;;;;;;;;;;;;;;;MA6DhB;IAED,0CAA0C;IAC1C,sBADY,kBAAkB,EAO7B;IALC,yDAA0C;IAC1C,0EAAgD;IA2IlD;;;OAGG;IACH,+BAHW,eAAe,GACd,OAAO,CAAC,eAAe,CAAC,CAwBnC;IAED;;;;OAIG;IACH,oCAJW,OAAO,MAAM,EAAE,eAAe,kBAC9B,OAAO,MAAM,EAAE,cAAc,GAC5B,OAAO,CAAC,eAAe,CAAC,CAyFnC;IAED;;;;;OAKG;IACH,0BALW,OAAO,OAAO,EAAE,iBAAiB,WACjC,OAAO,OAAO,EAAE,mBAAmB,uBACnC,OAAO,CAAC,OAAO,sBAAsB,EAAE,sBAAsB,CAAC,OAAO,CAAC,CAAC,GACtE,OAAO,CAAC,eAAe,CAAC,CAiKnC;IApaD;;;;OAIG;IACH,+BAJW,eAAe,cACf,UAAU,GACT,OAAO,CAAC,yBAAyB,CAAC,CAgI7C;CAkSF;yBAriBa,OAAO,yBAAyB,EAAE,UAAU;qCAC5C,OAAO,yBAAyB,EAAE,sBAAsB;wCACxD,OAAO,yBAAyB,EAAE,yBAAyB;4BAC3D,OAAO,yBAAyB,EAAE,aAAa;;iBAOnD,UAAU,EAAE;oBACZ,sBAAsB,EAAE;;4BAbN,sBAAsB"}
@@ -0,0 +1,175 @@
1
+ /**
2
+ * @typedef HttpRequestOptions
3
+ * @prop {IncomingHttpHeaders} [headers]
4
+ * @prop {RequestMethod} method
5
+ * @prop {Readable} stream
6
+ * @prop {string} href URL.href
7
+ * @prop {URL['origin']} origin URL.origin
8
+ * @prop {URL['protocol']} protocol URL.protocol
9
+ * @prop {URL['username']} username URL.username
10
+ * @prop {URL['password']} password URL.password
11
+ * @prop {URL['host']} host URL.host
12
+ * @prop {URL['hostname']} hostname URL.hostname
13
+ * @prop {URL['port']} port URL.port
14
+ * @prop {URL['pathname']} pathname URL.pathname
15
+ * @prop {URL['search']} search URL.search
16
+ * @prop {URL['hash']} hash URL.hash
17
+ * @prop {string} scheme
18
+ * @prop {string} authority
19
+ * @prop {string} path unparsed path
20
+ * @prop {string} url unparsed url
21
+ * @prop {string} query
22
+ * @prop {string} fragment
23
+ */
24
+ /**
25
+ * @implements {URL}
26
+ */
27
+ export default class HttpRequest implements URL {
28
+ /** @param {HttpRequestOptions} options */
29
+ constructor(options: HttpRequestOptions);
30
+ /** @type {number} Minimum initial buffer size when working with chunks. Default 64KB */
31
+ MIN_INITIAL_BUFFER_SIZE: number;
32
+ /** @type {number} Maximium initial buffer size when working with chunks. Default 4MB */
33
+ MAX_INITIAL_BUFFER_SIZE: number;
34
+ /** @type {number} Absolute maximum buffer size to be allocated per request. Default 64MB */
35
+ MAX_BUFFER_SIZE: number;
36
+ /** @type {ContentReaderRegistration[]} */
37
+ contentReaders: ContentReaderRegistration[];
38
+ /** @type {IncomingHttpHeaders} */
39
+ headers: IncomingHttpHeaders;
40
+ method: import("../data/custom-types.js").RequestMethod;
41
+ stream: Readable;
42
+ href: string;
43
+ origin: string;
44
+ protocol: string;
45
+ username: string;
46
+ password: string;
47
+ host: string;
48
+ hostname: string;
49
+ port: string;
50
+ pathname: string;
51
+ search: string;
52
+ hash: string;
53
+ scheme: string;
54
+ authority: string;
55
+ path: string;
56
+ query: string;
57
+ fragment: string;
58
+ url: string;
59
+ /**
60
+ * @param {import('stream').Duplex} downstream
61
+ * @param {Object} [options]
62
+ * @param {boolean} [options.forwardErrors=true] Forward errors back toward source
63
+ * @param {boolean} [options.autoPipe=true]
64
+ * @param {boolean} [options.autoDestroy=true] Ignored if auto-piping
65
+ * @param {boolean} [options.autoPause=false]
66
+ * @return {Readable} previous tailend stream
67
+ */
68
+ addDownstream(downstream: import("stream").Duplex, options?: {
69
+ forwardErrors?: boolean;
70
+ autoPipe?: boolean;
71
+ autoDestroy?: boolean;
72
+ autoPause?: boolean;
73
+ }): Readable;
74
+ get bodyUsed(): boolean;
75
+ /**
76
+ * @throws {Error<'NOT_SUPPORTED'>}
77
+ * @return {?ReadableStream}
78
+ */
79
+ get readable(): ReadableStream | null;
80
+ read(): Promise<any>;
81
+ /**
82
+ * @throws {Error<'MAX_BUFFER_SIZE_REACHED'>}
83
+ * @return {Promise<Buffer>}
84
+ */
85
+ buffer(): Promise<Buffer>;
86
+ /**
87
+ * @return {Promise<ArrayBufferLike>}
88
+ */
89
+ arrayBuffer(): Promise<ArrayBufferLike>;
90
+ blob(): Promise<Blob | import("buffer").Blob>;
91
+ text(): Promise<string>;
92
+ /** @return {Promise<any>} */
93
+ json(): Promise<any>;
94
+ get mediaType(): import("../data/custom-types.js").MediaType;
95
+ /** @return {null|undefined|string} */
96
+ get charset(): null | undefined | string;
97
+ get bufferEncoding(): BufferEncoding;
98
+ formData(): Promise<void>;
99
+ get searchParams(): URLSearchParams;
100
+ toJSON(): string;
101
+ toString(): string;
102
+ get body(): ReadableStream<any>;
103
+ #private;
104
+ }
105
+ export type RequestMethod = import("../data/custom-types.js").RequestMethod;
106
+ export type IncomingHttpHeaders = import("http").IncomingHttpHeaders;
107
+ export type MediaType = import("../data/custom-types.js").MediaType;
108
+ export type ContentReaderRegistration = Partial<MediaType> & {
109
+ parse: (this: HttpRequest) => any | PromiseLike<any>;
110
+ test?: (this: HttpRequest, mediaType: MediaType) => boolean;
111
+ };
112
+ export type HttpRequestOptions = {
113
+ headers?: IncomingHttpHeaders;
114
+ method: RequestMethod;
115
+ stream: Readable;
116
+ /**
117
+ * URL.href
118
+ */
119
+ href: string;
120
+ /**
121
+ * URL.origin
122
+ */
123
+ origin: URL["origin"];
124
+ /**
125
+ * URL.protocol
126
+ */
127
+ protocol: URL["protocol"];
128
+ /**
129
+ * URL.username
130
+ */
131
+ username: URL["username"];
132
+ /**
133
+ * URL.password
134
+ */
135
+ password: URL["password"];
136
+ /**
137
+ * URL.host
138
+ */
139
+ host: URL["host"];
140
+ /**
141
+ * URL.hostname
142
+ */
143
+ hostname: URL["hostname"];
144
+ /**
145
+ * URL.port
146
+ */
147
+ port: URL["port"];
148
+ /**
149
+ * URL.pathname
150
+ */
151
+ pathname: URL["pathname"];
152
+ /**
153
+ * URL.search
154
+ */
155
+ search: URL["search"];
156
+ /**
157
+ * URL.hash
158
+ */
159
+ hash: URL["hash"];
160
+ scheme: string;
161
+ authority: string;
162
+ /**
163
+ * unparsed path
164
+ */
165
+ path: string;
166
+ /**
167
+ * unparsed url
168
+ */
169
+ url: string;
170
+ query: string;
171
+ fragment: string;
172
+ };
173
+ import { Readable } from 'node:stream';
174
+ import { URLSearchParams } from 'node:url';
175
+ //# sourceMappingURL=HttpRequest.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"HttpRequest.d.ts","sourceRoot":"","sources":["../../lib/HttpRequest.js"],"names":[],"mappings":"AAiBA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH;;GAEG;AACH,4CAFgB,GAAG;IA8BjB,0CAA0C;IAC1C,qBADY,kBAAkB,EAyB7B;IAzCD,wFAAwF;IACxF,yBADW,MAAM,CACmB;IAEpC,wFAAwF;IACxF,yBADW,MAAM,CACyB;IAE1C,4FAA4F;IAC5F,iBADW,MAAM,CACkB;IAEnC,0CAA0C;IAC1C,gBADW,yBAAyB,EAAE,CAKpC;IAIA,kCAAkC;IAClC,SADW,mBAAmB,CACM;IACpC,wDAA4B;IAC5B,iBAA4B;IAE5B,aAAwB;IACxB,eAA4B;IAC5B,iBAAgC;IAChC,iBAAgC;IAChC,iBAAgC;IAChC,aAAwB;IACxB,iBAAgC;IAChC,aAAwB;IACxB,iBAAgC;IAChC,eAA4B;IAC5B,aAAwB;IAExB,eAA4B;IAC5B,kBAAkC;IAClC,aAAwB;IACxB,cAA0B;IAC1B,iBAAgC;IAChC,YAAsB;IAGxB;;;;;;;;OAQG;IACH,0BARW,OAAO,QAAQ,EAAE,MAAM,YAE/B;QAA0B,aAAa,GAA/B,OAAO;QACW,QAAQ,GAA1B,OAAO;QACW,WAAW,GAA7B,OAAO;QACW,SAAS,GAA3B,OAAO;KACf,GAAS,QAAQ,CAwBnB;IAED,wBAAyC;IAEzC;;;OAGG;IACH,gBAFa,cAAc,OAAA,CAiB1B;IAED,qBA+BC;IAED;;;OAGG;IACH,UAFY,OAAO,CAAC,MAAM,CAAC,CAqC1B;IAED;;OAEG;IACH,eAFY,OAAO,CAAC,eAAe,CAAC,CAYnC;IAED,8CA2CC;IAED,wBAsBC;IAED,6BAA6B;IAC7B,QADa,OAAO,CAAC,GAAG,CAAC,CAQxB;IAED,6DAwCC;IAED,sCAAsC;IACtC,eADa,IAAI,GAAC,SAAS,GAAC,MAAM,CAGjC;IAED,qCAqBC;IAGD,0BAEC;IAED,oCAGC;IAED,iBAEC;IAED,mBAEC;IAED,gCAEC;;CACF;4BA3Za,OAAO,yBAAyB,EAAE,aAAa;kCAC/C,OAAO,MAAM,EAAE,mBAAmB;wBAClC,OAAO,yBAAyB,EAAE,SAAS;wCAE3C,OAAO,CAAC,SAAS,CAAC,GAAG;IAAC,KAAK,EAAC,CAAC,IAAI,EAAC,WAAW,KAAG,GAAG,GAAC,WAAW,CAAC,GAAG,CAAC,CAAC;IAAC,IAAI,CAAC,EAAC,CAAC,IAAI,EAAC,WAAW,EAAE,SAAS,EAAE,SAAS,KAAG,OAAO,CAAA;CAAC;;cAYlI,mBAAmB;YACnB,aAAa;YACb,QAAQ;;;;UACR,MAAM;;;;YACN,GAAG,CAAC,QAAQ,CAAC;;;;cACb,GAAG,CAAC,UAAU,CAAC;;;;cACf,GAAG,CAAC,UAAU,CAAC;;;;cACf,GAAG,CAAC,UAAU,CAAC;;;;UACf,GAAG,CAAC,MAAM,CAAC;;;;cACX,GAAG,CAAC,UAAU,CAAC;;;;UACf,GAAG,CAAC,MAAM,CAAC;;;;cACX,GAAG,CAAC,UAAU,CAAC;;;;YACf,GAAG,CAAC,QAAQ,CAAC;;;;UACb,GAAG,CAAC,MAAM,CAAC;YACX,MAAM;eACN,MAAM;;;;UACN,MAAM;;;;SACN,MAAM;WACN,MAAM;cACN,MAAM;;yBAtCS,aAAa;gCACN,UAAU"}