@effect-app/infra 2.74.0 → 2.75.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (42) hide show
  1. package/CHANGELOG.md +11 -0
  2. package/dist/api/layerUtils.d.ts +22 -0
  3. package/dist/api/layerUtils.d.ts.map +1 -0
  4. package/dist/api/layerUtils.js +2 -0
  5. package/dist/api/routing/middleware/ContextProvider.d.ts +41 -0
  6. package/dist/api/routing/middleware/ContextProvider.d.ts.map +1 -0
  7. package/dist/api/routing/middleware/ContextProvider.js +27 -0
  8. package/dist/api/routing/middleware/DynamicMiddleware.d.ts +61 -0
  9. package/dist/api/routing/middleware/DynamicMiddleware.d.ts.map +1 -0
  10. package/dist/api/routing/middleware/DynamicMiddleware.js +45 -0
  11. package/dist/api/routing/{dynamic-middleware.d.ts → middleware/dynamic-middleware.d.ts} +8 -6
  12. package/dist/api/routing/middleware/dynamic-middleware.d.ts.map +1 -0
  13. package/dist/api/routing/middleware/dynamic-middleware.js +39 -0
  14. package/dist/api/routing/middleware/generic-middleware.d.ts +9 -0
  15. package/dist/api/routing/middleware/generic-middleware.d.ts.map +1 -0
  16. package/dist/api/routing/middleware/generic-middleware.js +20 -0
  17. package/dist/api/routing/middleware/middleware.d.ts +23 -0
  18. package/dist/api/routing/middleware/middleware.d.ts.map +1 -0
  19. package/dist/api/routing/middleware/middleware.js +91 -0
  20. package/dist/api/routing/middleware.d.ts +6 -0
  21. package/dist/api/routing/middleware.d.ts.map +1 -0
  22. package/dist/api/routing/middleware.js +8 -0
  23. package/dist/api/routing.d.ts +18 -28
  24. package/dist/api/routing.d.ts.map +1 -1
  25. package/dist/api/routing.js +3 -3
  26. package/package.json +27 -7
  27. package/src/api/layerUtils.ts +34 -0
  28. package/src/api/routing/middleware/ContextProvider.ts +148 -0
  29. package/src/api/routing/middleware/DynamicMiddleware.ts +317 -0
  30. package/src/api/routing/{dynamic-middleware.ts → middleware/dynamic-middleware.ts} +60 -56
  31. package/src/api/routing/middleware/generic-middleware.ts +38 -0
  32. package/src/api/routing/middleware/middleware.ts +120 -0
  33. package/src/api/routing/middleware.ts +7 -0
  34. package/src/api/routing.ts +37 -56
  35. package/test/controller.test.ts +103 -8
  36. package/test/dist/controller.test.d.ts.map +1 -1
  37. package/dist/api/routing/DynamicMiddleware.d.ts +0 -104
  38. package/dist/api/routing/DynamicMiddleware.d.ts.map +0 -1
  39. package/dist/api/routing/DynamicMiddleware.js +0 -122
  40. package/dist/api/routing/dynamic-middleware.d.ts.map +0 -1
  41. package/dist/api/routing/dynamic-middleware.js +0 -39
  42. package/src/api/routing/DynamicMiddleware.ts +0 -527
@@ -4,35 +4,16 @@
4
4
  /* eslint-disable @typescript-eslint/no-explicit-any */
5
5
  import { determineMethod, isCommand } from "@effect-app/infra/api/routing/utils"
6
6
  import { Rpc, RpcGroup, RpcServer } from "@effect/rpc"
7
- import { type Array, Duration, Effect, Layer, type NonEmptyArray, type NonEmptyReadonlyArray, Predicate, Request, S, Schedule, Schema } from "effect-app"
7
+ import { type Array, Duration, Effect, Layer, type NonEmptyArray, Predicate, Request, S, Schedule, Schema } from "effect-app"
8
8
  import type { GetEffectContext, GetEffectError, RPCContextMap } from "effect-app/client/req"
9
9
  import { type HttpHeaders, HttpRouter } from "effect-app/http"
10
10
  import { typedKeysOf, typedValuesOf } from "effect-app/utils"
11
11
  import type { Contravariant } from "effect/Types"
12
12
  import { type YieldWrap } from "effect/Utils"
13
- import { DevMode, type Middleware } from "./routing/DynamicMiddleware.js"
13
+ import { type LayerUtils } from "./layerUtils.js"
14
+ import { DevMode, type Middleware } from "./routing/middleware.js"
14
15
 
