@effect-app/infra 2.54.4 → 2.55.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.
- package/CHANGELOG.md +12 -0
- package/dist/QueueMaker/sbqueue.d.ts +1 -1
- package/dist/adapters/ServiceBus.d.ts +1 -1
- package/dist/adapters/ServiceBus.d.ts.map +1 -1
- package/dist/adapters/ServiceBus.js +2 -2
- package/dist/api/routing.d.ts +83 -2
- package/dist/api/routing.d.ts.map +1 -1
- package/dist/api/routing.js +28 -18
- package/package.json +1 -1
- package/src/adapters/ServiceBus.ts +6 -1
- package/src/api/routing.ts +171 -68
- package/test/{controller.test.ts.bak → controller.test.ts} +73 -18
- package/test/dist/controller.test copy.d.ts +169 -0
- package/test/dist/controller.test copy.d.ts.map +1 -0
- package/test/dist/controller.test copy.js +46 -23
- package/test/dist/controller.test.d.ts.map +1 -1
- package/test/dist/controller6.test.d.ts.map +1 -1
- package/test/dist/controller7.test.d.ts.map +1 -1
- package/test/dist/controller5.test.d.ts.map +0 -1
- package/vitest.config.ts.timestamp-1711656440838-19c636fe320df.mjs +0 -0
- package/vitest.config.ts.timestamp-1711724061890-6ecedb0a07fdd.mjs +0 -0
- package/vitest.config.ts.timestamp-1711743489537-da8d9e5f66c9f.mjs +0 -0
- package/vitest.config.ts.timestamp-1711744615239-dcf257a844e01.mjs +0 -37
package/src/api/routing.ts
CHANGED
|
@@ -11,6 +11,7 @@ import type { GetEffectContext, RPCContextMap } from "effect-app/client/req"
|
|
|
11
11
|
import { type HttpHeaders, HttpRouter } from "effect-app/http"
|
|
12
12
|
import { pretty, typedKeysOf, typedValuesOf } from "effect-app/utils"
|
|
13
13
|
import type { Contravariant } from "effect/Types"
|
|
14
|
+
import { type YieldWrap } from "effect/Utils"
|
|
14
15
|
import { makeRpc, type Middleware } from "./routing/DynamicMiddleware.js"
|
|
15
16
|
|
|
16
17
|
const logRequestError = logError("Request")
|
|
@@ -265,6 +266,92 @@ export const makeRouter = <
|
|
|
265
266
|
? { [k in keyof Layers]: Layer.Layer.Error<Layers[k]> }[number]
|
|
266
267
|
: never
|
|
267
268
|
|
|
269
|
+
const total = Object.keys(filtered).length
|
|
270
|
+
const router: AddAction<Filtered[keyof Filtered]> = {
|
|
271
|
+
accum: {},
|
|
272
|
+
add(a: any) {
|
|
273
|
+
;(this.accum as any)[a.request._tag] = a
|
|
274
|
+
;(this as any)[a.request._tag] = a
|
|
275
|
+
if (Object.keys(this.accum).length === total) return this.accum as any
|
|
276
|
+
return this as any
|
|
277
|
+
}
|
|
278
|
+
}
|
|
279
|
+
|
|
280
|
+
type HndlrWithInputG<
|
|
281
|
+
Action extends AnyRequestModule,
|
|
282
|
+
Mode extends "d" | "raw"
|
|
283
|
+
> = (
|
|
284
|
+
req: S.Schema.Type<Action>
|
|
285
|
+
) => Generator<
|
|
286
|
+
YieldWrap<Effect<any, S.Schema.Type<GetFailure<Action>> | S.ParseResult.ParseError, any>>,
|
|
287
|
+
GetSuccessShape<Action, Mode>,
|
|
288
|
+
never
|
|
289
|
+
>
|
|
290
|
+
|
|
291
|
+
type HndlrWithInput<Action extends AnyRequestModule, Mode extends "d" | "raw"> = (
|
|
292
|
+
req: S.Schema.Type<Action>
|
|
293
|
+
) => Effect<
|
|
294
|
+
GetSuccessShape<Action, Mode>,
|
|
295
|
+
S.Schema.Type<GetFailure<Action>> | S.ParseResult.ParseError,
|
|
296
|
+
any
|
|
297
|
+
>
|
|
298
|
+
|
|
299
|
+
type Hndlr<Action extends AnyRequestModule, Mode extends "d" | "raw"> = Effect<
|
|
300
|
+
GetSuccessShape<Action, Mode>,
|
|
301
|
+
S.Schema.Type<GetFailure<Action>> | S.ParseResult.ParseError,
|
|
302
|
+
any
|
|
303
|
+
>
|
|
304
|
+
|
|
305
|
+
type Hndlrs<Action extends AnyRequestModule, Mode extends "d" | "raw"> =
|
|
306
|
+
| HndlrWithInputG<Action, Mode>
|
|
307
|
+
| HndlrWithInput<Action, Mode>
|
|
308
|
+
| Hndlr<Action, Mode>
|
|
309
|
+
|
|
310
|
+
type DHndlrs<Action extends AnyRequestModule> = Hndlrs<Action, "d">
|
|
311
|
+
|
|
312
|
+
type RawHndlrs<Action extends AnyRequestModule> =
|
|
313
|
+
| { raw: HndlrWithInputG<Action, "raw"> }
|
|
314
|
+
| { raw: HndlrWithInput<Action, "raw"> }
|
|
315
|
+
| { raw: Hndlr<Action, "raw"> }
|
|
316
|
+
|
|
317
|
+
type AnyHndlrs<Action extends AnyRequestModule> = RawHndlrs<Action> | DHndlrs<Action>
|
|
318
|
+
|
|
319
|
+
const router3: <
|
|
320
|
+
const Impl extends {
|
|
321
|
+
[K in keyof Filter<Rsc>]: AnyHndlrs<Rsc[K]>
|
|
322
|
+
}
|
|
323
|
+
>(
|
|
324
|
+
impl: Impl
|
|
325
|
+
) => {
|
|
326
|
+
[K in keyof Impl & keyof Filter<Rsc>]: Handler<
|
|
327
|
+
Filter<Rsc>[K],
|
|
328
|
+
Impl[K] extends { raw: any } ? "raw" : "d",
|
|
329
|
+
Exclude<
|
|
330
|
+
| Context
|
|
331
|
+
| Exclude<
|
|
332
|
+
Impl[K] extends { raw: any } ? Impl[K]["raw"] extends (...args: any[]) => Effect<any, any, infer R> ? R
|
|
333
|
+
: Impl[K]["raw"] extends Effect<any, any, infer R> ? R
|
|
334
|
+
: never
|
|
335
|
+
: Impl[K] extends (...args: any[]) => Effect<any, any, infer R> ? R
|
|
336
|
+
: Impl[K] extends Effect<any, any, infer R> ? R
|
|
337
|
+
: never,
|
|
338
|
+
GetEffectContext<CTXMap, Rsc[K]["config"]>
|
|
339
|
+
>,
|
|
340
|
+
HttpRouter.HttpRouter.Provided
|
|
341
|
+
>
|
|
342
|
+
>
|
|
343
|
+
} = (obj: Record<keyof Filtered, any>) =>
|
|
344
|
+
typedKeysOf(obj).reduce((acc, cur) => {
|
|
345
|
+
if ("raw" in obj[cur]) {
|
|
346
|
+
acc[cur] = obj[cur].raw[Symbol.toStringTag] === "GeneratorFunction"
|
|
347
|
+
? Effect.fnUntraced(obj[cur].raw)
|
|
348
|
+
: obj[cur].raw
|
|
349
|
+
} else {
|
|
350
|
+
acc[cur] = obj[cur][Symbol.toStringTag] === "GeneratorFunction" ? Effect.fnUntraced(obj[cur]) : obj[cur]
|
|
351
|
+
}
|
|
352
|
+
return acc
|
|
353
|
+
}, {} as any)
|
|
354
|
+
|
|
268
355
|
const f = <
|
|
269
356
|
E,
|
|
270
357
|
R,
|
|
@@ -275,7 +362,7 @@ export const makeRouter = <
|
|
|
275
362
|
TLayers extends NonEmptyReadonlyArray<Layer.Layer.Any> | never[]
|
|
276
363
|
>(
|
|
277
364
|
layers: TLayers,
|
|
278
|
-
make: Effect<THandlers, E, R>
|
|
365
|
+
make: Effect<THandlers, E, R> | Generator<YieldWrap<Effect<any, any, any>>, THandlers, E>
|
|
279
366
|
) => {
|
|
280
367
|
type ProvidedLayers =
|
|
281
368
|
| { [k in keyof Layers]: Layer.Layer.Success<Layers[k]> }[number]
|
|
@@ -285,6 +372,10 @@ export const makeRouter = <
|
|
|
285
372
|
const layer = (requestLayers: any) =>
|
|
286
373
|
Effect
|
|
287
374
|
.gen(function*() {
|
|
375
|
+
make = (make as any)[Symbol.toStringTag] === "GeneratorFunction"
|
|
376
|
+
? Effect.fnUntraced(make as any)(router3) as any
|
|
377
|
+
: make
|
|
378
|
+
|
|
288
379
|
const controllers = yield* make
|
|
289
380
|
const rpc = yield* makeRpc(middleware)
|
|
290
381
|
|
|
@@ -466,6 +557,35 @@ export const makeRouter = <
|
|
|
466
557
|
|
|
467
558
|
const effect: {
|
|
468
559
|
// Multiple times duplicated the "good" overload, so that errors will only mention the last overload when failing
|
|
560
|
+
<
|
|
561
|
+
const Make extends {
|
|
562
|
+
dependencies: Array<Layer.Layer.Any>
|
|
563
|
+
effect: (match: typeof router3) => Generator<
|
|
564
|
+
YieldWrap<Effect<any, any, Make["strict"] extends false ? any : GetSuccess<Make["dependencies"]>>>,
|
|
565
|
+
{ [K in keyof Filter<Rsc>]: AHandler<Rsc[K]> },
|
|
566
|
+
any
|
|
567
|
+
>
|
|
568
|
+
|
|
569
|
+
strict?: boolean
|
|
570
|
+
/** @deprecated */
|
|
571
|
+
readonly ಠ_ಠ: never
|
|
572
|
+
}
|
|
573
|
+
>(
|
|
574
|
+
make: Make
|
|
575
|
+
): {
|
|
576
|
+
moduleName: ModuleName
|
|
577
|
+
|
|
578
|
+
routes: (requestLayers: any) => Layer.Layer<
|
|
579
|
+
RouterShape<Rsc>,
|
|
580
|
+
MakeErrors<Make> | GetError<Make["dependencies"]>,
|
|
581
|
+
| GetContext<Make["dependencies"]>
|
|
582
|
+
// | GetContext<Layers> // elsewhere provided
|
|
583
|
+
| Exclude<MakeContext<Make> | RMW, GetSuccess<Make["dependencies"]> | GetSuccess<Layers>>
|
|
584
|
+
>
|
|
585
|
+
|
|
586
|
+
// just for type testing purposes
|
|
587
|
+
make: Make
|
|
588
|
+
}
|
|
469
589
|
<
|
|
470
590
|
const Make extends {
|
|
471
591
|
dependencies: Array<Layer.Layer.Any>
|
|
@@ -490,6 +610,9 @@ export const makeRouter = <
|
|
|
490
610
|
// | GetContext<Layers> // elsewhere provided
|
|
491
611
|
| Exclude<MakeContext<Make> | RMW, GetSuccess<Make["dependencies"]> | GetSuccess<Layers>>
|
|
492
612
|
>
|
|
613
|
+
|
|
614
|
+
// just for type testing purposes
|
|
615
|
+
make: Make
|
|
493
616
|
}
|
|
494
617
|
<
|
|
495
618
|
const Make extends {
|
|
@@ -515,6 +638,9 @@ export const makeRouter = <
|
|
|
515
638
|
// | GetContext<Layers> // elsewhere provided
|
|
516
639
|
| Exclude<MakeContext<Make> | RMW, GetSuccess<Make["dependencies"]> | GetSuccess<Layers>>
|
|
517
640
|
>
|
|
641
|
+
|
|
642
|
+
// just for type testing purposes
|
|
643
|
+
make: Make
|
|
518
644
|
}
|
|
519
645
|
<
|
|
520
646
|
const Make extends {
|
|
@@ -540,6 +666,9 @@ export const makeRouter = <
|
|
|
540
666
|
// | GetContext<Layers> // elsewhere provided
|
|
541
667
|
| Exclude<MakeContext<Make> | RMW, GetSuccess<Make["dependencies"]> | GetSuccess<Layers>>
|
|
542
668
|
>
|
|
669
|
+
|
|
670
|
+
// just for type testing purposes
|
|
671
|
+
make: Make
|
|
543
672
|
}
|
|
544
673
|
<
|
|
545
674
|
const Make extends {
|
|
@@ -565,6 +694,9 @@ export const makeRouter = <
|
|
|
565
694
|
// | GetContext<Layers> // elsewhere provided
|
|
566
695
|
| Exclude<MakeContext<Make> | RMW, GetSuccess<Make["dependencies"]> | GetSuccess<Layers>>
|
|
567
696
|
>
|
|
697
|
+
|
|
698
|
+
// just for type testing purposes
|
|
699
|
+
make: Make
|
|
568
700
|
}
|
|
569
701
|
<
|
|
570
702
|
const Make extends {
|
|
@@ -588,6 +720,36 @@ export const makeRouter = <
|
|
|
588
720
|
// | GetContext<Layers> // elsewhere provided
|
|
589
721
|
| Exclude<MakeContext<Make> | RMW, GetSuccess<Make["dependencies"]> | GetSuccess<Layers>>
|
|
590
722
|
>
|
|
723
|
+
|
|
724
|
+
// just for type testing purposes
|
|
725
|
+
make: Make
|
|
726
|
+
}
|
|
727
|
+
<
|
|
728
|
+
const Make extends {
|
|
729
|
+
dependencies: Array<Layer.Layer.Any>
|
|
730
|
+
effect: (match: typeof router3) => Generator<
|
|
731
|
+
YieldWrap<Effect<any, any, Make["strict"] extends false ? any : GetSuccess<Make["dependencies"]>>>,
|
|
732
|
+
{ [K in keyof Filter<Rsc>]: AHandler<Rsc[K]> },
|
|
733
|
+
any
|
|
734
|
+
>
|
|
735
|
+
|
|
736
|
+
strict?: boolean
|
|
737
|
+
}
|
|
738
|
+
>(
|
|
739
|
+
make: Make
|
|
740
|
+
): {
|
|
741
|
+
moduleName: ModuleName
|
|
742
|
+
|
|
743
|
+
routes: (requestLayers: any) => Layer.Layer<
|
|
744
|
+
RouterShape<Rsc>,
|
|
745
|
+
MakeErrors<Make> | GetError<Make["dependencies"]>,
|
|
746
|
+
| GetContext<Make["dependencies"]>
|
|
747
|
+
// | GetContext<Layers> // elsewhere provided
|
|
748
|
+
| Exclude<MakeContext<Make> | RMW, GetSuccess<Make["dependencies"]> | GetSuccess<Layers>>
|
|
749
|
+
>
|
|
750
|
+
|
|
751
|
+
// just for type testing purposes
|
|
752
|
+
make: Make
|
|
591
753
|
}
|
|
592
754
|
<
|
|
593
755
|
const Make extends {
|
|
@@ -619,75 +781,13 @@ export const makeRouter = <
|
|
|
619
781
|
// HttpRouter.HttpRouter.Provided
|
|
620
782
|
// >
|
|
621
783
|
routes: any
|
|
622
|
-
}
|
|
623
|
-
} = ((m: { dependencies: any; effect: any; strict?: any }) => f(m.dependencies, m.effect)) as any
|
|
624
784
|
|
|
625
|
-
|
|
626
|
-
|
|
627
|
-
accum: {},
|
|
628
|
-
add(a: any) {
|
|
629
|
-
;(this.accum as any)[a.request._tag] = a
|
|
630
|
-
;(this as any)[a.request._tag] = a
|
|
631
|
-
if (Object.keys(this.accum).length === total) return this.accum as any
|
|
632
|
-
return this as any
|
|
633
|
-
}
|
|
634
|
-
}
|
|
635
|
-
|
|
636
|
-
type HndlrWithInput<Action extends AnyRequestModule, Mode extends "d" | "raw"> = (
|
|
637
|
-
req: S.Schema.Type<Action>
|
|
638
|
-
) => Effect<
|
|
639
|
-
GetSuccessShape<Action, Mode>,
|
|
640
|
-
S.Schema.Type<GetFailure<Action>> | S.ParseResult.ParseError,
|
|
641
|
-
any
|
|
642
|
-
>
|
|
643
|
-
|
|
644
|
-
type Hndlr<Action extends AnyRequestModule, Mode extends "d" | "raw"> = Effect<
|
|
645
|
-
GetSuccessShape<Action, Mode>,
|
|
646
|
-
S.Schema.Type<GetFailure<Action>> | S.ParseResult.ParseError,
|
|
647
|
-
any
|
|
648
|
-
>
|
|
649
|
-
|
|
650
|
-
type Hndlrs<Action extends AnyRequestModule, Mode extends "d" | "raw"> =
|
|
651
|
-
| HndlrWithInput<Action, Mode>
|
|
652
|
-
| Hndlr<Action, Mode>
|
|
653
|
-
|
|
654
|
-
type DHndlrs<Action extends AnyRequestModule> = Hndlrs<Action, "d">
|
|
655
|
-
|
|
656
|
-
type RawHndlrs<Action extends AnyRequestModule> =
|
|
657
|
-
| { raw: HndlrWithInput<Action, "raw"> }
|
|
658
|
-
| { raw: Hndlr<Action, "raw"> }
|
|
659
|
-
|
|
660
|
-
type AnyHndlrs<Action extends AnyRequestModule> = RawHndlrs<Action> | DHndlrs<Action>
|
|
661
|
-
|
|
662
|
-
const router3: <
|
|
663
|
-
const Impl extends {
|
|
664
|
-
[K in keyof Filter<Rsc>]: AnyHndlrs<Rsc[K]>
|
|
785
|
+
// just for type testing purposes
|
|
786
|
+
make: Make
|
|
665
787
|
}
|
|
666
|
-
|
|
667
|
-
|
|
668
|
-
|
|
669
|
-
[K in keyof Impl & keyof Filter<Rsc>]: Handler<
|
|
670
|
-
Filter<Rsc>[K],
|
|
671
|
-
Impl[K] extends { raw: any } ? "raw" : "d",
|
|
672
|
-
Exclude<
|
|
673
|
-
| Context
|
|
674
|
-
| Exclude<
|
|
675
|
-
Impl[K] extends { raw: any } ? Impl[K]["raw"] extends (...args: any[]) => Effect<any, any, infer R> ? R
|
|
676
|
-
: Impl[K]["raw"] extends Effect<any, any, infer R> ? R
|
|
677
|
-
: never
|
|
678
|
-
: Impl[K] extends (...args: any[]) => Effect<any, any, infer R> ? R
|
|
679
|
-
: Impl[K] extends Effect<any, any, infer R> ? R
|
|
680
|
-
: never,
|
|
681
|
-
GetEffectContext<CTXMap, Rsc[K]["config"]>
|
|
682
|
-
>,
|
|
683
|
-
HttpRouter.HttpRouter.Provided
|
|
684
|
-
>
|
|
685
|
-
>
|
|
686
|
-
} = (obj: Record<keyof Filtered, any>) =>
|
|
687
|
-
typedKeysOf(obj).reduce((acc, cur) => {
|
|
688
|
-
acc[cur] = "raw" in obj[cur] ? items[cur].raw(obj[cur].raw) : items[cur](obj[cur])
|
|
689
|
-
return acc
|
|
690
|
-
}, {} as any)
|
|
788
|
+
} =
|
|
789
|
+
((m: { dependencies: any; effect: any; strict?: any }) =>
|
|
790
|
+
Object.assign(f(m.dependencies, m.effect), { make: m })) as any
|
|
691
791
|
|
|
692
792
|
return Object.assign(effect, items, { router, router3 })
|
|
693
793
|
}
|
|
@@ -729,14 +829,17 @@ export type MakeDeps<Make> = Make extends { readonly dependencies: ReadonlyArray
|
|
|
729
829
|
: never
|
|
730
830
|
|
|
731
831
|
export type MakeErrors<Make> = Make extends { readonly effect: Effect<any, infer E, any> } ? E
|
|
832
|
+
: Make extends { readonly effect: (_: any) => Generator<YieldWrap<Effect<any, infer E, any>>, any, any> } ? E
|
|
732
833
|
: never
|
|
733
834
|
|
|
734
835
|
export type MakeContext<Make> = Make extends { readonly effect: Effect<any, any, infer R> } ? R
|
|
836
|
+
: Make extends { readonly effect: (_: any) => Generator<YieldWrap<Effect<any, any, infer R>>, any, any> } ? R
|
|
735
837
|
: never
|
|
736
838
|
|
|
737
839
|
export type MakeHandlers<Make, Handlers extends Record<string, any>> = Make extends
|
|
738
840
|
{ readonly effect: Effect<{ [K in keyof Handlers]: AHandler<Handlers[K]> }, any, any> }
|
|
739
841
|
? Effect.Success<Make["effect"]>
|
|
842
|
+
: Make extends { readonly effect: (_: any) => Generator<YieldWrap<any>, infer S, any> } ? S
|
|
740
843
|
: never
|
|
741
844
|
|
|
742
845
|
/**
|
|
@@ -1,12 +1,11 @@
|
|
|
1
1
|
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
2
2
|
/* eslint-disable @typescript-eslint/no-unsafe-member-access */
|
|
3
|
-
import { makeMiddleware, makeRouter } from "@effect-app/infra/api/routing"
|
|
3
|
+
import { type MakeContext, type MakeErrors, makeMiddleware, makeRouter } from "@effect-app/infra/api/routing"
|
|
4
4
|
import type { RequestContext } from "@effect-app/infra/RequestContext"
|
|
5
|
-
import {
|
|
6
|
-
import type
|
|
7
|
-
import {
|
|
8
|
-
import { type
|
|
9
|
-
import { HttpHeaders, HttpServerRequest } from "effect-app/http"
|
|
5
|
+
import { expectTypeOf } from "@effect/vitest"
|
|
6
|
+
import { Context, Effect, Layer, type Request, S, Schedule } from "effect-app"
|
|
7
|
+
import { type GetEffectContext, InvalidStateError, makeRpcClient, type RPCContextMap, UnauthorizedError } from "effect-app/client"
|
|
8
|
+
import { type HttpServerRequest } from "effect-app/http"
|
|
10
9
|
import type * as EffectRequest from "effect/Request"
|
|
11
10
|
import { it } from "vitest"
|
|
12
11
|
|
|
@@ -29,11 +28,15 @@ const middleware = makeMiddleware({
|
|
|
29
28
|
execute: Effect.gen(function*() {
|
|
30
29
|
return <T extends { config?: { [K in keyof CTXMap]?: any } }, Req extends S.TaggedRequest.All, R>(
|
|
31
30
|
_schema: T & S.Schema<Req, any, never>,
|
|
32
|
-
handler: (
|
|
31
|
+
handler: (
|
|
32
|
+
request: Req,
|
|
33
|
+
headers: any
|
|
34
|
+
) => Effect.Effect<EffectRequest.Request.Success<Req>, EffectRequest.Request.Error<Req>, R>,
|
|
33
35
|
moduleName?: string
|
|
34
36
|
) =>
|
|
35
37
|
(
|
|
36
|
-
req: Req
|
|
38
|
+
req: Req,
|
|
39
|
+
headers: any
|
|
37
40
|
): Effect.Effect<
|
|
38
41
|
Request.Request.Success<Req>,
|
|
39
42
|
Request.Request.Error<Req>,
|
|
@@ -88,7 +91,7 @@ const middleware = makeMiddleware({
|
|
|
88
91
|
// }
|
|
89
92
|
// }
|
|
90
93
|
|
|
91
|
-
return yield* handler(req).pipe(
|
|
94
|
+
return yield* handler(req, headers).pipe(
|
|
92
95
|
Effect.retry(optimisticConcurrencySchedule),
|
|
93
96
|
Effect.provide(ctx as Context.Context<GetEffectContext<CTXMap, T["config"]>>)
|
|
94
97
|
)
|
|
@@ -102,16 +105,16 @@ const middleware = makeMiddleware({
|
|
|
102
105
|
// ..._,
|
|
103
106
|
// name: NonEmptyString255(moduleName ? `${moduleName}.${req._tag}` : req._tag)
|
|
104
107
|
// }))
|
|
105
|
-
const httpReq = yield* HttpServerRequest.HttpServerRequest
|
|
108
|
+
// const httpReq = yield* HttpServerRequest.HttpServerRequest
|
|
106
109
|
// TODO: only pass Authentication etc, or move headers to actual Rpc Headers
|
|
107
|
-
yield* FiberRef.update(
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
)
|
|
110
|
+
// yield* FiberRef.update(
|
|
111
|
+
// Rpc.currentHeaders,
|
|
112
|
+
// (headers) =>
|
|
113
|
+
// HttpHeaders.merge(
|
|
114
|
+
// httpReq.headers,
|
|
115
|
+
// headers
|
|
116
|
+
// )
|
|
117
|
+
// )
|
|
115
118
|
})
|
|
116
119
|
.pipe(Layer.effectDiscard)
|
|
117
120
|
)
|
|
@@ -286,3 +289,55 @@ Router(Something)({
|
|
|
286
289
|
})
|
|
287
290
|
})
|
|
288
291
|
})
|
|
292
|
+
|
|
293
|
+
const { make: _make, routes: _routes } = Router(Something)({
|
|
294
|
+
dependencies: [
|
|
295
|
+
SomethingRepo.Default,
|
|
296
|
+
SomethingService.Default,
|
|
297
|
+
SomethingService2.Default
|
|
298
|
+
],
|
|
299
|
+
*effect(match) {
|
|
300
|
+
const repo = yield* SomethingRepo
|
|
301
|
+
const smth = yield* SomethingService
|
|
302
|
+
const smth2 = yield* SomethingService2
|
|
303
|
+
|
|
304
|
+
// this gets catched in 'routes' type
|
|
305
|
+
if (Math.random() > 0.5) {
|
|
306
|
+
return yield* new InvalidStateError("ciao")
|
|
307
|
+
}
|
|
308
|
+
|
|
309
|
+
console.log({ repo, smth, smth2 })
|
|
310
|
+
|
|
311
|
+
return match({
|
|
312
|
+
*GetSomething(req) {
|
|
313
|
+
console.log(req.id)
|
|
314
|
+
|
|
315
|
+
const _b = yield* Effect.succeed(false)
|
|
316
|
+
if (_b) {
|
|
317
|
+
// expected errors here because RequestError is not a valid error for controllers
|
|
318
|
+
// yield* new RequestError(1 as any)
|
|
319
|
+
// return yield* new RequestError(1 as any)
|
|
320
|
+
}
|
|
321
|
+
if (Math.random() > 0.5) {
|
|
322
|
+
return yield* Effect.succeed("12")
|
|
323
|
+
}
|
|
324
|
+
if (!_b) {
|
|
325
|
+
return yield* new UnauthorizedError()
|
|
326
|
+
} else {
|
|
327
|
+
// expected an error here because a boolean is not a string
|
|
328
|
+
// return _b
|
|
329
|
+
return "12"
|
|
330
|
+
}
|
|
331
|
+
},
|
|
332
|
+
DoSomething: {
|
|
333
|
+
*raw() {
|
|
334
|
+
return yield* Effect.succeed(undefined)
|
|
335
|
+
}
|
|
336
|
+
},
|
|
337
|
+
GetSomething2: { raw: SomethingService2.use(() => Effect.succeed("12")) }
|
|
338
|
+
})
|
|
339
|
+
}
|
|
340
|
+
})
|
|
341
|
+
|
|
342
|
+
expectTypeOf({} as MakeErrors<typeof _make>).toEqualTypeOf<InvalidStateError>()
|
|
343
|
+
expectTypeOf({} as MakeContext<typeof _make>).toEqualTypeOf<SomethingService | SomethingRepo | SomethingService2>()
|
|
@@ -0,0 +1,169 @@
|
|
|
1
|
+
import type { RequestContext } from "@effect-app/infra/RequestContext";
|
|
2
|
+
import { Rpc } from "@effect/rpc";
|
|
3
|
+
import { Effect, Layer, S } from "effect-app";
|
|
4
|
+
import { type RPCContextMap, UnauthorizedError } from "effect-app/client";
|
|
5
|
+
import { HttpServerRequest } from "effect-app/http";
|
|
6
|
+
export interface CTX {
|
|
7
|
+
context: RequestContext;
|
|
8
|
+
}
|
|
9
|
+
export type CTXMap = {
|
|
10
|
+
requireRoles: RPCContextMap.Custom<"", never, typeof UnauthorizedError, Array<string>>;
|
|
11
|
+
};
|
|
12
|
+
export declare const matchAll: <T extends {
|
|
13
|
+
[key: string]: {
|
|
14
|
+
Router: {
|
|
15
|
+
router: Effect<import("@effect/platform/HttpRouter").HttpRouter<any, any>, any, any>;
|
|
16
|
+
};
|
|
17
|
+
routes: Layer.Layer<any, any, any>;
|
|
18
|
+
moduleName: string;
|
|
19
|
+
};
|
|
20
|
+
}, A, E, R>(handlers: T, requestLayer: Layer.Layer<A, E, R>) => {
|
|
21
|
+
layer: Layer.Layer<never, Layer.Layer.Error<T[keyof T]["routes"]>, Layer.Layer.Context<T[keyof T]["routes"]>>;
|
|
22
|
+
Router: import("@effect/platform/HttpRouter").HttpRouter.TagClass<"RootRouter", "RootRouter", Effect.Effect.Success<T[keyof T]["Router"]["router"]> extends infer T_1 ? T_1 extends T_1 & Effect.Effect.Success<T[keyof T]["Router"]["router"]> ? T_1 extends import("@effect/platform/HttpRouter").HttpRouter<infer E_1, any> ? E_1 : never : never : never, R | Exclude<Effect.Effect.Success<T[keyof T]["Router"]["router"]> extends infer T_2 ? T_2 extends T_2 & Effect.Effect.Success<T[keyof T]["Router"]["router"]> ? T_2 extends import("@effect/platform/HttpRouter").HttpRouter<any, infer R_1> ? R_1 : never : never : never, A>>;
|
|
23
|
+
}, matchFor: <const ModuleName extends string, const Rsc extends Record<string, any>>(rsc: Rsc & {
|
|
24
|
+
meta: {
|
|
25
|
+
moduleName: ModuleName;
|
|
26
|
+
};
|
|
27
|
+
}) => {
|
|
28
|
+
<const Make extends {
|
|
29
|
+
dependencies: import("effect-app").Array<Layer.Layer.Any>;
|
|
30
|
+
effect: Effect<{ [K_1 in keyof { [K in keyof Rsc as Rsc[K] extends import("@effect-app/infra/api/routing").AnyRequestModule ? K : never]: Rsc[K]; }]: import("@effect-app/infra/api/routing").Handler<Rsc[K_1], any, any>; }, any, Make["strict"] extends false ? any : Make["dependencies"] extends infer T ? T extends Make["dependencies"] ? T extends readonly [Layer.Layer.Any, ...Layer.Layer.Any[]] ? { [k in keyof T]: Layer.Layer.Success<T[k]>; }[number] : never : never : never>;
|
|
31
|
+
strict?: boolean;
|
|
32
|
+
readonly ಠ_ಠ: never;
|
|
33
|
+
}>(make: Make): {
|
|
34
|
+
moduleName: ModuleName;
|
|
35
|
+
Router: import("@effect/platform/HttpRouter").HttpRouter.TagClass<import("@effect-app/infra/api/routing").RouterShape<Rsc>, `${ModuleName}Router`, never, Exclude<[{ [K_2 in keyof { [K in keyof Rsc as Rsc[K] extends import("@effect-app/infra/api/routing").AnyRequestModule ? K : never]: Rsc[K]; }]: Rpc.Rpc<Rsc[K_2], import("@effect-app/infra/api/routing")._R<ReturnType<import("@effect-app/infra/api/routing").MakeHandlers<Make, { [K in keyof Rsc as Rsc[K] extends import("@effect-app/infra/api/routing").AnyRequestModule ? K : never]: Rsc[K]; }>[K_2]["handler"]>>>; }[keyof { [K in keyof Rsc as Rsc[K] extends import("@effect-app/infra/api/routing").AnyRequestModule ? K : never]: Rsc[K]; }]] extends [Rpc.Rpc<any, infer R>] ? R : never, import("@effect/platform/HttpRouter").HttpRouter.Provided>>;
|
|
36
|
+
routes: Layer.Layer<import("@effect-app/infra/api/routing").RouterShape<Rsc>, import("@effect-app/infra/api/routing").MakeErrors<Make> | (Make["dependencies"] extends infer T_1 ? T_1 extends Make["dependencies"] ? T_1 extends readonly [Layer.Layer.Any, ...Layer.Layer.Any[]] ? { [k_1 in keyof T_1]: Layer.Layer.Error<T_1[k_1]>; }[number] : never : never : never), (Make["dependencies"] extends infer T_2 ? T_2 extends Make["dependencies"] ? T_2 extends readonly [Layer.Layer.Any, ...Layer.Layer.Any[]] ? { [k_2 in keyof T_2]: Layer.Layer.Context<T_2[k_2]>; }[number] : never : never : never) | Exclude<import("@effect-app/infra/api/routing").MakeContext<Make>, Make["dependencies"] extends infer T_3 ? T_3 extends Make["dependencies"] ? T_3 extends readonly [Layer.Layer.Any, ...Layer.Layer.Any[]] ? { [k_3 in keyof T_3]: Layer.Layer.Success<T_3[k_3]>; }[number] : never : never : never>>;
|
|
37
|
+
};
|
|
38
|
+
<const Make extends {
|
|
39
|
+
dependencies: import("effect-app").Array<Layer.Layer.Any>;
|
|
40
|
+
effect: Effect<{ [K in keyof { [K in keyof Rsc as Rsc[K] extends import("@effect-app/infra/api/routing").AnyRequestModule ? K : never]: Rsc[K]; }]: import("@effect-app/infra/api/routing").Handler<Rsc[K], any, any>; }, any, Make["strict"] extends false ? any : Make["dependencies"] extends infer T ? T extends Make["dependencies"] ? T extends readonly [Layer.Layer.Any, ...Layer.Layer.Any[]] ? { [k in keyof T]: Layer.Layer.Success<T[k]>; }[number] : never : never : never>;
|
|
41
|
+
strict?: boolean;
|
|
42
|
+
readonly ಠ_ಠ: never;
|
|
43
|
+
}>(make: Make): {
|
|
44
|
+
moduleName: ModuleName;
|
|
45
|
+
Router: import("@effect/platform/HttpRouter").HttpRouter.TagClass<import("@effect-app/infra/api/routing").RouterShape<Rsc>, `${ModuleName}Router`, never, Exclude<[{ [K_1 in keyof { [K in keyof Rsc as Rsc[K] extends import("@effect-app/infra/api/routing").AnyRequestModule ? K : never]: Rsc[K]; }]: Rpc.Rpc<Rsc[K_1], import("@effect-app/infra/api/routing")._R<ReturnType<import("@effect-app/infra/api/routing").MakeHandlers<Make, { [K in keyof Rsc as Rsc[K] extends import("@effect-app/infra/api/routing").AnyRequestModule ? K : never]: Rsc[K]; }>[K_1]["handler"]>>>; }[keyof { [K in keyof Rsc as Rsc[K] extends import("@effect-app/infra/api/routing").AnyRequestModule ? K : never]: Rsc[K]; }]] extends [Rpc.Rpc<any, infer R>] ? R : never, import("@effect/platform/HttpRouter").HttpRouter.Provided>>;
|
|
46
|
+
routes: Layer.Layer<import("@effect-app/infra/api/routing").RouterShape<Rsc>, import("@effect-app/infra/api/routing").MakeErrors<Make> | (Make["dependencies"] extends infer T_1 ? T_1 extends Make["dependencies"] ? T_1 extends readonly [Layer.Layer.Any, ...Layer.Layer.Any[]] ? { [k_1 in keyof T_1]: Layer.Layer.Error<T_1[k_1]>; }[number] : never : never : never), (Make["dependencies"] extends infer T_2 ? T_2 extends Make["dependencies"] ? T_2 extends readonly [Layer.Layer.Any, ...Layer.Layer.Any[]] ? { [k_2 in keyof T_2]: Layer.Layer.Context<T_2[k_2]>; }[number] : never : never : never) | Exclude<import("@effect-app/infra/api/routing").MakeContext<Make>, Make["dependencies"] extends infer T_3 ? T_3 extends Make["dependencies"] ? T_3 extends readonly [Layer.Layer.Any, ...Layer.Layer.Any[]] ? { [k_3 in keyof T_3]: Layer.Layer.Success<T_3[k_3]>; }[number] : never : never : never>>;
|
|
47
|
+
};
|
|
48
|
+
<const Make extends {
|
|
49
|
+
dependencies: import("effect-app").Array<Layer.Layer.Any>;
|
|
50
|
+
effect: Effect<{ [K in keyof { [K in keyof Rsc as Rsc[K] extends import("@effect-app/infra/api/routing").AnyRequestModule ? K : never]: Rsc[K]; }]: import("@effect-app/infra/api/routing").Handler<Rsc[K], any, any>; }, any, Make["strict"] extends false ? any : Make["dependencies"] extends infer T ? T extends Make["dependencies"] ? T extends readonly [Layer.Layer.Any, ...Layer.Layer.Any[]] ? { [k in keyof T]: Layer.Layer.Success<T[k]>; }[number] : never : never : never>;
|
|
51
|
+
strict?: boolean;
|
|
52
|
+
readonly ಠ_ಠ: never;
|
|
53
|
+
}>(make: Make): {
|
|
54
|
+
moduleName: ModuleName;
|
|
55
|
+
Router: import("@effect/platform/HttpRouter").HttpRouter.TagClass<import("@effect-app/infra/api/routing").RouterShape<Rsc>, `${ModuleName}Router`, never, Exclude<[{ [K_1 in keyof { [K in keyof Rsc as Rsc[K] extends import("@effect-app/infra/api/routing").AnyRequestModule ? K : never]: Rsc[K]; }]: Rpc.Rpc<Rsc[K_1], import("@effect-app/infra/api/routing")._R<ReturnType<import("@effect-app/infra/api/routing").MakeHandlers<Make, { [K in keyof Rsc as Rsc[K] extends import("@effect-app/infra/api/routing").AnyRequestModule ? K : never]: Rsc[K]; }>[K_1]["handler"]>>>; }[keyof { [K in keyof Rsc as Rsc[K] extends import("@effect-app/infra/api/routing").AnyRequestModule ? K : never]: Rsc[K]; }]] extends [Rpc.Rpc<any, infer R>] ? R : never, import("@effect/platform/HttpRouter").HttpRouter.Provided>>;
|
|
56
|
+
routes: Layer.Layer<import("@effect-app/infra/api/routing").RouterShape<Rsc>, import("@effect-app/infra/api/routing").MakeErrors<Make> | (Make["dependencies"] extends infer T_1 ? T_1 extends Make["dependencies"] ? T_1 extends readonly [Layer.Layer.Any, ...Layer.Layer.Any[]] ? { [k_1 in keyof T_1]: Layer.Layer.Error<T_1[k_1]>; }[number] : never : never : never), (Make["dependencies"] extends infer T_2 ? T_2 extends Make["dependencies"] ? T_2 extends readonly [Layer.Layer.Any, ...Layer.Layer.Any[]] ? { [k_2 in keyof T_2]: Layer.Layer.Context<T_2[k_2]>; }[number] : never : never : never) | Exclude<import("@effect-app/infra/api/routing").MakeContext<Make>, Make["dependencies"] extends infer T_3 ? T_3 extends Make["dependencies"] ? T_3 extends readonly [Layer.Layer.Any, ...Layer.Layer.Any[]] ? { [k_3 in keyof T_3]: Layer.Layer.Success<T_3[k_3]>; }[number] : never : never : never>>;
|
|
57
|
+
};
|
|
58
|
+
<const Make extends {
|
|
59
|
+
dependencies: import("effect-app").Array<Layer.Layer.Any>;
|
|
60
|
+
effect: Effect<{ [K in keyof { [K in keyof Rsc as Rsc[K] extends import("@effect-app/infra/api/routing").AnyRequestModule ? K : never]: Rsc[K]; }]: import("@effect-app/infra/api/routing").Handler<Rsc[K], any, any>; }, any, Make["dependencies"] extends infer T ? T extends Make["dependencies"] ? T extends readonly [Layer.Layer.Any, ...Layer.Layer.Any[]] ? { [k in keyof T]: Layer.Layer.Success<T[k]>; }[number] : never : never : never>;
|
|
61
|
+
strict?: boolean;
|
|
62
|
+
readonly ಠ_ಠ: never;
|
|
63
|
+
}>(make: Make): {
|
|
64
|
+
moduleName: ModuleName;
|
|
65
|
+
Router: import("@effect/platform/HttpRouter").HttpRouter.TagClass<import("@effect-app/infra/api/routing").RouterShape<Rsc>, `${ModuleName}Router`, never, Exclude<[{ [K_1 in keyof { [K in keyof Rsc as Rsc[K] extends import("@effect-app/infra/api/routing").AnyRequestModule ? K : never]: Rsc[K]; }]: Rpc.Rpc<Rsc[K_1], import("@effect-app/infra/api/routing")._R<ReturnType<import("@effect-app/infra/api/routing").MakeHandlers<Make, { [K in keyof Rsc as Rsc[K] extends import("@effect-app/infra/api/routing").AnyRequestModule ? K : never]: Rsc[K]; }>[K_1]["handler"]>>>; }[keyof { [K in keyof Rsc as Rsc[K] extends import("@effect-app/infra/api/routing").AnyRequestModule ? K : never]: Rsc[K]; }]] extends [Rpc.Rpc<any, infer R>] ? R : never, import("@effect/platform/HttpRouter").HttpRouter.Provided>>;
|
|
66
|
+
routes: Layer.Layer<import("@effect-app/infra/api/routing").RouterShape<Rsc>, import("@effect-app/infra/api/routing").MakeErrors<Make> | (Make["dependencies"] extends infer T_1 ? T_1 extends Make["dependencies"] ? T_1 extends readonly [Layer.Layer.Any, ...Layer.Layer.Any[]] ? { [k_1 in keyof T_1]: Layer.Layer.Error<T_1[k_1]>; }[number] : never : never : never), (Make["dependencies"] extends infer T_2 ? T_2 extends Make["dependencies"] ? T_2 extends readonly [Layer.Layer.Any, ...Layer.Layer.Any[]] ? { [k_2 in keyof T_2]: Layer.Layer.Context<T_2[k_2]>; }[number] : never : never : never) | Exclude<import("@effect-app/infra/api/routing").MakeContext<Make>, Make["dependencies"] extends infer T_3 ? T_3 extends Make["dependencies"] ? T_3 extends readonly [Layer.Layer.Any, ...Layer.Layer.Any[]] ? { [k_3 in keyof T_3]: Layer.Layer.Success<T_3[k_3]>; }[number] : never : never : never>>;
|
|
67
|
+
};
|
|
68
|
+
<const Make extends {
|
|
69
|
+
dependencies: import("effect-app").Array<Layer.Layer.Any>;
|
|
70
|
+
effect: Effect<{ [K in keyof { [K in keyof Rsc as Rsc[K] extends import("@effect-app/infra/api/routing").AnyRequestModule ? K : never]: Rsc[K]; }]: import("@effect-app/infra/api/routing").Handler<Rsc[K], any, any>; }, any, Make["dependencies"] extends infer T ? T extends Make["dependencies"] ? T extends readonly [Layer.Layer.Any, ...Layer.Layer.Any[]] ? { [k in keyof T]: Layer.Layer.Success<T[k]>; }[number] : never : never : never>;
|
|
71
|
+
strict?: boolean;
|
|
72
|
+
}>(make: Make): {
|
|
73
|
+
moduleName: ModuleName;
|
|
74
|
+
Router: import("@effect/platform/HttpRouter").HttpRouter.TagClass<import("@effect-app/infra/api/routing").RouterShape<Rsc>, `${ModuleName}Router`, never, Exclude<[{ [K_1 in keyof { [K in keyof Rsc as Rsc[K] extends import("@effect-app/infra/api/routing").AnyRequestModule ? K : never]: Rsc[K]; }]: Rpc.Rpc<Rsc[K_1], import("@effect-app/infra/api/routing")._R<ReturnType<import("@effect-app/infra/api/routing").MakeHandlers<Make, { [K in keyof Rsc as Rsc[K] extends import("@effect-app/infra/api/routing").AnyRequestModule ? K : never]: Rsc[K]; }>[K_1]["handler"]>>>; }[keyof { [K in keyof Rsc as Rsc[K] extends import("@effect-app/infra/api/routing").AnyRequestModule ? K : never]: Rsc[K]; }]] extends [Rpc.Rpc<any, infer R>] ? R : never, import("@effect/platform/HttpRouter").HttpRouter.Provided>>;
|
|
75
|
+
routes: Layer.Layer<import("@effect-app/infra/api/routing").RouterShape<Rsc>, import("@effect-app/infra/api/routing").MakeErrors<Make> | (Make["dependencies"] extends infer T_1 ? T_1 extends Make["dependencies"] ? T_1 extends readonly [Layer.Layer.Any, ...Layer.Layer.Any[]] ? { [k_1 in keyof T_1]: Layer.Layer.Error<T_1[k_1]>; }[number] : never : never : never), (Make["dependencies"] extends infer T_2 ? T_2 extends Make["dependencies"] ? T_2 extends readonly [Layer.Layer.Any, ...Layer.Layer.Any[]] ? { [k_2 in keyof T_2]: Layer.Layer.Context<T_2[k_2]>; }[number] : never : never : never) | Exclude<import("@effect-app/infra/api/routing").MakeContext<Make>, Make["dependencies"] extends infer T_3 ? T_3 extends Make["dependencies"] ? T_3 extends readonly [Layer.Layer.Any, ...Layer.Layer.Any[]] ? { [k_3 in keyof T_3]: Layer.Layer.Success<T_3[k_3]>; }[number] : never : never : never>>;
|
|
76
|
+
};
|
|
77
|
+
<const Make extends {
|
|
78
|
+
dependencies: [...Make["dependencies"], ...Exclude<Effect.Effect.Context<Make["effect"]>, import("effect/Types").Contravariant.Type<import("@effect-app/infra/api/routing").MakeDeps<Make>[typeof Layer.LayerTypeId]["_ROut"]>> extends never ? [] : [Layer.Layer<Exclude<Effect.Effect.Context<Make["effect"]>, import("effect/Types").Contravariant.Type<import("@effect-app/infra/api/routing").MakeDeps<Make>[typeof Layer.LayerTypeId]["_ROut"]>>, never, never>]];
|
|
79
|
+
effect: Effect<{ [K in keyof { [K in keyof Rsc as Rsc[K] extends import("@effect-app/infra/api/routing").AnyRequestModule ? K : never]: Rsc[K]; }]: import("@effect-app/infra/api/routing").Handler<Rsc[K], any, any>; }, any, any>;
|
|
80
|
+
strict?: boolean;
|
|
81
|
+
}>(make: Make): {
|
|
82
|
+
moduleName: ModuleName;
|
|
83
|
+
Router: import("@effect/platform/HttpRouter").HttpRouter.TagClass<import("@effect-app/infra/api/routing").RouterShape<Rsc>, `${ModuleName}Router`, never, never>;
|
|
84
|
+
routes: any;
|
|
85
|
+
};
|
|
86
|
+
} & import("@effect-app/infra/api/routing").RouteMatcher<CTXMap, Rsc, HttpServerRequest.HttpServerRequest> & {
|
|
87
|
+
router: import("@effect-app/infra/api/routing").AddAction<{ [K in keyof Rsc as Rsc[K] extends import("@effect-app/infra/api/routing").AnyRequestModule ? K : never]: Rsc[K]; }[keyof { [K in keyof Rsc as Rsc[K] extends import("@effect-app/infra/api/routing").AnyRequestModule ? K : never]: Rsc[K]; }], {}>;
|
|
88
|
+
router2: { [K in keyof Rsc as Rsc[K] extends import("@effect-app/infra/api/routing").AnyRequestModule ? K : never]: Rsc[K]; } extends infer T extends Record<string, import("@effect-app/infra/api/routing").AnyRequestModule> ? { [K in keyof T]: import("@effect-app/infra/api/routing").Method<{ [K in keyof Rsc as Rsc[K] extends import("@effect-app/infra/api/routing").AnyRequestModule ? K : never]: Rsc[K]; }, K, "d", {}>; } : never;
|
|
89
|
+
};
|
|
90
|
+
export type RequestConfig = {
|
|
91
|
+
/** Disable authentication requirement */
|
|
92
|
+
allowAnonymous?: true;
|
|
93
|
+
/** Control the roles that are required to access the resource */
|
|
94
|
+
allowRoles?: readonly string[];
|
|
95
|
+
};
|
|
96
|
+
export declare const Req: <Self>() => {
|
|
97
|
+
<Tag extends string, Payload extends S.Struct.Fields, C extends {
|
|
98
|
+
success: S.Schema.Any | S.Struct.Fields;
|
|
99
|
+
failure: S.Schema.Any | S.Struct.Fields;
|
|
100
|
+
}>(tag: Tag, fields: Payload, config: RequestConfig & C): S.TaggedRequestClass<Self, Tag, {
|
|
101
|
+
readonly _tag: S.tag<Tag>;
|
|
102
|
+
} & Payload, (RequestConfig & C)["success"] extends infer T ? T extends (RequestConfig & C)["success"] ? T extends import("effect/Schema").Struct.Fields ? S.TypeLiteral<T, []> : T extends S.Schema.Any ? T : never : never : never, ([((RequestConfig & C)["failure"] extends infer T_1 ? T_1 extends (RequestConfig & C)["failure"] ? T_1 extends import("effect/Schema").Struct.Fields ? S.TypeLiteral<T_1, []> : T_1 extends S.Schema.Any ? T_1 : never : never : never) | import("effect-app/client").GetEffectError<CTXMap, C>] extends [never] ? [] : [((RequestConfig & C)["failure"] extends infer T_1 ? T_1 extends (RequestConfig & C)["failure"] ? T_1 extends import("effect/Schema").Struct.Fields ? S.TypeLiteral<T_1, []> : T_1 extends S.Schema.Any ? T_1 : never : never : never) | import("effect-app/client").GetEffectError<CTXMap, C>]) extends infer T_2 ? T_2 extends ([((RequestConfig & C)["failure"] extends infer T_1 ? T_1 extends (RequestConfig & C)["failure"] ? T_1 extends import("effect/Schema").Struct.Fields ? S.TypeLiteral<T_1, []> : T_1 extends S.Schema.Any ? T_1 : never : never : never) | import("effect-app/client").GetEffectError<CTXMap, C>] extends [never] ? [] : [((RequestConfig & C)["failure"] extends infer T_1 ? T_1 extends (RequestConfig & C)["failure"] ? T_1 extends import("effect/Schema").Struct.Fields ? S.TypeLiteral<T_1, []> : T_1 extends S.Schema.Any ? T_1 : never : never : never) | import("effect-app/client").GetEffectError<CTXMap, C>]) ? T_2 extends readonly S.Schema.All[] ? S.Union<T_2> : typeof S.Never : never : never> & {
|
|
103
|
+
config: Omit<C, "success" | "failure">;
|
|
104
|
+
};
|
|
105
|
+
<Tag extends string, Payload_1 extends S.Struct.Fields, C_1 extends {
|
|
106
|
+
success: S.Schema.Any | S.Struct.Fields;
|
|
107
|
+
}>(tag: Tag, fields: Payload_1, config: RequestConfig & C_1): S.TaggedRequestClass<Self, Tag, {
|
|
108
|
+
readonly _tag: S.tag<Tag>;
|
|
109
|
+
} & Payload_1, (RequestConfig & C_1)["success"] extends infer T ? T extends (RequestConfig & C_1)["success"] ? T extends import("effect/Schema").Struct.Fields ? S.TypeLiteral<T, []> : T extends S.Schema.Any ? T : never : never : never, ([import("effect-app/client").GetEffectError<CTXMap, C_1>] extends [never] ? [] : [import("effect-app/client").GetEffectError<CTXMap, C_1>]) extends infer T_1 ? T_1 extends ([import("effect-app/client").GetEffectError<CTXMap, C_1>] extends [never] ? [] : [import("effect-app/client").GetEffectError<CTXMap, C_1>]) ? T_1 extends readonly S.Schema.All[] ? S.Union<T_1> : typeof S.Never : never : never> & {
|
|
110
|
+
config: Omit<C_1, "success" | "failure">;
|
|
111
|
+
};
|
|
112
|
+
<Tag extends string, Payload_2 extends S.Struct.Fields, C_2 extends {
|
|
113
|
+
failure: S.Schema.Any | S.Struct.Fields;
|
|
114
|
+
}>(tag: Tag, fields: Payload_2, config: RequestConfig & C_2): S.TaggedRequestClass<Self, Tag, {
|
|
115
|
+
readonly _tag: S.tag<Tag>;
|
|
116
|
+
} & Payload_2, typeof S.Void, ([((RequestConfig & C_2)["failure"] extends infer T ? T extends (RequestConfig & C_2)["failure"] ? T extends import("effect/Schema").Struct.Fields ? S.TypeLiteral<T, []> : T extends S.Schema.Any ? T : never : never : never) | import("effect-app/client").GetEffectError<CTXMap, C_2>] extends [never] ? [] : [((RequestConfig & C_2)["failure"] extends infer T ? T extends (RequestConfig & C_2)["failure"] ? T extends import("effect/Schema").Struct.Fields ? S.TypeLiteral<T, []> : T extends S.Schema.Any ? T : never : never : never) | import("effect-app/client").GetEffectError<CTXMap, C_2>]) extends infer T_1 ? T_1 extends ([((RequestConfig & C_2)["failure"] extends infer T ? T extends (RequestConfig & C_2)["failure"] ? T extends import("effect/Schema").Struct.Fields ? S.TypeLiteral<T, []> : T extends S.Schema.Any ? T : never : never : never) | import("effect-app/client").GetEffectError<CTXMap, C_2>] extends [never] ? [] : [((RequestConfig & C_2)["failure"] extends infer T ? T extends (RequestConfig & C_2)["failure"] ? T extends import("effect/Schema").Struct.Fields ? S.TypeLiteral<T, []> : T extends S.Schema.Any ? T : never : never : never) | import("effect-app/client").GetEffectError<CTXMap, C_2>]) ? T_1 extends readonly S.Schema.All[] ? S.Union<T_1> : typeof S.Never : never : never> & {
|
|
117
|
+
config: Omit<C_2, "success" | "failure">;
|
|
118
|
+
};
|
|
119
|
+
<Tag extends string, Payload_3 extends S.Struct.Fields, C_3 extends Record<string, any>>(tag: Tag, fields: Payload_3, config: C_3 & RequestConfig): S.TaggedRequestClass<Self, Tag, {
|
|
120
|
+
readonly _tag: S.tag<Tag>;
|
|
121
|
+
} & Payload_3, typeof S.Void, ([import("effect-app/client").GetEffectError<CTXMap, C_3>] extends [never] ? [] : [import("effect-app/client").GetEffectError<CTXMap, C_3>]) extends infer T ? T extends ([import("effect-app/client").GetEffectError<CTXMap, C_3>] extends [never] ? [] : [import("effect-app/client").GetEffectError<CTXMap, C_3>]) ? T extends readonly S.Schema.All[] ? S.Union<T> : typeof S.Never : never : never> & {
|
|
122
|
+
config: Omit<C_3, "success" | "failure">;
|
|
123
|
+
};
|
|
124
|
+
<Tag extends string, Payload_4 extends S.Struct.Fields>(tag: Tag, fields: Payload_4): S.TaggedRequestClass<Self, Tag, {
|
|
125
|
+
readonly _tag: S.tag<Tag>;
|
|
126
|
+
} & Payload_4, typeof S.Void, never>;
|
|
127
|
+
};
|
|
128
|
+
declare const GetSomething_base: S.TaggedRequestClass<GetSomething, "GetSomething", {
|
|
129
|
+
readonly _tag: S.tag<"GetSomething">;
|
|
130
|
+
} & {
|
|
131
|
+
id: typeof S.String;
|
|
132
|
+
}, typeof S.Void, S.Union<[typeof UnauthorizedError]>> & {
|
|
133
|
+
config: Omit<{
|
|
134
|
+
success: typeof S.Void;
|
|
135
|
+
}, "success" | "failure">;
|
|
136
|
+
};
|
|
137
|
+
export declare class GetSomething extends GetSomething_base {
|
|
138
|
+
}
|
|
139
|
+
declare const GetSomethingElse_base: S.TaggedRequestClass<GetSomethingElse, "GetSomethingElse", {
|
|
140
|
+
readonly _tag: S.tag<"GetSomethingElse">;
|
|
141
|
+
} & {
|
|
142
|
+
id: typeof S.String;
|
|
143
|
+
}, typeof S.String, S.Union<[typeof UnauthorizedError]>> & {
|
|
144
|
+
config: Omit<{
|
|
145
|
+
success: typeof S.String;
|
|
146
|
+
}, "success" | "failure">;
|
|
147
|
+
};
|
|
148
|
+
export declare class GetSomethingElse extends GetSomethingElse_base {
|
|
149
|
+
}
|
|
150
|
+
declare const SomethingService_base: import("effect/Effect").Service.Class<SomethingService, "SomethingService", {
|
|
151
|
+
readonly dependencies: readonly [];
|
|
152
|
+
readonly effect: Effect.Effect<{}, never, never>;
|
|
153
|
+
}>;
|
|
154
|
+
export declare class SomethingService extends SomethingService_base {
|
|
155
|
+
}
|
|
156
|
+
declare const SomethingRepo_base: import("effect/Effect").Service.Class<SomethingRepo, "SomethingRepo", {
|
|
157
|
+
readonly dependencies: readonly [Layer.Layer<SomethingService, never, never>];
|
|
158
|
+
readonly effect: Effect.Effect<{}, never, SomethingService>;
|
|
159
|
+
}>;
|
|
160
|
+
export declare class SomethingRepo extends SomethingRepo_base {
|
|
161
|
+
}
|
|
162
|
+
declare const SomethingService2_base: import("effect/Effect").Service.Class<SomethingService2, "SomethingService2", {
|
|
163
|
+
readonly dependencies: readonly [];
|
|
164
|
+
readonly effect: Effect.Effect<{}, never, never>;
|
|
165
|
+
}>;
|
|
166
|
+
export declare class SomethingService2 extends SomethingService2_base {
|
|
167
|
+
}
|
|
168
|
+
export {};
|
|
169
|
+
//# sourceMappingURL=controller.test%20copy.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"controller.test copy.d.ts","sourceRoot":"","sources":["../controller.test copy.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;;;;;sBA2DnB,KACH;;;;;;GA5DwB,QAAQ;;;;;;uDAmG8B,KAAK,CAAC,GAAG;;;;;;;;;;uDAAkyD,KAAK,CAAC,GAAG;;;;;;;;;;uDAAkyD,KAAK,CAAC,GAAG;;;;;;;;;;uDAAkyD,KAAK,CAAC,GAAG;;;;;;;;;;uDAA6vD,KAAK,CAAC,GAAG;;;;;;;;;;;;;;;;;;;;CAnG7oO,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"}
|