@effect-app/infra 2.26.0 → 2.27.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 +18 -0
- package/_cjs/api/routing.cjs +15 -6
- package/_cjs/api/routing.cjs.map +1 -1
- package/_cjs/api/{routing7.cjs → routing.legacy2.cjs} +7 -16
- package/_cjs/api/routing.legacy2.cjs.map +1 -0
- package/_cjs/api/{routing6.cjs → routing.legacy3.cjs} +1 -1
- package/_cjs/api/routing.legacy3.cjs.map +1 -0
- package/dist/api/routing.d.ts +309 -22
- package/dist/api/routing.d.ts.map +1 -1
- package/dist/api/routing.js +22 -8
- package/dist/api/routing.legacy2.d.ts +192 -0
- package/dist/api/routing.legacy2.d.ts.map +1 -0
- package/dist/api/routing.legacy2.js +226 -0
- package/dist/api/{routing6.d.ts → routing.legacy3.d.ts} +1 -1
- package/dist/api/routing.legacy3.d.ts.map +1 -0
- package/dist/api/routing.legacy3.js +233 -0
- package/package.json +29 -29
- package/src/api/{routing7.ts → routing.legacy2.ts} +10 -121
- package/src/api/routing.ts +125 -10
- package/test/{controller7.test.ts → controller.legacy2.test.ts} +12 -59
- package/test/{controller6.test.ts → controller.legacy3.test.ts} +2 -2
- package/test/controller.test.ts +57 -10
- package/test/dist/controller.legacy2.test.d.ts.map +1 -0
- package/test/dist/controller.legacy3.test.d.ts.map +1 -0
- 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/_cjs/api/routing6.cjs.map +0 -1
- package/_cjs/api/routing7.cjs.map +0 -1
- package/dist/api/routing6.d.ts.map +0 -1
- package/dist/api/routing6.js +0 -233
- package/dist/api/routing7.d.ts +0 -375
- package/dist/api/routing7.d.ts.map +0 -1
- package/dist/api/routing7.js +0 -240
- 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/{routing6.ts → routing.legacy3.ts} +0 -0
package/src/api/routing.ts
CHANGED
|
@@ -2,14 +2,24 @@
|
|
|
2
2
|
/* eslint-disable @typescript-eslint/no-unsafe-argument */
|
|
3
3
|
/* eslint-disable @typescript-eslint/no-empty-object-type */
|
|
4
4
|
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
5
|
-
/*
|
|
6
|
-
TODO: Effect.retry(r2, optimisticConcurrencySchedule) / was for PATCH only
|
|
7
|
-
TODO: uninteruptible commands! was for All except GET.
|
|
8
|
-
*/
|
|
9
5
|
import type * as HttpApp from "@effect/platform/HttpApp"
|
|
10
6
|
import { Rpc, RpcRouter } from "@effect/rpc"
|
|
11
7
|
import type { NonEmptyArray, NonEmptyReadonlyArray } from "effect-app"
|
|
12
|
-
import {
|
|
8
|
+
import {
|
|
9
|
+
Array,
|
|
10
|
+
Cause,
|
|
11
|
+
Chunk,
|
|
12
|
+
Context,
|
|
13
|
+
Effect,
|
|
14
|
+
FiberRef,
|
|
15
|
+
flow,
|
|
16
|
+
Layer,
|
|
17
|
+
Predicate,
|
|
18
|
+
S,
|
|
19
|
+
Schedule,
|
|
20
|
+
Schema,
|
|
21
|
+
Stream
|
|
22
|
+
} from "effect-app"
|
|
13
23
|
import type { GetEffectContext, RPCContextMap } from "effect-app/client/req"
|
|
14
24
|
import type { HttpServerError } from "effect-app/http"
|
|
15
25
|
import { HttpRouter, HttpServerRequest, HttpServerResponse } from "effect-app/http"
|
|
@@ -19,6 +29,10 @@ import { logError, reportError } from "../errorReporter.js"
|
|
|
19
29
|
import { InfraLogger } from "../logger.js"
|
|
20
30
|
import type { Middleware } from "./routing/DynamicMiddleware.js"
|
|
21
31
|
import { makeRpc } from "./routing/DynamicMiddleware.js"
|
|
32
|
+
import { determineMethod } from "./routing/utils.js"
|
|
33
|
+
|
|
34
|
+
const optimisticConcurrencySchedule = Schedule.once
|
|
35
|
+
&& Schedule.recurWhile<{ _tag: string }>((a) => a._tag === "OptimisticConcurrencyException")
|
|
22
36
|
|
|
23
37
|
const logRequestError = logError("Request")
|
|
24
38
|
const reportRequestError = reportError("Request")
|
|
@@ -88,7 +102,12 @@ type HandleVoid<Expected, Actual, Result> = [Expected] extends [void]
|
|
|
88
102
|
? [Actual] extends [void] ? Result : Hint<"You're returning non void for a void Response, please fix">
|
|
89
103
|
: Result
|
|
90
104
|
|
|
91
|
-
type AnyRequestModule = S.Schema.Any & {
|
|
105
|
+
export type AnyRequestModule = S.Schema.Any & {
|
|
106
|
+
_tag: string
|
|
107
|
+
config: any
|
|
108
|
+
success: S.Schema.Any
|
|
109
|
+
failure: S.Schema.Any
|
|
110
|
+
}
|
|
92
111
|
export interface AddAction<Actions extends AnyRequestModule, Accum extends Record<string, any> = {}> {
|
|
93
112
|
accum: Accum
|
|
94
113
|
add<A extends Handler<Actions, any, any>>(
|
|
@@ -364,6 +383,13 @@ export const makeRouter = <
|
|
|
364
383
|
const handler = controllers[cur as keyof typeof controllers]
|
|
365
384
|
const req = rsc[cur]
|
|
366
385
|
|
|
386
|
+
const method = determineMethod(String(cur), req)
|
|
387
|
+
const isCommand = method._tag === "command"
|
|
388
|
+
|
|
389
|
+
const handle = isCommand
|
|
390
|
+
? (req: any) => Effect.retry(handler.handler(req) as any, optimisticConcurrencySchedule)
|
|
391
|
+
: (req: any) => Effect.interruptible(handler.handler(req) as any)
|
|
392
|
+
|
|
367
393
|
acc[cur] = rpc.effect(
|
|
368
394
|
handler._tag === "raw"
|
|
369
395
|
? class extends (req as any) {
|
|
@@ -403,7 +429,7 @@ export const makeRouter = <
|
|
|
403
429
|
)
|
|
404
430
|
.pipe(
|
|
405
431
|
// can't use andThen due to some being a function and effect
|
|
406
|
-
Effect.zipRight(
|
|
432
|
+
Effect.zipRight(handle(req)),
|
|
407
433
|
Effect.tapErrorCause((cause) => Cause.isFailure(cause) ? logRequestError(cause) : Effect.void),
|
|
408
434
|
Effect.tapDefect((cause) =>
|
|
409
435
|
Effect
|
|
@@ -458,7 +484,6 @@ export const makeRouter = <
|
|
|
458
484
|
.all(
|
|
459
485
|
"/",
|
|
460
486
|
httpApp as any,
|
|
461
|
-
// TODO: not queries.
|
|
462
487
|
{ uninterruptible: true }
|
|
463
488
|
)
|
|
464
489
|
})
|
|
@@ -722,7 +747,88 @@ export const makeRouter = <
|
|
|
722
747
|
return this as any
|
|
723
748
|
}
|
|
724
749
|
}
|
|
725
|
-
|
|
750
|
+
|
|
751
|
+
type HndlrWithInput<Action extends AnyRequestModule, Mode extends "d" | "raw"> = (
|
|
752
|
+
req: S.Schema.Type<Action>
|
|
753
|
+
) => Effect<
|
|
754
|
+
GetSuccessShape<Action, Mode>,
|
|
755
|
+
S.Schema.Type<GetFailure<Action>> | S.ParseResult.ParseError,
|
|
756
|
+
any
|
|
757
|
+
>
|
|
758
|
+
|
|
759
|
+
type Hndlr<Action extends AnyRequestModule, Mode extends "d" | "raw"> = Effect<
|
|
760
|
+
GetSuccessShape<Action, Mode>,
|
|
761
|
+
S.Schema.Type<GetFailure<Action>> | S.ParseResult.ParseError,
|
|
762
|
+
any
|
|
763
|
+
>
|
|
764
|
+
|
|
765
|
+
type Hndlrs<Action extends AnyRequestModule, Mode extends "d" | "raw"> =
|
|
766
|
+
| HndlrWithInput<Action, Mode>
|
|
767
|
+
| Hndlr<Action, Mode>
|
|
768
|
+
|
|
769
|
+
type DHndlrs<Action extends AnyRequestModule> = Hndlrs<Action, "d">
|
|
770
|
+
|
|
771
|
+
type RawHndlrs<Action extends AnyRequestModule> =
|
|
772
|
+
| { raw: HndlrWithInput<Action, "raw"> }
|
|
773
|
+
| { raw: Hndlr<Action, "raw"> }
|
|
774
|
+
|
|
775
|
+
type AnyHndlrs<Action extends AnyRequestModule> = RawHndlrs<Action> | DHndlrs<Action>
|
|
776
|
+
|
|
777
|
+
type CheckAction<Action extends AnyRequestModule, Impl, Mode extends "raw" | "d", Default> = Impl extends
|
|
778
|
+
(...args: any[]) => any ? [Effect.Success<ReturnType<Impl>>] extends [void] ? HndlrWithInput<Action, Mode>
|
|
779
|
+
: Hint<"You're returning non void for a void Response, please fix">
|
|
780
|
+
// this is insane this works...
|
|
781
|
+
: Impl extends Effect.Effect<any, any, any> ? [Effect.Success<Impl>] extends [void] ? Hndlr<Action, Mode>
|
|
782
|
+
: Effect<
|
|
783
|
+
Hint<"You're returning non void for a void Response, please fix">,
|
|
784
|
+
S.Schema.Type<GetFailure<Action>> | S.ParseResult.ParseError,
|
|
785
|
+
any
|
|
786
|
+
>
|
|
787
|
+
: Default
|
|
788
|
+
|
|
789
|
+
const router3: <
|
|
790
|
+
const Impl extends {
|
|
791
|
+
[K in keyof Filter<Rsc>]:
|
|
792
|
+
// incase we expect a void return, we want to make sure the return really is only void
|
|
793
|
+
// the problem is that anything is assignable to void. This helps catch accidental return of e.g Errors instead of yielding them
|
|
794
|
+
// Note: the alternative branches must always include AnyHndlrs, or inference will not work in certain cases
|
|
795
|
+
// but somehow especially when released (as opposed to local tests)
|
|
796
|
+
Impl[K] extends { raw: any } ? [GetSuccessShape<Rsc[K], "raw">] extends [void]
|
|
797
|
+
// this is insane this works...
|
|
798
|
+
? { raw: CheckAction<Rsc[K], Impl[K]["raw"], "raw", AnyHndlrs<Rsc[K]>> }
|
|
799
|
+
: AnyHndlrs<Rsc[K]>
|
|
800
|
+
: [GetSuccessShape<Rsc[K], "d">] extends [void]
|
|
801
|
+
// this is insane this works...
|
|
802
|
+
? CheckAction<Rsc[K], Impl[K], "d", AnyHndlrs<Rsc[K]>>
|
|
803
|
+
: AnyHndlrs<Rsc[K]>
|
|
804
|
+
}
|
|
805
|
+
>(
|
|
806
|
+
impl: Impl
|
|
807
|
+
) => {
|
|
808
|
+
[K in keyof Impl & keyof Filter<Rsc>]: Handler<
|
|
809
|
+
Filter<Rsc>[K],
|
|
810
|
+
Impl[K] extends { raw: any } ? "raw" : "d",
|
|
811
|
+
Exclude<
|
|
812
|
+
| Context
|
|
813
|
+
| Exclude<
|
|
814
|
+
Impl[K] extends { raw: any } ? Impl[K]["raw"] extends (...args: any[]) => Effect<any, any, infer R> ? R
|
|
815
|
+
: Impl[K]["raw"] extends Effect<any, any, infer R> ? R
|
|
816
|
+
: never
|
|
817
|
+
: Impl[K] extends (...args: any[]) => Effect<any, any, infer R> ? R
|
|
818
|
+
: Impl[K] extends Effect<any, any, infer R> ? R
|
|
819
|
+
: never,
|
|
820
|
+
GetEffectContext<CTXMap, Rsc[K]["config"]>
|
|
821
|
+
>,
|
|
822
|
+
HttpRouter.HttpRouter.Provided
|
|
823
|
+
>
|
|
824
|
+
>
|
|
825
|
+
} = (obj: Record<keyof Filtered, any>) =>
|
|
826
|
+
typedKeysOf(obj).reduce((acc, cur) => {
|
|
827
|
+
acc[cur] = "raw" in obj[cur] ? items[cur].raw(obj[cur].raw) : items[cur](obj[cur])
|
|
828
|
+
return acc
|
|
829
|
+
}, {} as any)
|
|
830
|
+
|
|
831
|
+
return Object.assign(effect, items, { router, router3 })
|
|
726
832
|
}
|
|
727
833
|
|
|
728
834
|
type HR<T> = T extends HttpRouter.HttpRouter<any, infer R> ? R : never
|
|
@@ -778,7 +884,16 @@ export const makeRouter = <
|
|
|
778
884
|
}
|
|
779
885
|
}
|
|
780
886
|
|
|
781
|
-
return {
|
|
887
|
+
return {
|
|
888
|
+
matchAll,
|
|
889
|
+
matchFor: <
|
|
890
|
+
const ModuleName extends string,
|
|
891
|
+
const Rsc extends Record<string, any>
|
|
892
|
+
>(
|
|
893
|
+
rsc: Rsc & { meta: { moduleName: ModuleName } }
|
|
894
|
+
) => matchFor(rsc).router3,
|
|
895
|
+
Router: matchFor
|
|
896
|
+
}
|
|
782
897
|
}
|
|
783
898
|
|
|
784
899
|
export type MakeDeps<Make> = Make extends { readonly dependencies: ReadonlyArray<Layer.Layer.Any> }
|
|
@@ -1,6 +1,5 @@
|
|
|
1
|
-
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
2
1
|
/* eslint-disable @typescript-eslint/no-unsafe-member-access */
|
|
3
|
-
import { makeMiddleware, makeRouter } from "@effect-app/infra/api/
|
|
2
|
+
import { makeMiddleware, makeRouter } from "@effect-app/infra/api/routing.legacy2"
|
|
4
3
|
import type { RequestContext } from "@effect-app/infra/RequestContext"
|
|
5
4
|
import { Rpc } from "@effect/rpc"
|
|
6
5
|
import type { Request } from "effect-app"
|
|
@@ -120,7 +119,7 @@ const middleware = makeMiddleware({
|
|
|
120
119
|
})
|
|
121
120
|
})
|
|
122
121
|
|
|
123
|
-
export const {
|
|
122
|
+
export const { matchAll, matchFor } = makeRouter(middleware, true)
|
|
124
123
|
|
|
125
124
|
export type RequestConfig = {
|
|
126
125
|
/** Disable authentication requirement */
|
|
@@ -133,19 +132,15 @@ export const { TaggedRequest: Req } = makeRpcClient<RequestConfig, CTXMap>({
|
|
|
133
132
|
requireRoles: UnauthorizedError
|
|
134
133
|
})
|
|
135
134
|
|
|
136
|
-
export class
|
|
135
|
+
export class GetSomething extends Req<GetSomething>()("GetSomething", {
|
|
137
136
|
id: S.String
|
|
138
137
|
}, { success: S.Void }) {}
|
|
139
138
|
|
|
140
|
-
export class
|
|
139
|
+
export class GetSomethingElse extends Req<GetSomethingElse>()("GetSomethingElse", {
|
|
141
140
|
id: S.String
|
|
142
141
|
}, { success: S.String }) {}
|
|
143
142
|
|
|
144
|
-
|
|
145
|
-
id: S.String
|
|
146
|
-
}, { success: S.NumberFromString }) {}
|
|
147
|
-
|
|
148
|
-
const Something = { DoSomething, GetSomething, GetSomething2, meta: { moduleName: "Something" as const } }
|
|
143
|
+
const Something = { GetSomething, GetSomethingElse, meta: { moduleName: "Something" as const } }
|
|
149
144
|
|
|
150
145
|
export class SomethingService extends Effect.Service<SomethingService>()("SomethingService", {
|
|
151
146
|
dependencies: [],
|
|
@@ -177,8 +172,8 @@ export class SomethingService2 extends Effect.Service<SomethingService2>()("Some
|
|
|
177
172
|
})
|
|
178
173
|
}) {}
|
|
179
174
|
|
|
180
|
-
it("
|
|
181
|
-
const routes =
|
|
175
|
+
it("router.legacy2", () => {
|
|
176
|
+
const routes = matchFor(Something)({
|
|
182
177
|
dependencies: [
|
|
183
178
|
SomethingRepo.Default,
|
|
184
179
|
SomethingService.Default,
|
|
@@ -191,54 +186,12 @@ it("router6", () => {
|
|
|
191
186
|
|
|
192
187
|
console.log({ repo, smth, smth2 })
|
|
193
188
|
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
GetSomething: Effect.
|
|
197
|
-
|
|
198
|
-
}
|
|
189
|
+
const { GetSomething, GetSomethingElse } = matchFor(Something)
|
|
190
|
+
return {
|
|
191
|
+
GetSomething: GetSomething(Effect.void),
|
|
192
|
+
GetSomethingElse: GetSomethingElse(Effect.succeed("12"))
|
|
193
|
+
}
|
|
199
194
|
})
|
|
200
195
|
})
|
|
201
196
|
console.log({ routes })
|
|
202
197
|
})
|
|
203
|
-
|
|
204
|
-
export default Router(Something)({
|
|
205
|
-
dependencies: [
|
|
206
|
-
SomethingRepo.Default,
|
|
207
|
-
SomethingService.Default,
|
|
208
|
-
SomethingService2.Default
|
|
209
|
-
],
|
|
210
|
-
effect: Effect.gen(function*() {
|
|
211
|
-
const repo = yield* SomethingRepo
|
|
212
|
-
const smth = yield* SomethingService
|
|
213
|
-
const smth2 = yield* SomethingService2
|
|
214
|
-
|
|
215
|
-
console.log({ repo, smth, smth2 })
|
|
216
|
-
|
|
217
|
-
return matchFor(Something)({
|
|
218
|
-
GetSomething: Effect.succeed("12"),
|
|
219
|
-
DoSomething: Effect.void, // Effect.succeed(2) should fail
|
|
220
|
-
GetSomething2: Effect.succeed(12)
|
|
221
|
-
})
|
|
222
|
-
})
|
|
223
|
-
})
|
|
224
|
-
|
|
225
|
-
export const RawTest = Router(Something)({
|
|
226
|
-
dependencies: [
|
|
227
|
-
SomethingRepo.Default,
|
|
228
|
-
SomethingService.Default,
|
|
229
|
-
SomethingService2.Default
|
|
230
|
-
],
|
|
231
|
-
effect: Effect.gen(function*() {
|
|
232
|
-
const repo = yield* SomethingRepo
|
|
233
|
-
const smth = yield* SomethingService
|
|
234
|
-
const smth2 = yield* SomethingService2
|
|
235
|
-
|
|
236
|
-
console.log({ repo, smth, smth2 })
|
|
237
|
-
|
|
238
|
-
return matchFor(Something)({
|
|
239
|
-
GetSomething: SomethingService2.use(() => Effect.succeed("12")),
|
|
240
|
-
DoSomething: { raw: Effect.void }, // Effect.succeed(2) should fail
|
|
241
|
-
GetSomething2: { raw: SomethingService2.use(() => Effect.succeed("12")) }
|
|
242
|
-
})
|
|
243
|
-
})
|
|
244
|
-
})
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/* eslint-disable @typescript-eslint/no-unsafe-member-access */
|
|
2
|
-
import { makeMiddleware, makeRouter } from "@effect-app/infra/api/
|
|
2
|
+
import { makeMiddleware, makeRouter } from "@effect-app/infra/api/routing.legacy3"
|
|
3
3
|
import type { RequestContext } from "@effect-app/infra/RequestContext"
|
|
4
4
|
import { Rpc } from "@effect/rpc"
|
|
5
5
|
import type { Request } from "effect-app"
|
|
@@ -172,7 +172,7 @@ export class SomethingService2 extends Effect.Service<SomethingService2>()("Some
|
|
|
172
172
|
})
|
|
173
173
|
}) {}
|
|
174
174
|
|
|
175
|
-
it("
|
|
175
|
+
it("router.legacy3 fluent", () => {
|
|
176
176
|
const routes = matchFor(Something)({
|
|
177
177
|
dependencies: [
|
|
178
178
|
SomethingRepo.Default,
|
package/test/controller.test.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
1
2
|
/* eslint-disable @typescript-eslint/no-unsafe-member-access */
|
|
2
3
|
import { makeMiddleware, makeRouter } from "@effect-app/infra/api/routing"
|
|
3
4
|
import type { RequestContext } from "@effect-app/infra/RequestContext"
|
|
@@ -119,7 +120,7 @@ const middleware = makeMiddleware({
|
|
|
119
120
|
})
|
|
120
121
|
})
|
|
121
122
|
|
|
122
|
-
export const { matchAll, matchFor } = makeRouter(middleware, true)
|
|
123
|
+
export const { Router, matchAll, matchFor } = makeRouter(middleware, true)
|
|
123
124
|
|
|
124
125
|
export type RequestConfig = {
|
|
125
126
|
/** Disable authentication requirement */
|
|
@@ -132,15 +133,19 @@ export const { TaggedRequest: Req } = makeRpcClient<RequestConfig, CTXMap>({
|
|
|
132
133
|
requireRoles: UnauthorizedError
|
|
133
134
|
})
|
|
134
135
|
|
|
135
|
-
export class
|
|
136
|
+
export class DoSomething extends Req<DoSomething>()("DoSomething", {
|
|
136
137
|
id: S.String
|
|
137
138
|
}, { success: S.Void }) {}
|
|
138
139
|
|
|
139
|
-
export class
|
|
140
|
+
export class GetSomething extends Req<GetSomething>()("GetSomething", {
|
|
140
141
|
id: S.String
|
|
141
142
|
}, { success: S.String }) {}
|
|
142
143
|
|
|
143
|
-
|
|
144
|
+
export class GetSomething2 extends Req<GetSomething2>()("GetSomething2", {
|
|
145
|
+
id: S.String
|
|
146
|
+
}, { success: S.NumberFromString }) {}
|
|
147
|
+
|
|
148
|
+
const Something = { DoSomething, GetSomething, GetSomething2, meta: { moduleName: "Something" as const } }
|
|
144
149
|
|
|
145
150
|
export class SomethingService extends Effect.Service<SomethingService>()("SomethingService", {
|
|
146
151
|
dependencies: [],
|
|
@@ -173,7 +178,7 @@ export class SomethingService2 extends Effect.Service<SomethingService2>()("Some
|
|
|
173
178
|
}) {}
|
|
174
179
|
|
|
175
180
|
it("router", () => {
|
|
176
|
-
const routes =
|
|
181
|
+
const routes = Router(Something)({
|
|
177
182
|
dependencies: [
|
|
178
183
|
SomethingRepo.Default,
|
|
179
184
|
SomethingService.Default,
|
|
@@ -186,12 +191,54 @@ it("router", () => {
|
|
|
186
191
|
|
|
187
192
|
console.log({ repo, smth, smth2 })
|
|
188
193
|
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
194
|
+
return matchFor(Something)({
|
|
195
|
+
DoSomething: Effect.void,
|
|
196
|
+
GetSomething: Effect.succeed("12"),
|
|
197
|
+
GetSomething2: Effect.succeed(12)
|
|
198
|
+
})
|
|
193
199
|
})
|
|
194
200
|
})
|
|
195
|
-
|
|
196
201
|
console.log({ routes })
|
|
197
202
|
})
|
|
203
|
+
|
|
204
|
+
export default Router(Something)({
|
|
205
|
+
dependencies: [
|
|
206
|
+
SomethingRepo.Default,
|
|
207
|
+
SomethingService.Default,
|
|
208
|
+
SomethingService2.Default
|
|
209
|
+
],
|
|
210
|
+
effect: Effect.gen(function*() {
|
|
211
|
+
const repo = yield* SomethingRepo
|
|
212
|
+
const smth = yield* SomethingService
|
|
213
|
+
const smth2 = yield* SomethingService2
|
|
214
|
+
|
|
215
|
+
console.log({ repo, smth, smth2 })
|
|
216
|
+
|
|
217
|
+
return matchFor(Something)({
|
|
218
|
+
GetSomething: Effect.succeed("12"),
|
|
219
|
+
DoSomething: Effect.void, // Effect.succeed(2) should fail
|
|
220
|
+
GetSomething2: Effect.succeed(12)
|
|
221
|
+
})
|
|
222
|
+
})
|
|
223
|
+
})
|
|
224
|
+
|
|
225
|
+
export const RawTest = Router(Something)({
|
|
226
|
+
dependencies: [
|
|
227
|
+
SomethingRepo.Default,
|
|
228
|
+
SomethingService.Default,
|
|
229
|
+
SomethingService2.Default
|
|
230
|
+
],
|
|
231
|
+
effect: Effect.gen(function*() {
|
|
232
|
+
const repo = yield* SomethingRepo
|
|
233
|
+
const smth = yield* SomethingService
|
|
234
|
+
const smth2 = yield* SomethingService2
|
|
235
|
+
|
|
236
|
+
console.log({ repo, smth, smth2 })
|
|
237
|
+
|
|
238
|
+
return matchFor(Something)({
|
|
239
|
+
GetSomething: SomethingService2.use(() => Effect.succeed("12")),
|
|
240
|
+
DoSomething: { raw: Effect.void }, // Effect.succeed(2) should fail
|
|
241
|
+
GetSomething2: { raw: SomethingService2.use(() => Effect.succeed("12")) }
|
|
242
|
+
})
|
|
243
|
+
})
|
|
244
|
+
})
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"controller.legacy2.test.d.ts","sourceRoot":"","sources":["../controller.legacy2.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"controller.legacy3.test.d.ts","sourceRoot":"","sources":["../controller.legacy3.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;;;;;sBA0EuwD,KAAK;;;;;;GA1E1wD,QAAQ;;;;;;uDA0E20F,KAAK,CAAC,GAAG;;;;;;;;;;;;uDAAw0D,KAAK,CAAC,GAAG;;;;;;;;;;;;uDAAw0D,KAAK,CAAC,GAAG;;;;;;;;;;;;uDAAw0D,KAAK,CAAC,GAAG;;;;;;;;;;;;uDAAmyD,KAAK,CAAC,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;CA1EllU,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;2CAxEF,MAAM,CAAC,MAAM;mBAC7B,MACb,CA8BQ,GA9BJ,KAAK,MAEV,CA4BS,MA5BF;mBAAyB,MAC9B,CA2BO,GA3BH,KAAM,MAAK,CAAC,MAAM;;;;;;6CASqB,MAAM,CAAC,MAAM;mBAkBjD,MAjBA,CAAC,GAAG,KAAK,MAAM,CAAC,MAAM;;;;;;6CAUf,MAAC,CAAC,MAAM;mBACG,MAAM,CAAC,GAAG,KAAK,MAAM,CAAC,MAAM;;;;;;6CAc1C,MAAL,CAAK,MAAE;;;;;6CAMwC,MAAM,CAAC,MAAM;;;;;CA6BnE,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"}
|
|
@@ -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"}
|