15
- export * from "./routing/DynamicMiddleware.js"
16
-
17
- export namespace LayersUtils {
18
- export type GetLayersSuccess<Layers extends ReadonlyArray<Layer.Layer.Any>> = Layers extends
19
- NonEmptyReadonlyArray<Layer.Layer.Any> ? {
20
- [k in keyof Layers]: Layer.Layer.Success<Layers[k]>
21
- }[number]
22
- : never
23
-
24
- export type GetLayersContext<Layers extends ReadonlyArray<Layer.Layer.Any>> = Layers extends
25
- NonEmptyReadonlyArray<Layer.Layer.Any> ? {
26
- [k in keyof Layers]: Layer.Layer.Context<Layers[k]>
27
- }[number]
28
- : never
29
-
30
- export type GetLayersError<Layers extends ReadonlyArray<Layer.Layer.Any>> = Layers extends
31
- NonEmptyReadonlyArray<Layer.Layer.Any> ? {
32
- [k in keyof Layers]: Layer.Layer.Error<Layers[k]>
33
- }[number]
34
- : never
35
- }
16
+ export * from "./routing/middleware.js"
36
17
 
37
18
  // retry just once on optimistic concurrency exceptions
38
19
  const optimisticConcurrencySchedule = Schedule.once.pipe(
@@ -463,10 +444,10 @@ export const makeRouter = <
463
444
  })) as unknown as Layer<
464
445
  { [K in keyof RequestModules]: Rpc.Handler<K> },
465
446
  | Layer.Error<typeof middleware.Default>
466
- | LayersUtils.GetLayersError<MakeDependencies>,
447
+ | LayerUtils.GetLayersError<MakeDependencies>,
467
448
  | RPCRouteR<typeof mapped[keyof typeof mapped]>
468
449
  | Layer.Context<typeof middleware.Default>
469
- | LayersUtils.GetLayersContext<MakeDependencies>
450
+ | LayerUtils.GetLayersContext<MakeDependencies>
470
451
  >
471
452
 
472
453
  return RpcServer
@@ -492,12 +473,12 @@ export const makeRouter = <
492
473
  )
493
474
  ) as (Layer.Layer<
494
475
  Router,
495
- | LayersUtils.GetLayersError<MakeDependencies>
476
+ | LayerUtils.GetLayersError<MakeDependencies>
496
477
  | MakeE
497
478
  | Layer.Error<typeof middleware.Default>,
498
- | LayersUtils.GetLayersContext<MakeDependencies>
479
+ | LayerUtils.GetLayersContext<MakeDependencies>
499
480
  | Layer.Context<typeof middleware.Default>
500
- | Exclude<MakeR, LayersUtils.GetLayersSuccess<MakeDependencies>>
481
+ | Exclude<MakeR, LayerUtils.GetLayersSuccess<MakeDependencies>>
501
482
  >)
502
483
 
503
484
  // Effect.Effect<HttpRouter.HttpRouter<unknown, HttpRouter.HttpRouter.DefaultServices>, never, UserRouter>
@@ -515,7 +496,7 @@ export const makeRouter = <
515
496
  dependencies: Array<Layer.Layer.Any>
516
497
  effect: (match: typeof router3) => Generator<
517
498
  YieldWrap<
518
- Effect<any, any, Make["strict"] extends false ? any : LayersUtils.GetLayersSuccess<Make["dependencies"]>>
499
+ Effect<any, any, Make["strict"] extends false ? any : LayerUtils.GetLayersSuccess<Make["dependencies"]>>
519
500
  >,
520
501
  { [K in keyof FilterRequestModules<Resource>]: AnyHandler<Resource[K]> },
521
502
  any
@@ -533,13 +514,13 @@ export const makeRouter = <
533
514
  routes: Layer.Layer<
534
515
  RouterShape<Resource>,
535
516
  | MakeErrors<Make>
536
- | LayersUtils.GetLayersError<Make["dependencies"]>
517
+ | LayerUtils.GetLayersError<Make["dependencies"]>
537
518
  | Layer.Error<typeof middleware.Default>,
538
- | LayersUtils.GetLayersContext<Make["dependencies"]>
519
+ | LayerUtils.GetLayersContext<Make["dependencies"]>
539
520
  | Layer.Context<typeof middleware.Default>
540
521
  | Exclude<
541
522
  MakeContext<Make>,
542
- LayersUtils.GetLayersSuccess<Make["dependencies"]>
523
+ LayerUtils.GetLayersSuccess<Make["dependencies"]>
543
524
  >
544
525
  >
545
526
 
@@ -552,7 +533,7 @@ export const makeRouter = <
552
533
  effect: Effect<
553
534
  { [K in keyof FilterRequestModules<Resource>]: AnyHandler<Resource[K]> },
554
535
  any,
555
- Make["strict"] extends false ? any : LayersUtils.GetLayersSuccess<Make["dependencies"]>
536
+ Make["strict"] extends false ? any : LayerUtils.GetLayersSuccess<Make["dependencies"]>
556
537
  >
