@effect-app/infra 2.54.5 → 2.55.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +12 -0
- package/dist/Model/query/new-kid-interpreter.d.ts +1 -1
- package/dist/QueueMaker/sbqueue.d.ts +1 -1
- package/dist/adapters/ServiceBus.d.ts +1 -1
- package/dist/api/routing.d.ts +83 -2
- package/dist/api/routing.d.ts.map +1 -1
- package/dist/api/routing.js +23 -18
- package/package.json +11 -11
- package/src/api/routing.ts +166 -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")
|
|
@@ -204,6 +205,7 @@ export const makeRouter = <
|
|
|
204
205
|
const items = typedKeysOf(filtered).reduce(
|
|
205
206
|
(prev, cur) => {
|
|
206
207
|
;(prev as any)[cur] = Object.assign((fnOrEffect: any) => {
|
|
208
|
+
if (fnOrEffect[Symbol.toStringTag] === "GeneratorFunction") fnOrEffect = Effect.fnUntraced(fnOrEffect)
|
|
207
209
|
const stack = new Error().stack?.split("\n").slice(2).join("\n")
|
|
208
210
|
return Effect.isEffect(fnOrEffect)
|
|
209
211
|
? class {
|
|
@@ -265,6 +267,86 @@ export const makeRouter = <
|
|
|
265
267
|
? { [k in keyof Layers]: Layer.Layer.Error<Layers[k]> }[number]
|
|
266
268
|
: never
|
|
267
269
|
|
|
270
|
+
const total = Object.keys(filtered).length
|
|
271
|
+
const router: AddAction<Filtered[keyof Filtered]> = {
|
|
272
|
+
accum: {},
|
|
273
|
+
add(a: any) {
|
|
274
|
+
;(this.accum as any)[a.request._tag] = a
|
|
275
|
+
;(this as any)[a.request._tag] = a
|
|
276
|
+
if (Object.keys(this.accum).length === total) return this.accum as any
|
|
277
|
+
return this as any
|
|
278
|
+
}
|
|
279
|
+
}
|
|
280
|
+
|
|
281
|
+
type HndlrWithInputG<
|
|
282
|
+
Action extends AnyRequestModule,
|
|
283
|
+
Mode extends "d" | "raw"
|
|
284
|
+
> = (
|
|
285
|
+
req: S.Schema.Type<Action>
|
|
286
|
+
) => Generator<
|
|
287
|
+
YieldWrap<Effect<any, S.Schema.Type<GetFailure<Action>> | S.ParseResult.ParseError, any>>,
|
|
288
|
+
GetSuccessShape<Action, Mode>,
|
|
289
|
+
never
|
|
290
|
+
>
|
|
291
|
+
|
|
292
|
+
type HndlrWithInput<Action extends AnyRequestModule, Mode extends "d" | "raw"> = (
|
|
293
|
+
req: S.Schema.Type<Action>
|
|
294
|
+
) => Effect<
|
|
295
|
+
GetSuccessShape<Action, Mode>,
|
|
296
|
+
S.Schema.Type<GetFailure<Action>> | S.ParseResult.ParseError,
|
|
297
|
+
any
|
|
298
|
+
>
|
|
299
|
+
|
|
300
|
+
type Hndlr<Action extends AnyRequestModule, Mode extends "d" | "raw"> = Effect<
|
|
301
|
+
GetSuccessShape<Action, Mode>,
|
|
302
|
+
S.Schema.Type<GetFailure<Action>> | S.ParseResult.ParseError,
|
|
303
|
+
any
|
|
304
|
+
>
|
|
305
|
+
|
|
306
|
+
type Hndlrs<Action extends AnyRequestModule, Mode extends "d" | "raw"> =
|
|
307
|
+
| HndlrWithInputG<Action, Mode>
|
|
308
|
+
| HndlrWithInput<Action, Mode>
|
|
309
|
+
| Hndlr<Action, Mode>
|
|
310
|
+
|
|
311
|
+
type DHndlrs<Action extends AnyRequestModule> = Hndlrs<Action, "d">
|
|
312
|
+
|
|
313
|
+
type RawHndlrs<Action extends AnyRequestModule> =
|
|
314
|
+
| { raw: HndlrWithInputG<Action, "raw"> }
|
|
315
|
+
| { raw: HndlrWithInput<Action, "raw"> }
|
|
316
|
+
| { raw: Hndlr<Action, "raw"> }
|
|
317
|
+
|
|
318
|
+
type AnyHndlrs<Action extends AnyRequestModule> = RawHndlrs<Action> | DHndlrs<Action>
|
|
319
|
+
|
|
320
|
+
const router3: <
|
|
321
|
+
const Impl extends {
|
|
322
|
+
[K in keyof Filter<Rsc>]: AnyHndlrs<Rsc[K]>
|
|
323
|
+
}
|
|
324
|
+
>(
|
|
325
|
+
impl: Impl
|
|
326
|
+
) => {
|
|
327
|
+
[K in keyof Impl & keyof Filter<Rsc>]: Handler<
|
|
328
|
+
Filter<Rsc>[K],
|
|
329
|
+
Impl[K] extends { raw: any } ? "raw" : "d",
|
|
330
|
+
Exclude<
|
|
331
|
+
| Context
|
|
332
|
+
| Exclude<
|
|
333
|
+
Impl[K] extends { raw: any } ? Impl[K]["raw"] extends (...args: any[]) => Effect<any, any, infer R> ? R
|
|
334
|
+
: Impl[K]["raw"] extends Effect<any, any, infer R> ? R
|
|
335
|
+
: never
|
|
336
|
+
: Impl[K] extends (...args: any[]) => Effect<any, any, infer R> ? R
|
|
337
|
+
: Impl[K] extends Effect<any, any, infer R> ? R
|
|
338
|
+
: never,
|
|
339
|
+
GetEffectContext<CTXMap, Rsc[K]["config"]>
|
|
340
|
+
>,
|
|
341
|
+
HttpRouter.HttpRouter.Provided
|
|
342
|
+
>
|
|
343
|
+
>
|
|
344
|
+
} = (obj: Record<keyof Filtered, any>) =>
|
|
345
|
+
typedKeysOf(obj).reduce((acc, cur) => {
|
|
346
|
+
acc[cur] = "raw" in obj[cur] ? items[cur].raw(obj[cur].raw) : items[cur](obj[cur])
|
|
347
|
+
return acc
|
|
348
|
+
}, {} as any)
|
|
349
|
+
|
|
268
350
|
const f = <
|
|
269
351
|
E,
|
|
270
352
|
R,
|
|
@@ -275,7 +357,7 @@ export const makeRouter = <
|
|
|
275
357
|
TLayers extends NonEmptyReadonlyArray<Layer.Layer.Any> | never[]
|
|
276
358
|
>(
|
|
277
359
|
layers: TLayers,
|
|
278
|
-
make: Effect<THandlers, E, R>
|
|
360
|
+
make: Effect<THandlers, E, R> | Generator<YieldWrap<Effect<any, any, any>>, THandlers, E>
|
|
279
361
|
) => {
|
|
280
362
|
type ProvidedLayers =
|
|
281
363
|
| { [k in keyof Layers]: Layer.Layer.Success<Layers[k]> }[number]
|
|
@@ -285,6 +367,10 @@ export const makeRouter = <
|
|
|
285
367
|
const layer = (requestLayers: any) =>
|
|
286
368
|
Effect
|
|
287
369
|
.gen(function*() {
|
|
370
|
+
make = (make as any)[Symbol.toStringTag] === "GeneratorFunction"
|
|
371
|
+
? Effect.fnUntraced(make as any)(router3) as any
|
|
372
|
+
: make
|
|
373
|
+
|
|
288
374
|
const controllers = yield* make
|
|
289
375
|
const rpc = yield* makeRpc(middleware)
|
|
290
376
|
|
|
@@ -466,6 +552,35 @@ export const makeRouter = <
|
|
|
466
552
|
|
|
467
553
|
const effect: {
|
|
468
554
|
// Multiple times duplicated the "good" overload, so that errors will only mention the last overload when failing
|
|
555
|
+
<
|
|
556
|
+
const Make extends {
|
|
557
|
+
dependencies: Array<Layer.Layer.Any>
|
|
558
|
+
effect: (match: typeof router3) => Generator<
|
|
559
|
+
YieldWrap<Effect<any, any, Make["strict"] extends false ? any : GetSuccess<Make["dependencies"]>>>,
|
|
560
|
+
{ [K in keyof Filter<Rsc>]: AHandler<Rsc[K]> },
|
|
561
|
+
any
|
|
562
|
+
>
|
|
563
|
+
|
|
564
|
+
strict?: boolean
|
|
565
|
+
/** @deprecated */
|
|
566
|
+
readonly ಠ_ಠ: never
|
|
567
|
+
}
|
|
568
|
+
>(
|
|
569
|
+
make: Make
|
|
570
|
+
): {
|
|
571
|
+
moduleName: ModuleName
|
|
572
|
+
|
|
573
|
+
routes: (requestLayers: any) => Layer.Layer<
|
|
574
|
+
RouterShape<Rsc>,
|
|
575
|
+
MakeErrors<Make> | GetError<Make["dependencies"]>,
|
|
576
|
+
| GetContext<Make["dependencies"]>
|
|
577
|
+
// | GetContext<Layers> // elsewhere provided
|
|
578
|
+
| Exclude<MakeContext<Make> | RMW, GetSuccess<Make["dependencies"]> | GetSuccess<Layers>>
|
|
579
|
+
>
|
|
580
|
+
|
|
581
|
+
// just for type testing purposes
|
|
582
|
+
make: Make
|
|
583
|
+
}
|
|
469
584
|
<
|
|
470
585
|
const Make extends {
|
|
471
586
|
dependencies: Array<Layer.Layer.Any>
|
|
@@ -490,6 +605,9 @@ export const makeRouter = <
|
|
|
490
605
|
// | GetContext<Layers> // elsewhere provided
|
|
491
606
|
| Exclude<MakeContext<Make> | RMW, GetSuccess<Make["dependencies"]> | GetSuccess<Layers>>
|
|
492
607
|
>
|
|
608
|
+
|
|
609
|
+
// just for type testing purposes
|
|
610
|
+
make: Make
|
|
493
611
|
}
|
|
494
612
|
<
|
|
495
613
|
const Make extends {
|
|
@@ -515,6 +633,9 @@ export const makeRouter = <
|
|
|
515
633
|
// | GetContext<Layers> // elsewhere provided
|
|
516
634
|
| Exclude<MakeContext<Make> | RMW, GetSuccess<Make["dependencies"]> | GetSuccess<Layers>>
|
|
517
635
|
>
|
|
636
|
+
|
|
637
|
+
// just for type testing purposes
|
|
638
|
+
make: Make
|
|
518
639
|
}
|
|
519
640
|
<
|
|
520
641
|
const Make extends {
|
|
@@ -540,6 +661,9 @@ export const makeRouter = <
|
|
|
540
661
|
// | GetContext<Layers> // elsewhere provided
|
|
541
662
|
| Exclude<MakeContext<Make> | RMW, GetSuccess<Make["dependencies"]> | GetSuccess<Layers>>
|
|
542
663
|
>
|
|
664
|
+
|
|
665
|
+
// just for type testing purposes
|
|
666
|
+
make: Make
|
|
543
667
|
}
|
|
544
668
|
<
|
|
545
669
|
const Make extends {
|
|
@@ -565,6 +689,9 @@ export const makeRouter = <
|
|
|
565
689
|
// | GetContext<Layers> // elsewhere provided
|
|
566
690
|
| Exclude<MakeContext<Make> | RMW, GetSuccess<Make["dependencies"]> | GetSuccess<Layers>>
|
|
567
691
|
>
|
|
692
|
+
|
|
693
|
+
// just for type testing purposes
|
|
694
|
+
make: Make
|
|
568
695
|
}
|
|
569
696
|
<
|
|
570
697
|
const Make extends {
|
|
@@ -588,6 +715,36 @@ export const makeRouter = <
|
|
|
588
715
|
// | GetContext<Layers> // elsewhere provided
|
|
589
716
|
| Exclude<MakeContext<Make> | RMW, GetSuccess<Make["dependencies"]> | GetSuccess<Layers>>
|
|
590
717
|
>
|
|
718
|
+
|
|
719
|
+
// just for type testing purposes
|
|
720
|
+
make: Make
|
|
721
|
+
}
|
|
722
|
+
<
|
|
723
|
+
const Make extends {
|
|
724
|
+
dependencies: Array<Layer.Layer.Any>
|
|
725
|
+
effect: (match: typeof router3) => Generator<
|
|
726
|
+
YieldWrap<Effect<any, any, Make["strict"] extends false ? any : GetSuccess<Make["dependencies"]>>>,
|
|
727
|
+
{ [K in keyof Filter<Rsc>]: AHandler<Rsc[K]> },
|
|
728
|
+
any
|
|
729
|
+
>
|
|
730
|
+
|
|
731
|
+
strict?: boolean
|
|
732
|
+
}
|
|
733
|
+
>(
|
|
734
|
+
make: Make
|
|
735
|
+
): {
|
|
736
|
+
moduleName: ModuleName
|
|
737
|
+
|
|
738
|
+
routes: (requestLayers: any) => Layer.Layer<
|
|
739
|
+
RouterShape<Rsc>,
|
|
740
|
+
MakeErrors<Make> | GetError<Make["dependencies"]>,
|
|
741
|
+
| GetContext<Make["dependencies"]>
|
|
742
|
+
// | GetContext<Layers> // elsewhere provided
|
|
743
|
+
| Exclude<MakeContext<Make> | RMW, GetSuccess<Make["dependencies"]> | GetSuccess<Layers>>
|
|
744
|
+
>
|
|
745
|
+
|
|
746
|
+
// just for type testing purposes
|
|
747
|
+
make: Make
|
|
591
748
|
}
|
|
592
749
|
<
|
|
593
750
|
const Make extends {
|
|
@@ -619,75 +776,13 @@ export const makeRouter = <
|
|
|
619
776
|
// HttpRouter.HttpRouter.Provided
|
|
620
777
|
// >
|
|
621
778
|
routes: any
|
|
622
|
-
}
|
|
623
|
-
} = ((m: { dependencies: any; effect: any; strict?: any }) => f(m.dependencies, m.effect)) as any
|
|
624
779
|
|
|
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]>
|
|
780
|
+
// just for type testing purposes
|
|
781
|
+
make: Make
|
|
665
782
|
}
|
|
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)
|
|
783
|
+
} =
|
|
784
|
+
((m: { dependencies: any; effect: any; strict?: any }) =>
|
|
785
|
+
Object.assign(f(m.dependencies, m.effect), { make: m })) as any
|
|
691
786
|
|
|
692
787
|
return Object.assign(effect, items, { router, router3 })
|
|
693
788
|
}
|
|
@@ -729,14 +824,17 @@ export type MakeDeps<Make> = Make extends { readonly dependencies: ReadonlyArray
|
|
|
729
824
|
: never
|
|
730
825
|
|
|
731
826
|
export type MakeErrors<Make> = Make extends { readonly effect: Effect<any, infer E, any> } ? E
|
|
827
|
+
: Make extends { readonly effect: (_: any) => Generator<YieldWrap<Effect<any, infer E, any>>, any, any> } ? E
|
|
732
828
|
: never
|
|
733
829
|
|
|
734
830
|
export type MakeContext<Make> = Make extends { readonly effect: Effect<any, any, infer R> } ? R
|
|
831
|
+
: Make extends { readonly effect: (_: any) => Generator<YieldWrap<Effect<any, any, infer R>>, any, any> } ? R
|
|
735
832
|
: never
|
|
736
833
|
|
|
737
834
|
export type MakeHandlers<Make, Handlers extends Record<string, any>> = Make extends
|
|
738
835
|
{ readonly effect: Effect<{ [K in keyof Handlers]: AHandler<Handlers[K]> }, any, any> }
|
|
739
836
|
? Effect.Success<Make["effect"]>
|
|
837
|
+
: Make extends { readonly effect: (_: any) => Generator<YieldWrap<any>, infer S, any> } ? S
|
|
740
838
|
: never
|
|
741
839
|
|
|
742
840
|
/**
|
|
@@ -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"}
|