@tripod311/currents 0.0.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.
- package/README.md +257 -0
- package/dist/binaryBody.d.ts +3 -0
- package/dist/binaryBody.d.ts.map +1 -0
- package/dist/binaryBody.js +14 -0
- package/dist/binaryBody.js.map +1 -0
- package/dist/body/binaryBody.d.ts +3 -0
- package/dist/body/binaryBody.d.ts.map +1 -0
- package/dist/body/binaryBody.js +14 -0
- package/dist/body/binaryBody.js.map +1 -0
- package/dist/body/formBody.d.ts +3 -0
- package/dist/body/formBody.d.ts.map +1 -0
- package/dist/body/formBody.js +15 -0
- package/dist/body/formBody.js.map +1 -0
- package/dist/body/jsonBody.d.ts +3 -0
- package/dist/body/jsonBody.d.ts.map +1 -0
- package/dist/body/jsonBody.js +7 -0
- package/dist/body/jsonBody.js.map +1 -0
- package/dist/body/multipartBody.d.ts +3 -0
- package/dist/body/multipartBody.d.ts.map +1 -0
- package/dist/body/multipartBody.js +115 -0
- package/dist/body/multipartBody.js.map +1 -0
- package/dist/body/textBody.d.ts +3 -0
- package/dist/body/textBody.d.ts.map +1 -0
- package/dist/body/textBody.js +7 -0
- package/dist/body/textBody.js.map +1 -0
- package/dist/context.d.ts +43 -0
- package/dist/context.d.ts.map +1 -0
- package/dist/context.js +129 -0
- package/dist/context.js.map +1 -0
- package/dist/cookie.d.ts +13 -0
- package/dist/cookie.d.ts.map +1 -0
- package/dist/cookie.js +61 -0
- package/dist/cookie.js.map +1 -0
- package/dist/cors.d.ts +9 -0
- package/dist/cors.d.ts.map +1 -0
- package/dist/cors.js +34 -0
- package/dist/cors.js.map +1 -0
- package/dist/currents.d.ts +41 -0
- package/dist/currents.d.ts.map +1 -0
- package/dist/currents.js +172 -0
- package/dist/currents.js.map +1 -0
- package/dist/formBody.d.ts +2 -0
- package/dist/formBody.d.ts.map +1 -0
- package/dist/formBody.js +2 -0
- package/dist/formBody.js.map +1 -0
- package/dist/index.d.ts +20 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +14 -0
- package/dist/index.js.map +1 -0
- package/dist/jsonBody.d.ts +2 -0
- package/dist/jsonBody.d.ts.map +1 -0
- package/dist/jsonBody.js +2 -0
- package/dist/jsonBody.js.map +1 -0
- package/dist/multipartBody.d.ts +2 -0
- package/dist/multipartBody.d.ts.map +1 -0
- package/dist/multipartBody.js +2 -0
- package/dist/multipartBody.js.map +1 -0
- package/dist/router.d.ts +24 -0
- package/dist/router.d.ts.map +1 -0
- package/dist/router.js +113 -0
- package/dist/router.js.map +1 -0
- package/dist/security.d.ts +16 -0
- package/dist/security.d.ts.map +1 -0
- package/dist/security.js +34 -0
- package/dist/security.js.map +1 -0
- package/dist/static.d.ts +9 -0
- package/dist/static.d.ts.map +1 -0
- package/dist/static.js +71 -0
- package/dist/static.js.map +1 -0
- package/dist/textBody.d.ts +3 -0
- package/dist/textBody.d.ts.map +1 -0
- package/dist/textBody.js +4 -0
- package/dist/textBody.js.map +1 -0
- package/package.json +31 -0
package/dist/context.js
ADDED
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
import { Readable } from "stream";
|
|
2
|
+
import { IncomingMessage, ServerResponse } from "http";
|
|
3
|
+
export class Context {
|
|
4
|
+
raw;
|
|
5
|
+
_finished = false;
|
|
6
|
+
_notFound = false;
|
|
7
|
+
/* request part */
|
|
8
|
+
method;
|
|
9
|
+
path;
|
|
10
|
+
headers;
|
|
11
|
+
cookies = {};
|
|
12
|
+
params = {};
|
|
13
|
+
query;
|
|
14
|
+
body;
|
|
15
|
+
/* for custom data */
|
|
16
|
+
locals = {};
|
|
17
|
+
/* response part */
|
|
18
|
+
_status = 200;
|
|
19
|
+
_responseHeaders = {};
|
|
20
|
+
constructor(raw) {
|
|
21
|
+
this.raw = raw;
|
|
22
|
+
if (raw.httpVersion === 1) {
|
|
23
|
+
this.headers = raw.req.headers;
|
|
24
|
+
this.method = raw.req.method;
|
|
25
|
+
this.path = raw.req.url;
|
|
26
|
+
}
|
|
27
|
+
else {
|
|
28
|
+
this.headers = raw.headers;
|
|
29
|
+
this.method = this.headers[":method"];
|
|
30
|
+
this.path = this.headers[":path"];
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
parsePath() {
|
|
34
|
+
const [pathEnc, search = ""] = this.path.split("?");
|
|
35
|
+
this.query = new URLSearchParams(search);
|
|
36
|
+
this.path = decodeURIComponent(pathEnc);
|
|
37
|
+
}
|
|
38
|
+
responseHeader(header, value) {
|
|
39
|
+
const key = header.toLowerCase();
|
|
40
|
+
if (this._responseHeaders[key] !== undefined) {
|
|
41
|
+
if (Array.isArray(this._responseHeaders[key])) {
|
|
42
|
+
this._responseHeaders[key].push(value);
|
|
43
|
+
}
|
|
44
|
+
else {
|
|
45
|
+
this._responseHeaders[key] = [this._responseHeaders[key], value];
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
else {
|
|
49
|
+
this._responseHeaders[key] = value;
|
|
50
|
+
}
|
|
51
|
+
return this;
|
|
52
|
+
}
|
|
53
|
+
status(code) {
|
|
54
|
+
this._status = code;
|
|
55
|
+
return this;
|
|
56
|
+
}
|
|
57
|
+
json(data) {
|
|
58
|
+
this.responseHeader("Content-Type", "application/json");
|
|
59
|
+
this.send(Buffer.from(JSON.stringify(data), "utf-8"));
|
|
60
|
+
}
|
|
61
|
+
text(data) {
|
|
62
|
+
this.responseHeader("Content-Type", "text/plain");
|
|
63
|
+
this.send(Buffer.from(data, "utf-8"));
|
|
64
|
+
}
|
|
65
|
+
binary(data) {
|
|
66
|
+
this.responseHeader("Content-Type", "application/octet-stream");
|
|
67
|
+
this.send(data);
|
|
68
|
+
}
|
|
69
|
+
send(data, contentLength) {
|
|
70
|
+
if (Buffer.isBuffer(data)) {
|
|
71
|
+
this._responseHeaders["Content-Length"] = data.length.toString();
|
|
72
|
+
}
|
|
73
|
+
else {
|
|
74
|
+
if (contentLength === undefined) {
|
|
75
|
+
throw new Error("Context.send must be provided with contentLength when sending Readable");
|
|
76
|
+
}
|
|
77
|
+
this._responseHeaders["Content-Length"] = contentLength.toString();
|
|
78
|
+
}
|
|
79
|
+
if (this.raw.httpVersion === 1) {
|
|
80
|
+
this.raw.res.writeHead(this._status, this._responseHeaders);
|
|
81
|
+
if (data instanceof Readable) {
|
|
82
|
+
data.pipe(this.raw.res);
|
|
83
|
+
}
|
|
84
|
+
else {
|
|
85
|
+
this.raw.res.end(data);
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
else {
|
|
89
|
+
this.raw.stream.respond({
|
|
90
|
+
":status": this._status,
|
|
91
|
+
...this._responseHeaders
|
|
92
|
+
});
|
|
93
|
+
if (data instanceof Readable) {
|
|
94
|
+
data.pipe(this.raw.stream);
|
|
95
|
+
}
|
|
96
|
+
else {
|
|
97
|
+
this.raw.stream.end(data);
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
this._finished = true;
|
|
101
|
+
}
|
|
102
|
+
end() {
|
|
103
|
+
if (this.raw.httpVersion === 1) {
|
|
104
|
+
this.raw.res.writeHead(this._status, this._responseHeaders);
|
|
105
|
+
this.raw.res.end();
|
|
106
|
+
}
|
|
107
|
+
else {
|
|
108
|
+
this.raw.stream.respond({
|
|
109
|
+
":status": this._status,
|
|
110
|
+
...this._responseHeaders
|
|
111
|
+
});
|
|
112
|
+
this.raw.stream.end();
|
|
113
|
+
}
|
|
114
|
+
this._finished = true;
|
|
115
|
+
}
|
|
116
|
+
redirect(to) {
|
|
117
|
+
this.responseHeader("Location", to).status(307).end();
|
|
118
|
+
}
|
|
119
|
+
callNotFound() {
|
|
120
|
+
this._notFound = true;
|
|
121
|
+
}
|
|
122
|
+
get finished() {
|
|
123
|
+
return this._finished;
|
|
124
|
+
}
|
|
125
|
+
get notFound() {
|
|
126
|
+
return this._notFound;
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
//# sourceMappingURL=context.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context.js","sourceRoot":"","sources":["../src/context.ts"],"names":[],"mappings":"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"}
|
package/dist/cookie.d.ts
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { Context } from "./context.js";
|
|
2
|
+
export interface CookieOptions {
|
|
3
|
+
maxAge?: number;
|
|
4
|
+
expires?: Date;
|
|
5
|
+
httpOnly?: boolean;
|
|
6
|
+
secure?: boolean;
|
|
7
|
+
sameSite?: "Strict" | "Lax" | "None";
|
|
8
|
+
path?: string;
|
|
9
|
+
domain?: string;
|
|
10
|
+
}
|
|
11
|
+
export declare function ParseCookies(secret?: string): (ctx: Context) => Promise<void>;
|
|
12
|
+
export declare function SetCookie(ctx: Context, name: string, value: string, options: CookieOptions): void;
|
|
13
|
+
//# sourceMappingURL=cookie.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cookie.d.ts","sourceRoot":"","sources":["../src/cookie.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AAEtC,MAAM,WAAW,aAAa;IAC7B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,IAAI,CAAC;IACf,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,QAAQ,CAAC,EAAE,QAAQ,GAAG,KAAK,GAAG,MAAM,CAAC;IACrC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;CAChB;AAaD,wBAAgB,YAAY,CAAE,MAAM,CAAC,EAAE,MAAM,IAG9B,KAAK,OAAO,mBA4B1B;AAED,wBAAgB,SAAS,CAAE,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,QAmB3F"}
|
package/dist/cookie.js
ADDED
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import crypto from "crypto";
|
|
2
|
+
import { Context } from "./context.js";
|
|
3
|
+
let CookieSecret = undefined;
|
|
4
|
+
function sign(value) {
|
|
5
|
+
return crypto.createHmac("sha256", CookieSecret).update(value).digest("base64url");
|
|
6
|
+
}
|
|
7
|
+
function verify(value, signature) {
|
|
8
|
+
const expected = sign(value);
|
|
9
|
+
return crypto.timingSafeEqual(Buffer.from(signature), Buffer.from(expected));
|
|
10
|
+
}
|
|
11
|
+
export function ParseCookies(secret) {
|
|
12
|
+
CookieSecret = secret;
|
|
13
|
+
return async (ctx) => {
|
|
14
|
+
const header = ctx.headers["cookie"];
|
|
15
|
+
if (!header)
|
|
16
|
+
return;
|
|
17
|
+
const parts = header.split(";");
|
|
18
|
+
for (const part of parts) {
|
|
19
|
+
const [rawKey, rawVal = ""] = part.trim().split("=");
|
|
20
|
+
const key = decodeURIComponent(rawKey);
|
|
21
|
+
const val = decodeURIComponent(rawVal);
|
|
22
|
+
if (CookieSecret) {
|
|
23
|
+
const sigIndex = val.lastIndexOf(".sig-");
|
|
24
|
+
if (sigIndex !== -1) {
|
|
25
|
+
const rawValue = val.slice(0, sigIndex);
|
|
26
|
+
const sig = val.slice(sigIndex + 5);
|
|
27
|
+
if (verify(rawValue, sig)) {
|
|
28
|
+
ctx.cookies[key] = rawValue;
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
else {
|
|
33
|
+
ctx.cookies[key] = val;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
export function SetCookie(ctx, name, value, options) {
|
|
39
|
+
let cookieValue = encodeURIComponent(value);
|
|
40
|
+
if (CookieSecret !== undefined) {
|
|
41
|
+
const sig = sign(value);
|
|
42
|
+
cookieValue = encodeURIComponent(`${value}.sig-${sig}`);
|
|
43
|
+
}
|
|
44
|
+
const parts = [`${name}=${cookieValue}`];
|
|
45
|
+
if (options.maxAge !== undefined)
|
|
46
|
+
parts.push(`Max-Age=${options.maxAge}`);
|
|
47
|
+
if (options.expires)
|
|
48
|
+
parts.push(`Expires=${options.expires.toUTCString()}`);
|
|
49
|
+
if (options.path)
|
|
50
|
+
parts.push(`Path=${options.path}`);
|
|
51
|
+
if (options.domain)
|
|
52
|
+
parts.push(`Domain=${options.domain}`);
|
|
53
|
+
if (options.httpOnly)
|
|
54
|
+
parts.push("HttpOnly");
|
|
55
|
+
if (options.secure)
|
|
56
|
+
parts.push("Secure");
|
|
57
|
+
if (options.sameSite)
|
|
58
|
+
parts.push(`SameSite=${options.sameSite}`);
|
|
59
|
+
ctx.responseHeader("Set-Cookie", parts.join('; '));
|
|
60
|
+
}
|
|
61
|
+
//# sourceMappingURL=cookie.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cookie.js","sourceRoot":"","sources":["../src/cookie.ts"],"names":[],"mappings":"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"}
|
package/dist/cors.d.ts
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { Context } from "./context.js";
|
|
2
|
+
export interface CorsOptions {
|
|
3
|
+
allowedOrigin: string | string[];
|
|
4
|
+
allowedMethods?: string[];
|
|
5
|
+
allowedHeaders?: string[];
|
|
6
|
+
credentials?: boolean;
|
|
7
|
+
}
|
|
8
|
+
export declare function Cors(options: CorsOptions): (ctx: Context) => Promise<void>;
|
|
9
|
+
//# sourceMappingURL=cors.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cors.d.ts","sourceRoot":"","sources":["../src/cors.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AAEtC,MAAM,WAAW,WAAW;IAC3B,aAAa,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IACjC,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,WAAW,CAAC,EAAE,OAAO,CAAC;CACtB;AAED,wBAAgB,IAAI,CAAE,OAAO,EAAE,WAAW,IAC3B,KAAK,OAAO,mBAgC1B"}
|
package/dist/cors.js
ADDED
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { Context } from "./context.js";
|
|
2
|
+
export function Cors(options) {
|
|
3
|
+
return async (ctx) => {
|
|
4
|
+
const origin = ctx.headers["origin"];
|
|
5
|
+
if (!origin)
|
|
6
|
+
return;
|
|
7
|
+
let allowed = false;
|
|
8
|
+
if (options.allowedOrigin === "*") {
|
|
9
|
+
allowed = true;
|
|
10
|
+
}
|
|
11
|
+
else if (typeof options.allowedOrigin === "string") {
|
|
12
|
+
allowed = options.allowedOrigin === origin;
|
|
13
|
+
}
|
|
14
|
+
else if (Array.isArray(options.allowedOrigin)) {
|
|
15
|
+
allowed = options.allowedOrigin.includes(origin);
|
|
16
|
+
}
|
|
17
|
+
if (!allowed)
|
|
18
|
+
return;
|
|
19
|
+
ctx.responseHeader("Access-Control-Allow-Origin", origin);
|
|
20
|
+
if (options.credentials) {
|
|
21
|
+
ctx.responseHeader("Access-Control-Allow-Credentials", "true");
|
|
22
|
+
}
|
|
23
|
+
if (ctx.method === "OPTIONS") {
|
|
24
|
+
if (options.allowedMethods) {
|
|
25
|
+
ctx.responseHeader("Access-Control-Allow-Methods", options.allowedMethods.join(", "));
|
|
26
|
+
}
|
|
27
|
+
if (options.allowedHeaders) {
|
|
28
|
+
ctx.responseHeader("Access-Control-Allow-Headers", options.allowedHeaders.join(", "));
|
|
29
|
+
}
|
|
30
|
+
ctx.status(204).end();
|
|
31
|
+
}
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=cors.js.map
|
package/dist/cors.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cors.js","sourceRoot":"","sources":["../src/cors.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AAStC,MAAM,UAAU,IAAI,CAAE,OAAoB;IACzC,OAAO,KAAK,EAAE,GAAY,EAAE,EAAE;QAC7B,MAAM,MAAM,GAAG,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QACrC,IAAI,CAAC,MAAM;YAAE,OAAO;QAEpB,IAAI,OAAO,GAAG,KAAK,CAAC;QAEpB,IAAI,OAAO,CAAC,aAAa,KAAK,GAAG,EAAE,CAAC;YACnC,OAAO,GAAG,IAAI,CAAC;QAChB,CAAC;aAAM,IAAI,OAAO,OAAO,CAAC,aAAa,KAAK,QAAQ,EAAE,CAAC;YACtD,OAAO,GAAG,OAAO,CAAC,aAAa,KAAK,MAAM,CAAC;QAC5C,CAAC;aAAM,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,aAAa,CAAC,EAAE,CAAC;YACjD,OAAO,GAAG,OAAO,CAAC,aAAa,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QAClD,CAAC;QAED,IAAI,CAAC,OAAO;YAAE,OAAO;QAErB,GAAG,CAAC,cAAc,CAAC,6BAA6B,EAAE,MAAM,CAAC,CAAC;QAE1D,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC;YACzB,GAAG,CAAC,cAAc,CAAC,kCAAkC,EAAE,MAAM,CAAC,CAAC;QAChE,CAAC;QAED,IAAI,GAAG,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;YAC9B,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC;gBAC5B,GAAG,CAAC,cAAc,CAAC,8BAA8B,EAAE,OAAO,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;YACvF,CAAC;YACD,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC;gBAC5B,GAAG,CAAC,cAAc,CAAC,8BAA8B,EAAE,OAAO,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;YACvF,CAAC;YACD,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC;QACvB,CAAC;IACF,CAAC,CAAA;AACF,CAAC"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { Server as HttpServer, IncomingMessage, ServerResponse } from "http";
|
|
2
|
+
import { Server as HttpsServer } from "https";
|
|
3
|
+
import type { Http2Server, Http2SecureServer, ServerHttp2Stream, IncomingHttpHeaders } from "http2";
|
|
4
|
+
import type { RouteHandler } from "./router.js";
|
|
5
|
+
import { Context } from "./context.js";
|
|
6
|
+
export interface CurrentsOptions {
|
|
7
|
+
forceHTTPVersion?: 1 | 2;
|
|
8
|
+
certificates?: {
|
|
9
|
+
cert: string;
|
|
10
|
+
key: string;
|
|
11
|
+
ca?: string;
|
|
12
|
+
};
|
|
13
|
+
}
|
|
14
|
+
type Server = HttpServer | HttpsServer | Http2Server | Http2SecureServer;
|
|
15
|
+
export type ErrorHandler = (err: any, ctx: Context) => Promise<void>;
|
|
16
|
+
export declare class Currents {
|
|
17
|
+
httpVersion: number;
|
|
18
|
+
server: Server;
|
|
19
|
+
private routesTable;
|
|
20
|
+
private _notFoundHandler;
|
|
21
|
+
private _errorHandler;
|
|
22
|
+
constructor(version: number, server: Server);
|
|
23
|
+
handleRequestV1(req: IncomingMessage, res: ServerResponse): void;
|
|
24
|
+
handleRequestV2(stream: ServerHttp2Stream, headers: IncomingHttpHeaders): void;
|
|
25
|
+
private processRequest;
|
|
26
|
+
private runHandlers;
|
|
27
|
+
any(path: string, handlers: RouteHandler[]): void;
|
|
28
|
+
get(path: string, handlers: RouteHandler[]): void;
|
|
29
|
+
post(path: string, handlers: RouteHandler[]): void;
|
|
30
|
+
put(path: string, handlers: RouteHandler[]): void;
|
|
31
|
+
delete(path: string, handlers: RouteHandler[]): void;
|
|
32
|
+
set notFoundHandler(val: RouteHandler[]);
|
|
33
|
+
set errorHandler(val: ErrorHandler);
|
|
34
|
+
static fromOptions(options: CurrentsOptions): Currents;
|
|
35
|
+
static fromServer(server: Server): Currents;
|
|
36
|
+
static isHttp2Server(server: HttpServer | HttpsServer | Http2Server | Http2SecureServer): server is Http2Server | Http2SecureServer;
|
|
37
|
+
static defaultErrorHandler(err: any, ctx: Context): Promise<void>;
|
|
38
|
+
static defaultNotFoundHandler(ctx: Context): Promise<void>;
|
|
39
|
+
}
|
|
40
|
+
export {};
|
|
41
|
+
//# sourceMappingURL=currents.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"currents.d.ts","sourceRoot":"","sources":["../src/currents.ts"],"names":[],"mappings":"AACA,OAAa,EAAE,MAAM,IAAI,UAAU,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,MAAM,CAAA;AAClF,OAAc,EAAE,MAAM,IAAI,WAAW,EAAE,MAAM,OAAO,CAAA;AAEpD,OAAO,KAAK,EAAE,WAAW,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,OAAO,CAAA;AAGnG,OAAO,KAAK,EAAc,YAAY,EAAE,MAAM,aAAa,CAAA;AAC3D,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AAEtC,MAAM,WAAW,eAAe;IAC/B,gBAAgB,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;IACzB,YAAY,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAC;QAAC,EAAE,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CAC1D;AAED,KAAK,MAAM,GAAG,UAAU,GAAG,WAAW,GAAG,WAAW,GAAG,iBAAiB,CAAC;AAEzE,MAAM,MAAM,YAAY,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;AAErE,qBAAa,QAAQ;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IAEtB,OAAO,CAAC,WAAW,CAMjB;IACF,OAAO,CAAC,gBAAgB,CAAiB;IACzC,OAAO,CAAC,aAAa,CAAe;gBAEvB,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;IAc5C,eAAe,CAAE,GAAG,EAAE,eAAe,EAAE,GAAG,EAAE,cAAc;IAiB1D,eAAe,CAAE,MAAM,EAAE,iBAAiB,EAAE,OAAO,EAAE,mBAAmB;IAiBxE,OAAO,CAAC,cAAc;YAgCR,WAAW;IAkBzB,GAAG,CAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,YAAY,EAAE;IAI3C,GAAG,CAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,YAAY,EAAE;IAI3C,IAAI,CAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,YAAY,EAAE;IAI5C,GAAG,CAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,YAAY,EAAE;IAI3C,MAAM,CAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,YAAY,EAAE;IAI9C,IAAI,eAAe,CAAE,GAAG,EAAE,YAAY,EAAE,EAEvC;IAED,IAAI,YAAY,CAAE,GAAG,EAAE,YAAY,EAElC;IAED,MAAM,CAAC,WAAW,CAAE,OAAO,EAAE,eAAe,GAAG,QAAQ;IA+BvD,MAAM,CAAC,UAAU,CAAE,MAAM,EAAE,MAAM,GAAG,QAAQ;IAI5C,MAAM,CAAC,aAAa,CAAC,MAAM,EAAE,UAAU,GAAG,WAAW,GAAG,WAAW,GAAG,iBAAiB,GAAG,MAAM,IAAI,WAAW,GAAG,iBAAiB;WAItH,mBAAmB,CAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO;WAO3C,sBAAsB,CAAE,GAAG,EAAE,OAAO;CAGjD"}
|
package/dist/currents.js
ADDED
|
@@ -0,0 +1,172 @@
|
|
|
1
|
+
import fs from "fs";
|
|
2
|
+
import http, { Server as HttpServer, IncomingMessage, ServerResponse } from "http";
|
|
3
|
+
import https, { Server as HttpsServer } from "https";
|
|
4
|
+
import http2 from "http2";
|
|
5
|
+
import { Router } from "./router.js";
|
|
6
|
+
import { Context } from "./context.js";
|
|
7
|
+
export class Currents {
|
|
8
|
+
httpVersion;
|
|
9
|
+
server;
|
|
10
|
+
routesTable = {
|
|
11
|
+
"ANY": new Router(),
|
|
12
|
+
"GET": new Router(),
|
|
13
|
+
"POST": new Router(),
|
|
14
|
+
"PUT": new Router(),
|
|
15
|
+
"DELETE": new Router()
|
|
16
|
+
};
|
|
17
|
+
_notFoundHandler;
|
|
18
|
+
_errorHandler;
|
|
19
|
+
constructor(version, server) {
|
|
20
|
+
this.httpVersion = version;
|
|
21
|
+
this.server = server;
|
|
22
|
+
if (Currents.isHttp2Server(this.server)) {
|
|
23
|
+
this.server.on("stream", this.handleRequestV2.bind(this));
|
|
24
|
+
}
|
|
25
|
+
else {
|
|
26
|
+
this.server.on("request", this.handleRequestV1.bind(this));
|
|
27
|
+
}
|
|
28
|
+
this._errorHandler = Currents.defaultErrorHandler;
|
|
29
|
+
this._notFoundHandler = [Currents.defaultNotFoundHandler];
|
|
30
|
+
}
|
|
31
|
+
handleRequestV1(req, res) {
|
|
32
|
+
const ctx = new Context({
|
|
33
|
+
httpVersion: 1,
|
|
34
|
+
req: req,
|
|
35
|
+
res: res
|
|
36
|
+
});
|
|
37
|
+
try {
|
|
38
|
+
ctx.parsePath();
|
|
39
|
+
this.processRequest(ctx);
|
|
40
|
+
}
|
|
41
|
+
catch (err) {
|
|
42
|
+
// only if path is incorrect
|
|
43
|
+
this._errorHandler(`Bad request: ${err.toString()}`, ctx);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
handleRequestV2(stream, headers) {
|
|
47
|
+
const ctx = new Context({
|
|
48
|
+
httpVersion: 2,
|
|
49
|
+
stream: stream,
|
|
50
|
+
headers: headers
|
|
51
|
+
});
|
|
52
|
+
try {
|
|
53
|
+
ctx.parsePath();
|
|
54
|
+
this.processRequest(ctx);
|
|
55
|
+
}
|
|
56
|
+
catch (err) {
|
|
57
|
+
// only if path is incorrect
|
|
58
|
+
this._errorHandler(`Bad request: ${err.toString()}`, ctx);
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
processRequest(ctx) {
|
|
62
|
+
let router;
|
|
63
|
+
switch (ctx.method) {
|
|
64
|
+
case "GET":
|
|
65
|
+
router = this.routesTable["GET"];
|
|
66
|
+
break;
|
|
67
|
+
case "POST":
|
|
68
|
+
router = this.routesTable["POST"];
|
|
69
|
+
break;
|
|
70
|
+
case "PUT":
|
|
71
|
+
router = this.routesTable["PUT"];
|
|
72
|
+
break;
|
|
73
|
+
case "DELETE":
|
|
74
|
+
router = this.routesTable["DELETE"];
|
|
75
|
+
break;
|
|
76
|
+
default:
|
|
77
|
+
router = this.routesTable["ANY"];
|
|
78
|
+
break;
|
|
79
|
+
}
|
|
80
|
+
const match = router.match(ctx.path);
|
|
81
|
+
if (match !== null) {
|
|
82
|
+
ctx.params = match.params;
|
|
83
|
+
this.runHandlers(ctx, match.handlers);
|
|
84
|
+
}
|
|
85
|
+
else {
|
|
86
|
+
this.runHandlers(ctx, this._notFoundHandler, true);
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
async runHandlers(ctx, handlers, ignoreNotFound = false) {
|
|
90
|
+
try {
|
|
91
|
+
let index = 0;
|
|
92
|
+
while (index < handlers.length && !ctx.finished) {
|
|
93
|
+
await handlers[index](ctx);
|
|
94
|
+
index++;
|
|
95
|
+
if (ctx.finished)
|
|
96
|
+
return;
|
|
97
|
+
if (ctx.notFound && !ignoreNotFound)
|
|
98
|
+
this.runHandlers(ctx, this._notFoundHandler, true);
|
|
99
|
+
}
|
|
100
|
+
if (!ctx.finished)
|
|
101
|
+
console.warn(`[Currents] Request to ${ctx.path} received no response`);
|
|
102
|
+
}
|
|
103
|
+
catch (err) {
|
|
104
|
+
await this._errorHandler(err, ctx);
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
any(path, handlers) {
|
|
108
|
+
this.routesTable["ANY"].add(path, handlers);
|
|
109
|
+
}
|
|
110
|
+
get(path, handlers) {
|
|
111
|
+
this.routesTable["GET"].add(path, handlers);
|
|
112
|
+
}
|
|
113
|
+
post(path, handlers) {
|
|
114
|
+
this.routesTable["POST"].add(path, handlers);
|
|
115
|
+
}
|
|
116
|
+
put(path, handlers) {
|
|
117
|
+
this.routesTable["PUT"].add(path, handlers);
|
|
118
|
+
}
|
|
119
|
+
delete(path, handlers) {
|
|
120
|
+
this.routesTable["DELETE"].add(path, handlers);
|
|
121
|
+
}
|
|
122
|
+
set notFoundHandler(val) {
|
|
123
|
+
this._notFoundHandler = val;
|
|
124
|
+
}
|
|
125
|
+
set errorHandler(val) {
|
|
126
|
+
this._errorHandler = val;
|
|
127
|
+
}
|
|
128
|
+
static fromOptions(options) {
|
|
129
|
+
let result;
|
|
130
|
+
if (options.certificates !== undefined) {
|
|
131
|
+
const loadedCerts = {
|
|
132
|
+
cert: fs.readFileSync(options.certificates.cert),
|
|
133
|
+
key: fs.readFileSync(options.certificates.key)
|
|
134
|
+
};
|
|
135
|
+
if (options.certificates.ca !== undefined)
|
|
136
|
+
loadedCerts.ca = fs.readFileSync(options.certificates.ca);
|
|
137
|
+
if (options.forceHTTPVersion === 1) {
|
|
138
|
+
result = new Currents(1, https.createServer(loadedCerts));
|
|
139
|
+
}
|
|
140
|
+
else {
|
|
141
|
+
result = new Currents(2, http2.createSecureServer(loadedCerts));
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
else {
|
|
145
|
+
if (options.forceHTTPVersion === 2) {
|
|
146
|
+
console.warn("[Currents] HTTP/2 started without TLS-certificate. " +
|
|
147
|
+
"Watch out: browsers won't connect in this mode. " +
|
|
148
|
+
"Use this variant only for local tests or cli/curl APIs.");
|
|
149
|
+
result = new Currents(2, http2.createServer());
|
|
150
|
+
}
|
|
151
|
+
else {
|
|
152
|
+
result = new Currents(1, http.createServer());
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
return result;
|
|
156
|
+
}
|
|
157
|
+
static fromServer(server) {
|
|
158
|
+
return new Currents(Currents.isHttp2Server(server) ? 2 : 1, server);
|
|
159
|
+
}
|
|
160
|
+
static isHttp2Server(server) {
|
|
161
|
+
return typeof server.on === "function" && "sessionTimeout" in server;
|
|
162
|
+
}
|
|
163
|
+
static async defaultErrorHandler(err, ctx) {
|
|
164
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
165
|
+
const stack = err instanceof Error ? err.stack : undefined;
|
|
166
|
+
ctx.status(500).text(`An error occurred: ${message}\n${stack}`);
|
|
167
|
+
}
|
|
168
|
+
static async defaultNotFoundHandler(ctx) {
|
|
169
|
+
ctx.status(404).text(`Cannot find ${ctx.path}`);
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
//# sourceMappingURL=currents.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"currents.js","sourceRoot":"","sources":["../src/currents.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"formBody.d.ts","sourceRoot":"","sources":["../src/formBody.ts"],"names":[],"mappings":""}
|
package/dist/formBody.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"formBody.js","sourceRoot":"","sources":["../src/formBody.ts"],"names":[],"mappings":""}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { Currents } from "./currents.js";
|
|
2
|
+
import { Context } from "./context.js";
|
|
3
|
+
import { Router } from "./router.js";
|
|
4
|
+
import { ServeStatic } from "./static.js";
|
|
5
|
+
import { ParseCookies, SetCookie } from "./cookie.js";
|
|
6
|
+
import { Cors } from "./cors.js";
|
|
7
|
+
import { SecurityHeaders } from "./security.js";
|
|
8
|
+
import BinaryBody from "./body/binaryBody.js";
|
|
9
|
+
import TextBody from "./body/textBody.js";
|
|
10
|
+
import JsonBody from "./body/jsonBody.js";
|
|
11
|
+
import FormBody from "./body/formBody.js";
|
|
12
|
+
import MultipartBody from "./body/multipartBody.js";
|
|
13
|
+
import type { CurrentsOptions, ErrorHandler } from "./currents.js";
|
|
14
|
+
import type { RawHttp1, RawHttp2, RawHttp } from "./context.js";
|
|
15
|
+
import type { RouteHandler, RouteMatch, Route } from "./router.js";
|
|
16
|
+
import type { CorsOptions } from "./cors.js";
|
|
17
|
+
import type { SecurityHeadersOptions } from "./security.js";
|
|
18
|
+
export type { CurrentsOptions, ErrorHandler, RawHttp1, RawHttp2, RawHttp, RouteHandler, RouteMatch, Route, CorsOptions, SecurityHeadersOptions };
|
|
19
|
+
export { Currents, Context, Router, ServeStatic, ParseCookies, SetCookie, Cors, SecurityHeaders, BinaryBody, TextBody, JsonBody, FormBody, MultipartBody };
|
|
20
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AACxC,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AACtC,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AACpC,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AACzC,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AACrD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAChC,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAA;AAC/C,OAAO,UAAU,MAAM,sBAAsB,CAAA;AAC7C,OAAO,QAAQ,MAAM,oBAAoB,CAAA;AACzC,OAAO,QAAQ,MAAM,oBAAoB,CAAA;AACzC,OAAO,QAAQ,MAAM,oBAAoB,CAAA;AACzC,OAAO,aAAa,MAAM,yBAAyB,CAAA;AAEnD,OAAO,KAAK,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,eAAe,CAAA;AAClE,OAAO,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AAC/D,OAAO,KAAK,EAAE,YAAY,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,aAAa,CAAA;AAGlE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,WAAW,CAAA;AAC5C,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,eAAe,CAAA;AAE3D,YAAY,EACX,eAAe,EACf,YAAY,EACZ,QAAQ,EACR,QAAQ,EACR,OAAO,EACP,YAAY,EACZ,UAAU,EACV,KAAK,EACL,WAAW,EACX,sBAAsB,EACtB,CAAA;AAED,OAAO,EACN,QAAQ,EACR,OAAO,EACP,MAAM,EACN,WAAW,EACX,YAAY,EACZ,SAAS,EACT,IAAI,EACJ,eAAe,EACf,UAAU,EACV,QAAQ,EACR,QAAQ,EACR,QAAQ,EACR,aAAa,EACb,CAAA"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { Currents } from "./currents.js";
|
|
2
|
+
import { Context } from "./context.js";
|
|
3
|
+
import { Router } from "./router.js";
|
|
4
|
+
import { ServeStatic } from "./static.js";
|
|
5
|
+
import { ParseCookies, SetCookie } from "./cookie.js";
|
|
6
|
+
import { Cors } from "./cors.js";
|
|
7
|
+
import { SecurityHeaders } from "./security.js";
|
|
8
|
+
import BinaryBody from "./body/binaryBody.js";
|
|
9
|
+
import TextBody from "./body/textBody.js";
|
|
10
|
+
import JsonBody from "./body/jsonBody.js";
|
|
11
|
+
import FormBody from "./body/formBody.js";
|
|
12
|
+
import MultipartBody from "./body/multipartBody.js";
|
|
13
|
+
export { Currents, Context, Router, ServeStatic, ParseCookies, SetCookie, Cors, SecurityHeaders, BinaryBody, TextBody, JsonBody, FormBody, MultipartBody };
|
|
14
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AACxC,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AACtC,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AACpC,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AACzC,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AACrD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAChC,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAA;AAC/C,OAAO,UAAU,MAAM,sBAAsB,CAAA;AAC7C,OAAO,QAAQ,MAAM,oBAAoB,CAAA;AACzC,OAAO,QAAQ,MAAM,oBAAoB,CAAA;AACzC,OAAO,QAAQ,MAAM,oBAAoB,CAAA;AACzC,OAAO,aAAa,MAAM,yBAAyB,CAAA;AAuBnD,OAAO,EACN,QAAQ,EACR,OAAO,EACP,MAAM,EACN,WAAW,EACX,YAAY,EACZ,SAAS,EACT,IAAI,EACJ,eAAe,EACf,UAAU,EACV,QAAQ,EACR,QAAQ,EACR,QAAQ,EACR,aAAa,EACb,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"jsonBody.d.ts","sourceRoot":"","sources":["../src/jsonBody.ts"],"names":[],"mappings":""}
|
package/dist/jsonBody.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"jsonBody.js","sourceRoot":"","sources":["../src/jsonBody.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"multipartBody.d.ts","sourceRoot":"","sources":["../src/multipartBody.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"multipartBody.js","sourceRoot":"","sources":["../src/multipartBody.ts"],"names":[],"mappings":""}
|
package/dist/router.d.ts
ADDED
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { Context } from "./context.js";
|
|
2
|
+
export type RouteHandler = (ctx: Context) => Promise<void>;
|
|
3
|
+
export interface Route {
|
|
4
|
+
pathname: string;
|
|
5
|
+
pattern: RegExp;
|
|
6
|
+
keys: string[];
|
|
7
|
+
staticParts: number;
|
|
8
|
+
parametricParts: number;
|
|
9
|
+
handlers: RouteHandler[];
|
|
10
|
+
}
|
|
11
|
+
export interface RouteMatch {
|
|
12
|
+
handlers: RouteHandler[];
|
|
13
|
+
params: Record<string, string>;
|
|
14
|
+
}
|
|
15
|
+
export declare class Router {
|
|
16
|
+
private staticRoutes;
|
|
17
|
+
private parametricRoutes;
|
|
18
|
+
private wildcardRoutes;
|
|
19
|
+
add(path: string, handlers: RouteHandler[]): void;
|
|
20
|
+
private injectRoute;
|
|
21
|
+
private static pathToRegex;
|
|
22
|
+
match(pathname: string): RouteMatch | null;
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=router.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"router.d.ts","sourceRoot":"","sources":["../src/router.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AAEtC,MAAM,MAAM,YAAY,GAAG,CAAC,GAAG,EAAE,OAAO,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;AAE3D,MAAM,WAAW,KAAK;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,eAAe,EAAE,MAAM,CAAC;IACxB,QAAQ,EAAE,YAAY,EAAE,CAAC;CACzB;AAED,MAAM,WAAW,UAAU;IAC1B,QAAQ,EAAE,YAAY,EAAE,CAAC;IACzB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC/B;AAED,qBAAa,MAAM;IAClB,OAAO,CAAC,YAAY,CAAe;IACnC,OAAO,CAAC,gBAAgB,CAAe;IACvC,OAAO,CAAC,cAAc,CAAe;IAErC,GAAG,CAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,YAAY,EAAE;IAoC3C,OAAO,CAAC,WAAW;IAmBnB,OAAO,CAAC,MAAM,CAAC,WAAW;IAuB1B,KAAK,CAAE,QAAQ,EAAE,MAAM,GAAG,UAAU,GAAG,IAAI;CA8C3C"}
|