gemi 0.4.13 → 0.4.14
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/dist/app/App.d.ts.map +1 -1
- package/dist/app/createFlatApiRoutes.d.ts.map +1 -1
- package/dist/app/index.js +220 -608
- package/dist/auth/AuthenticationServiceProvider.d.ts +54 -0
- package/dist/auth/AuthenticationServiceProvider.d.ts.map +1 -0
- package/dist/auth/adapters/blank.d.ts +10 -0
- package/dist/auth/adapters/blank.d.ts.map +1 -0
- package/dist/auth/adapters/types.d.ts +77 -0
- package/dist/auth/adapters/types.d.ts.map +1 -0
- package/dist/bin/index.js +13 -0
- package/dist/client/ClientRouter.d.ts.map +1 -1
- package/dist/client/ClientRouterContext.d.ts +2 -0
- package/dist/client/ClientRouterContext.d.ts.map +1 -1
- package/dist/client/Mutation.d.ts +25 -7
- package/dist/client/Mutation.d.ts.map +1 -1
- package/dist/client/QueryManager.d.ts +24 -0
- package/dist/client/QueryManager.d.ts.map +1 -0
- package/dist/client/QueryManagerContext.d.ts +8 -0
- package/dist/client/QueryManagerContext.d.ts.map +1 -0
- package/dist/client/ServerDataProvider.d.ts +1 -0
- package/dist/client/ServerDataProvider.d.ts.map +1 -1
- package/dist/client/{Form.d.ts → _Form.d.ts} +1 -1
- package/dist/client/_Form.d.ts.map +1 -0
- package/dist/client/auth/useForgotPassword.d.ts +17 -0
- package/dist/client/auth/useForgotPassword.d.ts.map +1 -0
- package/dist/client/auth/useResetPassword.d.ts +17 -0
- package/dist/client/auth/useResetPassword.d.ts.map +1 -0
- package/dist/client/auth/useSignIn.d.ts +24 -0
- package/dist/client/auth/useSignIn.d.ts.map +1 -0
- package/dist/client/auth/useSignOut.d.ts +17 -0
- package/dist/client/auth/useSignOut.d.ts.map +1 -0
- package/dist/client/auth/useSignUp.d.ts +21 -0
- package/dist/client/auth/useSignUp.d.ts.map +1 -0
- package/dist/client/auth/useUser.d.ts +2 -0
- package/dist/client/auth/useUser.d.ts.map +1 -0
- package/dist/client/index.d.ts +8 -4
- package/dist/client/index.d.ts.map +1 -1
- package/dist/client/index.js +392 -278
- package/dist/client/rpc.d.ts +3 -1
- package/dist/client/rpc.d.ts.map +1 -1
- package/dist/client/useMutation.d.ts +12 -3
- package/dist/client/useMutation.d.ts.map +1 -1
- package/dist/client/useQuery.d.ts +16 -6
- package/dist/client/useQuery.d.ts.map +1 -1
- package/dist/email/EmailServiceProvider.d.ts +1 -1
- package/dist/email/EmailServiceProvider.d.ts.map +1 -1
- package/dist/email/index.js +4745 -12
- package/dist/email/providers.d.ts +1 -1
- package/dist/email/providers.d.ts.map +1 -1
- package/dist/facades/Auth.d.ts +5 -0
- package/dist/facades/Auth.d.ts.map +1 -0
- package/dist/facades/Redirect.d.ts +4 -0
- package/dist/facades/Redirect.d.ts.map +1 -0
- package/dist/facades/index.d.ts +3 -0
- package/dist/facades/index.d.ts.map +1 -0
- package/dist/facades/index.js +81 -4
- package/dist/http/ApiRouter.d.ts +321 -15
- package/dist/http/ApiRouter.d.ts.map +1 -1
- package/dist/http/AuthenticationMiddlware.d.ts +6 -0
- package/dist/http/AuthenticationMiddlware.d.ts.map +1 -0
- package/dist/http/Controller.d.ts +10 -1
- package/dist/http/Controller.d.ts.map +1 -1
- package/dist/http/Cookie.d.ts +18 -0
- package/dist/http/Cookie.d.ts.map +1 -0
- package/dist/http/HttpRequest.d.ts +9 -1
- package/dist/http/HttpRequest.d.ts.map +1 -1
- package/dist/http/Middleware.d.ts +1 -1
- package/dist/http/Middleware.d.ts.map +1 -1
- package/dist/http/MiddlewareServiceProvider.d.ts +5 -0
- package/dist/http/MiddlewareServiceProvider.d.ts.map +1 -0
- package/dist/http/ViewRouter.d.ts +11 -11
- package/dist/http/ViewRouter.d.ts.map +1 -1
- package/dist/http/index.d.ts +3 -1
- package/dist/http/index.d.ts.map +1 -1
- package/dist/http/index.js +147 -13
- package/dist/http/requestContext.d.ts +17 -2
- package/dist/http/requestContext.d.ts.map +1 -1
- package/dist/kernel/KernelContext.d.ts +4 -0
- package/dist/kernel/KernelContext.d.ts.map +1 -0
- package/dist/kernel/context.d.ts +9 -0
- package/dist/kernel/context.d.ts.map +1 -0
- package/dist/server/index.js +13 -0
- package/dist/utils/autobind.d.ts +2 -0
- package/dist/utils/autobind.d.ts.map +1 -0
- package/dist/utils/debounce.d.ts +2 -0
- package/dist/utils/debounce.d.ts.map +1 -0
- package/dist/utils/type.d.ts +5 -0
- package/dist/utils/type.d.ts.map +1 -1
- package/package.json +3 -1
- package/dist/client/Form.d.ts.map +0 -1
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
export interface CreateCookieOptions {
|
|
2
|
+
maxAge?: number;
|
|
3
|
+
expires?: Date;
|
|
4
|
+
httpOnly?: boolean;
|
|
5
|
+
secure?: boolean;
|
|
6
|
+
sameSite?: "Strict" | "Lax";
|
|
7
|
+
path?: string;
|
|
8
|
+
domain?: string;
|
|
9
|
+
partitioned?: boolean;
|
|
10
|
+
}
|
|
11
|
+
export declare class Cookie {
|
|
12
|
+
private name;
|
|
13
|
+
private value;
|
|
14
|
+
private options;
|
|
15
|
+
constructor(name: string, value: string, options?: CreateCookieOptions);
|
|
16
|
+
toString(): string;
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=Cookie.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Cookie.d.ts","sourceRoot":"","sources":["../../http/Cookie.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,mBAAmB;IAClC,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,CAAC;IAC5B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED,qBAAa,MAAM;IAEf,OAAO,CAAC,IAAI;IACZ,OAAO,CAAC,KAAK;IACb,OAAO,CAAC,OAAO;gBAFP,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,EACb,OAAO,GAAE,mBAAwB;IAG3C,QAAQ;CAmBT"}
|
|
@@ -15,12 +15,20 @@ type RequiredType = "required";
|
|
|
15
15
|
type SchemaKey = StringType | NumberType | BooleanType | MinLengthType | MaxLengthType | RequiredType;
|
|
16
16
|
export type Schema<T extends Body> = Record<keyof T, Partial<Record<SchemaKey, string>>>;
|
|
17
17
|
export type Body = Record<string, any>;
|
|
18
|
-
export declare class HttpRequest<T extends Body =
|
|
18
|
+
export declare class HttpRequest<T extends Body = Record<string, never>, Params = Record<string, never>> {
|
|
19
19
|
rawRequest: Request;
|
|
20
20
|
headers: Headers;
|
|
21
21
|
cookies: Map<string, string>;
|
|
22
22
|
schema: any;
|
|
23
23
|
params: Params;
|
|
24
|
+
ctx: {
|
|
25
|
+
cookies: Set<import("./Cookie").Cookie>;
|
|
26
|
+
user: any;
|
|
27
|
+
req: HttpRequest | null;
|
|
28
|
+
setCookie(name: string, value: string, options?: import("./Cookie").CreateCookieOptions): void;
|
|
29
|
+
setUser(user: any): void;
|
|
30
|
+
setRequest(req: HttpRequest<any, any>): void;
|
|
31
|
+
};
|
|
24
32
|
constructor(req: Request, params: Params);
|
|
25
33
|
private parseBody;
|
|
26
34
|
private validateInput;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"HttpRequest.d.ts","sourceRoot":"","sources":["../../http/HttpRequest.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"HttpRequest.d.ts","sourceRoot":"","sources":["../../http/HttpRequest.ts"],"names":[],"mappings":"AAIA,cAAM,KAAK,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;IAC3B,OAAO,CAAC,IAAI;gBAAJ,IAAI,EAAE,CAAC;IAEpB,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC;IAI7B,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC;IAInC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC;IAIhB,MAAM,IAAI,CAAC;CAGnB;AA4CD,KAAK,UAAU,GAAG,QAAQ,CAAC;AAC3B,KAAK,UAAU,GAAG,QAAQ,CAAC;AAC3B,KAAK,WAAW,GAAG,SAAS,CAAC;AAC7B,KAAK,aAAa,GAAG,OAAO,MAAM,EAAE,CAAC;AACrC,KAAK,aAAa,GAAG,OAAO,MAAM,EAAE,CAAC;AACrC,KAAK,YAAY,GAAG,UAAU,CAAC;AAC/B,KAAK,SAAS,GACV,UAAU,GACV,UAAU,GACV,WAAW,GACX,aAAa,GACb,aAAa,GACb,YAAY,CAAC;AAEjB,MAAM,MAAM,MAAM,CAAC,CAAC,SAAS,IAAI,IAAI,MAAM,CACzC,MAAM,CAAC,EACP,OAAO,CAAC,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC,CACnC,CAAC;AAEF,MAAM,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;AAEvC,qBAAa,WAAW,CACtB,CAAC,SAAS,IAAI,GAAG,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,EACtC,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC;IAEvB,UAAU,EAAE,OAAO,CAAC;IACpB,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAE7B,MAAM,EAAE,GAAG,CAAM;IAEjB,MAAM,EAAE,MAAM,CAAC;IACf,GAAG;;;;;;;MAA6B;gBAE3B,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM;YAgB1B,SAAS;IAwCvB,OAAO,CAAC,aAAa;IA2BR,KAAK,IAAI,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAI1B,SAAS,IAAI,OAAO,CAAC;QAChC,OAAO,EAAE,OAAO,CAAC;QACjB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;QACjC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;KACjB,CAAC;IAsBW,SAAS,CAAC,MAAM,EAAE,eAAe;CAG/C;AAeD,KAAK,eAAe,GAAG;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CAC/B,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Middleware.d.ts","sourceRoot":"","sources":["../../http/Middleware.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAE5C,qBAAa,UAAU;IACf,GAAG,CAAC,IAAI,EAAE,WAAW
|
|
1
|
+
{"version":3,"file":"Middleware.d.ts","sourceRoot":"","sources":["../../http/Middleware.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAE5C,qBAAa,UAAU;IACf,GAAG,CAAC,IAAI,EAAE,WAAW;CAG5B"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MiddlewareServiceProvider.d.ts","sourceRoot":"","sources":["../../http/MiddlewareServiceProvider.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE1C,qBAAa,yBAAyB;IACpC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,UAAU,CAAC,CAAM;CACpD"}
|
|
@@ -1,33 +1,33 @@
|
|
|
1
1
|
import { Controller } from "./Controller";
|
|
2
2
|
import type { MiddlewareReturnType } from "./Router";
|
|
3
|
-
import
|
|
3
|
+
import { HttpRequest } from "./HttpRequest";
|
|
4
4
|
type ControllerMethods<T extends new () => Controller> = {
|
|
5
5
|
[K in keyof InstanceType<T>]: InstanceType<T>[K] extends Function ? K : never;
|
|
6
6
|
}[keyof InstanceType<T>];
|
|
7
|
-
type ViewHandler<T extends new () => Controller> = [controller: T, method: ControllerMethods<T>] | ((req:
|
|
7
|
+
type ViewHandler<T extends new () => Controller> = [controller: T, method: ControllerMethods<T>] | ((req: HttpRequest) => Promise<any> | any);
|
|
8
8
|
type ViewPrepare = {
|
|
9
|
-
exec: (req:
|
|
9
|
+
exec: (req: HttpRequest) => any;
|
|
10
10
|
viewPath: string;
|
|
11
11
|
children: ViewChildren;
|
|
12
12
|
middlewares: any[];
|
|
13
13
|
kind: "view" | "layout";
|
|
14
14
|
};
|
|
15
|
-
type ViewConfig = {
|
|
15
|
+
export type ViewConfig = {
|
|
16
16
|
prepare: (_middlewares?: any[]) => ViewPrepare;
|
|
17
17
|
middleware: (middlewares: any[]) => ViewConfig;
|
|
18
18
|
};
|
|
19
19
|
export type ViewChildren = Record<string, ViewConfig | (new () => ViewRouter)>;
|
|
20
|
-
export type ViewRouteExec = (req:
|
|
20
|
+
export type ViewRouteExec = (req: HttpRequest) => any;
|
|
21
21
|
export declare class ViewRouter {
|
|
22
22
|
routes: ViewChildren;
|
|
23
23
|
middlewares: string[];
|
|
24
24
|
middleware(req: Request): MiddlewareReturnType;
|
|
25
|
-
protected layout<T extends new (
|
|
26
|
-
protected layout<T extends new (
|
|
27
|
-
protected layout<T extends new (
|
|
28
|
-
protected view<T extends new (
|
|
29
|
-
protected view<T extends new (
|
|
30
|
-
protected view<T extends new (
|
|
25
|
+
protected layout<T extends new () => Controller>(viewPath: string): ViewConfig;
|
|
26
|
+
protected layout<T extends new () => Controller>(viewPath: string, children: ViewChildren): ViewConfig;
|
|
27
|
+
protected layout<T extends new () => Controller>(viewPath: string, handler: ViewHandler<T>): ViewConfig;
|
|
28
|
+
protected view<T extends new () => Controller>(viewPath: string): ViewConfig;
|
|
29
|
+
protected view<T extends new () => Controller>(viewPath: string, children: ViewChildren): ViewConfig;
|
|
30
|
+
protected view<T extends new () => Controller>(viewPath: string, handler: ViewHandler<T>): ViewConfig;
|
|
31
31
|
}
|
|
32
32
|
export {};
|
|
33
33
|
//# sourceMappingURL=ViewRouter.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ViewRouter.d.ts","sourceRoot":"","sources":["../../http/ViewRouter.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,UAAU,CAAC;AACrD,OAAO,
|
|
1
|
+
{"version":3,"file":"ViewRouter.d.ts","sourceRoot":"","sources":["../../http/ViewRouter.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,UAAU,CAAC;AACrD,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAE5C,KAAK,iBAAiB,CAAC,CAAC,SAAS,UAAU,UAAU,IAAI;KACtD,CAAC,IAAI,MAAM,YAAY,CAAC,CAAC,CAAC,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,QAAQ,GAAG,CAAC,GAAG,KAAK;CAC9E,CAAC,MAAM,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC;AAEzB,KAAK,WAAW,CAAC,CAAC,SAAS,UAAU,UAAU,IAC3C,CAAC,UAAU,EAAE,CAAC,EAAE,MAAM,EAAE,iBAAiB,CAAC,CAAC,CAAC,CAAC,GAC7C,CAAC,CAAC,GAAG,EAAE,WAAW,KAAK,OAAO,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC;AAE/C,KAAK,WAAW,GAAG;IACjB,IAAI,EAAE,CAAC,GAAG,EAAE,WAAW,KAAK,GAAG,CAAC;IAChC,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,YAAY,CAAC;IACvB,WAAW,EAAE,GAAG,EAAE,CAAC;IACnB,IAAI,EAAE,MAAM,GAAG,QAAQ,CAAC;CACzB,CAAC;AAEF,MAAM,MAAM,UAAU,GAAG;IACvB,OAAO,EAAE,CAAC,YAAY,CAAC,EAAE,GAAG,EAAE,KAAK,WAAW,CAAC;IAC/C,UAAU,EAAE,CAAC,WAAW,EAAE,GAAG,EAAE,KAAK,UAAU,CAAC;CAChD,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG,MAAM,CAAC,MAAM,EAAE,UAAU,GAAG,CAAC,UAAU,UAAU,CAAC,CAAC,CAAC;AAE/E,MAAM,MAAM,aAAa,GAAG,CAAC,GAAG,EAAE,WAAW,KAAK,GAAG,CAAC;AAEtD,qBAAa,UAAU;IACd,MAAM,EAAE,YAAY,CAAM;IAC1B,WAAW,EAAE,MAAM,EAAE,CAAM;IAE3B,UAAU,CAAC,GAAG,EAAE,OAAO,GAAG,oBAAoB;IAErD,SAAS,CAAC,MAAM,CAAC,CAAC,SAAS,UAAU,UAAU,EAC7C,QAAQ,EAAE,MAAM,GACf,UAAU;IACb,SAAS,CAAC,MAAM,CAAC,CAAC,SAAS,UAAU,UAAU,EAC7C,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,YAAY,GACrB,UAAU;IACb,SAAS,CAAC,MAAM,CAAC,CAAC,SAAS,UAAU,UAAU,EAC7C,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,WAAW,CAAC,CAAC,CAAC,GACtB,UAAU;IA+Cb,SAAS,CAAC,IAAI,CAAC,CAAC,SAAS,UAAU,UAAU,EAAE,QAAQ,EAAE,MAAM,GAAG,UAAU;IAC5E,SAAS,CAAC,IAAI,CAAC,CAAC,SAAS,UAAU,UAAU,EAC3C,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,YAAY,GACrB,UAAU;IACb,SAAS,CAAC,IAAI,CAAC,CAAC,SAAS,UAAU,UAAU,EAC3C,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,WAAW,CAAC,CAAC,CAAC,GACtB,UAAU;CA8Cd"}
|
package/dist/http/index.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export { Controller } from "./Controller";
|
|
1
|
+
export { Controller, ResourceController } from "./Controller";
|
|
2
2
|
export { ApiRouter, type CreateRPC } from "./ApiRouter";
|
|
3
3
|
export { ViewRouter } from "./ViewRouter";
|
|
4
4
|
export { ValidationError, AuthenticationError } from "./Router";
|
|
@@ -6,4 +6,6 @@ export { HttpRequest } from "./HttpRequest";
|
|
|
6
6
|
export { Middleware } from "./Middleware";
|
|
7
7
|
export { getCookies } from "./getCookies";
|
|
8
8
|
export { RequestBreakerError } from "./Error";
|
|
9
|
+
export { MiddlewareServiceProvider } from "./MiddlewareServiceProvider";
|
|
10
|
+
export { AuthenticationMiddleware } from "./AuthenticationMiddlware";
|
|
9
11
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/http/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../http/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../http/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAC9D,OAAO,EAAE,SAAS,EAAE,KAAK,SAAS,EAAE,MAAM,aAAa,CAAC;AACxD,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,eAAe,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAC;AAChE,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAC;AAE9C,OAAO,EAAE,yBAAyB,EAAE,MAAM,6BAA6B,CAAC;AACxE,OAAO,EAAE,wBAAwB,EAAE,MAAM,2BAA2B,CAAC"}
|
package/dist/http/index.js
CHANGED
|
@@ -25,6 +25,12 @@ class Controller {
|
|
|
25
25
|
constructor() {
|
|
26
26
|
}
|
|
27
27
|
}
|
|
28
|
+
|
|
29
|
+
class ResourceController extends Controller {
|
|
30
|
+
constructor() {
|
|
31
|
+
super(...arguments);
|
|
32
|
+
}
|
|
33
|
+
}
|
|
28
34
|
// internal/isConstructor.ts
|
|
29
35
|
function isConstructor(value) {
|
|
30
36
|
return typeof value === "function" && value.prototype !== undefined;
|
|
@@ -44,6 +50,9 @@ class RouteHandler {
|
|
|
44
50
|
this.method = method;
|
|
45
51
|
this.handler = handler;
|
|
46
52
|
this.methodName = methodName;
|
|
53
|
+
this.handler = handler;
|
|
54
|
+
this.methodName = methodName;
|
|
55
|
+
this.method = method;
|
|
47
56
|
}
|
|
48
57
|
run(req) {
|
|
49
58
|
let httpRequest = req;
|
|
@@ -82,6 +91,26 @@ class ApiRouter {
|
|
|
82
91
|
delete(handler, methodName) {
|
|
83
92
|
return new RouteHandler("DELETE", handler, methodName);
|
|
84
93
|
}
|
|
94
|
+
resource(Controller2) {
|
|
95
|
+
|
|
96
|
+
class ResourceRouter extends ApiRouter {
|
|
97
|
+
constructor() {
|
|
98
|
+
super(...arguments);
|
|
99
|
+
}
|
|
100
|
+
routes = {
|
|
101
|
+
"/": {
|
|
102
|
+
list: this.get(Controller2, "list"),
|
|
103
|
+
create: this.post(Controller2, "create")
|
|
104
|
+
},
|
|
105
|
+
"/:id": {
|
|
106
|
+
show: this.get(Controller2, "show"),
|
|
107
|
+
update: this.put(Controller2, "update"),
|
|
108
|
+
delete: this.delete(Controller2, "delete")
|
|
109
|
+
}
|
|
110
|
+
};
|
|
111
|
+
}
|
|
112
|
+
return ResourceRouter;
|
|
113
|
+
}
|
|
85
114
|
}
|
|
86
115
|
// http/ViewRouter.ts
|
|
87
116
|
class ViewRouter {
|
|
@@ -96,7 +125,7 @@ class ViewRouter {
|
|
|
96
125
|
_children = handler;
|
|
97
126
|
}
|
|
98
127
|
return {
|
|
99
|
-
exec: async (req
|
|
128
|
+
exec: async (req) => {
|
|
100
129
|
let _handler = () => Promise.resolve({
|
|
101
130
|
data: { [viewPath]: {} },
|
|
102
131
|
headers: {},
|
|
@@ -110,7 +139,7 @@ class ViewRouter {
|
|
|
110
139
|
const instance = new controller(app);
|
|
111
140
|
_handler = instance[methodName].bind(instance);
|
|
112
141
|
}
|
|
113
|
-
const data = await _handler(req
|
|
142
|
+
const data = await _handler(req);
|
|
114
143
|
return { [viewPath]: data };
|
|
115
144
|
},
|
|
116
145
|
children: _children,
|
|
@@ -133,7 +162,7 @@ class ViewRouter {
|
|
|
133
162
|
_children = handler;
|
|
134
163
|
}
|
|
135
164
|
return {
|
|
136
|
-
exec: async (req
|
|
165
|
+
exec: async (req) => {
|
|
137
166
|
let _handler = () => Promise.resolve({
|
|
138
167
|
data: { [viewPath]: {} },
|
|
139
168
|
headers: {},
|
|
@@ -147,7 +176,7 @@ class ViewRouter {
|
|
|
147
176
|
const instance = new controller(app);
|
|
148
177
|
_handler = instance[methodName].bind(instance);
|
|
149
178
|
}
|
|
150
|
-
const data = await _handler(req
|
|
179
|
+
const data = await _handler(req);
|
|
151
180
|
return { [viewPath]: data };
|
|
152
181
|
},
|
|
153
182
|
children: _children,
|
|
@@ -221,13 +250,73 @@ class ValidationError extends RequestBreakerError {
|
|
|
221
250
|
};
|
|
222
251
|
}
|
|
223
252
|
}
|
|
253
|
+
// http/requestContext.ts
|
|
254
|
+
import {AsyncLocalStorage} from "async_hooks";
|
|
255
|
+
|
|
256
|
+
// http/Cookie.ts
|
|
257
|
+
class Cookie {
|
|
258
|
+
name;
|
|
259
|
+
value;
|
|
260
|
+
options;
|
|
261
|
+
constructor(name, value, options = {}) {
|
|
262
|
+
this.name = name;
|
|
263
|
+
this.value = value;
|
|
264
|
+
this.options = options;
|
|
265
|
+
}
|
|
266
|
+
toString() {
|
|
267
|
+
return [
|
|
268
|
+
`${this.name}=${this.value}`,
|
|
269
|
+
this.options.maxAge ? `Max-Age=${this.options.maxAge}` : "",
|
|
270
|
+
this.options.httpOnly ? "HttpOnly" : "",
|
|
271
|
+
this.options.secure ? "Secure" : "",
|
|
272
|
+
this.options.sameSite ? `SameSite=${this.options.sameSite}` : "SameSite=Strict",
|
|
273
|
+
this.options.path ? `Path=${this.options.path}` : "Path=/",
|
|
274
|
+
this.options.domain ? `Domain=${this.options.domain}` : "",
|
|
275
|
+
this.options.expires ? `Expires=${this.options.expires.toUTCString()}` : "",
|
|
276
|
+
this.options.partitioned ? "Partitioned" : ""
|
|
277
|
+
].filter((i) => i !== "").join("; ");
|
|
278
|
+
}
|
|
279
|
+
}
|
|
280
|
+
|
|
281
|
+
// http/requestContext.ts
|
|
282
|
+
var requestContext = new AsyncLocalStorage;
|
|
283
|
+
|
|
284
|
+
class Store {
|
|
285
|
+
cookies = new Set;
|
|
286
|
+
user = null;
|
|
287
|
+
req = null;
|
|
288
|
+
constructor() {
|
|
289
|
+
}
|
|
290
|
+
setCookie(name, value, options = {}) {
|
|
291
|
+
this.cookies.add(new Cookie(name, value, options));
|
|
292
|
+
}
|
|
293
|
+
setUser(user) {
|
|
294
|
+
this.user = user;
|
|
295
|
+
}
|
|
296
|
+
setRequest(req) {
|
|
297
|
+
this.req = req;
|
|
298
|
+
}
|
|
299
|
+
}
|
|
300
|
+
|
|
301
|
+
class RequestContext {
|
|
302
|
+
static getStore() {
|
|
303
|
+
return requestContext.getStore();
|
|
304
|
+
}
|
|
305
|
+
static setRequest(req) {
|
|
306
|
+
requestContext.getStore().req = req;
|
|
307
|
+
}
|
|
308
|
+
static async run(fn) {
|
|
309
|
+
return requestContext.run(new Store, fn);
|
|
310
|
+
}
|
|
311
|
+
}
|
|
312
|
+
|
|
224
313
|
// http/HttpRequest.ts
|
|
225
314
|
var validate = function(ruleName) {
|
|
226
315
|
const [rule, param] = ruleName.split(":");
|
|
227
316
|
switch (rule) {
|
|
228
317
|
case "required":
|
|
229
318
|
return (value) => {
|
|
230
|
-
return value !== null && value !== undefined;
|
|
319
|
+
return value !== null && value !== undefined && value?.length > 0;
|
|
231
320
|
};
|
|
232
321
|
case "password":
|
|
233
322
|
return (value) => {
|
|
@@ -242,11 +331,11 @@ var validate = function(ruleName) {
|
|
|
242
331
|
};
|
|
243
332
|
case "min":
|
|
244
333
|
return (value) => {
|
|
245
|
-
return value
|
|
334
|
+
return value?.length >= parseInt(param);
|
|
246
335
|
};
|
|
247
336
|
case "max":
|
|
248
337
|
return (value) => {
|
|
249
|
-
return value
|
|
338
|
+
return value?.length <= parseInt(param);
|
|
250
339
|
};
|
|
251
340
|
case "email":
|
|
252
341
|
return (value) => {
|
|
@@ -281,8 +370,9 @@ class HttpRequest {
|
|
|
281
370
|
rawRequest;
|
|
282
371
|
headers;
|
|
283
372
|
cookies;
|
|
284
|
-
schema;
|
|
373
|
+
schema = {};
|
|
285
374
|
params;
|
|
375
|
+
ctx = RequestContext.getStore();
|
|
286
376
|
constructor(req, params) {
|
|
287
377
|
this.params = params;
|
|
288
378
|
this.rawRequest = req;
|
|
@@ -309,7 +399,6 @@ class HttpRequest {
|
|
|
309
399
|
if (this.rawRequest.headers.get("Content-Type") === "application/x-www-form-urlencoded") {
|
|
310
400
|
const body = await this.rawRequest.formData();
|
|
311
401
|
for (const [key, value] of body) {
|
|
312
|
-
console.log(key, value);
|
|
313
402
|
inputMap.set(key, value);
|
|
314
403
|
}
|
|
315
404
|
}
|
|
@@ -340,7 +429,12 @@ class HttpRequest {
|
|
|
340
429
|
if (!errors[key]) {
|
|
341
430
|
errors[key] = [];
|
|
342
431
|
}
|
|
343
|
-
|
|
432
|
+
if (rule === "required") {
|
|
433
|
+
errors[key] = [String(message)];
|
|
434
|
+
break;
|
|
435
|
+
} else {
|
|
436
|
+
errors[key].push(String(message));
|
|
437
|
+
}
|
|
344
438
|
}
|
|
345
439
|
}
|
|
346
440
|
}
|
|
@@ -374,14 +468,12 @@ class HttpRequest {
|
|
|
374
468
|
}
|
|
375
469
|
}
|
|
376
470
|
async terminate(params) {
|
|
377
|
-
const { message, status, headers, payload } = params;
|
|
378
|
-
const error = new RequestBreakerError(message);
|
|
379
471
|
throw "not implemented";
|
|
380
472
|
}
|
|
381
473
|
}
|
|
382
474
|
// http/Middleware.ts
|
|
383
475
|
class Middleware {
|
|
384
|
-
async run(_req
|
|
476
|
+
async run(_req) {
|
|
385
477
|
return {};
|
|
386
478
|
}
|
|
387
479
|
}
|
|
@@ -399,14 +491,56 @@ function getCookies(req) {
|
|
|
399
491
|
}
|
|
400
492
|
return _cookies;
|
|
401
493
|
}
|
|
494
|
+
// http/MiddlewareServiceProvider.ts
|
|
495
|
+
class MiddlewareServiceProvider {
|
|
496
|
+
aliases = {};
|
|
497
|
+
}
|
|
498
|
+
// kernel/context.ts
|
|
499
|
+
import {AsyncLocalStorage as AsyncLocalStorage2} from "async_hooks";
|
|
500
|
+
var kernelContext = new AsyncLocalStorage2;
|
|
501
|
+
|
|
502
|
+
// kernel/KernelContext.ts
|
|
503
|
+
class KernelContext {
|
|
504
|
+
static getStore = () => kernelContext.getStore();
|
|
505
|
+
}
|
|
506
|
+
|
|
507
|
+
// http/AuthenticationMiddlware.ts
|
|
508
|
+
class AuthenticationMiddleware extends Middleware {
|
|
509
|
+
constructor() {
|
|
510
|
+
super(...arguments);
|
|
511
|
+
}
|
|
512
|
+
async run(req) {
|
|
513
|
+
const requestContextStore = RequestContext.getStore();
|
|
514
|
+
const accessToken = requestContextStore.req.cookies.get("access_token");
|
|
515
|
+
if (!accessToken) {
|
|
516
|
+
throw new AuthenticationError;
|
|
517
|
+
}
|
|
518
|
+
let user = requestContextStore.user;
|
|
519
|
+
if (!user) {
|
|
520
|
+
const session = await KernelContext.getStore().authenticationServiceProvider.adapter.findSession({
|
|
521
|
+
token: accessToken,
|
|
522
|
+
userAgent: requestContextStore.req.headers.get("User-Agent")
|
|
523
|
+
});
|
|
524
|
+
if (!session) {
|
|
525
|
+
throw new AuthenticationError;
|
|
526
|
+
}
|
|
527
|
+
user = session?.user;
|
|
528
|
+
requestContextStore.setUser(user);
|
|
529
|
+
}
|
|
530
|
+
return {};
|
|
531
|
+
}
|
|
532
|
+
}
|
|
402
533
|
export {
|
|
403
534
|
getCookies,
|
|
404
535
|
ViewRouter,
|
|
405
536
|
ValidationError,
|
|
537
|
+
ResourceController,
|
|
406
538
|
RequestBreakerError,
|
|
539
|
+
MiddlewareServiceProvider,
|
|
407
540
|
Middleware,
|
|
408
541
|
HttpRequest,
|
|
409
542
|
Controller,
|
|
543
|
+
AuthenticationMiddleware,
|
|
410
544
|
AuthenticationError,
|
|
411
545
|
ApiRouter
|
|
412
546
|
};
|
|
@@ -1,3 +1,18 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
1
|
+
import { Cookie, type CreateCookieOptions } from "./Cookie";
|
|
2
|
+
import { HttpRequest } from "./HttpRequest";
|
|
3
|
+
declare class Store {
|
|
4
|
+
cookies: Set<Cookie>;
|
|
5
|
+
user: any;
|
|
6
|
+
req: HttpRequest | null;
|
|
7
|
+
constructor();
|
|
8
|
+
setCookie(name: string, value: string, options?: CreateCookieOptions): void;
|
|
9
|
+
setUser(user: any): void;
|
|
10
|
+
setRequest(req: HttpRequest<any, any>): void;
|
|
11
|
+
}
|
|
12
|
+
export declare class RequestContext {
|
|
13
|
+
static getStore(): Store;
|
|
14
|
+
static setRequest(req: HttpRequest<any, any>): void;
|
|
15
|
+
static run<T>(fn: () => T): Promise<T>;
|
|
16
|
+
}
|
|
17
|
+
export {};
|
|
3
18
|
//# sourceMappingURL=requestContext.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"requestContext.d.ts","sourceRoot":"","sources":["../../http/requestContext.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"requestContext.d.ts","sourceRoot":"","sources":["../../http/requestContext.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,KAAK,mBAAmB,EAAE,MAAM,UAAU,CAAC;AAC5D,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAI5C,cAAM,KAAK;IACT,OAAO,EAAE,GAAG,CAAC,MAAM,CAAC,CAAa;IACjC,IAAI,EAAE,GAAG,CAAQ;IACjB,GAAG,EAAE,WAAW,GAAG,IAAI,CAAQ;;IAM/B,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,GAAE,mBAAwB;IAIxE,OAAO,CAAC,IAAI,EAAE,GAAG;IAIjB,UAAU,CAAC,GAAG,EAAE,WAAW,CAAC,GAAG,EAAE,GAAG,CAAC;CAGtC;AAED,qBAAa,cAAc;IACzB,MAAM,CAAC,QAAQ;IAIf,MAAM,CAAC,UAAU,CAAC,GAAG,EAAE,WAAW,CAAC,GAAG,EAAE,GAAG,CAAC;WAI/B,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;CAG7C"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"KernelContext.d.ts","sourceRoot":"","sources":["../../kernel/KernelContext.ts"],"names":[],"mappings":"AAEA,qBAAa,aAAa;IACxB,MAAM,CAAC,QAAQ,+CAAkC;CAClD"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { AsyncLocalStorage } from "async_hooks";
|
|
2
|
+
import { EmailServiceProvider } from "../email/EmailServiceProvider";
|
|
3
|
+
import { AuthenticationServiceProvider } from "../auth/AuthenticationServiceProvider";
|
|
4
|
+
export interface KernelContextValue {
|
|
5
|
+
emailServiceProvider: EmailServiceProvider;
|
|
6
|
+
authenticationServiceProvider?: AuthenticationServiceProvider;
|
|
7
|
+
}
|
|
8
|
+
export declare const kernelContext: AsyncLocalStorage<KernelContextValue>;
|
|
9
|
+
//# sourceMappingURL=context.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../kernel/context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;AACrE,OAAO,EAAE,6BAA6B,EAAE,MAAM,uCAAuC,CAAC;AAEtF,MAAM,WAAW,kBAAkB;IACjC,oBAAoB,EAAE,oBAAoB,CAAC;IAC3C,6BAA6B,CAAC,EAAE,6BAA6B,CAAC;CAC/D;AAED,eAAO,MAAM,aAAa,uCAA8C,CAAC"}
|
package/dist/server/index.js
CHANGED
|
@@ -6571,6 +6571,13 @@ async function startDevServer() {
|
|
|
6571
6571
|
try {
|
|
6572
6572
|
return await handler(req);
|
|
6573
6573
|
} catch (err) {
|
|
6574
|
+
console.log(err);
|
|
6575
|
+
if (pathname.startsWith("/api")) {
|
|
6576
|
+
return new Response(JSON.stringify({ error: err.message }), {
|
|
6577
|
+
status: 500,
|
|
6578
|
+
headers: { "Content-Type": "application/json" }
|
|
6579
|
+
});
|
|
6580
|
+
}
|
|
6574
6581
|
return new Response(renderErrorPage(err), {
|
|
6575
6582
|
headers: { "Content-Type": "text/html" }
|
|
6576
6583
|
});
|
|
@@ -7449,6 +7456,12 @@ async function startProdServer() {
|
|
|
7449
7456
|
try {
|
|
7450
7457
|
return await handler(req);
|
|
7451
7458
|
} catch (err) {
|
|
7459
|
+
if (pathname.startsWith("/api")) {
|
|
7460
|
+
return new Response(JSON.stringify({ error: err.message }), {
|
|
7461
|
+
status: 500,
|
|
7462
|
+
headers: { "Content-Type": "application/json" }
|
|
7463
|
+
});
|
|
7464
|
+
}
|
|
7452
7465
|
return new Response(err.stack, { status: 500 });
|
|
7453
7466
|
}
|
|
7454
7467
|
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"autobind.d.ts","sourceRoot":"","sources":["../../utils/autobind.ts"],"names":[],"mappings":"AAeA,wBAAgB,QAAQ,CAAC,CAAC,SAAS,GAAG,EAAE,IAAI,EAAE,UAAU,CAAC,GAAG,CAAC,CAY5D"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"debounce.d.ts","sourceRoot":"","sources":["../../utils/debounce.ts"],"names":[],"mappings":"AAAA,wBAAgB,QAAQ,CAAC,CAAC,EAAE,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,KAAK,IAAI,EACvD,EAAE,EAAE,CAAC,EACL,KAAK,EAAE,MAAM,aAGa,CAAC,EAAE,UAQ9B"}
|
package/dist/utils/type.d.ts
CHANGED
|
@@ -1,2 +1,7 @@
|
|
|
1
1
|
export type UnwrapPromise<T> = T extends Promise<infer U> ? U : T;
|
|
2
|
+
type PluralSuffix = "s" | "es" | "ies";
|
|
3
|
+
export type Plural = `${string}${PluralSuffix}`;
|
|
4
|
+
export type ToSingular<T extends Plural> = T extends `${infer R}${PluralSuffix}` ? R : T;
|
|
5
|
+
export type WithId<T extends string> = `${T}Id`;
|
|
6
|
+
export {};
|
|
2
7
|
//# sourceMappingURL=type.d.ts.map
|
package/dist/utils/type.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"type.d.ts","sourceRoot":"","sources":["../../utils/type.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,aAAa,CAAC,CAAC,IAAI,CAAC,SAAS,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC"}
|
|
1
|
+
{"version":3,"file":"type.d.ts","sourceRoot":"","sources":["../../utils/type.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,aAAa,CAAC,CAAC,IAAI,CAAC,SAAS,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AAElE,KAAK,YAAY,GAAG,GAAG,GAAG,IAAI,GAAG,KAAK,CAAC;AACvC,MAAM,MAAM,MAAM,GAAG,GAAG,MAAM,GAAG,YAAY,EAAE,CAAC;AAChD,MAAM,MAAM,UAAU,CAAC,CAAC,SAAS,MAAM,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC,GAAG,YAAY,EAAE,GAC5E,CAAC,GACD,CAAC,CAAC;AAEN,MAAM,MAAM,MAAM,CAAC,CAAC,SAAS,MAAM,IAAI,GAAG,CAAC,IAAI,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "gemi",
|
|
3
|
-
"version": "0.4.
|
|
3
|
+
"version": "0.4.14",
|
|
4
4
|
"devDependencies": {
|
|
5
5
|
"@happy-dom/global-registrator": "^14.12.3",
|
|
6
6
|
"@repo/eslint-config": "*",
|
|
@@ -27,6 +27,7 @@
|
|
|
27
27
|
"./facades": "./dist/facades/index.js",
|
|
28
28
|
"./email": "./dist/email/index.js",
|
|
29
29
|
"./vite": "./dist/vite/index.js",
|
|
30
|
+
"./runtime": "./dist/runtime/index.js",
|
|
30
31
|
"./server": "./dist/server/index.js",
|
|
31
32
|
"./kernel": "./dist/kernel/index.js"
|
|
32
33
|
},
|
|
@@ -55,6 +56,7 @@
|
|
|
55
56
|
"open": "^10.1.0",
|
|
56
57
|
"react-email": "^2.1.4",
|
|
57
58
|
"resend": "^3.4.0",
|
|
59
|
+
"temporal-polyfill": "^0.2.5",
|
|
58
60
|
"urlpattern-polyfill": "^10.0.0",
|
|
59
61
|
"uuid": "^9.0.1"
|
|
60
62
|
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Form.d.ts","sourceRoot":"","sources":["../../client/Form.tsx"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,cAAc,EAKpB,MAAM,OAAO,CAAC;AAEf,OAAO,KAAK,CAAC,MAAM,KAAK,CAAC;AAkDzB,UAAU,SAAS,CAAC,CAAC,GAAG,EAAE,CAAE,SAAQ,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,EAAE,UAAU,CAAC;IAC1E,QAAQ,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,KAAK,IAAI,CAAC;IAC3C,MAAM,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;CACvB;AAkBD,wBAAgB,IAAI,CAAC,CAAC,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC,CAAC,2CAoI1C;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,cAAc,CAAC,OAAO,KAAK,CAAC;;;;;;;EAShE;AAED,eAAO,MAAM,KAAK,UACT,cAAc,CAAC,OAAO,CAAC,GAAG;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,KAAK,MAAM,GAAG,IAAI,CAAC;CAC1C,4CA2CF,CAAC;AAEF,eAAO,MAAM,QAAQ,UACZ,cAAc,CAAC,OAAO,CAAC,GAAG;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,KAAK,MAAM,GAAG,IAAI,CAAC;CAC1C,4CA4CF,CAAC;AAaF,eAAO,MAAM,YAAY,UAChB,cAAc,CAAC,MAAM,CAAC,GAAG;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,KAAK,CAAC,SAAS,CAAC;CAC7C,8GAWF,CAAC"}
|