557
538
  strict?: boolean
558
539
  /** @deprecated */
@@ -566,13 +547,13 @@ export const makeRouter = <
566
547
  routes: Layer.Layer<
567
548
  RouterShape<Resource>,
568
549
  | MakeErrors<Make>
569
- | LayersUtils.GetLayersError<Make["dependencies"]>
550
+ | LayerUtils.GetLayersError<Make["dependencies"]>
570
551
  | Layer.Error<typeof middleware.Default>,
571
- | LayersUtils.GetLayersContext<Make["dependencies"]>
552
+ | LayerUtils.GetLayersContext<Make["dependencies"]>
572
553
  | Layer.Context<typeof middleware.Default>
573
554
  | Exclude<
574
555
  MakeContext<Make>,
575
- LayersUtils.GetLayersSuccess<Make["dependencies"]>
556
+ LayerUtils.GetLayersSuccess<Make["dependencies"]>
576
557
  >
577
558
  >
578
559
 
@@ -585,7 +566,7 @@ export const makeRouter = <
585
566
  effect: Effect<
586
567
  { [K in keyof FilterRequestModules<Resource>]: AnyHandler<Resource[K]> },
587
568
  any,
588
- Make["strict"] extends false ? any : LayersUtils.GetLayersSuccess<Make["dependencies"]>
569
+ Make["strict"] extends false ? any : LayerUtils.GetLayersSuccess<Make["dependencies"]>
589
570
  >
590
571
  strict?: boolean
591
572
  /** @deprecated */
@@ -599,13 +580,13 @@ export const makeRouter = <
599
580
  routes: Layer.Layer<
600
581
  RouterShape<Resource>,
601
582
  | MakeErrors<Make>
602
- | LayersUtils.GetLayersError<Make["dependencies"]>
583
+ | LayerUtils.GetLayersError<Make["dependencies"]>
603
584
  | Layer.Error<typeof middleware.Default>,
604
- | LayersUtils.GetLayersContext<Make["dependencies"]>
585
+ | LayerUtils.GetLayersContext<Make["dependencies"]>
605
586
  | Layer.Context<typeof middleware.Default>
606
587
  | Exclude<
607
588
  MakeContext<Make>,
608
- LayersUtils.GetLayersSuccess<Make["dependencies"]>
589
+ LayerUtils.GetLayersSuccess<Make["dependencies"]>
609
590
  >
610
591
  >
611
592
 
@@ -618,7 +599,7 @@ export const makeRouter = <
618
599
  effect: Effect<
619
600
  { [K in keyof FilterRequestModules<Resource>]: AnyHandler<Resource[K]> },
620
601
  any,
621
- Make["strict"] extends false ? any : LayersUtils.GetLayersSuccess<Make["dependencies"]>
602
+ Make["strict"] extends false ? any : LayerUtils.GetLayersSuccess<Make["dependencies"]>
622
603
  >
623
604
  strict?: boolean
624
605
  /** @deprecated */
@@ -632,13 +613,13 @@ export const makeRouter = <
632
613
  routes: Layer.Layer<
633
614
  RouterShape<Resource>,
634
615
  | MakeErrors<Make>
635
- | LayersUtils.GetLayersError<Make["dependencies"]>
616
+ | LayerUtils.GetLayersError<Make["dependencies"]>
636
617
  | Layer.Error<typeof middleware.Default>,
637
- | LayersUtils.GetLayersContext<Make["dependencies"]>
618
+ | LayerUtils.GetLayersContext<Make["dependencies"]>
638
619
  | Layer.Context<typeof middleware.Default>
639
620
  | Exclude<
640
621
  MakeContext<Make>,
641
- LayersUtils.GetLayersSuccess<Make["dependencies"]>
622
+ LayerUtils.GetLayersSuccess<Make["dependencies"]>
642
623
  >
643
624
  >
644
625
 
@@ -651,7 +632,7 @@ export const makeRouter = <
651
632
  effect: Effect<
652
633
  { [K in keyof FilterRequestModules<Resource>]: AnyHandler<Resource[K]> },
653
634
  any,
654
- LayersUtils.GetLayersSuccess<Make["dependencies"]>
635
+ LayerUtils.GetLayersSuccess<Make["dependencies"]>
655
636
  >
656
637
  strict?: boolean
657
638
  /** @deprecated */
@@ -665,13 +646,13 @@ export const makeRouter = <
665
646
  routes: Layer.Layer<
666
647
  RouterShape<Resource>,
667
648
  | MakeErrors<Make>
668
- | LayersUtils.GetLayersError<Make["dependencies"]>
649
+ | LayerUtils.GetLayersError<Make["dependencies"]>
669
650
  | Layer.Error<typeof middleware.Default>,
