@effect-app/infra 2.17.0 → 2.18.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +12 -0
- package/_cjs/api/routing.cjs +3 -3
- package/_cjs/api/routing.cjs.map +1 -1
- package/dist/Model/Repository/ext.d.ts +3 -3
- package/dist/Model/query/new-kid-interpreter.d.ts +1 -1
- package/dist/QueueMaker/sbqueue.d.ts +2 -2
- package/dist/Store/service.d.ts +1 -1
- package/dist/api/routing.d.ts +49 -14
- package/dist/api/routing.d.ts.map +1 -1
- package/dist/api/routing.js +4 -4
- package/package.json +11 -21
- package/src/api/routing.ts +134 -87
- package/test/controller.test.ts +53 -8
- package/test/dist/controller.test.d.ts.map +1 -1
- package/_cjs/api/routing copy.cjs +0 -196
- package/_cjs/api/routing copy.cjs.map +0 -1
- package/_cjs/api/routing5.cjs +0 -193
- package/_cjs/api/routing5.cjs.map +0 -1
- package/dist/api/routing copy.d.ts +0 -160
- package/dist/api/routing copy.d.ts.map +0 -1
- package/dist/api/routing copy.js +0 -210
- package/dist/api/routing5.d.ts +0 -156
- package/dist/api/routing5.d.ts.map +0 -1
- package/dist/api/routing5.js +0 -210
- package/src/api/routing5.ts +0 -731
- package/test/controller5.test.ts +0 -193
- package/test/dist/controller.test copy.js +0 -129
- package/test/dist/controller5.test.d.ts.map +0 -1
- package/test/dist/filterApi.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
|
@@ -14,6 +14,7 @@ import type { GetEffectContext, RPCContextMap } from "effect-app/client/req"
|
|
|
14
14
|
import type { HttpServerError } from "effect-app/http"
|
|
15
15
|
import { HttpRouter, HttpServerRequest, HttpServerResponse } from "effect-app/http"
|
|
16
16
|
import { pretty, typedKeysOf, typedValuesOf } from "effect-app/utils"
|
|
17
|
+
import type { Contravariant } from "effect/Types"
|
|
17
18
|
import { logError, reportError } from "../errorReporter.js"
|
|
18
19
|
import { InfraLogger } from "../logger.js"
|
|
19
20
|
import type { Middleware } from "./routing/DynamicMiddleware.js"
|
|
@@ -314,7 +315,7 @@ export const makeRouter = <
|
|
|
314
315
|
TLayers extends NonEmptyReadonlyArray<Layer.Layer.Any> | never[]
|
|
315
316
|
>(
|
|
316
317
|
layers: TLayers,
|
|
317
|
-
make:
|
|
318
|
+
make: Effect<THandlers, E, R>
|
|
318
319
|
) => {
|
|
319
320
|
type ProvidedLayers =
|
|
320
321
|
| { [k in keyof Layers]: Layer.Layer.Success<Layers[k]> }[number]
|
|
@@ -335,7 +336,7 @@ export const makeRouter = <
|
|
|
335
336
|
|
|
336
337
|
const layer = r.use((router) =>
|
|
337
338
|
Effect.gen(function*() {
|
|
338
|
-
const controllers = yield* make
|
|
339
|
+
const controllers = yield* make
|
|
339
340
|
const rpc = yield* makeRpc(middleware)
|
|
340
341
|
|
|
341
342
|
// return make.pipe(Effect.map((c) => controllers(c, layers)))
|
|
@@ -470,23 +471,57 @@ export const makeRouter = <
|
|
|
470
471
|
|
|
471
472
|
const effect: {
|
|
472
473
|
// Multiple times duplicated the "good" overload, so that errors will only mention the last overload when failing
|
|
474
|
+
// <
|
|
475
|
+
// E,
|
|
476
|
+
// R,
|
|
477
|
+
// Make extends (
|
|
478
|
+
// requests: RouteMatcher<CTXMap, Rsc, Context>
|
|
479
|
+
// ) => Effect<
|
|
480
|
+
// { [K in keyof Filter<Rsc>]: AHandler<Rsc[K]> },
|
|
481
|
+
// any,
|
|
482
|
+
// Strict extends true ? GetSuccess<MakeLayers["dependencies"]> : any
|
|
483
|
+
// >,
|
|
484
|
+
// THandlers extends { [K in keyof Filter<Rsc>]: AHandler<Rsc[K]> },
|
|
485
|
+
// MakeLayers extends { dependencies: NonEmptyReadonlyArray<Layer.Layer.Any> | never[] },
|
|
486
|
+
// Strict extends boolean = true
|
|
487
|
+
// >(
|
|
488
|
+
// layers: MakeLayers,
|
|
489
|
+
// make: Make & ((requests: RouteMatcher<CTXMap, Rsc, Context>) => Effect<THandlers, E, R>),
|
|
490
|
+
// strict?: Strict
|
|
491
|
+
// ): {
|
|
492
|
+
// moduleName: ModuleName
|
|
493
|
+
// Router: HttpRouter.HttpRouter.TagClass<
|
|
494
|
+
// RouterShape<Rsc>,
|
|
495
|
+
// `${ModuleName}Router`,
|
|
496
|
+
// never,
|
|
497
|
+
// | Exclude<Context, HttpRouter.HttpRouter.Provided>
|
|
498
|
+
// | Exclude<
|
|
499
|
+
// RPCRouteR<
|
|
500
|
+
// { [K in keyof Filter<Rsc>]: Rpc.Rpc<Rsc[K], _R<ReturnType<THandlers[K]["handler"]>>> }[keyof Filter<Rsc>]
|
|
501
|
+
// >,
|
|
502
|
+
// HttpRouter.HttpRouter.Provided
|
|
503
|
+
// >
|
|
504
|
+
// >
|
|
505
|
+
// routes: Layer.Layer<
|
|
506
|
+
// RouterShape<Rsc>,
|
|
507
|
+
// E | GetError<MakeLayers["dependencies"]>,
|
|
508
|
+
// | GetContext<MakeLayers["dependencies"]>
|
|
509
|
+
// // | GetContext<Layers> // elsewhere provided
|
|
510
|
+
// | Exclude<R | RMW, GetSuccess<MakeLayers["dependencies"]> | GetSuccess<Layers>>
|
|
511
|
+
// >
|
|
512
|
+
// }
|
|
473
513
|
<
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
THandlers extends { [K in keyof Filter<Rsc>]: AHandler<Rsc[K]> },
|
|
484
|
-
TLayers extends NonEmptyReadonlyArray<Layer.Layer.Any> | never[],
|
|
485
|
-
Strict extends boolean = true
|
|
514
|
+
const Make extends {
|
|
515
|
+
dependencies: Array<Layer.Layer.Any>
|
|
516
|
+
effect: Effect<
|
|
517
|
+
{ [K in keyof Filter<Rsc>]: AHandler<Rsc[K]> },
|
|
518
|
+
any,
|
|
519
|
+
Make["strict"] extends false ? any : GetSuccess<Make["dependencies"]>
|
|
520
|
+
>
|
|
521
|
+
strict?: boolean
|
|
522
|
+
}
|
|
486
523
|
>(
|
|
487
|
-
|
|
488
|
-
make: Make & ((requests: RouteMatcher<CTXMap, Rsc, Context>) => Effect<THandlers, E, R>),
|
|
489
|
-
strict?: Strict
|
|
524
|
+
make: Make
|
|
490
525
|
): {
|
|
491
526
|
moduleName: ModuleName
|
|
492
527
|
Router: HttpRouter.HttpRouter.TagClass<
|
|
@@ -496,36 +531,33 @@ export const makeRouter = <
|
|
|
496
531
|
| Exclude<Context, HttpRouter.HttpRouter.Provided>
|
|
497
532
|
| Exclude<
|
|
498
533
|
RPCRouteR<
|
|
499
|
-
{
|
|
534
|
+
{
|
|
535
|
+
[K in keyof Filter<Rsc>]: Rpc.Rpc<Rsc[K], _R<ReturnType<MakeHandlers<Make, Filter<Rsc>>[K]["handler"]>>>
|
|
536
|
+
}[keyof Filter<Rsc>]
|
|
500
537
|
>,
|
|
501
538
|
HttpRouter.HttpRouter.Provided
|
|
502
539
|
>
|
|
503
540
|
>
|
|
504
541
|
routes: Layer.Layer<
|
|
505
542
|
RouterShape<Rsc>,
|
|
506
|
-
|
|
507
|
-
| GetContext<
|
|
543
|
+
MakeErrors<Make> | GetError<Make["dependencies"]>,
|
|
544
|
+
| GetContext<Make["dependencies"]>
|
|
508
545
|
// | GetContext<Layers> // elsewhere provided
|
|
509
|
-
| Exclude<
|
|
546
|
+
| Exclude<MakeContext<Make> | RMW, GetSuccess<Make["dependencies"]> | GetSuccess<Layers>>
|
|
510
547
|
>
|
|
511
548
|
}
|
|
512
549
|
<
|
|
513
|
-
|
|
514
|
-
|
|
515
|
-
|
|
516
|
-
|
|
517
|
-
|
|
518
|
-
|
|
519
|
-
|
|
520
|
-
|
|
521
|
-
|
|
522
|
-
THandlers extends { [K in keyof Filter<Rsc>]: AHandler<Rsc[K]> },
|
|
523
|
-
TLayers extends NonEmptyReadonlyArray<Layer.Layer.Any> | never[],
|
|
524
|
-
Strict extends boolean = true
|
|
550
|
+
const Make extends {
|
|
551
|
+
dependencies: Array<Layer.Layer.Any>
|
|
552
|
+
effect: Effect<
|
|
553
|
+
{ [K in keyof Filter<Rsc>]: AHandler<Rsc[K]> },
|
|
554
|
+
any,
|
|
555
|
+
GetSuccess<Make["dependencies"]>
|
|
556
|
+
>
|
|
557
|
+
strict?: boolean
|
|
558
|
+
}
|
|
525
559
|
>(
|
|
526
|
-
|
|
527
|
-
make: Make & ((requests: RouteMatcher<CTXMap, Rsc, Context>) => Effect<THandlers, E, R>),
|
|
528
|
-
strict?: Strict
|
|
560
|
+
make: Make
|
|
529
561
|
): {
|
|
530
562
|
moduleName: ModuleName
|
|
531
563
|
Router: HttpRouter.HttpRouter.TagClass<
|
|
@@ -535,36 +567,33 @@ export const makeRouter = <
|
|
|
535
567
|
| Exclude<Context, HttpRouter.HttpRouter.Provided>
|
|
536
568
|
| Exclude<
|
|
537
569
|
RPCRouteR<
|
|
538
|
-
{
|
|
570
|
+
{
|
|
571
|
+
[K in keyof Filter<Rsc>]: Rpc.Rpc<Rsc[K], _R<ReturnType<MakeHandlers<Make, Filter<Rsc>>[K]["handler"]>>>
|
|
572
|
+
}[keyof Filter<Rsc>]
|
|
539
573
|
>,
|
|
540
574
|
HttpRouter.HttpRouter.Provided
|
|
541
575
|
>
|
|
542
576
|
>
|
|
543
577
|
routes: Layer.Layer<
|
|
544
578
|
RouterShape<Rsc>,
|
|
545
|
-
|
|
546
|
-
| GetContext<
|
|
579
|
+
MakeErrors<Make> | GetError<Make["dependencies"]>,
|
|
580
|
+
| GetContext<Make["dependencies"]>
|
|
547
581
|
// | GetContext<Layers> // elsewhere provided
|
|
548
|
-
| Exclude<
|
|
582
|
+
| Exclude<MakeContext<Make> | RMW, GetSuccess<Make["dependencies"]> | GetSuccess<Layers>>
|
|
549
583
|
>
|
|
550
584
|
}
|
|
551
585
|
<
|
|
552
|
-
|
|
553
|
-
|
|
554
|
-
|
|
555
|
-
|
|
556
|
-
|
|
557
|
-
|
|
558
|
-
|
|
559
|
-
|
|
560
|
-
|
|
561
|
-
THandlers extends { [K in keyof Filter<Rsc>]: AHandler<Rsc[K]> },
|
|
562
|
-
TLayers extends NonEmptyReadonlyArray<Layer.Layer.Any> | never[],
|
|
563
|
-
Strict extends boolean = true
|
|
586
|
+
const Make extends {
|
|
587
|
+
dependencies: Array<Layer.Layer.Any>
|
|
588
|
+
effect: Effect<
|
|
589
|
+
{ [K in keyof Filter<Rsc>]: AHandler<Rsc[K]> },
|
|
590
|
+
any,
|
|
591
|
+
GetSuccess<Make["dependencies"]>
|
|
592
|
+
>
|
|
593
|
+
strict?: boolean
|
|
594
|
+
}
|
|
564
595
|
>(
|
|
565
|
-
|
|
566
|
-
make: Make & ((requests: RouteMatcher<CTXMap, Rsc, Context>) => Effect<THandlers, E, R>),
|
|
567
|
-
strict?: Strict
|
|
596
|
+
make: Make
|
|
568
597
|
): {
|
|
569
598
|
moduleName: ModuleName
|
|
570
599
|
Router: HttpRouter.HttpRouter.TagClass<
|
|
@@ -574,57 +603,55 @@ export const makeRouter = <
|
|
|
574
603
|
| Exclude<Context, HttpRouter.HttpRouter.Provided>
|
|
575
604
|
| Exclude<
|
|
576
605
|
RPCRouteR<
|
|
577
|
-
{
|
|
606
|
+
{
|
|
607
|
+
[K in keyof Filter<Rsc>]: Rpc.Rpc<Rsc[K], _R<ReturnType<MakeHandlers<Make, Filter<Rsc>>[K]["handler"]>>>
|
|
608
|
+
}[keyof Filter<Rsc>]
|
|
578
609
|
>,
|
|
579
610
|
HttpRouter.HttpRouter.Provided
|
|
580
611
|
>
|
|
581
612
|
>
|
|
582
613
|
routes: Layer.Layer<
|
|
583
614
|
RouterShape<Rsc>,
|
|
584
|
-
|
|
585
|
-
| GetContext<
|
|
615
|
+
MakeErrors<Make> | GetError<Make["dependencies"]>,
|
|
616
|
+
| GetContext<Make["dependencies"]>
|
|
586
617
|
// | GetContext<Layers> // elsewhere provided
|
|
587
|
-
| Exclude<
|
|
618
|
+
| Exclude<MakeContext<Make> | RMW, GetSuccess<Make["dependencies"]> | GetSuccess<Layers>>
|
|
588
619
|
>
|
|
589
620
|
}
|
|
590
621
|
<
|
|
591
|
-
|
|
592
|
-
|
|
593
|
-
|
|
594
|
-
|
|
595
|
-
|
|
622
|
+
const Make extends {
|
|
623
|
+
dependencies: [
|
|
624
|
+
...Make["dependencies"],
|
|
625
|
+
...Exclude<Effect.Context<Make["effect"]>, MakeDepsOut<Make>> extends never ? []
|
|
626
|
+
: [Layer.Layer<Exclude<Effect.Context<Make["effect"]>, MakeDepsOut<Make>>, never, never>]
|
|
627
|
+
]
|
|
628
|
+
effect: Effect<
|
|
629
|
+
{ [K in keyof Filter<Rsc>]: AHandler<Rsc[K]> },
|
|
630
|
+
any,
|
|
631
|
+
any
|
|
632
|
+
>
|
|
633
|
+
strict?: boolean
|
|
634
|
+
}
|
|
596
635
|
>(
|
|
597
|
-
|
|
598
|
-
...TLayers,
|
|
599
|
-
Layer.Layer<Exclude<R, GetSuccess<TLayers>>, never, never>
|
|
600
|
-
],
|
|
601
|
-
make: (requests: RouteMatcher<CTXMap, Rsc, Context>) => Effect<THandlers, E, R>,
|
|
602
|
-
strict?: Strict
|
|
636
|
+
make: Make
|
|
603
637
|
): {
|
|
604
638
|
moduleName: ModuleName
|
|
605
639
|
Router: HttpRouter.HttpRouter.TagClass<
|
|
606
640
|
RouterShape<Rsc>,
|
|
607
641
|
`${ModuleName}Router`,
|
|
608
642
|
never,
|
|
609
|
-
|
|
610
|
-
|
|
611
|
-
|
|
612
|
-
|
|
613
|
-
|
|
614
|
-
|
|
615
|
-
|
|
616
|
-
|
|
617
|
-
routes: Layer.Layer<
|
|
618
|
-
RouterShape<Rsc>,
|
|
619
|
-
E | GetError<TLayers>,
|
|
620
|
-
// | GetContext<Layers> // elsewhere provided
|
|
621
|
-
| GetContext<TLayers>
|
|
622
|
-
| Exclude<R | RMW, GetSuccess<TLayers> | GetSuccess<Layers>>
|
|
623
|
-
>
|
|
643
|
+
Exclude<Context, HttpRouter.HttpRouter.Provided>
|
|
644
|
+
> // | Exclude<
|
|
645
|
+
// RPCRouteR<
|
|
646
|
+
// { [K in keyof Filter<Rsc>]: Rpc.Rpc<Rsc[K], _R<ReturnType<THandlers[K]["handler"]>>> }[keyof Filter<Rsc>]
|
|
647
|
+
// >,
|
|
648
|
+
// HttpRouter.HttpRouter.Provided
|
|
649
|
+
// >
|
|
650
|
+
routes: any
|
|
624
651
|
}
|
|
625
|
-
} = f as any
|
|
652
|
+
} = ((m: { dependencies: any; effect: any; strict?: any }) => f(m.dependencies, m.effect)) as any
|
|
626
653
|
|
|
627
|
-
return effect
|
|
654
|
+
return Object.assign(effect, items)
|
|
628
655
|
}
|
|
629
656
|
|
|
630
657
|
type HR<T> = T extends HttpRouter.HttpRouter<any, infer R> ? R : never
|
|
@@ -682,3 +709,23 @@ export const makeRouter = <
|
|
|
682
709
|
|
|
683
710
|
return { matchAll, matchFor }
|
|
684
711
|
}
|
|
712
|
+
|
|
713
|
+
export type MakeDeps<Make> = Make extends { readonly dependencies: ReadonlyArray<Layer.Layer.Any> }
|
|
714
|
+
? Make["dependencies"][number]
|
|
715
|
+
: never
|
|
716
|
+
|
|
717
|
+
export type MakeErrors<Make> = Make extends { readonly effect: Effect<any, infer E, any> } ? E
|
|
718
|
+
: never
|
|
719
|
+
|
|
720
|
+
export type MakeContext<Make> = Make extends { readonly effect: Effect<any, any, infer R> } ? R
|
|
721
|
+
: never
|
|
722
|
+
|
|
723
|
+
export type MakeHandlers<Make, Handlers extends Record<string, any>> = Make extends
|
|
724
|
+
{ readonly effect: Effect<{ [K in keyof Handlers]: AHandler<Handlers[K]> }, any, any> }
|
|
725
|
+
? Effect.Success<Make["effect"]>
|
|
726
|
+
: never
|
|
727
|
+
|
|
728
|
+
/**
|
|
729
|
+
* @since 3.9.0
|
|
730
|
+
*/
|
|
731
|
+
export type MakeDepsOut<Make> = Contravariant.Type<MakeDeps<Make>[Layer.LayerTypeId]["_ROut"]>
|
package/test/controller.test.ts
CHANGED
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
/* eslint-disable @typescript-eslint/no-unsafe-member-access */
|
|
2
|
+
import { makeMiddleware, makeRouter } from "@effect-app/infra/api/routing"
|
|
3
|
+
import type { RequestContext } from "@effect-app/infra/RequestContext"
|
|
2
4
|
import { Rpc } from "@effect/rpc"
|
|
3
5
|
import type { Request } from "effect-app"
|
|
4
6
|
import { Context, Effect, FiberRef, Layer, S, Schedule } from "effect-app"
|
|
5
7
|
import { type GetEffectContext, makeRpcClient, type RPCContextMap, UnauthorizedError } from "effect-app/client"
|
|
6
8
|
import { HttpHeaders, HttpServerRequest } from "effect-app/http"
|
|
7
9
|
import type * as EffectRequest from "effect/Request"
|
|
8
|
-
import {
|
|
9
|
-
import type { RequestContext } from "../src/RequestContext.js"
|
|
10
|
+
import { it } from "vitest"
|
|
10
11
|
|
|
11
12
|
const optimisticConcurrencySchedule = Schedule.once
|
|
12
13
|
&& Schedule.recurWhile<any>((a) => a?._tag === "OptimisticConcurrencyException")
|
|
@@ -135,17 +136,61 @@ export class GetSomething extends Req<GetSomething>()("GetSomething", {
|
|
|
135
136
|
id: S.String
|
|
136
137
|
}, { success: S.Void }) {}
|
|
137
138
|
|
|
138
|
-
|
|
139
|
+
export class GetSomethingElse extends Req<GetSomethingElse>()("GetSomethingElse", {
|
|
140
|
+
id: S.String
|
|
141
|
+
}, { success: S.String }) {}
|
|
142
|
+
|
|
143
|
+
const Something = { GetSomething, GetSomethingElse, meta: { moduleName: "Something" as const } }
|
|
144
|
+
|
|
145
|
+
export class SomethingService extends Effect.Service<SomethingService>()("SomethingService", {
|
|
146
|
+
dependencies: [],
|
|
147
|
+
effect: Effect.gen(function*() {
|
|
148
|
+
return {}
|
|
149
|
+
})
|
|
150
|
+
}) {}
|
|
151
|
+
|
|
152
|
+
declare const a: {
|
|
153
|
+
(opt: { a: 1 }): void
|
|
154
|
+
(opt: { a: 2 }): void
|
|
155
|
+
(opt: { b: 3 }): void
|
|
156
|
+
(opt: { b: 3 }): void
|
|
157
|
+
}
|
|
139
158
|
|
|
140
159
|
export class SomethingRepo extends Effect.Service<SomethingRepo>()("SomethingRepo", {
|
|
160
|
+
dependencies: [SomethingService.Default],
|
|
161
|
+
effect: Effect.gen(function*() {
|
|
162
|
+
const smth = yield* SomethingService
|
|
163
|
+
console.log({ smth })
|
|
164
|
+
return {}
|
|
165
|
+
})
|
|
166
|
+
}) {}
|
|
167
|
+
|
|
168
|
+
export class SomethingService2 extends Effect.Service<SomethingService2>()("SomethingService2", {
|
|
141
169
|
dependencies: [],
|
|
142
170
|
effect: Effect.gen(function*() {
|
|
143
171
|
return {}
|
|
144
172
|
})
|
|
145
173
|
}) {}
|
|
146
174
|
|
|
147
|
-
matchFor(Something)(
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
175
|
+
export const routes = matchFor(Something)({
|
|
176
|
+
dependencies: [
|
|
177
|
+
SomethingRepo.Default,
|
|
178
|
+
SomethingService.Default,
|
|
179
|
+
SomethingService2.Default
|
|
180
|
+
],
|
|
181
|
+
effect: Effect.gen(function*() {
|
|
182
|
+
const repo = yield* SomethingRepo
|
|
183
|
+
const smth = yield* SomethingService
|
|
184
|
+
const smth2 = yield* SomethingService2
|
|
185
|
+
|
|
186
|
+
console.log({ repo, smth, smth2 })
|
|
187
|
+
|
|
188
|
+
const { GetSomething, GetSomethingElse } = matchFor(Something)
|
|
189
|
+
return {
|
|
190
|
+
GetSomething: GetSomething(Effect.void),
|
|
191
|
+
GetSomethingElse: GetSomethingElse(Effect.succeed("12"))
|
|
192
|
+
}
|
|
193
|
+
})
|
|
194
|
+
})
|
|
195
|
+
|
|
196
|
+
it("works", () => {})
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"controller.test.d.ts","sourceRoot":"","sources":["../controller.test.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"controller.test.d.ts","sourceRoot":"","sources":["../controller.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,196 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
Object.defineProperty(exports, "__esModule", {
|
|
4
|
-
value: true
|
|
5
|
-
});
|
|
6
|
-
exports.toHttpApp = exports.makeRouter = exports.makeMiddleware = exports.RouterSymbol = void 0;
|
|
7
|
-
var _rpc = require("@effect/rpc");
|
|
8
|
-
var _effectApp = require("effect-app");
|
|
9
|
-
var _http = require("effect-app/http");
|
|
10
|
-
var _utils = require("effect-app/utils");
|
|
11
|
-
var _errorReporter = require("../errorReporter.cjs");
|
|
12
|
-
var _logger = require("../logger.cjs");
|
|
13
|
-
var _DynamicMiddleware = require("./routing/DynamicMiddleware.cjs");
|
|
14
|
-
const logRequestError = (0, _errorReporter.logError)("Request");
|
|
15
|
-
const reportRequestError = (0, _errorReporter.reportError)("Request");
|
|
16
|
-
/**
|
|
17
|
-
* Plain jane JSON version
|
|
18
|
-
* @deprecated use HttpRpcRouterNoStream.toHttpApp once support options
|
|
19
|
-
*/
|
|
20
|
-
const toHttpApp = (self, options) => {
|
|
21
|
-
const handler = _rpc.RpcRouter.toHandler(self, options);
|
|
22
|
-
return _effectApp.Effect.withFiberRuntime(fiber => {
|
|
23
|
-
const context = fiber.getFiberRef(_effectApp.FiberRef.currentContext);
|
|
24
|
-
const request = _effectApp.Context.unsafeGet(context, _http.HttpServerRequest.HttpServerRequest);
|
|
25
|
-
return _effectApp.Effect.flatMap(request.json, _ => handler(_).pipe(_effectApp.Stream.provideContext(context), _effectApp.Stream.runCollect, _effectApp.Effect.map(_ => _effectApp.Chunk.toReadonlyArray(_)), _effectApp.Effect.andThen(_ => {
|
|
26
|
-
let status = 200;
|
|
27
|
-
for (const r of _.flat()) {
|
|
28
|
-
if (typeof r === "number") continue;
|
|
29
|
-
const results = _effectApp.Array.isArray(r) ? r : [r];
|
|
30
|
-
if (results.some(_ => _._tag === "Failure" && _.cause._tag === "Die")) {
|
|
31
|
-
status = 500;
|
|
32
|
-
break;
|
|
33
|
-
}
|
|
34
|
-
if (results.some(_ => _._tag === "Failure" && _.cause._tag === "Fail")) {
|
|
35
|
-
status = 422; // 418
|
|
36
|
-
break;
|
|
37
|
-
}
|
|
38
|
-
}
|
|
39
|
-
return _http.HttpServerResponse.json(_, {
|
|
40
|
-
status
|
|
41
|
-
});
|
|
42
|
-
}), _effectApp.Effect.orDie, _effectApp.Effect.tapDefect((0, _errorReporter.reportError)("RPCHttpApp"))));
|
|
43
|
-
});
|
|
44
|
-
};
|
|
45
|
-
exports.toHttpApp = toHttpApp;
|
|
46
|
-
const RouterSymbol = exports.RouterSymbol = Symbol();
|
|
47
|
-
// export interface RouteMatcher<
|
|
48
|
-
// Filtered extends Record<string, any>,
|
|
49
|
-
// CTXMap extends Record<string, any>,
|
|
50
|
-
// Rsc extends Filtered
|
|
51
|
-
// > extends RouteMatcherInt<Filtered, CTXMap, Rsc> {}
|
|
52
|
-
const makeMiddleware = content => content;
|
|
53
|
-
exports.makeMiddleware = makeMiddleware;
|
|
54
|
-
const makeRouter = (middleware, devMode) => {
|
|
55
|
-
function matchFor(rsc) {
|
|
56
|
-
const meta = rsc.meta;
|
|
57
|
-
const filtered = (0, _utils.typedKeysOf)(rsc).reduce((acc, cur) => {
|
|
58
|
-
if (_effectApp.Predicate.isObject(rsc[cur]) && rsc[cur]["success"]) {
|
|
59
|
-
acc[cur] = rsc[cur];
|
|
60
|
-
}
|
|
61
|
-
return acc;
|
|
62
|
-
}, {});
|
|
63
|
-
const items = (0, _utils.typedKeysOf)(filtered).reduce((prev, cur) => {
|
|
64
|
-
;
|
|
65
|
-
prev[cur] = Object.assign(fnOrEffect => {
|
|
66
|
-
const stack = new Error().stack?.split("\n").slice(2).join("\n");
|
|
67
|
-
return _effectApp.Effect.isEffect(fnOrEffect) ? class {
|
|
68
|
-
static stack = stack;
|
|
69
|
-
static _tag = "d";
|
|
70
|
-
static handler = () => fnOrEffect;
|
|
71
|
-
} : class {
|
|
72
|
-
static stack = stack;
|
|
73
|
-
static _tag = "d";
|
|
74
|
-
static handler = fnOrEffect;
|
|
75
|
-
};
|
|
76
|
-
}, {
|
|
77
|
-
success: rsc[cur].success,
|
|
78
|
-
successRaw: _effectApp.S.encodedSchema(rsc[cur].success),
|
|
79
|
-
failure: rsc[cur].failure,
|
|
80
|
-
raw:
|
|
81
|
-
// "Raw" variations are for when you don't want to decode just to encode it again on the response
|
|
82
|
-
// e.g for direct projection from DB
|
|
83
|
-
// but more importantly, to skip Effectful decoders, like to resolve relationships from the database or remote client.
|
|
84
|
-
fnOrEffect => {
|
|
85
|
-
const stack = new Error().stack?.split("\n").slice(2).join("\n");
|
|
86
|
-
return _effectApp.Effect.isEffect(fnOrEffect) ? class {
|
|
87
|
-
static stack = stack;
|
|
88
|
-
static _tag = "raw";
|
|
89
|
-
static handler = () => fnOrEffect;
|
|
90
|
-
} : class {
|
|
91
|
-
static stack = stack;
|
|
92
|
-
static _tag = "raw";
|
|
93
|
-
static handler = (req, ctx) => fnOrEffect(req, {
|
|
94
|
-
...ctx,
|
|
95
|
-
Response: rsc[cur].success
|
|
96
|
-
});
|
|
97
|
-
};
|
|
98
|
-
}
|
|
99
|
-
});
|
|
100
|
-
return prev;
|
|
101
|
-
}, {});
|
|
102
|
-
const f = (layers, make) => {
|
|
103
|
-
const r = class Router extends _http.HttpRouter.Tag(`${meta.moduleName}Router`)() {};
|
|
104
|
-
const layer = r.use(router => _effectApp.Effect.gen(function* () {
|
|
105
|
-
const controllers = yield* make(items);
|
|
106
|
-
const rpc = yield* (0, _DynamicMiddleware.makeRpc)(middleware);
|
|
107
|
-
// return make.pipe(Effect.map((c) => controllers(c, layers)))
|
|
108
|
-
const mapped = (0, _utils.typedKeysOf)(filtered).reduce((acc, cur) => {
|
|
109
|
-
const handler = controllers[cur];
|
|
110
|
-
const req = rsc[cur];
|
|
111
|
-
acc[cur] = rpc.effect(handler._tag === "raw" ? class extends req {
|
|
112
|
-
static success = _effectApp.S.encodedSchema(req.success);
|
|
113
|
-
get [_effectApp.Schema.symbolSerializable]() {
|
|
114
|
-
return this.constructor;
|
|
115
|
-
}
|
|
116
|
-
get [_effectApp.Schema.symbolWithResult]() {
|
|
117
|
-
return {
|
|
118
|
-
failure: req.failure,
|
|
119
|
-
success: _effectApp.S.encodedSchema(req.success)
|
|
120
|
-
};
|
|
121
|
-
}
|
|
122
|
-
} : req, req =>
|
|
123
|
-
// TODO: render more data... similar to console?
|
|
124
|
-
_effectApp.Effect.annotateCurrentSpan("requestInput", Object.entries(req).reduce((prev, [key, value]) => {
|
|
125
|
-
prev[key] = key === "password" ? "<redacted>" : typeof value === "string" || typeof value === "number" || typeof value === "boolean" ? typeof value === "string" && value.length > 256 ? value.substring(0, 253) + "..." : value : _effectApp.Array.isArray(value) ? `Array[${value.length}]` : value === null || value === undefined ? `${value}` : typeof value === "object" && value ? `Object[${Object.keys(value).length}]` : typeof value;
|
|
126
|
-
return prev;
|
|
127
|
-
}, {})).pipe(
|
|
128
|
-
// can't use andThen due to some being a function and effect
|
|
129
|
-
_effectApp.Effect.zipRight(handler.handler(req)), _effectApp.Effect.tapErrorCause(cause => _effectApp.Cause.isFailure(cause) ? logRequestError(cause) : _effectApp.Effect.void), _effectApp.Effect.tapDefect(cause => _effectApp.Effect.all([reportRequestError(cause, {
|
|
130
|
-
action: `${meta.moduleName}.${req._tag}`
|
|
131
|
-
}), _rpc.Rpc.currentHeaders.pipe(_effectApp.Effect.andThen(headers => {
|
|
132
|
-
return _logger.InfraLogger.logError("Finished request", cause).pipe(_effectApp.Effect.annotateLogs({
|
|
133
|
-
action: `${meta.moduleName}.${req._tag}`,
|
|
134
|
-
req: (0, _utils.pretty)(req),
|
|
135
|
-
headers: (0, _utils.pretty)(headers)
|
|
136
|
-
// resHeaders: pretty(
|
|
137
|
-
// Object
|
|
138
|
-
// .entries(headers)
|
|
139
|
-
// .reduce((prev, [key, value]) => {
|
|
140
|
-
// prev[key] = value && typeof value === "string" ? snipString(value) : value
|
|
141
|
-
// return prev
|
|
142
|
-
// }, {} as Record<string, any>)
|
|
143
|
-
// )
|
|
144
|
-
}));
|
|
145
|
-
}))])), devMode ? _ => _ : _effectApp.Effect.catchAllDefect(() => _effectApp.Effect.die("Internal Server Error")), _effectApp.Effect.withSpan("Request." + meta.moduleName + "." + req._tag, {
|
|
146
|
-
captureStackTrace: () => handler.stack
|
|
147
|
-
})), meta.moduleName); // TODO
|
|
148
|
-
return acc;
|
|
149
|
-
}, {});
|
|
150
|
-
const rpcRouter = _rpc.RpcRouter.make(...Object.values(mapped));
|
|
151
|
-
const httpApp = toHttpApp(rpcRouter, {
|
|
152
|
-
spanPrefix: rsc.meta.moduleName + "."
|
|
153
|
-
});
|
|
154
|
-
yield* router.all("/", httpApp,
|
|
155
|
-
// TODO: not queries.
|
|
156
|
-
{
|
|
157
|
-
uninterruptible: true
|
|
158
|
-
});
|
|
159
|
-
}));
|
|
160
|
-
// eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion
|
|
161
|
-
const routes = layer.pipe(_effectApp.Layer.provideMerge(r.Live), layers && _effectApp.Array.isNonEmptyReadonlyArray(layers) ? _effectApp.Layer.provide(layers) : _ => _,
|
|
162
|
-
// TODO: only provide to the middleware?
|
|
163
|
-
middleware.dependencies ? _effectApp.Layer.provide(middleware.dependencies) : _ => _);
|
|
164
|
-
// Effect.Effect<HttpRouter.HttpRouter<unknown, HttpRouter.HttpRouter.DefaultServices>, never, UserRouter>
|
|
165
|
-
return {
|
|
166
|
-
moduleName: meta.moduleName,
|
|
167
|
-
Router: r,
|
|
168
|
-
routes
|
|
169
|
-
};
|
|
170
|
-
};
|
|
171
|
-
const effect = f;
|
|
172
|
-
return {
|
|
173
|
-
handle: effect,
|
|
174
|
-
routes: items
|
|
175
|
-
};
|
|
176
|
-
}
|
|
177
|
-
function matchAll(handlers, requestLayer) {
|
|
178
|
-
const routers = (0, _utils.typedValuesOf)(handlers);
|
|
179
|
-
const rootRouter = class extends _http.HttpRouter.Tag("RootRouter")() {};
|
|
180
|
-
const r = rootRouter.use(router => _effectApp.Effect.gen(function* () {
|
|
181
|
-
for (const route of routers) {
|
|
182
|
-
yield* router.mount("/rpc/" + route.moduleName, yield* route.Router.router.pipe(_effectApp.Effect.map(_http.HttpRouter.use((0, _effectApp.flow)(_effectApp.Effect.provide(requestLayer))))));
|
|
183
|
-
}
|
|
184
|
-
})).pipe(_effectApp.Layer.provide(routers.map(r => r.routes).flat()));
|
|
185
|
-
return {
|
|
186
|
-
layer: r,
|
|
187
|
-
Router: rootRouter
|
|
188
|
-
};
|
|
189
|
-
}
|
|
190
|
-
return {
|
|
191
|
-
matchAll,
|
|
192
|
-
matchFor
|
|
193
|
-
};
|
|
194
|
-
};
|
|
195
|
-
exports.makeRouter = makeRouter;
|
|
196
|
-
//# sourceMappingURL=routing copy.cjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"routing copy.cjs","names":["_rpc","require","_effectApp","_http","_utils","_errorReporter","_logger","_DynamicMiddleware","logRequestError","logError","reportRequestError","reportError","toHttpApp","self","options","handler","RpcRouter","toHandler","Effect","withFiberRuntime","fiber","context","getFiberRef","FiberRef","currentContext","request","Context","unsafeGet","HttpServerRequest","flatMap","json","_","pipe","Stream","provideContext","runCollect","map","Chunk","toReadonlyArray","andThen","status","r","flat","results","Array","isArray","some","_tag","cause","HttpServerResponse","orDie","tapDefect","exports","RouterSymbol","Symbol","makeMiddleware","content","makeRouter","middleware","devMode","matchFor","rsc","meta","filtered","typedKeysOf","reduce","acc","cur","Predicate","isObject","items","prev","Object","assign","fnOrEffect","stack","Error","split","slice","join","isEffect","success","successRaw","S","encodedSchema","failure","raw","req","ctx","Response","f","layers","make","Router","HttpRouter","Tag","moduleName","layer","use","router","gen","controllers","rpc","makeRpc","mapped","effect","Schema","symbolSerializable","constructor","symbolWithResult","annotateCurrentSpan","entries","key","value","length","substring","undefined","keys","zipRight","tapErrorCause","Cause","isFailure","void","all","action","Rpc","currentHeaders","headers","InfraLogger","annotateLogs","pretty","catchAllDefect","die","withSpan","captureStackTrace","rpcRouter","values","httpApp","spanPrefix","uninterruptible","routes","Layer","provideMerge","Live","isNonEmptyReadonlyArray","provide","dependencies","handle","matchAll","handlers","requestLayer","routers","typedValuesOf","rootRouter","route","mount","flow"],"sources":["../../src/api/routing copy.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
|