@effect-app/infra 1.16.0 → 1.16.2
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/CHANGELOG.md +12 -0
- package/_cjs/router.cjs +40 -25
- package/_cjs/router.cjs.map +1 -1
- package/dist/router.d.ts +18 -19
- package/dist/router.d.ts.map +1 -1
- package/dist/router.js +37 -24
- package/package.json +4 -4
- package/src/router.ts +47 -26
package/CHANGELOG.md
CHANGED
package/_cjs/router.cjs
CHANGED
|
@@ -26,7 +26,9 @@ const makeRouter = (handleRequestEnv /* Middleware */) => {
|
|
|
26
26
|
const handler = (0, _routing.makeRequestHandler)(requestHandler,
|
|
27
27
|
// one argument if no middleware, 2 if has middleware. TODO: clean this shit up
|
|
28
28
|
errorHandler, middlewareLayer);
|
|
29
|
-
const route = _http.HttpRouter.makeRoute(requestHandler.Request.method, requestHandler.Request.path, handler
|
|
29
|
+
const route = _http.HttpRouter.makeRoute(requestHandler.Request.method, requestHandler.Request.path, handler.pipe(_effectApp.Effect.withSpan("Request." + requestHandler.name, {
|
|
30
|
+
captureStackTrace: () => requestHandler.stack
|
|
31
|
+
})));
|
|
30
32
|
// TODO
|
|
31
33
|
// rdesc.push(makeRouteDescriptor(
|
|
32
34
|
// requestHandler.Request.path,
|
|
@@ -40,6 +42,7 @@ const makeRouter = (handleRequestEnv /* Middleware */) => {
|
|
|
40
42
|
const Response = _effectApp.S.REST.extractResponse(_);
|
|
41
43
|
return h => ({
|
|
42
44
|
adaptResponse,
|
|
45
|
+
stack: h.stack,
|
|
43
46
|
h: h.handler,
|
|
44
47
|
name,
|
|
45
48
|
Request,
|
|
@@ -97,31 +100,43 @@ const makeRouter = (handleRequestEnv /* Middleware */) => {
|
|
|
97
100
|
controllers,
|
|
98
101
|
...(0, _utils.typedKeysOf)(filtered).reduce((prev, cur) => {
|
|
99
102
|
;
|
|
100
|
-
prev[cur] = (svcOrFnOrEffect, fnOrNone) =>
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
103
|
+
prev[cur] = (svcOrFnOrEffect, fnOrNone) => {
|
|
104
|
+
const stack = new Error().stack?.split("\n").slice(2).join("\n");
|
|
105
|
+
return _effectApp.Effect.isEffect(svcOrFnOrEffect) ? class {
|
|
106
|
+
static stack = stack;
|
|
107
|
+
static _tag = "d";
|
|
108
|
+
static handler = () => svcOrFnOrEffect;
|
|
109
|
+
} : typeof svcOrFnOrEffect === "function" ? class {
|
|
110
|
+
static stack = stack;
|
|
111
|
+
static _tag = "d";
|
|
112
|
+
static handler = (req, ctx) => svcOrFnOrEffect(req, {
|
|
113
|
+
...ctx,
|
|
114
|
+
Response: rsc[cur].Response
|
|
115
|
+
});
|
|
116
|
+
} : class {
|
|
117
|
+
static stack = stack;
|
|
118
|
+
static _tag = "d";
|
|
119
|
+
static handler = matchWithServices(cur)(svcOrFnOrEffect, fnOrNone);
|
|
120
|
+
};
|
|
112
121
|
};
|
|
113
|
-
prev[cur + "Raw"] = (svcOrFnOrEffect, fnOrNone) =>
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
122
|
+
prev[cur + "Raw"] = (svcOrFnOrEffect, fnOrNone) => {
|
|
123
|
+
const stack = new Error().stack?.split("\n").slice(2).join("\n");
|
|
124
|
+
return _effectApp.Effect.isEffect(svcOrFnOrEffect) ? class {
|
|
125
|
+
static stack = stack;
|
|
126
|
+
static _tag = "raw";
|
|
127
|
+
static handler = () => svcOrFnOrEffect;
|
|
128
|
+
} : typeof svcOrFnOrEffect === "function" ? class {
|
|
129
|
+
static stack = stack;
|
|
130
|
+
static _tag = "raw";
|
|
131
|
+
static handler = (req, ctx) => svcOrFnOrEffect(req, {
|
|
132
|
+
...ctx,
|
|
133
|
+
Response: rsc[cur].Response
|
|
134
|
+
});
|
|
135
|
+
} : class {
|
|
136
|
+
static stack = stack;
|
|
137
|
+
static _tag = "raw";
|
|
138
|
+
static handler = matchWithServices(cur)(svcOrFnOrEffect, fnOrNone);
|
|
139
|
+
};
|
|
125
140
|
};
|
|
126
141
|
return prev;
|
|
127
142
|
}, {})
|
package/_cjs/router.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"router.cjs","names":["_Effect","require","_utils","_routing","_effectApp","_http","_schema","makeRouter","handleRequestEnv","match","requestHandler","errorHandler","middleware","middlewareLayer","undefined","handler","makeRequestLayer","makeRequestHandler","route","HttpRouter","makeRoute","Request","method","path","
|
|
1
|
+
{"version":3,"file":"router.cjs","names":["_Effect","require","_utils","_routing","_effectApp","_http","_schema","makeRouter","handleRequestEnv","match","requestHandler","errorHandler","middleware","middlewareLayer","undefined","handler","makeRequestLayer","makeRequestHandler","route","HttpRouter","makeRoute","Request","method","path","pipe","Effect","withSpan","name","captureStackTrace","stack","handle","_","adaptResponse","S","REST","extractRequest","Response","extractResponse","h","ResponseOpenApi","Context","CTX","rt","_tag","matchFor","rsc","filtered","typedKeysOf","reduce","acc","cur","Predicate","isObject","matchWithServices","action","services","f","req","ctx","andThen","allLower","svc2","controllers","handlers","m","meta","Error","moduleName","mapped","determineMethod","split","Object","assign","Auto","fromIterable","values","r","prev","svcOrFnOrEffect","fnOrNone","slice","join","isEffect","resourceRequest","res","r2","defaultErrorHandler","catchTag","die","failure","matchAll","concat","empty","exports"],"sources":["../src/router.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
|
package/dist/router.d.ts
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import type { EffectUnunified, LowerServices } from "@effect-app/core/Effect";
|
|
2
2
|
import type { EnforceNonEmptyRecord } from "@effect-app/core/utils";
|
|
3
|
-
import type {
|
|
4
|
-
import type { Types } from "effect-app";
|
|
3
|
+
import type { EffectDeps, Extr } from "@effect-app/infra/api/routing";
|
|
5
4
|
import { Effect, S } from "effect-app";
|
|
6
5
|
import type { ValidationError } from "effect-app/client/errors";
|
|
7
6
|
import { HttpRouter } from "effect-app/http";
|
|
@@ -19,11 +18,11 @@ export declare const makeRouter: <CTX, CTXMap extends Record<string, [string, an
|
|
|
19
18
|
} ? Rsc[K_1] : never; }]: {
|
|
20
19
|
new (): {};
|
|
21
20
|
_tag: "raw";
|
|
22
|
-
handler: (req:
|
|
21
|
+
handler: (req: Rsc[K]["Request"], ctx: Rsc[K]["Context"]) => Effect<S.Schema.Encoded<Extr<REST.GetResponse<Rsc[K]>>>, import("effect-app/client/errors").InvalidStateError | import("effect-app/client/errors").OptimisticConcurrencyException | import("effect-app/client/errors").NotFoundError<ItemType> | import("effect-app/client/errors").NotLoggedInError | import("effect-app/client/errors").LoginError | import("effect-app/client/errors").UnauthorizedError | ValidationError | import("effect-app/client/errors").ServiceUnavailableError | S.ParseResult.ParseError | S.Schema.Type<Rsc[K]["failure"]>, any>;
|
|
23
22
|
} | {
|
|
24
23
|
new (): {};
|
|
25
24
|
_tag: "d";
|
|
26
|
-
handler: (req:
|
|
25
|
+
handler: (req: Rsc[K]["Request"], ctx: Rsc[K]["Context"]) => Effect<S.Schema.Type<Extr<REST.GetResponse<Rsc[K]>>>, import("effect-app/client/errors").InvalidStateError | import("effect-app/client/errors").OptimisticConcurrencyException | import("effect-app/client/errors").NotFoundError<ItemType> | import("effect-app/client/errors").NotLoggedInError | import("effect-app/client/errors").LoginError | import("effect-app/client/errors").UnauthorizedError | ValidationError | import("effect-app/client/errors").ServiceUnavailableError | S.ParseResult.ParseError | S.Schema.Type<Rsc[K]["failure"]>, any>;
|
|
27
26
|
}; }>(controllers: THandlers) => HttpRouter.HttpRouter<[(keyof { [K_1 in keyof Rsc as Rsc[K_1] extends {
|
|
28
27
|
Response: any;
|
|
29
28
|
} ? K_1 : never]: Rsc[K_1] extends {
|
|
@@ -32,7 +31,7 @@ export declare const makeRouter: <CTX, CTXMap extends Record<string, [string, an
|
|
|
32
31
|
Response: any;
|
|
33
32
|
} ? K_1 : never]: Rsc[K_1] extends {
|
|
34
33
|
Response: any;
|
|
35
|
-
} ? Rsc[K_1] : never; } ? { [K in T]:
|
|
34
|
+
} ? Rsc[K_1] : never; } ? { [K in T]: HttpRouter.Route<never, Exclude<Exclude<_R<ReturnType<THandlers[K]["handler"]>>, EnforceNonEmptyRecord<ReqFromSchema<REST.GetRequest<Rsc[K]>>>>, { [key in keyof CTXMap as key extends keyof REST.GetRequest<Rsc[K]> ? REST.GetRequest<Rsc[K]>[key] extends true ? never : CTXMap[key][0] : CTXMap[key][0]]: CTXMap[key][1]; }[keyof { [key in keyof CTXMap as key extends keyof REST.GetRequest<Rsc[K]> ? REST.GetRequest<Rsc[K]>[key] extends true ? never : CTXMap[key][0] : CTXMap[key][0]]: CTXMap[key][1]; }]>>; } : never)[keyof { [K_1 in keyof Rsc as Rsc[K_1] extends {
|
|
36
35
|
Response: any;
|
|
37
36
|
} ? K_1 : never]: Rsc[K_1] extends {
|
|
38
37
|
Response: any;
|
|
@@ -44,7 +43,7 @@ export declare const makeRouter: <CTX, CTXMap extends Record<string, [string, an
|
|
|
44
43
|
Response: any;
|
|
45
44
|
} ? K_1 : never]: Rsc[K_1] extends {
|
|
46
45
|
Response: any;
|
|
47
|
-
} ? Rsc[K_1] : never; } ? { [K in T]:
|
|
46
|
+
} ? Rsc[K_1] : never; } ? { [K in T]: HttpRouter.Route<never, Exclude<Exclude<_R<ReturnType<THandlers[K]["handler"]>>, EnforceNonEmptyRecord<ReqFromSchema<REST.GetRequest<Rsc[K]>>>>, { [key in keyof CTXMap as key extends keyof REST.GetRequest<Rsc[K]> ? REST.GetRequest<Rsc[K]>[key] extends true ? never : CTXMap[key][0] : CTXMap[key][0]]: CTXMap[key][1]; }[keyof { [key in keyof CTXMap as key extends keyof REST.GetRequest<Rsc[K]> ? REST.GetRequest<Rsc[K]>[key] extends true ? never : CTXMap[key][0] : CTXMap[key][0]]: CTXMap[key][1]; }]>>; } : never)[keyof { [K_1 in keyof Rsc as Rsc[K_1] extends {
|
|
48
47
|
Response: any;
|
|
49
48
|
} ? K_1 : never]: Rsc[K_1] extends {
|
|
50
49
|
Response: any;
|
|
@@ -57,29 +56,29 @@ export declare const makeRouter: <CTX, CTXMap extends Record<string, [string, an
|
|
|
57
56
|
<R2, E, A>(f: Effect<A, E, R2>): S.Schema.Type<REST.GetResponse<Rsc[Key]>> extends infer T ? T extends S.Schema.Type<REST.GetResponse<Rsc[Key]>> ? T extends void ? A extends void ? {
|
|
58
57
|
new (): {};
|
|
59
58
|
_tag: "d";
|
|
60
|
-
handler: (req:
|
|
59
|
+
handler: (req: Rsc[Key]["Request"], ctx: Rsc[Key]["Context"]) => Effect<A, E, R2>;
|
|
61
60
|
} : Hint<"You're returning non void for a void Response, please fix"> : {
|
|
62
61
|
new (): {};
|
|
63
62
|
_tag: "d";
|
|
64
|
-
handler: (req:
|
|
63
|
+
handler: (req: Rsc[Key]["Request"], ctx: Rsc[Key]["Context"]) => Effect<A, E, R2>;
|
|
65
64
|
} : never : never;
|
|
66
65
|
<R2, E_1, A_1>(f: (req: S.Schema.Type<REST.GetRequest<Rsc[Key]>>, ctx: CTX & { [key in keyof CTXMap as key extends keyof REST.GetRequest<Rsc[Key]> ? REST.GetRequest<Rsc[Key]>[key] extends true ? CTXMap[key][0] : never : never]?: CTXMap[key][1]; } & { [key_1 in keyof CTXMap as key_1 extends keyof REST.GetRequest<Rsc[Key]> ? REST.GetRequest<Rsc[Key]>[key_1] extends false ? CTXMap[key_1][0] : never : CTXMap[key_1][0]]: CTXMap[key_1][1]; } & Pick<Rsc[Key], "Response">) => Effect<A_1, E_1, R2>): S.Schema.Type<REST.GetResponse<Rsc[Key]>> extends infer T ? T extends S.Schema.Type<REST.GetResponse<Rsc[Key]>> ? T extends void ? A_1 extends void ? {
|
|
67
66
|
new (): {};
|
|
68
67
|
_tag: "d";
|
|
69
|
-
handler: (req:
|
|
68
|
+
handler: (req: Rsc[Key]["Request"], ctx: Rsc[Key]["Context"]) => Effect<A_1, E_1, R2>;
|
|
70
69
|
} : Hint<"You're returning non void for a void Response, please fix"> : {
|
|
71
70
|
new (): {};
|
|
72
71
|
_tag: "d";
|
|
73
|
-
handler: (req:
|
|
72
|
+
handler: (req: Rsc[Key]["Request"], ctx: Rsc[Key]["Context"]) => Effect<A_1, E_1, R2>;
|
|
74
73
|
} : never : never;
|
|
75
74
|
<SVC extends Record<string, EffectUnunified<any, any, any>>, R2, E_2, A_2>(services: SVC, f: (req: S.Schema.Type<REST.GetRequest<Rsc[Key]>>, ctx: import("@effect-app/core/utils").ComputeFlat<LowerServices<EffectDeps<SVC>> & CTX & { [key in keyof CTXMap as key extends keyof REST.GetRequest<Rsc[Key]> ? REST.GetRequest<Rsc[Key]>[key] extends true ? CTXMap[key][0] : never : never]?: CTXMap[key][1]; } & { [key_1 in keyof CTXMap as key_1 extends keyof REST.GetRequest<Rsc[Key]> ? REST.GetRequest<Rsc[Key]>[key_1] extends false ? CTXMap[key_1][0] : never : CTXMap[key_1][0]]: CTXMap[key_1][1]; } & Pick<Rsc[Key], "Response">>) => Effect<A_2, E_2, R2>): S.Schema.Type<REST.GetResponse<Rsc[Key]>> extends infer T ? T extends S.Schema.Type<REST.GetResponse<Rsc[Key]>> ? T extends void ? A_2 extends void ? {
|
|
76
75
|
new (): {};
|
|
77
76
|
_tag: "d";
|
|
78
|
-
handler: (req:
|
|
77
|
+
handler: (req: Rsc[Key]["Request"], ctx: Rsc[Key]["Context"]) => Effect<A_2, E_2, R2>;
|
|
79
78
|
} : Hint<"You're returning non void for a void Response, please fix"> : {
|
|
80
79
|
new (): {};
|
|
81
80
|
_tag: "d";
|
|
82
|
-
handler: (req:
|
|
81
|
+
handler: (req: Rsc[Key]["Request"], ctx: Rsc[Key]["Context"]) => Effect<A_2, E_2, R2>;
|
|
83
82
|
} : never : never;
|
|
84
83
|
}; } & { [Key_1 in keyof { [K_1 in keyof Rsc as Rsc[K_1] extends {
|
|
85
84
|
Response: any;
|
|
@@ -89,33 +88,33 @@ export declare const makeRouter: <CTX, CTXMap extends Record<string, [string, an
|
|
|
89
88
|
<R2_1, E, A>(f: Effect<A, E, R2_1>): S.Schema.Type<REST.GetResponse<Rsc[Key_1]>> extends infer T ? T extends S.Schema.Type<REST.GetResponse<Rsc[Key_1]>> ? T extends void ? A extends void ? {
|
|
90
89
|
new (): {};
|
|
91
90
|
_tag: "raw";
|
|
92
|
-
handler: (req:
|
|
91
|
+
handler: (req: Rsc[Key_1]["Request"], ctx: Rsc[Key_1]["Context"]) => Effect<A, E, R2_1>;
|
|
93
92
|
} : Hint<"You're returning non void for a void Response, please fix"> : {
|
|
94
93
|
new (): {};
|
|
95
94
|
_tag: "raw";
|
|
96
|
-
handler: (req:
|
|
95
|
+
handler: (req: Rsc[Key_1]["Request"], ctx: Rsc[Key_1]["Context"]) => Effect<A, E, R2_1>;
|
|
97
96
|
} : never : never;
|
|
98
97
|
<R2_1, E_1, A_1>(f: (req: S.Schema.Type<REST.GetRequest<Rsc[Key_1]>>, ctx: CTX & { [key in keyof CTXMap as key extends keyof REST.GetRequest<Rsc[Key_1]> ? REST.GetRequest<Rsc[Key_1]>[key] extends true ? CTXMap[key][0] : never : never]?: CTXMap[key][1]; } & { [key_1 in keyof CTXMap as key_1 extends keyof REST.GetRequest<Rsc[Key_1]> ? REST.GetRequest<Rsc[Key_1]>[key_1] extends false ? CTXMap[key_1][0] : never : CTXMap[key_1][0]]: CTXMap[key_1][1]; } & Pick<Rsc[Key_1], "Response">) => Effect<A_1, E_1, R2_1>): S.Schema.Type<REST.GetResponse<Rsc[Key_1]>> extends infer T ? T extends S.Schema.Type<REST.GetResponse<Rsc[Key_1]>> ? T extends void ? A_1 extends void ? {
|
|
99
98
|
new (): {};
|
|
100
99
|
_tag: "raw";
|
|
101
|
-
handler: (req:
|
|
100
|
+
handler: (req: Rsc[Key_1]["Request"], ctx: Rsc[Key_1]["Context"]) => Effect<A_1, E_1, R2_1>;
|
|
102
101
|
} : Hint<"You're returning non void for a void Response, please fix"> : {
|
|
103
102
|
new (): {};
|
|
104
103
|
_tag: "raw";
|
|
105
|
-
handler: (req:
|
|
104
|
+
handler: (req: Rsc[Key_1]["Request"], ctx: Rsc[Key_1]["Context"]) => Effect<A_1, E_1, R2_1>;
|
|
106
105
|
} : never : never;
|
|
107
106
|
<SVC extends Record<string, EffectUnunified<any, any, any>>, R2, E_2, A_2>(services: SVC, f: (req: S.Schema.Type<REST.GetRequest<Rsc[Key_1]>>, ctx: import("@effect-app/core/utils").ComputeFlat<LowerServices<EffectDeps<SVC>> & CTX & { [key in keyof CTXMap as key extends keyof REST.GetRequest<Rsc[Key_1]> ? REST.GetRequest<Rsc[Key_1]>[key] extends true ? CTXMap[key][0] : never : never]?: CTXMap[key][1]; } & { [key_1 in keyof CTXMap as key_1 extends keyof REST.GetRequest<Rsc[Key_1]> ? REST.GetRequest<Rsc[Key_1]>[key_1] extends false ? CTXMap[key_1][0] : never : CTXMap[key_1][0]]: CTXMap[key_1][1]; } & Pick<Rsc[Key_1], "Response">>) => Effect<A_2, E_2, R2>): S.Schema.Type<REST.GetResponse<Rsc[Key_1]>> extends infer T ? T extends S.Schema.Type<REST.GetResponse<Rsc[Key_1]>> ? T extends void ? A_2 extends void ? {
|
|
108
107
|
new (): {};
|
|
109
108
|
_tag: "raw";
|
|
110
|
-
handler: (req:
|
|
109
|
+
handler: (req: Rsc[Key_1]["Request"], ctx: Rsc[Key_1]["Context"]) => Effect<A_2, E_2, R2>;
|
|
111
110
|
} : Hint<"You're returning non void for a void Response, please fix"> : {
|
|
112
111
|
new (): {};
|
|
113
112
|
_tag: "raw";
|
|
114
|
-
handler: (req:
|
|
113
|
+
handler: (req: Rsc[Key_1]["Request"], ctx: Rsc[Key_1]["Context"]) => Effect<A_2, E_2, R2>;
|
|
115
114
|
} : never : never;
|
|
116
115
|
}; };
|
|
117
116
|
matchAll: <T extends {
|
|
118
117
|
[key: string]: HttpRouter.HttpRouter<any, any>;
|
|
119
|
-
}>(handlers: T) => HttpRouter.HttpRouter<[T[keyof T]] extends [HttpRouter.HttpRouter<infer
|
|
118
|
+
}>(handlers: T) => HttpRouter.HttpRouter<[T[keyof T]] extends [HttpRouter.HttpRouter<any, infer E_3>] ? E_3 : never, [T[keyof T]] extends [HttpRouter.HttpRouter<infer R, any>] ? R : never>;
|
|
120
119
|
};
|
|
121
120
|
//# sourceMappingURL=router.d.ts.map
|
package/dist/router.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"router.d.ts","sourceRoot":"","sources":["../src/router.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAA;AAG7E,OAAO,KAAK,EAAW,qBAAqB,EAAE,MAAM,wBAAwB,CAAA;AAC5E,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"router.d.ts","sourceRoot":"","sources":["../src/router.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAA;AAG7E,OAAO,KAAK,EAAW,qBAAqB,EAAE,MAAM,wBAAwB,CAAA;AAC5E,OAAO,KAAK,EAGV,UAAU,EACV,IAAI,EAOL,MAAM,+BAA+B,CAAA;AAGtC,OAAO,EAAE,MAAM,EAAa,CAAC,EAAE,MAAM,YAAY,CAAA;AACjD,OAAO,KAAK,EAAmB,eAAe,EAAE,MAAM,0BAA0B,CAAA;AAChF,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAG5C,OAAO,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAA;AAGxC,MAAM,MAAM,UAAU,CACpB,CAAC,EACD,CAAC,EAGD,EAAE,GAAG,KAAK,IAET,UAAU,CAAC,KAAK,CAAC,KAAK,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC,EAAE,qBAAqB,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAA;AAE7E,MAAM,WAAW,IAAI,CAAC,GAAG,SAAS,MAAM;IACtC,GAAG,EAAE,GAAG,CAAA;CACT;AAKD,eAAO,MAAM,UAAU,GAAI,GAAG,EAAE,MAAM,SAAS,MAAM,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,GAAG,EAAE,OAAO,CAAC,CAAC,oBACjE,GAAG;eAiMH,GAAG,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,OAC1C,GAAG;sBAkIN,SAAS,SAAS,GAEf,CAAS;sBAjIkC,GAAG;;sBAA4C,GAAG;+BAiIpF;oBA/BL,EAAE;;;;oBAAF,EAAE;;;YAgCR,eAEY,SAAS,KAoEmC,UAAU,CAAC,UAAU;sBAxMhC,GAAG;;sBAA4C,GAAG;;sBAAlD,GAAG;;sBAA4C,GAAG;qCAsL7F,CAAC,4JA1WH,GAAG,iLAAH,GAAG;sBAoL0C,GAAG;;sBAA4C,GAAG;kEAoMvE,CAAC;sBApMoB,GAAG;;sBAA4C,GAAG;;sBAAlD,GAAG;;sBAA4C,GAAG;qCAsL7F,CAAC,4JA1WH,GAAG,iLAAH,GAAG;sBAoL0C,GAAG;;sBAA4C,GAAG;uEA+LlE,CAAC,eAY9B;WAsDM,GAAG;kBAjQoC,GAAG;;kBAA4C,GAAG;;SAmC/F,EAAE,EAAE,CAAC,EAAE,CAAC;oBA+DF,EAAE;;;;oBAAF,EAAE;;;;SAjDR,EAAE,6EAjPF,GAAG;oBAkSG,EAAE;;;;oBAAF,EAAE;;;;SA/BP,GAAG,SAAS,MAAM,CAChB,MAAM,EACN,eAAe,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAC/B,EACD,EAAE,0KAvQH,GAAG;oBAkSG,EAAE;;;;oBAAF,EAAE;;;;;kBAlGqC,GAAG;;kBAA4C,GAAG;;eAmC3F,CAAC,EAAE,CAAC;oBA+DF,EAAE;;;;oBAAF,EAAE;;;;4FAlSR,GAAG;oBAkSG,EAAE;;;;oBAAF,EAAE;;;;SA/BP,GAAG,SAAS,MAAM,CAChB,MAAM,EACN,eAAe,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAC/B,EACD,EAAE,4KAvQH,GAAG;oBAkSG,EAAE;;;;oBAAF,EAAE;;;;;eAuLK,CAAC;;iBAAwC,CAAC,KAe9C,UAAU,CAAC,UAAU,+HATH,CAAC,oBAY9B;CA0BJ,CAAA"}
|
package/dist/router.js
CHANGED
|
@@ -16,7 +16,7 @@ export const makeRouter = (handleRequestEnv /* Middleware */) => {
|
|
|
16
16
|
// const rdesc = yield* RouteDescriptors.flatMap((_) => _.get)
|
|
17
17
|
const handler = makeRequestHandler(requestHandler, // one argument if no middleware, 2 if has middleware. TODO: clean this shit up
|
|
18
18
|
errorHandler, middlewareLayer);
|
|
19
|
-
const route = HttpRouter.makeRoute(requestHandler.Request.method, requestHandler.Request.path, handler);
|
|
19
|
+
const route = HttpRouter.makeRoute(requestHandler.Request.method, requestHandler.Request.path, handler.pipe(Effect.withSpan("Request." + requestHandler.name, { captureStackTrace: () => requestHandler.stack })));
|
|
20
20
|
// TODO
|
|
21
21
|
// rdesc.push(makeRouteDescriptor(
|
|
22
22
|
// requestHandler.Request.path,
|
|
@@ -30,6 +30,7 @@ export const makeRouter = (handleRequestEnv /* Middleware */) => {
|
|
|
30
30
|
const Response = S.REST.extractResponse(_);
|
|
31
31
|
return (h) => ({
|
|
32
32
|
adaptResponse,
|
|
33
|
+
stack: h.stack,
|
|
33
34
|
h: h.handler,
|
|
34
35
|
name,
|
|
35
36
|
Request,
|
|
@@ -85,34 +86,46 @@ export const makeRouter = (handleRequestEnv /* Middleware */) => {
|
|
|
85
86
|
controllers,
|
|
86
87
|
...typedKeysOf(filtered).reduce((prev, cur) => {
|
|
87
88
|
;
|
|
88
|
-
prev[cur] = (svcOrFnOrEffect, fnOrNone) =>
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
static handler = () => svcOrFnOrEffect;
|
|
92
|
-
}
|
|
93
|
-
: typeof svcOrFnOrEffect === "function"
|
|
89
|
+
prev[cur] = (svcOrFnOrEffect, fnOrNone) => {
|
|
90
|
+
const stack = new Error().stack?.split("\n").slice(2).join("\n");
|
|
91
|
+
return Effect.isEffect(svcOrFnOrEffect)
|
|
94
92
|
? class {
|
|
93
|
+
static stack = stack;
|
|
95
94
|
static _tag = "d";
|
|
96
|
-
static handler = (
|
|
95
|
+
static handler = () => svcOrFnOrEffect;
|
|
97
96
|
}
|
|
98
|
-
:
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
97
|
+
: typeof svcOrFnOrEffect === "function"
|
|
98
|
+
? class {
|
|
99
|
+
static stack = stack;
|
|
100
|
+
static _tag = "d";
|
|
101
|
+
static handler = (req, ctx) => svcOrFnOrEffect(req, { ...ctx, Response: rsc[cur].Response });
|
|
102
|
+
}
|
|
103
|
+
: class {
|
|
104
|
+
static stack = stack;
|
|
105
|
+
static _tag = "d";
|
|
106
|
+
static handler = matchWithServices(cur)(svcOrFnOrEffect, fnOrNone);
|
|
107
|
+
};
|
|
108
|
+
};
|
|
109
|
+
prev[cur + "Raw"] = (svcOrFnOrEffect, fnOrNone) => {
|
|
110
|
+
const stack = new Error().stack?.split("\n").slice(2).join("\n");
|
|
111
|
+
return Effect.isEffect(svcOrFnOrEffect)
|
|
108
112
|
? class {
|
|
113
|
+
static stack = stack;
|
|
109
114
|
static _tag = "raw";
|
|
110
|
-
static handler = (
|
|
115
|
+
static handler = () => svcOrFnOrEffect;
|
|
111
116
|
}
|
|
112
|
-
:
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
117
|
+
: typeof svcOrFnOrEffect === "function"
|
|
118
|
+
? class {
|
|
119
|
+
static stack = stack;
|
|
120
|
+
static _tag = "raw";
|
|
121
|
+
static handler = (req, ctx) => svcOrFnOrEffect(req, { ...ctx, Response: rsc[cur].Response });
|
|
122
|
+
}
|
|
123
|
+
: class {
|
|
124
|
+
static stack = stack;
|
|
125
|
+
static _tag = "raw";
|
|
126
|
+
static handler = matchWithServices(cur)(svcOrFnOrEffect, fnOrNone);
|
|
127
|
+
};
|
|
128
|
+
};
|
|
116
129
|
return prev;
|
|
117
130
|
}, {})
|
|
118
131
|
};
|
|
@@ -133,4 +146,4 @@ export const makeRouter = (handleRequestEnv /* Middleware */) => {
|
|
|
133
146
|
}
|
|
134
147
|
return { matchFor, matchAll };
|
|
135
148
|
};
|
|
136
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
149
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL3JvdXRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFHQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0seUJBQXlCLENBQUE7QUFDbEQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHdCQUF3QixDQUFBO0FBY3BELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxrQkFBa0IsRUFBRSxNQUFNLCtCQUErQixDQUFBO0FBRXZGLE9BQU8sRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLENBQUMsRUFBRSxNQUFNLFlBQVksQ0FBQTtBQUVqRCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0saUJBQWlCLENBQUE7QUFHNUMsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLG1CQUFtQixDQUFBO0FBa0J4QyxxQkFBcUI7QUFDckIsTUFBTSxDQUFDLE1BQU0sVUFBVSxHQUFHLENBQ3hCLGdCQUFxQixDQUFDLGdCQUFnQixFQUN0QyxFQUFFO0lBcUJGLFNBQVMsS0FBSyxDQW9CWixjQWVDLEVBQ0QsWUFRQyxFQUNELFVBa0JDO1FBRUQsSUFBSSxlQUFlLEdBQTJDLFNBQVMsQ0FBQTtRQUN2RSxJQUFJLFVBQVUsRUFBRSxDQUFDO1lBQ2YsTUFBTSxFQUFFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxHQUFHLFVBQVUsQ0FBQyxjQUFjLENBQUMsQ0FBQTtZQUNoRSxjQUFjLEdBQUcsT0FBYyxDQUFBLENBQUMsT0FBTztZQUN2QyxlQUFlLEdBQUcsZ0JBQWdCLENBQUE7UUFDcEMsQ0FBQztRQUNELDhEQUE4RDtRQUU5RCxNQUFNLE9BQU8sR0FBRyxrQkFBa0IsQ0FrQmhDLGNBQXFCLEVBQUUsK0VBQStFO1FBQ3RHLFlBQVksRUFDWixlQUFlLENBQ2hCLENBQUE7UUFFRCxNQUFNLEtBQUssR0FBRyxVQUFVLENBQUMsU0FBUyxDQUNoQyxjQUFjLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFDN0IsY0FBYyxDQUFDLE9B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
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@effect-app/infra",
|
|
3
|
-
"version": "1.16.
|
|
3
|
+
"version": "1.16.2",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"dependencies": {
|
|
@@ -18,10 +18,10 @@
|
|
|
18
18
|
"proper-lockfile": "^4.1.2",
|
|
19
19
|
"pure-rand": "6.1.0",
|
|
20
20
|
"redlock": "^4.2.0",
|
|
21
|
-
"@effect-app/
|
|
22
|
-
"effect-app": "1.15.0",
|
|
21
|
+
"@effect-app/infra-adapters": "1.10.1",
|
|
23
22
|
"@effect-app/schema": "1.11.0",
|
|
24
|
-
"@effect-app/
|
|
23
|
+
"@effect-app/core": "1.9.0",
|
|
24
|
+
"effect-app": "1.15.0"
|
|
25
25
|
},
|
|
26
26
|
"devDependencies": {
|
|
27
27
|
"@babel/cli": "^7.25.6",
|
package/src/router.ts
CHANGED
|
@@ -17,7 +17,7 @@ import type {
|
|
|
17
17
|
ResFromSchema
|
|
18
18
|
} from "@effect-app/infra/api/routing"
|
|
19
19
|
import { defaultErrorHandler, makeRequestHandler } from "@effect-app/infra/api/routing"
|
|
20
|
-
import type { Layer, Scope
|
|
20
|
+
import type { Layer, Scope } from "effect-app"
|
|
21
21
|
import { Effect, Predicate, S } from "effect-app"
|
|
22
22
|
import type { SupportedErrors, ValidationError } from "effect-app/client/errors"
|
|
23
23
|
import { HttpRouter } from "effect-app/http"
|
|
@@ -39,6 +39,8 @@ export interface Hint<Err extends string> {
|
|
|
39
39
|
Err: Err
|
|
40
40
|
}
|
|
41
41
|
|
|
42
|
+
type AnyRequestModule = { Request: any; Context: any; Response: any; failure: any }
|
|
43
|
+
|
|
42
44
|
// TODO: support FLIP
|
|
43
45
|
export const makeRouter = <CTX, CTXMap extends Record<string, [string, any, boolean]>>(
|
|
44
46
|
handleRequestEnv: any /* Middleware */
|
|
@@ -62,6 +64,7 @@ export const makeRouter = <CTX, CTXMap extends Record<string, [string, any, bool
|
|
|
62
64
|
CTXMap[key][1]
|
|
63
65
|
}
|
|
64
66
|
>
|
|
67
|
+
|
|
65
68
|
function match<
|
|
66
69
|
R,
|
|
67
70
|
M,
|
|
@@ -161,7 +164,9 @@ export const makeRouter = <CTX, CTXMap extends Record<string, [string, any, bool
|
|
|
161
164
|
const route = HttpRouter.makeRoute(
|
|
162
165
|
requestHandler.Request.method,
|
|
163
166
|
requestHandler.Request.path,
|
|
164
|
-
handler
|
|
167
|
+
handler.pipe(
|
|
168
|
+
Effect.withSpan("Request." + requestHandler.name, { captureStackTrace: () => (requestHandler as any).stack })
|
|
169
|
+
)
|
|
165
170
|
)
|
|
166
171
|
// TODO
|
|
167
172
|
// rdesc.push(makeRouteDescriptor(
|
|
@@ -194,9 +199,10 @@ export const makeRouter = <CTX, CTXMap extends Record<string, [string, any, bool
|
|
|
194
199
|
type Res = S.Schema.Type<Extr<ResSchema>>
|
|
195
200
|
|
|
196
201
|
return <R, E>(
|
|
197
|
-
h: { _tag: "raw" | "d"; handler: (r: Req) => Effect<Res, E, R
|
|
202
|
+
h: { _tag: "raw" | "d"; handler: (r: Req) => Effect<Res, E, R>; stack?: string }
|
|
198
203
|
) => ({
|
|
199
204
|
adaptResponse,
|
|
205
|
+
stack: h.stack,
|
|
200
206
|
h: h.handler,
|
|
201
207
|
name,
|
|
202
208
|
Request,
|
|
@@ -217,6 +223,15 @@ export const makeRouter = <CTX, CTXMap extends Record<string, [string, any, bool
|
|
|
217
223
|
>)
|
|
218
224
|
}
|
|
219
225
|
|
|
226
|
+
type RouteMatch<
|
|
227
|
+
R,
|
|
228
|
+
M,
|
|
229
|
+
// TODO: specific failure
|
|
230
|
+
// Err extends SupportedErrors | S.ParseResult.ParseError,
|
|
231
|
+
PR = never
|
|
232
|
+
> // RErr = never,
|
|
233
|
+
= HttpRouter.Route<never, Exclude<Exclude<R, EnforceNonEmptyRecord<M>>, PR>>
|
|
234
|
+
|
|
220
235
|
type HandleVoid<Expected, Actual, Result> = Expected extends void
|
|
221
236
|
? Actual extends void ? Result : Hint<"You're returning non void for a void Response, please fix">
|
|
222
237
|
: Result
|
|
@@ -256,7 +271,7 @@ export const makeRouter = <CTX, CTXMap extends Record<string, [string, any, bool
|
|
|
256
271
|
) => Effect<A, E, R2>
|
|
257
272
|
) =>
|
|
258
273
|
(req: any, ctx: any) =>
|
|
259
|
-
Effect.andThen(allLower(services), (svc2) => f(req, { ...ctx, ...svc2
|
|
274
|
+
Effect.andThen(allLower(services), (svc2) => f(req, { ...ctx, ...svc2, Response: rsc[action].Response }))
|
|
260
275
|
}
|
|
261
276
|
|
|
262
277
|
type MatchWithServicesNew<RT extends "raw" | "d", Key extends keyof Rsc> = {
|
|
@@ -266,14 +281,14 @@ export const makeRouter = <CTX, CTXMap extends Record<string, [string, any, bool
|
|
|
266
281
|
S.Schema.Type<REST.GetResponse<Rsc[Key]>>,
|
|
267
282
|
A,
|
|
268
283
|
Handler<
|
|
269
|
-
|
|
270
|
-
Types.Simplify<GetCTX<REST.GetRequest<Rsc[Key]>>>,
|
|
284
|
+
Rsc[Key],
|
|
271
285
|
RT,
|
|
272
286
|
A,
|
|
273
287
|
E,
|
|
274
288
|
R2
|
|
275
289
|
>
|
|
276
290
|
>
|
|
291
|
+
|
|
277
292
|
<R2, E, A>(
|
|
278
293
|
f: (
|
|
279
294
|
req: ReqFromSchema<REST.GetRequest<Rsc[Key]>>,
|
|
@@ -283,8 +298,7 @@ export const makeRouter = <CTX, CTXMap extends Record<string, [string, any, bool
|
|
|
283
298
|
S.Schema.Type<REST.GetResponse<Rsc[Key]>>,
|
|
284
299
|
A,
|
|
285
300
|
Handler<
|
|
286
|
-
|
|
287
|
-
Types.Simplify<GetCTX<REST.GetRequest<Rsc[Key]>>>,
|
|
301
|
+
Rsc[Key],
|
|
288
302
|
RT,
|
|
289
303
|
A,
|
|
290
304
|
E,
|
|
@@ -313,8 +327,7 @@ export const makeRouter = <CTX, CTXMap extends Record<string, [string, any, bool
|
|
|
313
327
|
S.Schema.Type<REST.GetResponse<Rsc[Key]>>,
|
|
314
328
|
A,
|
|
315
329
|
Handler<
|
|
316
|
-
|
|
317
|
-
Types.Simplify<GetCTX<REST.GetRequest<Rsc[Key]>>>,
|
|
330
|
+
Rsc[Key],
|
|
318
331
|
RT,
|
|
319
332
|
A,
|
|
320
333
|
E,
|
|
@@ -324,12 +337,12 @@ export const makeRouter = <CTX, CTXMap extends Record<string, [string, any, bool
|
|
|
324
337
|
}
|
|
325
338
|
|
|
326
339
|
type Keys = keyof Filtered
|
|
327
|
-
type Handler<
|
|
340
|
+
type Handler<Action extends AnyRequestModule, RT extends "raw" | "d", A, E, R> = {
|
|
328
341
|
new(): {}
|
|
329
342
|
_tag: RT
|
|
330
343
|
handler: (
|
|
331
|
-
req:
|
|
332
|
-
ctx: Context
|
|
344
|
+
req: Action["Request"],
|
|
345
|
+
ctx: Action["Context"]
|
|
333
346
|
) => Effect<
|
|
334
347
|
A,
|
|
335
348
|
E,
|
|
@@ -337,21 +350,19 @@ export const makeRouter = <CTX, CTXMap extends Record<string, [string, any, bool
|
|
|
337
350
|
>
|
|
338
351
|
}
|
|
339
352
|
|
|
340
|
-
type AHandler<Action extends
|
|
353
|
+
type AHandler<Action extends AnyRequestModule> =
|
|
341
354
|
| Handler<
|
|
342
|
-
|
|
343
|
-
GetCTX<REST.GetRequest<Action>>,
|
|
355
|
+
Action,
|
|
344
356
|
"raw",
|
|
345
357
|
ResRawFromSchema<REST.GetResponse<Action>>,
|
|
346
|
-
SupportedErrors | S.ParseResult.ParseError | S.Schema.Type<
|
|
358
|
+
SupportedErrors | S.ParseResult.ParseError | S.Schema.Type<Action["failure"]>,
|
|
347
359
|
any
|
|
348
360
|
>
|
|
349
361
|
| Handler<
|
|
350
|
-
|
|
351
|
-
GetCTX<REST.GetRequest<Action>>,
|
|
362
|
+
Action,
|
|
352
363
|
"d",
|
|
353
364
|
ResFromSchema<REST.GetResponse<Action>>,
|
|
354
|
-
SupportedErrors | S.ParseResult.ParseError | S.Schema.Type<
|
|
365
|
+
SupportedErrors | S.ParseResult.ParseError | S.Schema.Type<Action["failure"]>,
|
|
355
366
|
any
|
|
356
367
|
>
|
|
357
368
|
|
|
@@ -441,36 +452,46 @@ export const makeRouter = <CTX, CTXMap extends Record<string, [string, any, bool
|
|
|
441
452
|
controllers,
|
|
442
453
|
...typedKeysOf(filtered).reduce(
|
|
443
454
|
(prev, cur) => {
|
|
444
|
-
;(prev as any)[cur] = (svcOrFnOrEffect: any, fnOrNone: any) =>
|
|
445
|
-
|
|
455
|
+
;(prev as any)[cur] = (svcOrFnOrEffect: any, fnOrNone: any) => {
|
|
456
|
+
const stack = new Error().stack?.split("\n").slice(2).join("\n")
|
|
457
|
+
return Effect.isEffect(svcOrFnOrEffect)
|
|
446
458
|
? class {
|
|
459
|
+
static stack = stack
|
|
447
460
|
static _tag = "d"
|
|
448
461
|
static handler = () => svcOrFnOrEffect
|
|
449
462
|
}
|
|
450
463
|
: typeof svcOrFnOrEffect === "function"
|
|
451
464
|
? class {
|
|
465
|
+
static stack = stack
|
|
452
466
|
static _tag = "d"
|
|
453
467
|
static handler = (req: any, ctx: any) => svcOrFnOrEffect(req, { ...ctx, Response: rsc[cur].Response })
|
|
454
468
|
}
|
|
455
469
|
: class {
|
|
470
|
+
static stack = stack
|
|
456
471
|
static _tag = "d"
|
|
457
472
|
static handler = matchWithServices(cur)(svcOrFnOrEffect, fnOrNone)
|
|
458
473
|
}
|
|
459
|
-
|
|
460
|
-
|
|
474
|
+
}
|
|
475
|
+
;(prev as any)[(cur as any) + "Raw"] = (svcOrFnOrEffect: any, fnOrNone: any) => {
|
|
476
|
+
const stack = new Error().stack?.split("\n").slice(2).join("\n")
|
|
477
|
+
return Effect.isEffect(svcOrFnOrEffect)
|
|
461
478
|
? class {
|
|
479
|
+
static stack = stack
|
|
462
480
|
static _tag = "raw"
|
|
463
481
|
static handler = () => svcOrFnOrEffect
|
|
464
482
|
}
|
|
465
483
|
: typeof svcOrFnOrEffect === "function"
|
|
466
484
|
? class {
|
|
485
|
+
static stack = stack
|
|
467
486
|
static _tag = "raw"
|
|
468
487
|
static handler = (req: any, ctx: any) => svcOrFnOrEffect(req, { ...ctx, Response: rsc[cur].Response })
|
|
469
488
|
}
|
|
470
489
|
: class {
|
|
490
|
+
static stack = stack
|
|
471
491
|
static _tag = "raw"
|
|
472
492
|
static handler = matchWithServices(cur)(svcOrFnOrEffect, fnOrNone)
|
|
473
493
|
}
|
|
494
|
+
}
|
|
474
495
|
return prev
|
|
475
496
|
},
|
|
476
497
|
{} as
|
|
@@ -516,8 +537,8 @@ export const makeRouter = <CTX, CTXMap extends Record<string, [string, any, bool
|
|
|
516
537
|
: never
|
|
517
538
|
|
|
518
539
|
return r as HttpRouter.HttpRouter<
|
|
519
|
-
|
|
520
|
-
|
|
540
|
+
_ERouter<typeof handlers[keyof typeof handlers]>,
|
|
541
|
+
_RRouter<typeof handlers[keyof typeof handlers]>
|
|
521
542
|
>
|
|
522
543
|
}
|
|
523
544
|
|