670
- | LayersUtils.GetLayersContext<Make["dependencies"]>
651
+ | LayerUtils.GetLayersContext<Make["dependencies"]>
671
652
  | Layer.Context<typeof middleware.Default>
672
653
  | Exclude<
673
654
  MakeContext<Make>,
674
- LayersUtils.GetLayersSuccess<Make["dependencies"]>
655
+ LayerUtils.GetLayersSuccess<Make["dependencies"]>
675
656
  >
676
657
  >
677
658
 
@@ -684,7 +665,7 @@ export const makeRouter = <
684
665
  effect: Effect<
685
666
  { [K in keyof FilterRequestModules<Resource>]: AnyHandler<Resource[K]> },
686
667
  any,
687
- LayersUtils.GetLayersSuccess<Make["dependencies"]>
668
+ LayerUtils.GetLayersSuccess<Make["dependencies"]>
688
669
  >
689
670
  strict?: boolean
690
671
  }
@@ -696,13 +677,13 @@ export const makeRouter = <
696
677
  routes: Layer.Layer<
697
678
  RouterShape<Resource>,
698
679
  | MakeErrors<Make>
699
- | LayersUtils.GetLayersError<Make["dependencies"]>
680
+ | LayerUtils.GetLayersError<Make["dependencies"]>
700
681
  | Layer.Error<typeof middleware.Default>,
701
- | LayersUtils.GetLayersContext<Make["dependencies"]>
682
+ | LayerUtils.GetLayersContext<Make["dependencies"]>
702
683
  | Layer.Context<typeof middleware.Default>
703
684
  | Exclude<
704
685
  MakeContext<Make>,
705
- LayersUtils.GetLayersSuccess<Make["dependencies"]>
686
+ LayerUtils.GetLayersSuccess<Make["dependencies"]>
706
687
  >
707
688
  >
708
689
 
@@ -714,7 +695,7 @@ export const makeRouter = <
714
695
  dependencies: Array<Layer.Layer.Any>
715
696
  effect: (match: typeof router3) => Generator<
716
697
  YieldWrap<
717
- Effect<any, any, Make["strict"] extends false ? any : LayersUtils.GetLayersSuccess<Make["dependencies"]>>
698
+ Effect<any, any, Make["strict"] extends false ? any : LayerUtils.GetLayersSuccess<Make["dependencies"]>>
718
699
  >,
719
700
  { [K in keyof FilterRequestModules<Resource>]: AnyHandler<Resource[K]> },
720
701
  any
@@ -730,13 +711,13 @@ export const makeRouter = <
730
711
  routes: Layer.Layer<
731
712
  RouterShape<Resource>,
732
713
  | MakeErrors<Make>
733
- | LayersUtils.GetLayersError<Make["dependencies"]>
714
+ | LayerUtils.GetLayersError<Make["dependencies"]>
734
715
  | Layer.Error<typeof middleware.Default>,
735
- | LayersUtils.GetLayersContext<Make["dependencies"]>
716
+ | LayerUtils.GetLayersContext<Make["dependencies"]>
736
717
  | Layer.Context<typeof middleware.Default>
737
718
  | Exclude<
738
719
  MakeContext<Make>,
739
- LayersUtils.GetLayersSuccess<Make["dependencies"]>
720
+ LayerUtils.GetLayersSuccess<Make["dependencies"]>
740
721
  >
741
722
  >
742
723
 
@@ -5,9 +5,9 @@ import type { RequestContext } from "@effect-app/infra/RequestContext"
5
5
  import { expect, expectTypeOf, it } from "@effect/vitest"
6
6
  import { type Array, Context, Effect, Layer, Option, S } from "effect-app"
7
7
  import { InvalidStateError, makeRpcClient, type RPCContextMap, UnauthorizedError } from "effect-app/client"
8
- import { HttpServerRequest } from "effect-app/http"
8
+ import { type HttpHeaders, type HttpRouter, HttpServerRequest } from "effect-app/http"
9
9
  import { Class, TaggedError } from "effect-app/Schema"
10
- import { ContextProvider, makeMiddleware, mergeContextProviders, MergedContextProvider } from "../src/api/routing/DynamicMiddleware.js"
10
+ import { ContextProvider, DefaultGenericMiddlewares, makeMiddleware, mergeContextProviders, MergedContextProvider } from "../src/api/routing/middleware.js"
11
11
  import { sort } from "../src/api/routing/tsort.js"
12
12
  import { SomeService } from "./query.test.js"
13
13
 
@@ -154,19 +154,32 @@ class Test extends Effect.Service<Test>()("Test", {
154
154
  })
155
155
  }) {}
