@effect-app/infra 1.16.0 → 1.16.1
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 +6 -0
- package/_cjs/router.cjs +40 -25
- package/_cjs/router.cjs.map +1 -1
- package/dist/router.d.ts +18 -33
- package/dist/router.d.ts.map +1 -1
- package/dist/router.js +37 -24
- package/package.json +3 -3
- package/src/router.ts +47 -27
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";
|
|
@@ -17,13 +16,11 @@ export declare const makeRouter: <CTX, CTXMap extends Record<string, [string, an
|
|
|
17
16
|
} ? K_1 : never]: Rsc[K_1] extends {
|
|
18
17
|
Response: any;
|
|
19
18
|
} ? Rsc[K_1] : never; }]: {
|
|
20
|
-
new (): {};
|
|
21
19
|
_tag: "raw";
|
|
22
|
-
handler: (req:
|
|
20
|
+
handler: (req: Rsc[K]["Request"], ctx: Rsc[K]["Context"]) => Effect<S.Schema.Encoded<Extr<REST.GetResponse<Rsc[K]>>>, import("effect-app/client/errors").OptimisticConcurrencyException | S.ParseResult.ParseError | ValidationError | import("effect-app/client/errors").InvalidStateError | 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 | import("effect-app/client/errors").ServiceUnavailableError | S.Schema.Type<Rsc[K]["failure"]>, any>;
|
|
23
21
|
} | {
|
|
24
|
-
new (): {};
|
|
25
22
|
_tag: "d";
|
|
26
|
-
handler: (req:
|
|
23
|
+
handler: (req: Rsc[K]["Request"], ctx: Rsc[K]["Context"]) => Effect<S.Schema.Type<Extr<REST.GetResponse<Rsc[K]>>>, import("effect-app/client/errors").OptimisticConcurrencyException | S.ParseResult.ParseError | ValidationError | import("effect-app/client/errors").InvalidStateError | 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 | import("effect-app/client/errors").ServiceUnavailableError | S.Schema.Type<Rsc[K]["failure"]>, any>;
|
|
27
24
|
}; }>(controllers: THandlers) => HttpRouter.HttpRouter<[(keyof { [K_1 in keyof Rsc as Rsc[K_1] extends {
|
|
28
25
|
Response: any;
|
|
29
26
|
} ? K_1 : never]: Rsc[K_1] extends {
|
|
@@ -32,7 +29,7 @@ export declare const makeRouter: <CTX, CTXMap extends Record<string, [string, an
|
|
|
32
29
|
Response: any;
|
|
33
30
|
} ? K_1 : never]: Rsc[K_1] extends {
|
|
34
31
|
Response: any;
|
|
35
|
-
} ? Rsc[K_1] : never; } ? { [K in T]:
|
|
32
|
+
} ? 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
33
|
Response: any;
|
|
37
34
|
} ? K_1 : never]: Rsc[K_1] extends {
|
|
38
35
|
Response: any;
|
|
@@ -44,7 +41,7 @@ export declare const makeRouter: <CTX, CTXMap extends Record<string, [string, an
|
|
|
44
41
|
Response: any;
|
|
45
42
|
} ? K_1 : never]: Rsc[K_1] extends {
|
|
46
43
|
Response: any;
|
|
47
|
-
} ? Rsc[K_1] : never; } ? { [K in T]:
|
|
44
|
+
} ? 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
45
|
Response: any;
|
|
49
46
|
} ? K_1 : never]: Rsc[K_1] extends {
|
|
50
47
|
Response: any;
|
|
@@ -55,31 +52,25 @@ export declare const makeRouter: <CTX, CTXMap extends Record<string, [string, an
|
|
|
55
52
|
Response: any;
|
|
56
53
|
} ? Rsc[K_1] : never; }]: {
|
|
57
54
|
<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
|
-
new (): {};
|
|
59
55
|
_tag: "d";
|
|
60
|
-
handler: (req:
|
|
56
|
+
handler: (req: Rsc[Key]["Request"], ctx: Rsc[Key]["Context"]) => Effect<A, E, R2>;
|
|
61
57
|
} : Hint<"You're returning non void for a void Response, please fix"> : {
|
|
62
|
-
new (): {};
|
|
63
58
|
_tag: "d";
|
|
64
|
-
handler: (req:
|
|
59
|
+
handler: (req: Rsc[Key]["Request"], ctx: Rsc[Key]["Context"]) => Effect<A, E, R2>;
|
|
65
60
|
} : never : never;
|
|
66
61
|
<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
|
-
new (): {};
|
|
68
62
|
_tag: "d";
|
|
69
|
-
handler: (req:
|
|
63
|
+
handler: (req: Rsc[Key]["Request"], ctx: Rsc[Key]["Context"]) => Effect<A_1, E_1, R2>;
|
|
70
64
|
} : Hint<"You're returning non void for a void Response, please fix"> : {
|
|
71
|
-
new (): {};
|
|
72
65
|
_tag: "d";
|
|
73
|
-
handler: (req:
|
|
66
|
+
handler: (req: Rsc[Key]["Request"], ctx: Rsc[Key]["Context"]) => Effect<A_1, E_1, R2>;
|
|
74
67
|
} : never : never;
|
|
75
68
|
<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
|
-
new (): {};
|
|
77
69
|
_tag: "d";
|
|
78
|
-
handler: (req:
|
|
70
|
+
handler: (req: Rsc[Key]["Request"], ctx: Rsc[Key]["Context"]) => Effect<A_2, E_2, R2>;
|
|
79
71
|
} : Hint<"You're returning non void for a void Response, please fix"> : {
|
|
80
|
-
new (): {};
|
|
81
72
|
_tag: "d";
|
|
82
|
-
handler: (req:
|
|
73
|
+
handler: (req: Rsc[Key]["Request"], ctx: Rsc[Key]["Context"]) => Effect<A_2, E_2, R2>;
|
|
83
74
|
} : never : never;
|
|
84
75
|
}; } & { [Key_1 in keyof { [K_1 in keyof Rsc as Rsc[K_1] extends {
|
|
85
76
|
Response: any;
|
|
@@ -87,35 +78,29 @@ export declare const makeRouter: <CTX, CTXMap extends Record<string, [string, an
|
|
|
87
78
|
Response: any;
|
|
88
79
|
} ? Rsc[K_1] : never; } as Key_1 extends string ? `${Key_1}Raw` : never]: {
|
|
89
80
|
<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
|
-
new (): {};
|
|
91
81
|
_tag: "raw";
|
|
92
|
-
handler: (req:
|
|
82
|
+
handler: (req: Rsc[Key_1]["Request"], ctx: Rsc[Key_1]["Context"]) => Effect<A, E, R2_1>;
|
|
93
83
|
} : Hint<"You're returning non void for a void Response, please fix"> : {
|
|
94
|
-
new (): {};
|
|
95
84
|
_tag: "raw";
|
|
96
|
-
handler: (req:
|
|
85
|
+
handler: (req: Rsc[Key_1]["Request"], ctx: Rsc[Key_1]["Context"]) => Effect<A, E, R2_1>;
|
|
97
86
|
} : never : never;
|
|
98
87
|
<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
|
-
new (): {};
|
|
100
88
|
_tag: "raw";
|
|
101
|
-
handler: (req:
|
|
89
|
+
handler: (req: Rsc[Key_1]["Request"], ctx: Rsc[Key_1]["Context"]) => Effect<A_1, E_1, R2_1>;
|
|
102
90
|
} : Hint<"You're returning non void for a void Response, please fix"> : {
|
|
103
|
-
new (): {};
|
|
104
91
|
_tag: "raw";
|
|
105
|
-
handler: (req:
|
|
92
|
+
handler: (req: Rsc[Key_1]["Request"], ctx: Rsc[Key_1]["Context"]) => Effect<A_1, E_1, R2_1>;
|
|
106
93
|
} : never : never;
|
|
107
94
|
<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
|
-
new (): {};
|
|
109
95
|
_tag: "raw";
|
|
110
|
-
handler: (req:
|
|
96
|
+
handler: (req: Rsc[Key_1]["Request"], ctx: Rsc[Key_1]["Context"]) => Effect<A_2, E_2, R2>;
|
|
111
97
|
} : Hint<"You're returning non void for a void Response, please fix"> : {
|
|
112
|
-
new (): {};
|
|
113
98
|
_tag: "raw";
|
|
114
|
-
handler: (req:
|
|
99
|
+
handler: (req: Rsc[Key_1]["Request"], ctx: Rsc[Key_1]["Context"]) => Effect<A_2, E_2, R2>;
|
|
115
100
|
} : never : never;
|
|
116
101
|
}; };
|
|
117
102
|
matchAll: <T extends {
|
|
118
103
|
[key: string]: HttpRouter.HttpRouter<any, any>;
|
|
119
|
-
}>(handlers: T) => HttpRouter.HttpRouter<[T[keyof T]] extends [HttpRouter.HttpRouter<infer
|
|
104
|
+
}>(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
105
|
};
|
|
121
106
|
//# 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;sBAiIN,SAAS,SAAS,GAEf,CAAS;sBAhIkC,GAAG;;sBAA4C,GAAG;+BAgIpF;;;;;;YACX,eAEY,SAAS,KAoEmC,UAAU,CAAC,UAAU;sBAvMhC,GAAG;;sBAA4C,GAAG;;sBAAlD,GAAG;;sBAA4C,GAAG;qCAqL7F,CAAC,4JAzWH,GAAG,iLAAH,GAAG;sBAoL0C,GAAG;;sBAA4C,GAAG;kEAmMvE,CAAC;sBAnMoB,GAAG;;sBAA4C,GAAG;;sBAAlD,GAAG;;sBAA4C,GAAG;qCAqL7F,CAAC,4JAzWH,GAAG,iLAAH,GAAG;sBAoL0C,GAAG;;sBAA4C,GAAG;uEA8LlE,CAAC,eAY9B;WAsDM,GAAG;kBAhQoC,GAAG;;kBAA4C,GAAG;;SAmC/F,EAAE,EAAE,CAAC,EAAE,CAAC;;;;;;;SAcR,EAAE,6EAjPF,GAAG;;;;;;;SAmQF,GAAG,SAAS,MAAM,CAChB,MAAM,EACN,eAAe,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAC/B,EACD,EAAE,0KAvQH,GAAG;;;;;;;;kBAgM0C,GAAG;;kBAA4C,GAAG;;eAmC3F,CAAC,EAAE,CAAC;;;;;;;4FAnOR,GAAG;;;;;;;SAmQF,GAAG,SAAS,MAAM,CAChB,MAAM,EACN,eAAe,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAC/B,EACD,EAAE,4KAvQH,GAAG;;;;;;;;eAwdU,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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL3JvdXRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFHQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0seUJBQXlCLENBQUE7QUFDbEQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHdCQUF3QixDQUFBO0FBY3BELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxrQkFBa0IsRUFBRSxNQUFNLCtCQUErQixDQUFBO0FBRXZGLE9BQU8sRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLENBQUMsRUFBRSxNQUFNLFlBQVksQ0FBQTtBQUVqRCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0saUJBQWlCLENBQUE7QUFHNUMsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLG1CQUFtQixDQUFBO0FBa0J4QyxxQkFBcUI7QUFDckIsTUFBTSxDQUFDLE1BQU0sVUFBVSxHQUFHLENBQ3hCLGdCQUFxQixDQUFDLGdCQUFnQixFQUN0QyxFQUFFO0lBcUJGLFNBQVMsS0FBSyxDQW9CWixjQWVDLEVBQ0QsWUFRQyxFQUNELFVBa0JDO1FBRUQsSUFBSSxlQUFlLEdBQTJDLFNBQVMsQ0FBQTtRQUN2RSxJQUFJLFVBQVUsRUFBRSxDQUFDO1lBQ2YsTUFBTSxFQUFFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxHQUFHLFVBQVUsQ0FBQyxjQUFjLENBQUMsQ0FBQTtZQUNoRSxjQUFjLEdBQUcsT0FBYyxDQUFBLENBQUMsT0FBTztZQUN2QyxlQUFlLEdBQUcsZ0JBQWdCLENBQUE7UUFDcEMsQ0FBQztRQUNELDhEQUE4RDtRQUU5RCxNQUFNLE9BQU8sR0FBRyxrQkFBa0IsQ0FrQmhDLGNBQXFCLEVBQUUsK0VBQStFO1FBQ3RHLFlBQVksRUFDWixlQUFlLENBQ2hCLENBQUE7UUFFRCxNQUFNLEtBQUssR0FBRyxVQUFVLENBQUMsU0FBUyxDQUNoQyxjQUFjLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFDN0IsY0FBYyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQzNCLE9BQU8sQ0FBQyxJQUFJLENBQ1YsTUFBTSxDQUFDLFFBQVEsQ0FBQyxVQUFVLEdBQUcsY0FBYyxDQUFDLElBQUksRUFBRSxFQUFFLGlCQUFpQixFQUFFLEdBQUcsRUFBRSxDQUFFLGNBQXNCLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FDOUcsQ0FDRixDQUFBO1FBQ0QsT0FBTztRQUNQLGtDQUFrQztRQUNsQyxpQ0FBaUM7UUFDakMsbUNBQW1DO1FBQ25DLG1CQUFtQjtRQUNuQixLQUFLO1FBQ0wsT0FBTyxLQUFLLENBQUE7SUFDZCxDQUFDO0lBRUQsU0FBUyxNQUFNLENBTWIsQ0FBc0MsRUFDdEMsSUFBWSxFQUNaLGFBQW1CO1FBRW5CLE1BQU0sT0FBTyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFBO1FBQ3hDLE1BQU0sUUFBUSxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFBO1FBVTFDLE9BQU8sQ0FDTCxDQUFnRixFQUNoRixFQUFFLENBQUMsQ0FBQztZQUNKLGFBQWE7WUFDYixLQUFLLEVBQUUsQ0FBQyxDQUFDLEtBQUs7WUFDZCxDQUFDLEVBQUUsQ0FBQyxDQUFDLE9BQU87WUFDWixJQUFJO1lBQ0osT0FBTztZQUNQLFFBQVE7WUFDUixlQUFlLEVBQUUsQ0FBQyxDQUFDLGVBQWUsSUFBSSxRQUFRO1lBQzlDLE9BQU8sRUFBRSxJQUFXO1lBQ3BCLEdBQUcsRUFBRSxJQUFXO1lBQ2hCLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSTtTQVVWLENBQUEsQ0FBQTtJQUNKLENBQUM7SUFlRCxTQUFTLFFBQVEsQ0FDZixHQUFRO1FBTVIsTUFBTSxRQUFRLEdBQUcsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRTtZQUNwRCxJQUFJLFNBQVMsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDO2dCQUNyRCxHQUFHLENBQUMsR0FBcUIsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQTtZQUN2QyxDQUFDO1lBQ0QsT0FBTyxHQUFHLENBQUE7UUFDWixDQUFDLEVBQUUsRUFBYyxDQUFDLENBQUE7UUFFbEIsTUFBTSxpQkFBaUIsR0FBRyxDQUE2QixNQUFXLEVBQUUsRUFBRTtZQUVwRSxPQUFPLENBU0wsUUFBYSxFQUNiLENBTXFCLEVBQ3JCLEVBQUUsQ0FDSixDQUFDLEdBQVEsRUFBRSxHQUFRLEVBQUUsRUFBRSxDQUNyQixNQUFNLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLEdBQUcsR0FBRyxFQUFFLEdBQUcsSUFBSSxFQUFFLFFBQVEsRUFBRSxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFBO1FBQzdHLENBQUMsQ0FBQTtRQTZGRCxNQUFNLFdBQVcsR0FBRyxDQU1sQixXQUFzQixFQUN0QixFQUFFO1lBQ0YsTUFBTSxRQUFRLEdBQUcsV0FBVyxDQUFDLFFBQVEsQ0FBQyxDQUFDLE1BQU0sQ0FDM0MsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUU7Z0JBQ1gsSUFBSSxHQUFHLEtBQUssTUFBTTtvQkFBRSxPQUFPLEdBQUcsQ0FBQTtnQkFDOUIsTUFBTSxDQUFDLEdBQUksR0FBVyxDQUFDLElBQThCLENBQUE7Z0JBQ3JELElBQUksQ0FBQyxDQUFDO29CQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMsZ0NBQWdDLENBQUMsQ0FDeEQ7Z0JBQUMsR0FBVyxDQUFDLEdBQUcsQ0FBQyxHQUFHLE1BQU0sQ0FDekIsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUNSLENBQUMsQ0FBQyxVQUFVLEdBQUcsR0FBRyxHQUFJLEdBQWMsQ0FDckMsQ0FBQyxXQUFXLENBQUMsR0FBK0IsQ0FBUSxDQUFDLENBQUE7Z0JBQ3RELE9BQU8sR0FBRyxDQUFBO1lBQ1osQ0FBQyxFQUNELEVBV0MsQ0FDRixDQUFBO1lBRUQsTUFBTSxNQUFNLEdBQUcsV0FBVyxDQUFDLFFBQVEsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRTtnQkFDdkQsTUFBTSxPQUFPLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFBO2dCQUM3QixNQUFNLEdBQUcsR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFBO2dCQUUzQixNQUFNLE9BQVEsU0FBUyxHQUFXO29CQUNoQyxNQUFNLENBQUMsSUFBSSxHQUFHLEdBQUcsR0FBRyxPQUFPLENBQUMsSUFBSSxHQUFHLENBQUMsR0FBRyxDQUFDLElBQUksS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFBO29CQUNyRSxNQUFNLENBQUMsTUFBTSxHQUFHLEdBQUcsQ0FBQyxNQUFNLEtBQUssTUFBTTt3QkFDbkMsQ0FBQyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFFLEVBQUUsR0FBRyxDQUFDO3dCQUN4RCxDQUFDLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQTs7Z0JBRWhCLElBQUksR0FBRyxDQUFDLE1BQU0sS0FBSyxNQUFNLEVBQUUsQ0FBQztvQkFDMUIsTUFBTSxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUU7d0JBQ3JCLENBQUMsT0FBTyxDQUFDLE1BQU0sS0FBSyxLQUFLLElBQUksT0FBTyxDQUFDLE1BQU0sS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEVBQUUsR0FBRyxDQUFDLElBQUk7cUJBQ3ZGLENBQUMsQ0FBQTtnQkFDSixDQUFDO2dCQUNELE1BQU0sQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQTtnQkFDbkMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEtBQUssQ0FDZCxPQUFjLEVBQ2QsWUFBWSxDQUFDLEdBQUcsQ0FBQyxFQUNqQixnQkFBZ0IsQ0FBQyxPQUFPO2lCQUN6QixDQUFBO2dCQUNELE9BQU8sR0FBRyxDQUFBO1lBQ1osQ0FBQyxFQUFFLEVBQVMsQ0FPWCxDQUFBO1lBWUQsT0FBTyxVQUFVLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBR25ELENBQUE7UUFDSCxDQUFDLENBQUE7UUFJRCxNQUFNLENBQUMsR0FBRztZQUNSLFdBQVc7WUFDWCxHQUFHLFdBQVcsQ0FBQyxRQUFRLENBQUMsQ0FBQyxNQUFNLENBQzdCLENBQUMsSUFBSSxFQUFFLEdBQUcsRUFBRSxFQUFFO2dCQUNaLENBQUM7Z0JBQUMsSUFBWSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsZUFBb0IsRUFBRSxRQUFhLEVBQUUsRUFBRTtvQkFDNUQsTUFBTSxLQUFLLEdBQUcsSUFBSSxLQUFLLEVBQUUsQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUE7b0JBQ2hFLE9BQU8sTUFBTSxDQUFDLFFBQVEsQ0FBQyxlQUFlLENBQUM7d0JBQ3JDLENBQUMsQ0FBQzs0QkFDQSxNQUFNLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQTs0QkFDcEIsTUFBTSxDQUFDLElBQUksR0FBRyxHQUFHLENBQUE7NEJBQ2pCLE1BQU0sQ0FBQyxPQUFPLEdBQUcsR0FBRyxFQUFFLENBQUMsZUFBZSxDQUFBO3lCQUN2Qzt3QkFDRCxDQUFDLENBQUMsT0FBTyxlQUFlLEtBQUssVUFBVTs0QkFDdkMsQ0FBQyxDQUFDO2dDQUNBLE1BQU0sQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFBO2dDQUNwQixNQUFNLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQTtnQ0FDakIsTUFBTSxDQUFDLE9BQU8sR0FBRyxDQUFDLEdBQVEsRUFBRSxHQUFRLEVBQUUsRUFBRSxDQUFDLGVBQWUsQ0FBQyxHQUFHLEVBQUUsRUFBRSxHQUFHLEdBQUcsRUFBRSxRQUFRLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUE7NkJBQ3ZHOzRCQUNELENBQUMsQ0FBQztnQ0FDQSxNQUFNLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQTtnQ0FDcEIsTUFBTSxDQUFDLElBQUksR0FBRyxHQUFHLENBQUE7Z0NBQ2pCLE1BQU0sQ0FBQyxPQUFPLEdBQUcsaUJBQWlCLENBQUMsR0FBRyxDQUFDLENBQUMsZUFBZSxFQUFFLFFBQVEsQ0FBQyxDQUFBOzZCQUNuRSxDQUFBO2dCQUNMLENBQUMsQ0FDQTtnQkFBQyxJQUFZLENBQUUsR0FBVyxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUMsZUFBb0IsRUFBRSxRQUFhLEVBQUUsRUFBRTtvQkFDN0UsTUFBTSxLQUFLLEdBQUcsSUFBSSxLQUFLLEVBQUUsQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUE7b0JBQ2hFLE9BQU8sTUFBTSxDQUFDLFFBQVEsQ0FBQyxlQUFlLENBQUM7d0JBQ3JDLENBQUMsQ0FBQzs0QkFDQSxNQUFNLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQTs0QkFDcEIsTUFBTSxDQUFDLElBQUksR0FBRyxLQUFLLENBQUE7NEJBQ25CLE1BQU0sQ0FBQyxPQUFPLEdBQUcsR0FBRyxFQUFFLENBQUMsZUFBZSxDQUFBO3lCQUN2Qzt3QkFDRCxDQUFDLENBQUMsT0FBTyxlQUFlLEtBQUssVUFBVTs0QkFDdkMsQ0FBQyxDQUFDO2dDQUNBLE1BQU0sQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFBO2dDQUNwQixNQUFNLENBQUMsSUFBSSxHQUFHLEtBQUssQ0FBQTtnQ0FDbkIsTUFBTSxDQUFDLE9BQU8sR0FBRyxDQUFDLEdBQVEsRUFBRSxHQUFRLEVBQUUsRUFBRSxDQUFDLGVBQWUsQ0FBQyxHQUFHLEVBQUUsRUFBRSxHQUFHLEdBQUcsRUFBRSxRQUFRLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUE7NkJBQ3ZHOzRCQUNELENBQUMsQ0FBQztnQ0FDQSxNQUFNLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQTtnQ0FDcEIsTUFBTSxDQUFDLElBQUksR0FBRyxLQUFLLENBQUE7Z0NBQ25CLE1BQU0sQ0FBQyxPQUFPLEdBQUcsaUJBQWlCLENBQUMsR0FBRyxDQUFDLENBQUMsZUFBZSxFQUFFLFFBQVEsQ0FBQyxDQUFBOzZCQUNuRSxDQUFBO2dCQUNMLENBQUMsQ0FBQTtnQkFDRCxPQUFPLElBQUksQ0FBQTtZQUNiLENBQUMsRUFDRCxFQVFHLENBQ0o7U0FDRixDQUFBO1FBQ0QsT0FBTyxDQUFDLENBQUE7SUFDVixDQUFDO0lBRUQsTUFBTSxZQUFZLEdBQUcsQ0FBQyxlQUFvRCxFQUFFLEVBQUU7UUFDNUUsT0FBTyxDQUNMLEdBQXdDLEVBQ3hDLEdBQTBDLEVBQzFDLEVBQTJHLEVBQzNHLEVBQUUsQ0FBQyxtQkFBbUIsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLE1BQU0sQ0FBQyxRQUFRLENBQUMsRUFBRSxFQUFFLFlBQVksRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLGVBQWUsQ0FBQyxPQUFPLENBQUMsQ0FBQTtJQUN0SCxDQUFDLENBQUE7SUFFRDs7O09BR0c7SUFFSCxTQUFTLFFBQVEsQ0FBZ0MsUUFBVztRQUMxRCxNQUFNLENBQUMsR0FBRyxXQUFXLENBQUMsUUFBUSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFO1lBQ2xELE9BQU8sVUFBVSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsUUFBUSxDQUFDLEdBQUcsQ0FBUSxDQUFDLENBQUE7UUFDckQsQ0FBQyxFQUFFLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQTtRQVlwQixPQUFPLENBR04sQ0FBQTtJQUNILENBQUM7SUF3QkQsT0FBTyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsQ0FBQTtBQUMvQixDQUFDLENBQUEifQ==
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@effect-app/infra",
|
|
3
|
-
"version": "1.16.
|
|
3
|
+
"version": "1.16.1",
|
|
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/infra-adapters": "1.10.1",
|
|
21
22
|
"@effect-app/core": "1.9.0",
|
|
22
|
-
"effect-app": "1.15.0",
|
|
23
23
|
"@effect-app/schema": "1.11.0",
|
|
24
|
-
"
|
|
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,11 @@ export const makeRouter = <CTX, CTXMap extends Record<string, [string, any, bool
|
|
|
324
337
|
}
|
|
325
338
|
|
|
326
339
|
type Keys = keyof Filtered
|
|
327
|
-
type Handler<
|
|
328
|
-
new(): {}
|
|
340
|
+
type Handler<Action extends AnyRequestModule, RT extends "raw" | "d", A, E, R> = {
|
|
329
341
|
_tag: RT
|
|
330
342
|
handler: (
|
|
331
|
-
req:
|
|
332
|
-
ctx: Context
|
|
343
|
+
req: Action["Request"],
|
|
344
|
+
ctx: Action["Context"]
|
|
333
345
|
) => Effect<
|
|
334
346
|
A,
|
|
335
347
|
E,
|
|
@@ -337,21 +349,19 @@ export const makeRouter = <CTX, CTXMap extends Record<string, [string, any, bool
|
|
|
337
349
|
>
|
|
338
350
|
}
|
|
339
351
|
|
|
340
|
-
type AHandler<Action extends
|
|
352
|
+
type AHandler<Action extends AnyRequestModule> =
|
|
341
353
|
| Handler<
|
|
342
|
-
|
|
343
|
-
GetCTX<REST.GetRequest<Action>>,
|
|
354
|
+
Action,
|
|
344
355
|
"raw",
|
|
345
356
|
ResRawFromSchema<REST.GetResponse<Action>>,
|
|
346
|
-
SupportedErrors | S.ParseResult.ParseError | S.Schema.Type<
|
|
357
|
+
SupportedErrors | S.ParseResult.ParseError | S.Schema.Type<Action["failure"]>,
|
|
347
358
|
any
|
|
348
359
|
>
|
|
349
360
|
| Handler<
|
|
350
|
-
|
|
351
|
-
GetCTX<REST.GetRequest<Action>>,
|
|
361
|
+
Action,
|
|
352
362
|
"d",
|
|
353
363
|
ResFromSchema<REST.GetResponse<Action>>,
|
|
354
|
-
SupportedErrors | S.ParseResult.ParseError | S.Schema.Type<
|
|
364
|
+
SupportedErrors | S.ParseResult.ParseError | S.Schema.Type<Action["failure"]>,
|
|
355
365
|
any
|
|
356
366
|
>
|
|
357
367
|
|
|
@@ -441,36 +451,46 @@ export const makeRouter = <CTX, CTXMap extends Record<string, [string, any, bool
|
|
|
441
451
|
controllers,
|
|
442
452
|
...typedKeysOf(filtered).reduce(
|
|
443
453
|
(prev, cur) => {
|
|
444
|
-
;(prev as any)[cur] = (svcOrFnOrEffect: any, fnOrNone: any) =>
|
|
445
|
-
|
|
454
|
+
;(prev as any)[cur] = (svcOrFnOrEffect: any, fnOrNone: any) => {
|
|
455
|
+
const stack = new Error().stack?.split("\n").slice(2).join("\n")
|
|
456
|
+
return Effect.isEffect(svcOrFnOrEffect)
|
|
446
457
|
? class {
|
|
458
|
+
static stack = stack
|
|
447
459
|
static _tag = "d"
|
|
448
460
|
static handler = () => svcOrFnOrEffect
|
|
449
461
|
}
|
|
450
462
|
: typeof svcOrFnOrEffect === "function"
|
|
451
463
|
? class {
|
|
464
|
+
static stack = stack
|
|
452
465
|
static _tag = "d"
|
|
453
466
|
static handler = (req: any, ctx: any) => svcOrFnOrEffect(req, { ...ctx, Response: rsc[cur].Response })
|
|
454
467
|
}
|
|
455
468
|
: class {
|
|
469
|
+
static stack = stack
|
|
456
470
|
static _tag = "d"
|
|
457
471
|
static handler = matchWithServices(cur)(svcOrFnOrEffect, fnOrNone)
|
|
458
472
|
}
|
|
459
|
-
|
|
460
|
-
|
|
473
|
+
}
|
|
474
|
+
;(prev as any)[(cur as any) + "Raw"] = (svcOrFnOrEffect: any, fnOrNone: any) => {
|
|
475
|
+
const stack = new Error().stack?.split("\n").slice(2).join("\n")
|
|
476
|
+
return Effect.isEffect(svcOrFnOrEffect)
|
|
461
477
|
? class {
|
|
478
|
+
static stack = stack
|
|
462
479
|
static _tag = "raw"
|
|
463
480
|
static handler = () => svcOrFnOrEffect
|
|
464
481
|
}
|
|
465
482
|
: typeof svcOrFnOrEffect === "function"
|
|
466
483
|
? class {
|
|
484
|
+
static stack = stack
|
|
467
485
|
static _tag = "raw"
|
|
468
486
|
static handler = (req: any, ctx: any) => svcOrFnOrEffect(req, { ...ctx, Response: rsc[cur].Response })
|
|
469
487
|
}
|
|
470
488
|
: class {
|
|
489
|
+
static stack = stack
|
|
471
490
|
static _tag = "raw"
|
|
472
491
|
static handler = matchWithServices(cur)(svcOrFnOrEffect, fnOrNone)
|
|
473
492
|
}
|
|
493
|
+
}
|
|
474
494
|
return prev
|
|
475
495
|
},
|
|
476
496
|
{} as
|
|
@@ -516,8 +536,8 @@ export const makeRouter = <CTX, CTXMap extends Record<string, [string, any, bool
|
|
|
516
536
|
: never
|
|
517
537
|
|
|
518
538
|
return r as HttpRouter.HttpRouter<
|
|
519
|
-
|
|
520
|
-
|
|
539
|
+
_ERouter<typeof handlers[keyof typeof handlers]>,
|
|
540
|
+
_RRouter<typeof handlers[keyof typeof handlers]>
|
|
521
541
|
>
|
|
522
542
|
}
|
|
523
543
|
|