Skip to content

Commit 981c4ed

Browse files
authored
Boyscout/middleware again (#277)
* feat: Add custom error classes for enhanced error handling in context provider * fup * bye bye MiddlewareR * feat: Integrate MergedContextProvider and enhance context handling in tests * add tests * tests * changeset
1 parent 8f97d15 commit 981c4ed

4 files changed

Lines changed: 185 additions & 98 deletions

File tree

.changeset/pretty-rice-refuse.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
"@effect-app/infra": patch
3+
---
4+
5+
set proper upperbounds for contexts, add MergedContextProvider, remove MiddlewareR from makeMiddleware

packages/infra/src/api/routing.ts

Lines changed: 10 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -137,8 +137,7 @@ type Match<
137137
Resource extends Record<string, any>,
138138
RequestContextMap extends Record<string, any>,
139139
RT extends RequestType,
140-
Key extends keyof Resource,
141-
MiddlewareR
140+
Key extends keyof Resource
142141
> = {
143142
// note: the defaults of = never prevent the whole router to error (??)
144143
<A extends GetSuccessShape<Resource[Key], RT>, R2 = never, E = never>(
@@ -147,7 +146,7 @@ type Match<
147146
Resource[Key],
148147
RT,
149148
Exclude<
150-
MiddlewareR | Exclude<R2, GetEffectContext<RequestContextMap, Resource[Key]["config"]>>,
149+
Exclude<R2, GetEffectContext<RequestContextMap, Resource[Key]["config"]>>,
151150
HttpRouter.HttpRouter.Provided
152151
>
153152
>
@@ -158,45 +157,42 @@ type Match<
158157
Resource[Key],
159158
RT,
160159
Exclude<
161-
MiddlewareR | Exclude<R2, GetEffectContext<RequestContextMap, Resource[Key]["config"]>>,
160+
Exclude<R2, GetEffectContext<RequestContextMap, Resource[Key]["config"]>>,
162161
HttpRouter.HttpRouter.Provided
163162
>
164163
>
165164
}
166165

167166
export type RouteMatcher<
168167
RequestContextMap extends Record<string, any>,
169-
Resource extends Record<string, any>,
170-
MiddlewareR
168+
Resource extends Record<string, any>
171169
> = {
172170
// use Resource as Key over using Keys, so that the Go To on X.Action remain in tact in Controllers files
173171
/**
174172
* Requires the Type shape
175173
*/
176174
[Key in keyof FilterRequestModules<Resource>]:
177-
& Match<Resource, RequestContextMap, RequestTypes.DECODED, Key, MiddlewareR>
175+
& Match<Resource, RequestContextMap, RequestTypes.DECODED, Key>
178176
& {
179177
success: Resource[Key]["success"]
180178
successRaw: S.SchemaClass<S.Schema.Encoded<Resource[Key]["success"]>>
181179
failure: Resource[Key]["failure"]
182180
/**
183181
* Requires the Encoded shape (e.g directly undecoded from DB, so that we don't do multiple Decode/Encode)
184182
*/
185-
raw: Match<Resource, RequestContextMap, RequestTypes.TYPE, Key, MiddlewareR>
183+
raw: Match<Resource, RequestContextMap, RequestTypes.TYPE, Key>
186184
}
187185
}
188186

189187
export class Router extends HttpRouter.Tag("@effect-app/Rpc")<Router>() {}
190188

191189
export const makeRouter = <
192-
MiddlewareR,
193190
RequestContextMap extends Record<string, RPCContextMap.Any>,
194191
MakeMiddlewareE,
195192
MakeMiddlewareR,
196193
ContextProviderA
197194
>(
198195
middleware: Middleware<
199-
MiddlewareR,
200196
RequestContextMap,
201197
MakeMiddlewareE,
202198
MakeMiddlewareR,
@@ -323,7 +319,7 @@ export const makeRouter = <
323319
})
324320
return prev
325321
},
326-
{} as RouteMatcher<RequestContextMap, Resource, MiddlewareR>
322+
{} as RouteMatcher<RequestContextMap, Resource>
327323
)
328324

329325
const router: AddAction<RequestModules[keyof RequestModules]> = {
@@ -347,8 +343,7 @@ export const makeRouter = <
347343
FilterRequestModules<Resource>[K],
348344
Impl[K] extends { raw: any } ? RequestTypes.TYPE : RequestTypes.DECODED,
349345
Exclude<
350-
| MiddlewareR
351-
| Exclude<
346+
Exclude<
352347
// retrieves context R from the actual implementation of the handler
353348
Impl[K] extends { raw: any } ? Impl[K]["raw"] extends (...args: any[]) => Effect<any, any, infer R> ? R
354349
: Impl[K]["raw"] extends Effect<any, any, infer R> ? R
@@ -499,8 +494,7 @@ export const makeRouter = <
499494
Effect.Success<ReturnType<THandlers[K]["handler"]>>,
500495
| Effect.Error<ReturnType<THandlers[K]["handler"]>>
501496
| GetEffectError<RequestContextMap, Resource[K]["config"]>,
502-
| Exclude<MiddlewareR, ContextProviderA>
503-
| Exclude<
497+
Exclude<
504498
Effect.Context<ReturnType<THandlers[K]["handler"]>>,
505499
ContextProviderA | GetEffectContext<RequestContextMap, Resource[K]["config"]>
506500
>
@@ -823,7 +817,7 @@ export const makeRouter = <
823817
RouterShape<Resource>,
824818
`${ModuleName}Router`,
825819
never,
826-
Exclude<MiddlewareR, HttpRouter.HttpRouter.Provided>
820+
never
827821
> // | Exclude<
828822
// RPCRouteR<
829823
// { [K in keyof Filter<Resource>]: Rpc.Rpc<Resource[K], Effect.Context<ReturnType<THandlers[K]["handler"]>>> }[keyof Filter<Resource>]

0 commit comments

Comments
 (0)