156
156
 
157
+ export class MiddlewareLogger2 extends Effect.Service<MiddlewareLogger2>()("MiddlewareLogger2", {
158
+ effect: Effect.gen(function*() {
159
+ return <A, E>(
160
+ handle: (input: any, headers: HttpHeaders.Headers) => Effect.Effect<A, E, HttpRouter.HttpRouter.Provided>,
161
+ _moduleName: string
162
+ ) =>
163
+ Effect.fnUntraced(function*(input: any, headers: HttpHeaders.Headers) {
164
+ return yield* handle(input, headers)
165
+ })
166
+ })
167
+ }) {}
168
+
157
169
  // TODO: eventually it might be nice if we have total control over order somehow..
158
170
  // [ AddRequestNameToSpanContext, RequestCacheContext, UninterruptibleMiddleware, Dynamic(or individual, AllowAnonymous, RequireRoles, Test - or whichever order) ]
159
171
  const middleware = makeMiddleware<RequestContextMap>()({
160
- dependencies: [Layer.effect(Str2, Str)],
161
172
  // TODO: I guess it makes sense to support just passing array of context providers too, like dynamicMiddlewares?
162
173
  contextProvider: MergedContextProvider(RequestCacheContext, MyContextProvider),
174
+ genericMiddlewares: [...DefaultGenericMiddlewares, MiddlewareLogger2],
163
175
  // or is the better api to use constructors outside, like how contextProvider is used now?
164
176
  dynamicMiddlewares: {
165
177
  requireRoles: RequireRoles,
166
178
  allowAnonymous: AllowAnonymous,
167
179
  test: Test
168
180
  },
169
- // TODO: 0..n of these generic middlewares?
181
+ // // TODO: 0..n of these generic middlewares?
182
+ dependencies: [Layer.effect(Str2, Str)],
170
183
  execute: (maker) =>
171
184
  Effect.gen(function*() {
172
185
  return maker(
@@ -182,15 +195,23 @@ const middleware = makeMiddleware<RequestContextMap>()({
182
195
  yield* HttpServerRequest.HttpServerRequest // provided by HttpRouter.HttpRouter.Provided
183
196
 
184
197
  return yield* handler(req, headers)
185
- .pipe(
186
- // TODO: make this depend on query/command, and consider if middleware also should be affected. right now it's not.
187
- Effect.uninterruptible
188
- )
189
198
  })
190
199
  )
191
200
  })
192
201
  })
193
202
 
