@effect-app/infra 2.17.0 → 2.19.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.
@@ -14,6 +14,7 @@ import type { GetEffectContext, RPCContextMap } from "effect-app/client/req"
14
14
  import type { HttpServerError } from "effect-app/http"
15
15
  import { HttpRouter, HttpServerRequest, HttpServerResponse } from "effect-app/http"
16
16
  import { pretty, typedKeysOf, typedValuesOf } from "effect-app/utils"
17
+ import type { Contravariant } from "effect/Types"
17
18
  import { logError, reportError } from "../errorReporter.js"
18
19
  import { InfraLogger } from "../logger.js"
19
20
  import type { Middleware } from "./routing/DynamicMiddleware.js"
@@ -314,7 +315,7 @@ export const makeRouter = <
314
315
  TLayers extends NonEmptyReadonlyArray<Layer.Layer.Any> | never[]
315
316
  >(
316
317
  layers: TLayers,
317
- make: (requests: typeof items) => Effect<THandlers, E, R>
318
+ make: Effect<THandlers, E, R>
318
319
  ) => {
319
320
  type ProvidedLayers =
320
321
  | { [k in keyof Layers]: Layer.Layer.Success<Layers[k]> }[number]
@@ -335,7 +336,7 @@ export const makeRouter = <
335
336
 
336
337
  const layer = r.use((router) =>
337
338
  Effect.gen(function*() {
338
- const controllers = yield* make(items)
339
+ const controllers = yield* make
339
340
  const rpc = yield* makeRpc(middleware)
340
341
 
341
342
  // return make.pipe(Effect.map((c) => controllers(c, layers)))
@@ -470,23 +471,57 @@ export const makeRouter = <
470
471
 
471
472
  const effect: {
472
473
  // Multiple times duplicated the "good" overload, so that errors will only mention the last overload when failing
474
+ // <
475
+ // E,
476
+ // R,
477
+ // Make extends (
478
+ // requests: RouteMatcher<CTXMap, Rsc, Context>
479
+ // ) => Effect<
480
+ // { [K in keyof Filter<Rsc>]: AHandler<Rsc[K]> },
481
+ // any,
482
+ // Strict extends true ? GetSuccess<MakeLayers["dependencies"]> : any
483
+ // >,
484
+ // THandlers extends { [K in keyof Filter<Rsc>]: AHandler<Rsc[K]> },
485
+ // MakeLayers extends { dependencies: NonEmptyReadonlyArray<Layer.Layer.Any> | never[] },
486
+ // Strict extends boolean = true
487
+ // >(
488
+ // layers: MakeLayers,
489
+ // make: Make & ((requests: RouteMatcher<CTXMap, Rsc, Context>) => Effect<THandlers, E, R>),
490
+ // strict?: Strict
491
+ // ): {
492
+ // moduleName: ModuleName
493
+ // Router: HttpRouter.HttpRouter.TagClass<
494
+ // RouterShape<Rsc>,
495
+ // `${ModuleName}Router`,
496
+ // never,
497
+ // | Exclude<Context, HttpRouter.HttpRouter.Provided>
498
+ // | Exclude<
499
+ // RPCRouteR<
500
+ // { [K in keyof Filter<Rsc>]: Rpc.Rpc<Rsc[K], _R<ReturnType<THandlers[K]["handler"]>>> }[keyof Filter<Rsc>]
501
+ // >,
502
+ // HttpRouter.HttpRouter.Provided
503
+ // >
504
+ // >
505
+ // routes: Layer.Layer<
506
+ // RouterShape<Rsc>,
507
+ // E | GetError<MakeLayers["dependencies"]>,
508
+ // | GetContext<MakeLayers["dependencies"]>
509
+ // // | GetContext<Layers> // elsewhere provided
510
+ // | Exclude<R | RMW, GetSuccess<MakeLayers["dependencies"]> | GetSuccess<Layers>>
511
+ // >
512
+ // }
473
513
  <
474
- E,
475
- R,
476
- Make extends (
477
- requests: RouteMatcher<CTXMap, Rsc, Context>
478
- ) => Effect<
479
- { [K in keyof Filter<Rsc>]: AHandler<Rsc[K]> },
480
- any,
481
- Strict extends true ? GetSuccess<TLayers> : any
482
- >,
483
- THandlers extends { [K in keyof Filter<Rsc>]: AHandler<Rsc[K]> },
484
- TLayers extends NonEmptyReadonlyArray<Layer.Layer.Any> | never[],
485
- Strict extends boolean = true
514
+ const Make extends {
515
+ dependencies: Array<Layer.Layer.Any>
516
+ effect: Effect<
517
+ { [K in keyof Filter<Rsc>]: AHandler<Rsc[K]> },
518
+ any,
519
+ Make["strict"] extends false ? any : GetSuccess<Make["dependencies"]>
520
+ >
521
+ strict?: boolean
522
+ }
486
523
  >(
487
- layers: TLayers,
488
- make: Make & ((requests: RouteMatcher<CTXMap, Rsc, Context>) => Effect<THandlers, E, R>),
489
- strict?: Strict
524
+ make: Make
490
525
  ): {
491
526
  moduleName: ModuleName
492
527
  Router: HttpRouter.HttpRouter.TagClass<
@@ -496,36 +531,33 @@ export const makeRouter = <
496
531
  | Exclude<Context, HttpRouter.HttpRouter.Provided>
497
532
  | Exclude<
498
533
  RPCRouteR<
499
- { [K in keyof Filter<Rsc>]: Rpc.Rpc<Rsc[K], _R<ReturnType<THandlers[K]["handler"]>>> }[keyof Filter<Rsc>]
534
+ {
535
+ [K in keyof Filter<Rsc>]: Rpc.Rpc<Rsc[K], _R<ReturnType<MakeHandlers<Make, Filter<Rsc>>[K]["handler"]>>>
536
+ }[keyof Filter<Rsc>]
500
537
  >,
501
538
  HttpRouter.HttpRouter.Provided
502
539
  >
503
540
  >
504
541
  routes: Layer.Layer<
505
542
  RouterShape<Rsc>,
506
- E | GetError<TLayers>,
507
- | GetContext<TLayers>
543
+ MakeErrors<Make> | GetError<Make["dependencies"]>,
544
+ | GetContext<Make["dependencies"]>
508
545
  // | GetContext<Layers> // elsewhere provided
509
- | Exclude<R | RMW, GetSuccess<TLayers> | GetSuccess<Layers>>
546
+ | Exclude<MakeContext<Make> | RMW, GetSuccess<Make["dependencies"]> | GetSuccess<Layers>>
510
547
  >
511
548
  }
512
549
  <
513
- E,
514
- R,
515
- Make extends (
516
- requests: RouteMatcher<CTXMap, Rsc, Context>
517
- ) => Effect<
518
- { [K in keyof Filter<Rsc>]: AHandler<Rsc[K]> },
519
- any,
520
- Strict extends true ? GetSuccess<TLayers> : any
521
- >,
522
- THandlers extends { [K in keyof Filter<Rsc>]: AHandler<Rsc[K]> },
523
- TLayers extends NonEmptyReadonlyArray<Layer.Layer.Any> | never[],
524
- Strict extends boolean = true
550
+ const Make extends {
551
+ dependencies: Array<Layer.Layer.Any>
552
+ effect: Effect<
553
+ { [K in keyof Filter<Rsc>]: AHandler<Rsc[K]> },
554
+ any,
555
+ GetSuccess<Make["dependencies"]>
556
+ >
557
+ strict?: boolean
558
+ }
525
559
  >(
526
- layers: TLayers,
527
- make: Make & ((requests: RouteMatcher<CTXMap, Rsc, Context>) => Effect<THandlers, E, R>),
528
- strict?: Strict
560
+ make: Make
529
561
  ): {
530
562
  moduleName: ModuleName
531
563
  Router: HttpRouter.HttpRouter.TagClass<
@@ -535,36 +567,33 @@ export const makeRouter = <
535
567
  | Exclude<Context, HttpRouter.HttpRouter.Provided>
536
568
  | Exclude<
537
569
  RPCRouteR<
538
- { [K in keyof Filter<Rsc>]: Rpc.Rpc<Rsc[K], _R<ReturnType<THandlers[K]["handler"]>>> }[keyof Filter<Rsc>]
570
+ {
571
+ [K in keyof Filter<Rsc>]: Rpc.Rpc<Rsc[K], _R<ReturnType<MakeHandlers<Make, Filter<Rsc>>[K]["handler"]>>>
572
+ }[keyof Filter<Rsc>]
539
573
  >,
540
574
  HttpRouter.HttpRouter.Provided
541
575
  >
542
576
  >
543
577
  routes: Layer.Layer<
544
578
  RouterShape<Rsc>,
545
- E | GetError<TLayers>,
546
- | GetContext<TLayers>
579
+ MakeErrors<Make> | GetError<Make["dependencies"]>,
580
+ | GetContext<Make["dependencies"]>
547
581
  // | GetContext<Layers> // elsewhere provided
548
- | Exclude<R | RMW, GetSuccess<TLayers> | GetSuccess<Layers>>
582
+ | Exclude<MakeContext<Make> | RMW, GetSuccess<Make["dependencies"]> | GetSuccess<Layers>>
549
583
  >
550
584
  }
551
585
  <
552
- E,
553
- R,
554
- Make extends (
555
- requests: RouteMatcher<CTXMap, Rsc, Context>
556
- ) => Effect<
557
- { [K in keyof Filter<Rsc>]: AHandler<Rsc[K]> },
558
- any,
559
- Strict extends true ? GetSuccess<TLayers> : any
560
- >,
561
- THandlers extends { [K in keyof Filter<Rsc>]: AHandler<Rsc[K]> },
562
- TLayers extends NonEmptyReadonlyArray<Layer.Layer.Any> | never[],
563
- Strict extends boolean = true
586
+ const Make extends {
587
+ dependencies: Array<Layer.Layer.Any>
588
+ effect: Effect<
589
+ { [K in keyof Filter<Rsc>]: AHandler<Rsc[K]> },
590
+ any,
591
+ GetSuccess<Make["dependencies"]>
592
+ >
593
+ strict?: boolean
594
+ }
564
595
  >(
565
- layers: TLayers,
566
- make: Make & ((requests: RouteMatcher<CTXMap, Rsc, Context>) => Effect<THandlers, E, R>),
567
- strict?: Strict
596
+ make: Make
568
597
  ): {
569
598
  moduleName: ModuleName
570
599
  Router: HttpRouter.HttpRouter.TagClass<
@@ -574,57 +603,55 @@ export const makeRouter = <
574
603
  | Exclude<Context, HttpRouter.HttpRouter.Provided>
575
604
  | Exclude<
576
605
  RPCRouteR<
577
- { [K in keyof Filter<Rsc>]: Rpc.Rpc<Rsc[K], _R<ReturnType<THandlers[K]["handler"]>>> }[keyof Filter<Rsc>]
606
+ {
607
+ [K in keyof Filter<Rsc>]: Rpc.Rpc<Rsc[K], _R<ReturnType<MakeHandlers<Make, Filter<Rsc>>[K]["handler"]>>>
608
+ }[keyof Filter<Rsc>]
578
609
  >,
579
610
  HttpRouter.HttpRouter.Provided
580
611
  >
581
612
  >
582
613
  routes: Layer.Layer<
583
614
  RouterShape<Rsc>,
584
- E | GetError<TLayers>,
585
- | GetContext<TLayers>
615
+ MakeErrors<Make> | GetError<Make["dependencies"]>,
616
+ | GetContext<Make["dependencies"]>
586
617
  // | GetContext<Layers> // elsewhere provided
587
- | Exclude<R | RMW, GetSuccess<TLayers> | GetSuccess<Layers>>
618
+ | Exclude<MakeContext<Make> | RMW, GetSuccess<Make["dependencies"]> | GetSuccess<Layers>>
588
619
  >
589
620
  }
590
621
  <
591
- E,
592
- R,
593
- THandlers extends { [K in keyof Filter<Rsc>]: AHandler<Rsc[K]> },
594
- TLayers extends NonEmptyReadonlyArray<Layer.Layer.Any> | never[],
595
- Strict extends boolean = true
622
+ const Make extends {
623
+ dependencies: [
624
+ ...Make["dependencies"],
625
+ ...Exclude<Effect.Context<Make["effect"]>, MakeDepsOut<Make>> extends never ? []
626
+ : [Layer.Layer<Exclude<Effect.Context<Make["effect"]>, MakeDepsOut<Make>>, never, never>]
627
+ ]
628
+ effect: Effect<
629
+ { [K in keyof Filter<Rsc>]: AHandler<Rsc[K]> },
630
+ any,
631
+ any
632
+ >
633
+ strict?: boolean
634
+ }
596
635
  >(
597
- layers: [
598
- ...TLayers,
599
- Layer.Layer<Exclude<R, GetSuccess<TLayers>>, never, never>
600
- ],
601
- make: (requests: RouteMatcher<CTXMap, Rsc, Context>) => Effect<THandlers, E, R>,
602
- strict?: Strict
636
+ make: Make
603
637
  ): {
604
638
  moduleName: ModuleName
605
639
  Router: HttpRouter.HttpRouter.TagClass<
606
640
  RouterShape<Rsc>,
607
641
  `${ModuleName}Router`,
608
642
  never,
609
- | Exclude<Context, HttpRouter.HttpRouter.Provided>
610
- | Exclude<
611
- RPCRouteR<
612
- { [K in keyof Filter<Rsc>]: Rpc.Rpc<Rsc[K], _R<ReturnType<THandlers[K]["handler"]>>> }[keyof Filter<Rsc>]
613
- >,
614
- HttpRouter.HttpRouter.Provided
615
- >
616
- >
617
- routes: Layer.Layer<
618
- RouterShape<Rsc>,
619
- E | GetError<TLayers>,
620
- // | GetContext<Layers> // elsewhere provided
621
- | GetContext<TLayers>
622
- | Exclude<R | RMW, GetSuccess<TLayers> | GetSuccess<Layers>>
623
- >
643
+ Exclude<Context, HttpRouter.HttpRouter.Provided>
644
+ > // | Exclude<
645
+ // RPCRouteR<
646
+ // { [K in keyof Filter<Rsc>]: Rpc.Rpc<Rsc[K], _R<ReturnType<THandlers[K]["handler"]>>> }[keyof Filter<Rsc>]
647
+ // >,
648
+ // HttpRouter.HttpRouter.Provided
649
+ // >
650
+ routes: any
624
651
  }
625
- } = f as any
652
+ } = ((m: { dependencies: any; effect: any; strict?: any }) => f(m.dependencies, m.effect)) as any
626
653
 
627
- return effect
654
+ return Object.assign(effect, items)
628
655
  }
629
656
 
630
657
  type HR<T> = T extends HttpRouter.HttpRouter<any, infer R> ? R : never
@@ -682,3 +709,23 @@ export const makeRouter = <
682
709
 
683
710
  return { matchAll, matchFor }
684
711
  }
712
+
713
+ export type MakeDeps<Make> = Make extends { readonly dependencies: ReadonlyArray<Layer.Layer.Any> }
714
+ ? Make["dependencies"][number]
715
+ : never
716
+
717
+ export type MakeErrors<Make> = Make extends { readonly effect: Effect<any, infer E, any> } ? E
718
+ : never
719
+
720
+ export type MakeContext<Make> = Make extends { readonly effect: Effect<any, any, infer R> } ? R
721
+ : never
722
+
723
+ export type MakeHandlers<Make, Handlers extends Record<string, any>> = Make extends
724
+ { readonly effect: Effect<{ [K in keyof Handlers]: AHandler<Handlers[K]> }, any, any> }
725
+ ? Effect.Success<Make["effect"]>
726
+ : never
727
+
728
+ /**
729
+ * @since 3.9.0
730
+ */
731
+ export type MakeDepsOut<Make> = Contravariant.Type<MakeDeps<Make>[Layer.LayerTypeId]["_ROut"]>
@@ -1,12 +1,13 @@
1
1
  /* eslint-disable @typescript-eslint/no-unsafe-member-access */
2
+ import { makeMiddleware, makeRouter } from "@effect-app/infra/api/routing"
3
+ import type { RequestContext } from "@effect-app/infra/RequestContext"
2
4
  import { Rpc } from "@effect/rpc"
3
5
  import type { Request } from "effect-app"
4
6
  import { Context, Effect, FiberRef, Layer, S, Schedule } from "effect-app"
5
7
  import { type GetEffectContext, makeRpcClient, type RPCContextMap, UnauthorizedError } from "effect-app/client"
6
8
  import { HttpHeaders, HttpServerRequest } from "effect-app/http"
7
9
  import type * as EffectRequest from "effect/Request"
8
- import { makeMiddleware, makeRouter } from "../src/api/routing.js"
9
- import type { RequestContext } from "../src/RequestContext.js"
10
+ import { it } from "vitest"
10
11
 
11
12
  const optimisticConcurrencySchedule = Schedule.once
12
13
  && Schedule.recurWhile<any>((a) => a?._tag === "OptimisticConcurrencyException")
@@ -135,17 +136,61 @@ export class GetSomething extends Req<GetSomething>()("GetSomething", {
135
136
  id: S.String
136
137
  }, { success: S.Void }) {}
137
138
 
138
- const Something = { GetSomething, meta: { moduleName: "Something" as const } }
139
+ export class GetSomethingElse extends Req<GetSomethingElse>()("GetSomethingElse", {
140
+ id: S.String
141
+ }, { success: S.String }) {}
142
+
143
+ const Something = { GetSomething, GetSomethingElse, meta: { moduleName: "Something" as const } }
144
+
145
+ export class SomethingService extends Effect.Service<SomethingService>()("SomethingService", {
146
+ dependencies: [],
147
+ effect: Effect.gen(function*() {
148
+ return {}
149
+ })
150
+ }) {}
151
+
152
+ declare const a: {
153
+ (opt: { a: 1 }): void
154
+ (opt: { a: 2 }): void
155
+ (opt: { b: 3 }): void
156
+ (opt: { b: 3 }): void
157
+ }
139
158
 
140
159
  export class SomethingRepo extends Effect.Service<SomethingRepo>()("SomethingRepo", {
160
+ dependencies: [SomethingService.Default],
161
+ effect: Effect.gen(function*() {
162
+ const smth = yield* SomethingService
163
+ console.log({ smth })
164
+ return {}
165
+ })
166
+ }) {}
167
+
168
+ export class SomethingService2 extends Effect.Service<SomethingService2>()("SomethingService2", {
141
169
  dependencies: [],
142
170
  effect: Effect.gen(function*() {
143
171
  return {}
144
172
  })
145
173
  }) {}
146
174
 
147
- matchFor(Something)([], ({ GetSomething }) =>
148
- Effect.gen(function*() {
149
- // const repo = yield* SomethingRepo
150
- return { GetSomething: GetSomething(Effect.void) }
151
- }))
175
+ export const routes = matchFor(Something)({
176
+ dependencies: [
177
+ SomethingRepo.Default,
178
+ SomethingService.Default,
179
+ SomethingService2.Default
180
+ ],
181
+ effect: Effect.gen(function*() {
182
+ const repo = yield* SomethingRepo
183
+ const smth = yield* SomethingService
184
+ const smth2 = yield* SomethingService2
185
+
186
+ console.log({ repo, smth, smth2 })
187
+
188
+ const { GetSomething, GetSomethingElse } = matchFor(Something)
189
+ return {
190
+ GetSomething: GetSomething(Effect.void),
191
+ GetSomethingElse: GetSomethingElse(Effect.succeed("12"))
192
+ }
193
+ })
194
+ })
195
+
196
+ it("works", () => {})
@@ -1 +1 @@
1
- {"version":3,"file":"controller.test.d.ts","sourceRoot":"","sources":["../controller.test.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,GAAG,EAAE,MAAM,aAAa,CAAA;AAEjC,OAAO,EAAW,MAAM,EAAY,KAAK,EAAE,CAAC,EAAY,MAAM,YAAY,CAAA;AAC1E,OAAO,EAAwC,KAAK,aAAa,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAA;AAC/G,OAAO,EAAe,iBAAiB,EAAE,MAAM,iBAAiB,CAAA;AAGhE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAA;AAK9D,MAAM,WAAW,GAAG;IAClB,OAAO,EAAE,cAAc,CAAA;CACxB;AAED,MAAM,MAAM,MAAM,GAAG;IAGnB,YAAY,EAAE,aAAa,CAAC,MAAM,CAAC,EAAE,EAAE,KAAK,EAAE,OAAO,iBAAiB,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,CAAA;CACvF,CAAA;AAmGD,eAAO,MAAQ,QAAQ;;;;;sBAVH,KAAC;;;;;;GAUI,QAAQ;;;;;;mBA3DpB,MAAM,CAAE,GAAE;mBA2Bb,MA1BM,CAAC,GAAG;;mBADP,MAAM,CAAE,GAAE;mBA2Bb,MA1BM,CAAC,GAAG;iKAyFuT,KAAK,CAAC,GAAG;;;uBA1FvU,MAAM,CAAE,GAAE;uBA2Bb,MA1BM,CAAC,GAAG;;uBADP,MAAM,CAAE,GAAE;uBA2Bb,MA1BM,CAAC,GAAG;;;;;mBADP,MAAM,CAAE,GAAE;mBA2Bb,MA1BM,CAAC,GAAG;;mBADP,MAAM,CAAE,GAAE;mBA2Bb,MA1BM,CAAC,GAAG;mKAyFm6D,KAAK,CAAC,GAAG;;;uBA1Fn7D,MAAM,CAAE,GAAE;uBA2Bb,MA1BM,CAAC,GAAG;;uBADP,MAAM,CAAE,GAAE;uBA2Bb,MA1BM,CAAC,GAAG;;;;;mBADP,MAAM,CAAE,GAAE;mBA2Bb,MA1BM,CAAC,GAAG;;mBADP,MAAM,CAAE,GAAE;mBA2Bb,MA1BM,CAAC,GAAG;mKAyF6iH,KAAK,CAAC,GAAG;;;uBA1F7jH,MAAM,CAAE,GAAE;uBA2Bb,MA1BM,CAAC,GAAG;;uBADP,MAAM,CAAE,GAAE;uBA2Bb,MA1BM,CAAC,GAAG;;;;;mBADP,MAAM,CAAE,GAAE;mBA2Bb,MA1BM,CAAC,GAAG;mKAyFq4J,KAAK,CAAC,GAAG;;;uBA1Fr5J,MAAM,CAAE,GAAE;uBA2Bb,MA1BM,CAAC,GAAG;;uBADP,MAAM,CAAE,GAAE;uBA2Bb,MA1BM,CAAC,GAAG;;;;CA0D8C,CAAA;AAElE,MAAM,MAAM,aAAa,GAAG;IAC1B,yCAAyC;IACzC,cAAc,CAAC,EAAE,IAAI,CAAA;IACrB,iEAAiE;IACjE,UAAU,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;CAC/B,CAAA;AACD,eAAO,MAAuB,GAAG;2CAvElB,MACX,CA8BM,MA9BC;mBAEqB,MAC9B,CA2BQ,GA3BJ,KAAK,MAAM,CAAE,MAAK;mBACT,MAAM,CAAC,GAAG,KAAK,MAAM,CAAC,MAAM;;;;;;6CA0BjC,MAjBA,CAAC,MAAM;mBAiBP,MAhBK,CAAC,GAAG,KAAM,MAAK,CAAC,MAAM;;;;;;6CAUT,MAAM,CAAC,MAAM;mBAAuC,MAAM,CAAC,GAAG,KAAK,MAAM,CAM3F,MALL;;;;;;6CAckB,MAAK,CAAC,MAAM;;;;;6CAMF,MAAM,CAAC,MAAM;;;CA4B5C,CAAA;;;;;;;;;;AAEF,qBAAa,YAAa,SAAQ,iBAEX;CAAG;;;;;AAI1B,qBAAa,aAAc,SAAQ,kBAKjC;CAAG"}
1
+ {"version":3,"file":"controller.test.d.ts","sourceRoot":"","sources":["../controller.test.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kCAAkC,CAAA;AACtE,OAAO,EAAE,GAAG,EAAE,MAAM,aAAa,CAAA;AAEjC,OAAO,EAAW,MAAM,EAAY,KAAK,EAAE,CAAC,EAAY,MAAM,YAAY,CAAA;AAC1E,OAAO,EAAwC,KAAK,aAAa,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAA;AAC/G,OAAO,EAAe,iBAAiB,EAAE,MAAM,iBAAiB,CAAA;AAOhE,MAAM,WAAW,GAAG;IAClB,OAAO,EAAE,cAAc,CAAA;CACxB;AAED,MAAM,MAAM,MAAM,GAAG;IAGnB,YAAY,EAAE,aAAa,CAAC,MAAM,CAAC,EAAE,EAAE,KAAK,EAAE,OAAO,iBAAiB,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,CAAA;CACvF,CAAA;AAmGD,eAAO,MAAQ,QAAQ;;;;;sBATP,KAAH;;;;;;GASY,QAAQ;;;;;;uDA8B3B,KAAK,CAAC,GAAG;;uBAzFY,MAAM,CA2BvB,GA1BP;uBAAqB,MAAM,CAAC,GAAG;;;;;;uBADP,MAAM,CA2BvB,GA1BP;uBAAqB,MAAM,CAAC,GAAG;;uBADP,MAAM,CA2BvB,GA1BP;uBAAqB,MAAM,CAAC,GAAG;;uBADP,MAAM,CA2BvB,GA1BP;uBAAqB,MAAM,CAAC,GAAG;;;;;uDAqIimB,KAAK,CAAC,GAAG;;uBAtIjnB,MAAM,CA2BvB,GA1BP;uBAAqB,MAAM,CAAC,GAAG;;;;;;uBADP,MAAM,CA2BvB,GA1BP;uBAAqB,MAAM,CAAC,GAAG;;uBADP,MAAM,CA2BvB,GA1BP;uBAAqB,MAAM,CAAC,GAAG;;uBADP,MAAM,CA2BvB,GA1BP;uBAAqB,MAAM,CAAC,GAAG;;;;;uDAqIuyE,KAAK,CAAC,GAAG;;uBAtIvzE,MAAM,CA2BvB,GA1BP;uBAAqB,MAAM,CAAC,GAAG;;;;;;uBADP,MAAM,CA2BvB,GA1BP;uBAAqB,MAAM,CAAC,GAAG;;uBADP,MAAM,CA2BvB,GA1BP;uBAAqB,MAAM,CAAC,GAAG;;uBADP,MAAM,CA2BvB,GA1BP;uBAAqB,MAAM,CAAC,GAAG;;;;;;;uBADP,MAAM,CA2BvB,GA1BP;uBAAqB,MAAM,CAAC,GAAG;;;;;;;;0GA0DgC,CAAA;AAElE,MAAM,MAAM,aAAa,GAAG;IAC1B,yCAAyC;IACzC,cAAc,CAAC,EAAE,IAAI,CAAA;IACrB,iEAAiE;IACjE,UAAU,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;CAC/B,CAAA;AACD,eAAO,MAAuB,GAAG;2CAxEM,MAAM,CAAC,MAAM;mBAgC1C,MA9BA,CAAC,GAAG,KA8BJ,MA5BD,CA4BC,MA5BM;mBA4BN,MA3BC,CAAE,GAAE,KAAM,MAAK,CAAC,MAAM;;;;;;6CASqB,MAAM,CAAC,MAAM;mBACtD,MAAK,CAAC,GAAG,KAAK,MAAM,CAAC,MAAM;;;;;;6CAUpB,MAAM,CAAC,MAAM;mBACG,MAAM,CAAC,GAAG,KAAK,MAAM,CAAE,MAAK;;;;;;6CAclD,MAAG,CAAC,MAAM;;;;;6CAMwC,MAAM,CAAC,MACrE;;;CA4BA,CAAA;;;;;;;;;;AAEF,qBAAa,YAAa,SAAQ,iBAEX;CAAG;;;;;;;;;;AAE1B,qBAAa,gBAAiB,SAAQ,qBAEb;CAAG;;;;;AAI5B,qBAAa,gBAAiB,SAAQ,qBAKpC;CAAG;;;;;AASL,qBAAa,aAAc,SAAQ,kBAOjC;CAAG;;;;;AAEL,qBAAa,iBAAkB,SAAQ,sBAKrC;CAAG;AAEL,eAAO,MAAM,MAAM;;;;;;;;;;;;;;;;CAmBjB,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"controller5.test.d.ts","sourceRoot":"","sources":["../controller5.test.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,GAAG,EAAE,MAAM,aAAa,CAAA;AAEjC,OAAO,EAAW,MAAM,EAAY,KAAK,EAAE,CAAC,EAAY,MAAM,YAAY,CAAA;AAC1E,OAAO,EAAwC,KAAK,aAAa,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAA;AAC/G,OAAO,EAAe,iBAAiB,EAAE,MAAM,iBAAiB,CAAA;AAGhE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAA;AAK9D,MAAM,WAAW,GAAG;IAClB,OAAO,EAAE,cAAc,CAAA;CACxB;AAED,MAAM,MAAM,MAAM,GAAG;IAGnB,YAAY,EAAE,aAAa,CAAC,MAAM,CAAC,EAAE,EAAE,KAAK,EAAE,OAAO,iBAAiB,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,CAAA;CACvF,CAAA;AAmGD,eAAO,MAAQ,QAAQ;;;;;sBAPP,KAAK;;;;;;GAOI,QAAQ;;;;;;uDAgC3B,KAAK,CAAE,GAAE;;uBA1FqB,MAAM,CAAC,GAAG;uBA0BpC,MAzBH,CAyBG,GAzBC;;;;;;uBADyB,MAAM,CAAC,GAAG;uBA0BpC,MAzBH,CAyBG,GAzBC;;uBADyB,MAAM,CAAC,GAAG;uBA0BpC,MAzBH,CAyBG,GAzBC;;uBADyB,MAAM,CAAC,GAAG;uBA0BpC,MAzBH,CAyBG,GAzBC;;;;;uDAkI0rB,KAAK,CAAC,GAAG;;uBAnI1qB,MAAM,CAAC,GAAG;uBA0BpC,MAzBH,CAyBG,GAzBC;;;;;;uBADyB,MAAM,CAAC,GAAG;uBA0BpC,MAzBH,CAyBG,GAzBC;;uBADyB,MAAM,CAAC,GAAG;uBA0BpC,MAzBH,CAyBG,GAzBC;;uBADyB,MAAM,CAAC,GAAG;uBA0BpC,MAzBH,CAyBG,GAzBC;;;;;uDAkIg4E,KAAK,CAAC,GAAG;;uBAnIh3E,MAAM,CAAC,GAAG;uBA0BpC,MAzBH,CAyBG,GAzBC;;;;;;uBADyB,MAAM,CAAC,GAAG;uBA0BpC,MAzBH,CAyBG,GAzBC;;uBADyB,MAAM,CAAC,GAAG;uBA0BpC,MAzBH,CAyBG,GAzBC;;uBADyB,MAAM,CAAC,GAAG;uBA0BpC,MAzBH,CAyBG,GAzBC;;;;;;;uBADyB,MAAM,CAAC,GAAG;uBA0BpC,MAzBH,CAyBG,GAzBC;;;;;;;;mGAyDuD,CAAA;AAElE,MAAM,MAAM,aAAa,GAAG;IAC1B,yCAAyC;IACzC,cAAc,CAAC,EAAE,IAAI,CAAA;IACrB,iEAAiE;IACjE,UAAU,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;CAC/B,CAAA;AACD,eAAO,MAAuB,GAAG;2CAvElB,MACZ,CA8BO,MA9BA;mBAEqB,MAC9B,CA2BS,GA3BL,KA2BK,MA3BM,CAAC,MAAM;mBACR,MAAK,CAAC,GAAG,KAAK,MAAM,CAAC,MAAM;;;;;;6CA0BhC,MAjBD,CAiBC,MAjBM;mBAiBN,MAhBI,CAgBJ,GAhBQ,KAAK,MAAM,CAAC,MAAM;;;;;;6CAUT,MAAM,CAAC,MAAM;mBAAuC,MAAM,CAAC,GAAG,KAAK,MAAM,CAAC,MACjG;;;;;;6CAciB,MAAM,CAAC,MAAM;;;;;6CAMF,MAAM,CAAC,MAAM;;;CA4B3C,CAAA;;;;;;;;;;AAEF,qBAAa,YAAa,SAAQ,iBAEX;CAAG;;;;;;;;;;AAE1B,qBAAa,gBAAiB,SAAQ,qBAEb;CAAG;;;;;AAI5B,qBAAa,gBAAiB,SAAQ,qBAKpC;CAAG;;;;;AASL,qBAAa,aAAc,SAAQ,kBAOjC;CAAG;;;;;AAEL,qBAAa,iBAAkB,SAAQ,sBAKrC;CAAG;AAEL,eAAO,MAAM,MAAM;;;;;;;;;;;;;;;;CAmBjB,CAAA"}
1
+ {"version":3,"file":"controller5.test.d.ts","sourceRoot":"","sources":["../controller5.test.ts"],"names":[],"mappings":"AAGA,OAAO,EAAW,MAAM,EAAY,KAAK,EAAE,CAAC,EAAY,MAAM,YAAY,CAAA;AAC1E,OAAO,EAAwC,KAAK,aAAa,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAA;AAI/G,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAA;AAK9D,MAAM,WAAW,GAAG;IAClB,OAAO,EAAE,cAAc,CAAA;CACxB;AAED,MAAM,MAAM,MAAM,GAAG;IAGnB,YAAY,EAAE,aAAa,CAAC,MAAM,CAAC,EAAE,EAAE,KAAK,EAAE,OAAO,iBAAiB,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,CAAA;CACvF,CAAA;AAmGD,eAAO,MAAQ,QAAQ,OAAE,QAAQ,KAAiC,CAAA;AAElE,MAAM,MAAM,aAAa,GAAG;IAC1B,yCAAyC;IACzC,cAAc,CAAC,EAAE,IAAI,CAAA;IACrB,iEAAiE;IACjE,UAAU,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;CAC/B,CAAA;AACD,eAAO,MAAuB,GAAG;2CAvElB,MACZ,CA8BO,MA9BA;mBAEqB,MAC9B,CA2BS,GA3BL,KA2BK,MA3BM,CAAC,MAAM;mBACR,MAAK,CAAC,GAAG,KAAK,MAAM,CAAC,MAAM;;;;;;6CA0BhC,MAjBD,CAiBC,MAjBM;mBAiBN,MAhBI,CAgBJ,GAhBQ,KAAK,MAAM,CAAC,MAAM;;;;;;6CAUT,MAAM,CAAC,MAAM;mBAAuC,MAAM,CAAC,GAAG,KAAK,MAAM,CAAC,MACjG;;;;;;6CAciB,MAAM,CAAC,MAAM;;;;;6CAMF,MAAM,CAAC,MAAM;;;CA4B3C,CAAA;;;;;;;;;;AAEF,qBAAa,YAAa,SAAQ,iBAEX;CAAG;;;;;;;;;;AAE1B,qBAAa,gBAAiB,SAAQ,qBAEb;CAAG;;;;;AAI5B,qBAAa,gBAAiB,SAAQ,qBAKpC;CAAG;;;;;AASL,qBAAa,aAAc,SAAQ,kBAOjC;CAAG;;;;;AAEL,qBAAa,iBAAkB,SAAQ,sBAKrC;CAAG;AAEL,eAAO,MAAM,MAAM,KAmBjB,CAAA"}
@@ -1,196 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.toHttpApp = exports.makeRouter = exports.makeMiddleware = exports.RouterSymbol = void 0;
7
- var _rpc = require("@effect/rpc");
8
- var _effectApp = require("effect-app");
9
- var _http = require("effect-app/http");
10
- var _utils = require("effect-app/utils");
11
- var _errorReporter = require("../errorReporter.cjs");
12
- var _logger = require("../logger.cjs");
13
- var _DynamicMiddleware = require("./routing/DynamicMiddleware.cjs");
14
- const logRequestError = (0, _errorReporter.logError)("Request");
15
- const reportRequestError = (0, _errorReporter.reportError)("Request");
16
- /**
17
- * Plain jane JSON version
18
- * @deprecated use HttpRpcRouterNoStream.toHttpApp once support options
19
- */
20
- const toHttpApp = (self, options) => {
21
- const handler = _rpc.RpcRouter.toHandler(self, options);
22
- return _effectApp.Effect.withFiberRuntime(fiber => {
23
- const context = fiber.getFiberRef(_effectApp.FiberRef.currentContext);
24
- const request = _effectApp.Context.unsafeGet(context, _http.HttpServerRequest.HttpServerRequest);
25
- return _effectApp.Effect.flatMap(request.json, _ => handler(_).pipe(_effectApp.Stream.provideContext(context), _effectApp.Stream.runCollect, _effectApp.Effect.map(_ => _effectApp.Chunk.toReadonlyArray(_)), _effectApp.Effect.andThen(_ => {
26
- let status = 200;
27
- for (const r of _.flat()) {
28
- if (typeof r === "number") continue;
29
- const results = _effectApp.Array.isArray(r) ? r : [r];
30
- if (results.some(_ => _._tag === "Failure" && _.cause._tag === "Die")) {
31
- status = 500;
32
- break;
33
- }
34
- if (results.some(_ => _._tag === "Failure" && _.cause._tag === "Fail")) {
35
- status = 422; // 418
36
- break;
37
- }
38
- }
39
- return _http.HttpServerResponse.json(_, {
40
- status
41
- });
42
- }), _effectApp.Effect.orDie, _effectApp.Effect.tapDefect((0, _errorReporter.reportError)("RPCHttpApp"))));
43
- });
44
- };
45
- exports.toHttpApp = toHttpApp;
46
- const RouterSymbol = exports.RouterSymbol = Symbol();
47
- // export interface RouteMatcher<
48
- // Filtered extends Record<string, any>,
49
- // CTXMap extends Record<string, any>,
50
- // Rsc extends Filtered
51
- // > extends RouteMatcherInt<Filtered, CTXMap, Rsc> {}
52
- const makeMiddleware = content => content;
53
- exports.makeMiddleware = makeMiddleware;
54
- const makeRouter = (middleware, devMode) => {
55
- function matchFor(rsc) {
56
- const meta = rsc.meta;
57
- const filtered = (0, _utils.typedKeysOf)(rsc).reduce((acc, cur) => {
58
- if (_effectApp.Predicate.isObject(rsc[cur]) && rsc[cur]["success"]) {
59
- acc[cur] = rsc[cur];
60
- }
61
- return acc;
62
- }, {});
63
- const items = (0, _utils.typedKeysOf)(filtered).reduce((prev, cur) => {
64
- ;
65
- prev[cur] = Object.assign(fnOrEffect => {
66
- const stack = new Error().stack?.split("\n").slice(2).join("\n");
67
- return _effectApp.Effect.isEffect(fnOrEffect) ? class {
68
- static stack = stack;
69
- static _tag = "d";
70
- static handler = () => fnOrEffect;
71
- } : class {
72
- static stack = stack;
73
- static _tag = "d";
74
- static handler = fnOrEffect;
75
- };
76
- }, {
77
- success: rsc[cur].success,
78
- successRaw: _effectApp.S.encodedSchema(rsc[cur].success),
79
- failure: rsc[cur].failure,
80
- raw:
81
- // "Raw" variations are for when you don't want to decode just to encode it again on the response
82
- // e.g for direct projection from DB
83
- // but more importantly, to skip Effectful decoders, like to resolve relationships from the database or remote client.
84
- fnOrEffect => {
85
- const stack = new Error().stack?.split("\n").slice(2).join("\n");
86
- return _effectApp.Effect.isEffect(fnOrEffect) ? class {
87
- static stack = stack;
88
- static _tag = "raw";
89
- static handler = () => fnOrEffect;
90
- } : class {
91
- static stack = stack;
92
- static _tag = "raw";
93
- static handler = (req, ctx) => fnOrEffect(req, {
94
- ...ctx,
95
- Response: rsc[cur].success
96
- });
97
- };
98
- }
99
- });
100
- return prev;
101
- }, {});
102
- const f = (layers, make) => {
103
- const r = class Router extends _http.HttpRouter.Tag(`${meta.moduleName}Router`)() {};
104
- const layer = r.use(router => _effectApp.Effect.gen(function* () {
105
- const controllers = yield* make(items);
106
- const rpc = yield* (0, _DynamicMiddleware.makeRpc)(middleware);
107
- // return make.pipe(Effect.map((c) => controllers(c, layers)))
108
- const mapped = (0, _utils.typedKeysOf)(filtered).reduce((acc, cur) => {
109
- const handler = controllers[cur];
110
- const req = rsc[cur];
111
- acc[cur] = rpc.effect(handler._tag === "raw" ? class extends req {
112
- static success = _effectApp.S.encodedSchema(req.success);
113
- get [_effectApp.Schema.symbolSerializable]() {
114
- return this.constructor;
115
- }
116
- get [_effectApp.Schema.symbolWithResult]() {
117
- return {
118
- failure: req.failure,
119
- success: _effectApp.S.encodedSchema(req.success)
120
- };
121
- }
122
- } : req, req =>
123
- // TODO: render more data... similar to console?
124
- _effectApp.Effect.annotateCurrentSpan("requestInput", Object.entries(req).reduce((prev, [key, value]) => {
125
- prev[key] = key === "password" ? "<redacted>" : typeof value === "string" || typeof value === "number" || typeof value === "boolean" ? typeof value === "string" && value.length > 256 ? value.substring(0, 253) + "..." : value : _effectApp.Array.isArray(value) ? `Array[${value.length}]` : value === null || value === undefined ? `${value}` : typeof value === "object" && value ? `Object[${Object.keys(value).length}]` : typeof value;
126
- return prev;
127
- }, {})).pipe(
128
- // can't use andThen due to some being a function and effect
129
- _effectApp.Effect.zipRight(handler.handler(req)), _effectApp.Effect.tapErrorCause(cause => _effectApp.Cause.isFailure(cause) ? logRequestError(cause) : _effectApp.Effect.void), _effectApp.Effect.tapDefect(cause => _effectApp.Effect.all([reportRequestError(cause, {
130
- action: `${meta.moduleName}.${req._tag}`
131
- }), _rpc.Rpc.currentHeaders.pipe(_effectApp.Effect.andThen(headers => {
132
- return _logger.InfraLogger.logError("Finished request", cause).pipe(_effectApp.Effect.annotateLogs({
133
- action: `${meta.moduleName}.${req._tag}`,
134
- req: (0, _utils.pretty)(req),
135
- headers: (0, _utils.pretty)(headers)
136
- // resHeaders: pretty(
137
- // Object
138
- // .entries(headers)
139
- // .reduce((prev, [key, value]) => {
140
- // prev[key] = value && typeof value === "string" ? snipString(value) : value
141
- // return prev
142
- // }, {} as Record<string, any>)
143
- // )
144
- }));
145
- }))])), devMode ? _ => _ : _effectApp.Effect.catchAllDefect(() => _effectApp.Effect.die("Internal Server Error")), _effectApp.Effect.withSpan("Request." + meta.moduleName + "." + req._tag, {
146
- captureStackTrace: () => handler.stack
147
- })), meta.moduleName); // TODO
148
- return acc;
149
- }, {});
150
- const rpcRouter = _rpc.RpcRouter.make(...Object.values(mapped));
151
- const httpApp = toHttpApp(rpcRouter, {
152
- spanPrefix: rsc.meta.moduleName + "."
153
- });
154
- yield* router.all("/", httpApp,
155
- // TODO: not queries.
156
- {
157
- uninterruptible: true
158
- });
159
- }));
160
- // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion
161
- const routes = layer.pipe(_effectApp.Layer.provideMerge(r.Live), layers && _effectApp.Array.isNonEmptyReadonlyArray(layers) ? _effectApp.Layer.provide(layers) : _ => _,
162
- // TODO: only provide to the middleware?
163
- middleware.dependencies ? _effectApp.Layer.provide(middleware.dependencies) : _ => _);
164
- // Effect.Effect<HttpRouter.HttpRouter<unknown, HttpRouter.HttpRouter.DefaultServices>, never, UserRouter>
165
- return {
166
- moduleName: meta.moduleName,
167
- Router: r,
168
- routes
169
- };
170
- };
171
- const effect = f;
172
- return {
173
- handle: effect,
174
- routes: items
175
- };
176
- }
177
- function matchAll(handlers, requestLayer) {
178
- const routers = (0, _utils.typedValuesOf)(handlers);
179
- const rootRouter = class extends _http.HttpRouter.Tag("RootRouter")() {};
180
- const r = rootRouter.use(router => _effectApp.Effect.gen(function* () {
181
- for (const route of routers) {
182
- yield* router.mount("/rpc/" + route.moduleName, yield* route.Router.router.pipe(_effectApp.Effect.map(_http.HttpRouter.use((0, _effectApp.flow)(_effectApp.Effect.provide(requestLayer))))));
183
- }
184
- })).pipe(_effectApp.Layer.provide(routers.map(r => r.routes).flat()));
185
- return {
186
- layer: r,
187
- Router: rootRouter
188
- };
189
- }
190
- return {
191
- matchAll,
192
- matchFor
193
- };
194
- };
195
- exports.makeRouter = makeRouter;
196
- //# sourceMappingURL=routing copy.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"routing copy.cjs","names":["_rpc","require","_effectApp","_http","_utils","_errorReporter","_logger","_DynamicMiddleware","logRequestError","logError","reportRequestError","reportError","toHttpApp","self","options","handler","RpcRouter","toHandler","Effect","withFiberRuntime","fiber","context","getFiberRef","FiberRef","currentContext","request","Context","unsafeGet","HttpServerRequest","flatMap","json","_","pipe","Stream","provideContext","runCollect","map","Chunk","toReadonlyArray","andThen","status","r","flat","results","Array","isArray","some","_tag","cause","HttpServerResponse","orDie","tapDefect","exports","RouterSymbol","Symbol","makeMiddleware","content","makeRouter","middleware","devMode","matchFor","rsc","meta","filtered","typedKeysOf","reduce","acc","cur","Predicate","isObject","items","prev","Object","assign","fnOrEffect","stack","Error","split","slice","join","isEffect","success","successRaw","S","encodedSchema","failure","raw","req","ctx","Response","f","layers","make","Router","HttpRouter","Tag","moduleName","layer","use","router","gen","controllers","rpc","makeRpc","mapped","effect","Schema","symbolSerializable","constructor","symbolWithResult","annotateCurrentSpan","entries","key","value","length","substring","undefined","keys","zipRight","tapErrorCause","Cause","isFailure","void","all","action","Rpc","currentHeaders","headers","InfraLogger","annotateLogs","pretty","catchAllDefect","die","withSpan","captureStackTrace","rpcRouter","values","httpApp","spanPrefix","uninterruptible","routes","Layer","provideMerge","Live","isNonEmptyReadonlyArray","provide","dependencies","handle","matchAll","handlers","requestLayer","routers","typedValuesOf","rootRouter","route","mount","flow"],"sources":["../../src/api/routing copy.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}