203
+ const middleware2 = makeMiddleware<RequestContextMap>()({
204
+ // TODO: I guess it makes sense to support just passing array of context providers too, like dynamicMiddlewares?
205
+ contextProvider: MergedContextProvider(RequestCacheContext, MyContextProvider),
206
+ genericMiddlewares: [...DefaultGenericMiddlewares, MiddlewareLogger2],
207
+ // or is the better api to use constructors outside, like how contextProvider is used now?
208
+ dynamicMiddlewares: {
209
+ requireRoles: RequireRoles,
210
+ allowAnonymous: AllowAnonymous,
211
+ test: Test
212
+ }
213
+ })
214
+
194
215
  export type RequestConfig = {
195
216
  /** Disable authentication requirement */
196
217
  allowAnonymous?: true
@@ -266,6 +287,8 @@ export class SomethingService2 extends Effect.Service<SomethingService2>()("Some
266
287
 
267
288
  export const { Router, matchAll, matchFor } = makeRouter(middleware, true)
268
289
 
290
+ export const r2 = makeRouter(middleware2, true)
291
+
269
292
  const router = Router(Something)({
270
293
  dependencies: [
271
294
  SomethingRepo.Default,
@@ -344,3 +367,75 @@ expectTypeOf({} as MakeErrors<typeof router.make>).toEqualTypeOf<InvalidStateErr
344
367
  expectTypeOf({} as makeContext).toEqualTypeOf<
345
368
  SomethingService | SomethingRepo | SomethingService2
346
369
  >()
370
+
371
+ const router2 = r2.Router(Something)({
372
+ dependencies: [
373
+ SomethingRepo.Default,
374
+ SomethingService.Default,
375
+ SomethingService2.Default
376
+ ],
377
+ *effect(match) {
378
+ const repo = yield* SomethingRepo
379
+ const smth = yield* SomethingService
380
+ const smth2 = yield* SomethingService2
381
+
382
+ // this gets catched in 'routes' type
383
+ if (Math.random() > 0.5) {
384
+ return yield* new InvalidStateError("ciao")
385
+ }
386
+
387
+ console.log({ repo, smth, smth2 })
388
+
389
+ return match({
390
+ Eff: () =>
391
+ Effect
392
+ .gen(function*() {
393
+ const some = yield* Some
394
+ return yield* Effect.logInfo("Some", some)
395
+ }),
396
+
397
+ *Gen() {
398
+ const some = yield* Some
399
+ return yield* Effect.logInfo("Some", some)
400
+ },
401
+ *GetSomething(req) {
402
+ console.log(req.id)
403
+
404
+ const _b = yield* Effect.succeed(false)
405
+ if (_b) {
406
+ // expected errors here because RequestError is not a valid error for controllers
407
+ // yield* new RequestError(1 as any)
408
+ // return yield* new RequestError(1 as any)
409
+ }
410
+ if (Math.random() > 0.5) {
411
+ return yield* Effect.succeed("12")
412
+ }
413
+ if (!_b) {
414
+ return yield* new UnauthorizedError()
415
+ } else {
416
+ // expected an error here because a boolean is not a string
417
+ // return _b
418
+ return "12"
419
+ }
420
+ },
421
+ DoSomething: {
422
+ *raw() {
423
+ return yield* Effect.succeed(undefined)
424
+ }
425
+ },
426
+ GetSomething2: {
427
+ raw: Some.use(() => Effect.succeed("12"))
428
+ }
429
+ })
430
+ }
431
+ })
432
+
433
+ // eslint-disable-next-line unused-imports/no-unused-vars
434
+ const matched2 = matchAll({ router: router2 })
435
+ expectTypeOf({} as Layer.Context<typeof matched2>).toEqualTypeOf<SomeService>()
436
+
437
+ type makeContext2 = MakeContext<typeof router2.make>
438
+ expectTypeOf({} as MakeErrors<typeof router2.make>).toEqualTypeOf<InvalidStateError>()
439
+ expectTypeOf({} as makeContext2).toEqualTypeOf<
440
+ SomethingService | SomethingRepo | SomethingService2
441
+ >()
@@ -1 +1 @@
1
- {"version":3,"file":"controller.test.d.ts","sourceRoot":"","sources":["../controller.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"controller.test.d.ts","sourceRoot":"","sources":["../controller.test.ts"],"names":[],"mappings":"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"}
@@ -1,104 +0,0 @@
1
- import { Array, Context, Effect, Layer, type NonEmptyArray, type Request, type S, type Scope } from "effect-app";
2
- import type { GetEffectContext, RPCContextMap } from "effect-app/client/req";
3
- import { HttpHeaders, type HttpRouter, HttpServerRequest } from "effect-app/http";
4
- import type * as EffectRequest from "effect/Request";
5
- import { type LayersUtils } from "../routing.js";
6
- import { type AnyContextWithLayer } from "./dynamic-middleware.js";
7
- type GetContext<T> = T extends Context.Context<infer Y> ? Y : never;
8
- export type MakeRPCHandlerFactory<RequestContextMap extends Record<string, RPCContextMap.Any>, MiddlewareR> = <T extends {
9
- config?: Partial<Record<keyof RequestContextMap, any>>;
10
- }, Req extends S.TaggedRequest.All, HandlerR>(schema: T & S.Schema<Req, any, never>, handler: (request: Req, headers: any) => Effect.Effect<EffectRequest.Request.Success<Req>, EffectRequest.Request.Error<Req>, Exclude<HandlerR, GetEffectContext<RequestContextMap, (T & S.Schema<Req, any, never>)["config"]>>>, moduleName: string) => (req: Req, headers: any) => Effect.Effect<Request.Request.Success<Req>, Request.Request.Error<Req> | RequestContextMapErrors<RequestContextMap>, MiddlewareR | Exclude<HandlerR, GetEffectContext<RequestContextMap, (T & S.Schema<Req, any, never>)["config"]>>>;
11
- export type RPCHandlerFactory<RequestContextMap extends Record<string, RPCContextMap.Any>, ContextProviderA> = <T extends {
12
- config?: Partial<Record<keyof RequestContextMap, any>>;
13
- }, Req extends S.TaggedRequest.All, HandlerR>(schema: T & S.Schema<Req, any, never>, handler: (request: Req, headers: any) => Effect.Effect<EffectRequest.Request.Success<Req>, EffectRequest.Request.Error<Req>, HandlerR>, moduleName: string) => (req: Req, headers: any) => Effect.Effect<Request.Request.Success<Req>, Request.Request.Error<Req> | RequestContextMapErrors<RequestContextMap>, HttpRouter.HttpRouter.Provided | Exclude<Exclude<HandlerR, GetEffectContext<RequestContextMap, (T & S.Schema<Req, any, never>)["config"]>>, ContextProviderA>>;
14
- export type ContextProviderShape<ContextProviderA, ContextProviderR extends HttpRouter.HttpRouter.Provided> = Effect<Context.Context<ContextProviderA>, never, // no errors are allowed
15
- ContextProviderR>;
16
- export interface ContextProviderId {
17
- _tag: "ContextProvider";
18
- }
19
- type RequestContextMapProvider<RequestContextMap extends Record<string, RPCContextMap.Any>> = {
20
- [K in keyof RequestContextMap]: AnyContextWithLayer<{
21
- [K in keyof RequestContextMap]?: RequestContextMap[K]["contextActivation"];
22
- }, RequestContextMap[K]["service"], S.Schema.Type<RequestContextMap[K]["error"]>>;
23
- };
24
- export interface MiddlewareMake<RequestContextMap extends Record<string, RPCContextMap.Any>, // what services will the middleware provide dynamically to the handler, or raise errors.
25
- MakeMiddlewareE, // what the middleware construction can fail with
26
- MakeMiddlewareR, // what the middleware requires to be constructed
27
- MiddlewareDependencies extends NonEmptyArray<Layer.Layer.Any>, // layers provided for the middleware to be constructed
28
- ContextProviderA, // what the context provider provides
29
- ContextProviderR extends HttpRouter.HttpRouter.Provided, // what the context provider requires
30
- MakeContextProviderE, // what the context provider construction can fail with
31
- MakeContextProviderR, // what the context provider construction requires
32
- TI extends RequestContextMapProvider<RequestContextMap>> {
33
- dependencies?: MiddlewareDependencies;
34
- dynamicMiddlewares: TI;
35
- contextProvider: Context.Tag<ContextProviderId, ContextProviderShape<ContextProviderA, ContextProviderR>> & {
36
- Default: Layer.Layer<ContextProviderId, MakeContextProviderE, MakeContextProviderR>;
37
- };
38
- execute: (maker: (cb: MakeRPCHandlerFactory<RequestContextMap, ContextProviderA | HttpRouter.HttpRouter.Provided>) => MakeRPCHandlerFactory<RequestContextMap, ContextProviderA | HttpRouter.HttpRouter.Provided>) => Effect<MakeRPCHandlerFactory<RequestContextMap, ContextProviderA | HttpRouter.HttpRouter.Provided>, MakeMiddlewareE, MakeMiddlewareR | Scope>;
39
- }
40
- export declare const mergeContextProviders: <TDeps extends Array.NonEmptyReadonlyArray<(Context.Tag<any, Effect<Context.Context<any>, never, any> & {
41
- _tag: any;
42
- }> | Context.Tag<any, Effect<Context.Context<any>, never, never> & {
43
- _tag: any;
44
- }>) & {
45
- new (...args: any[]): any;
46
- Default: Layer.Layer<Effect<Context.Context<any>> & {
47
- _tag: any;
48
- }, any, any>;
49
- }>>(...deps: { [K in keyof TDeps]: TDeps[K]["Service"] extends Effect<Context.Context<any>, never, HttpRouter.HttpRouter.Provided> ? TDeps[K] : `HttpRouter.HttpRouter.Provided are the only requirements ${TDeps[K]["Service"]["_tag"]}'s returned effect can have`; }) => {
50
- dependencies: { [K in keyof TDeps]: TDeps[K]["Default"]; };
51
- effect: Effect.Effect<Effect.Effect<Context.Context<GetContext<Effect.Success<InstanceType<TDeps[number]>>>>, never, Effect.Context<InstanceType<TDeps[number]>>>, LayersUtils.GetLayersError<{ [K in keyof TDeps]: TDeps[K]["Default"]; }>, LayersUtils.GetLayersSuccess<{ [K in keyof TDeps]: TDeps[K]["Default"]; }>>;
52
- };
53
- export interface MiddlewareMakerId {
54
- _tag: "MiddlewareMaker";
55
- }
56
- export declare const ContextProvider: <ContextProviderA, MakeContextProviderE, MakeContextProviderR, ContextProviderR extends HttpRouter.HttpRouter.Provided, Dependencies extends NonEmptyArray<Layer.Layer.Any>>(input: {
57
- effect: Effect<Effect<ContextProviderA, never, ContextProviderR>, MakeContextProviderE, MakeContextProviderR | Scope>;
58
- dependencies?: Dependencies;
59
- }) => Context.Tag<ContextProviderId, Effect<ContextProviderA, never, ContextProviderR>> & {
60
- Default: Layer.Layer<ContextProviderId, MakeContextProviderE | LayersUtils.GetLayersError<Dependencies>, Exclude<MakeContextProviderR, LayersUtils.GetLayersSuccess<Dependencies>> | LayersUtils.GetLayersContext<Dependencies>>;
61
- };
62
- export declare const MergedContextProvider: <TDeps extends Array.NonEmptyReadonlyArray<(Context.Tag<any, Effect<Context.Context<any>, never, any> & {
63
- _tag: any;
64
- }> | Context.Tag<any, Effect<Context.Context<any>, never, never> & {
65
- _tag: any;
66
- }>) & {
67
- new (...args: any[]): any;
68
- Default: Layer.Layer<Effect<Context.Context<any>> & {
69
- _tag: any;
70
- }, any, any>;
71
- }>>(...deps: { [K in keyof TDeps]: TDeps[K]["Service"] extends Effect<Context.Context<any>, never, HttpRouter.HttpRouter.Provided> ? TDeps[K] : `HttpRouter.HttpRouter.Provided are the only requirements ${TDeps[K]["Service"]["_tag"]}'s returned effect can have`; }) => Context.Tag<ContextProviderId, Effect.Effect<Context.Context<GetContext<Effect.Success<InstanceType<TDeps[number]>>>>, never, Effect.Context<InstanceType<TDeps[number]>>>> & {
72
- Default: Layer.Layer<ContextProviderId, LayersUtils.GetLayersError<{ [K in keyof TDeps]: TDeps[K]["Default"]; }>, Exclude<InstanceType<TDeps[number]>, LayersUtils.GetLayersSuccess<{ [K in keyof TDeps]: TDeps[K]["Default"]; }>> | LayersUtils.GetLayersContext<{ [K in keyof TDeps]: TDeps[K]["Default"]; }>>;
73
- };
74
- export declare const EmptyContextProvider: Context.Tag<ContextProviderId, Effect<Context.Context<never>, never, never>> & {
75
- Default: Layer.Layer<ContextProviderId, never, never>;
76
- };
77
- export type Middleware<RequestContextMap extends Record<string, RPCContextMap.Any>, // what services will the middlware provide dynamically to the handler, or raise errors.
78
- MakeMiddlewareE, // what the middleware construction can fail with
79
- MakeMiddlewareR, // what the middlware requires to be constructed
80
- ContextProviderA> = Context.Tag<MiddlewareMakerId, MiddlewareMakerId & {
81
- effect: RPCHandlerFactory<RequestContextMap, ContextProviderA>;
82
- }> & {
83
- Default: Layer.Layer<MiddlewareMakerId, MakeMiddlewareE, MakeMiddlewareR>;
84
- };
85
- export type RequestContextMapErrors<RequestContextMap extends Record<string, RPCContextMap.Any>> = S.Schema.Type<RequestContextMap[keyof RequestContextMap]["error"]>;
86
- declare const DevMode_base: Context.ReferenceClass<DevMode, "DevMode", boolean>;
87
- export declare class DevMode extends DevMode_base {
88
- }
89
- export declare const requestMiddleware: <A, E, R>(handle: (input: any, headers: HttpHeaders.Headers) => Effect.Effect<A, E, R>, moduleName: string) => (input: any, rpcHeaders: HttpHeaders.Headers) => Effect.Effect<A, E, HttpServerRequest.HttpServerRequest | R>;
90
- export declare const makeMiddleware: <RequestContextMap extends Record<string, RPCContextMap.Any>>() => <MakeMiddlewareE, // what the middleware construction can fail with
91
- MakeMiddlewareR, // what the middlware requires to be constructed
92
- MiddlewareDependencies extends NonEmptyArray<Layer.Layer.Any>, // layers provided for the middlware to be constructed
93
- ContextProviderA, // what the context provider provides
94
- ContextProviderR extends HttpRouter.HttpRouter.Provided, // what the context provider requires
95
- MakeContextProviderE, // what the context provider construction can fail with
96
- MakeContextProviderR, // what the context provider construction requires
97
- TI extends RequestContextMapProvider<RequestContextMap>>(make: MiddlewareMake<RequestContextMap, MakeMiddlewareE, MakeMiddlewareR, MiddlewareDependencies, ContextProviderA, ContextProviderR, MakeContextProviderE, MakeContextProviderR, TI>) => Context.Tag<MiddlewareMakerId, {
98
- effect: RPCHandlerFactory<RequestContextMap, ContextProviderA>;
99
- _tag: "MiddlewareMaker";
100
- }> & {
101
- Default: Layer.Layer<MiddlewareMakerId, MakeMiddlewareE | MakeContextProviderE, MakeContextProviderR | LayersUtils.GetLayersContext<MiddlewareDependencies> | Exclude<MakeMiddlewareR, LayersUtils.GetLayersSuccess<MiddlewareDependencies>>>;
102
- };
103
- export {};
104
- //# sourceMappingURL=DynamicMiddleware.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"DynamicMiddleware.d.ts","sourceRoot":"","sources":["../../../src/api/routing/DynamicMiddleware.ts"],"names":[],"mappings":"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"}