@effect-app/infra 2.73.4 → 2.74.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 +11 -0
- package/dist/QueueMaker/errors.d.ts +1 -1
- package/dist/QueueMaker/errors.d.ts.map +1 -1
- package/dist/api/routing/DynamicMiddleware.d.ts +22 -9
- package/dist/api/routing/DynamicMiddleware.d.ts.map +1 -1
- package/dist/api/routing/DynamicMiddleware.js +82 -16
- package/dist/api/routing/dynamic-middleware.d.ts +24 -0
- package/dist/api/routing/dynamic-middleware.d.ts.map +1 -0
- package/dist/api/routing/dynamic-middleware.js +39 -0
- package/dist/api/routing/tsort.d.ts +8 -0
- package/dist/api/routing/tsort.d.ts.map +1 -0
- package/dist/api/routing/tsort.js +51 -0
- package/dist/api/routing.d.ts +19 -19
- package/dist/api/routing.d.ts.map +1 -1
- package/dist/api/routing.js +6 -55
- package/package.json +10 -2
- package/src/api/routing/DynamicMiddleware.ts +146 -34
- package/src/api/routing/dynamic-middleware.ts +154 -0
- package/src/api/routing/tsort.ts +56 -0
- package/src/api/routing.ts +12 -64
- package/test/controller.test.ts +115 -49
- 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 +152 -0
- package/test/dist/controller.test.d.ts.map +1 -1
- package/test/dist/controller6.test.d.ts.map +1 -0
- package/test/dist/controller7.test.d.ts.map +1 -0
- package/test/dist/filterApi.test.d.ts.map +1 -0
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { Cause, Effect, Exit } from "effect-app";
|
|
2
|
-
export declare const reportQueueError: <E>(cause: Cause<E>, extras?: Record<string, unknown>) => Effect.Effect<import("effect-app/client
|
|
2
|
+
export declare const reportQueueError: <E>(cause: Cause<E>, extras?: Record<string, unknown>) => Effect.Effect<import("effect-app/client").CauseException<unknown> | undefined, never, never>;
|
|
3
3
|
export declare function reportNonInterruptedFailure(context?: Record<string, unknown>): <A, E, R>(inp: Effect<A, E, R>) => Effect<Exit<A, E>, never, R>;
|
|
4
4
|
export declare function reportNonInterruptedFailureCause(context?: Record<string, unknown>): <E>(cause: Cause<E>) => Effect<void>;
|
|
5
5
|
//# sourceMappingURL=errors.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/QueueMaker/errors.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,YAAY,CAAA;AAIhD,eAAO,MAAM,gBAAgB,GAAI,CAAC,EAAE,OAAO,KAAK,CAAC,CAAC,CAAC,EAAE,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,
|
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/QueueMaker/errors.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,YAAY,CAAA;AAIhD,eAAO,MAAM,gBAAgB,GAAI,CAAC,EAAE,OAAO,KAAK,CAAC,CAAC,CAAC,EAAE,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,iGACnD,CAAA;AAElC,wBAAgB,2BAA2B,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,IAEnE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,KAAG,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAUrE;AAED,wBAAgB,gCAAgC,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,IACxE,CAAC,EAAE,OAAO,KAAK,CAAC,CAAC,CAAC,KAAG,MAAM,CAAC,IAAI,CAAC,CAM1C"}
|
|
@@ -1,20 +1,26 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { Array, Context, Effect, Layer, type NonEmptyArray, type Request, type S, type Scope } from "effect-app";
|
|
2
2
|
import type { GetEffectContext, RPCContextMap } from "effect-app/client/req";
|
|
3
|
-
import { type HttpRouter } from "effect-app/http";
|
|
3
|
+
import { HttpHeaders, type HttpRouter, HttpServerRequest } from "effect-app/http";
|
|
4
4
|
import type * as EffectRequest from "effect/Request";
|
|
5
5
|
import { type LayersUtils } from "../routing.js";
|
|
6
|
+
import { type AnyContextWithLayer } from "./dynamic-middleware.js";
|
|
6
7
|
type GetContext<T> = T extends Context.Context<infer Y> ? Y : never;
|
|
7
8
|
export type MakeRPCHandlerFactory<RequestContextMap extends Record<string, RPCContextMap.Any>, MiddlewareR> = <T extends {
|
|
8
9
|
config?: Partial<Record<keyof RequestContextMap, any>>;
|
|
9
|
-
}, Req extends S.TaggedRequest.All, HandlerR>(schema: T & S.Schema<Req, any, never>, handler: (request: Req, headers: any) => Effect.Effect<EffectRequest.Request.Success<Req>, EffectRequest.Request.Error<Req>, HandlerR
|
|
10
|
+
}, Req extends S.TaggedRequest.All, HandlerR>(schema: T & S.Schema<Req, any, never>, handler: (request: Req, headers: any) => Effect.Effect<EffectRequest.Request.Success<Req>, EffectRequest.Request.Error<Req>, Exclude<HandlerR, GetEffectContext<RequestContextMap, (T & S.Schema<Req, any, never>)["config"]>>>, moduleName: string) => (req: Req, headers: any) => Effect.Effect<Request.Request.Success<Req>, Request.Request.Error<Req> | RequestContextMapErrors<RequestContextMap>, MiddlewareR | Exclude<HandlerR, GetEffectContext<RequestContextMap, (T & S.Schema<Req, any, never>)["config"]>>>;
|
|
10
11
|
export type RPCHandlerFactory<RequestContextMap extends Record<string, RPCContextMap.Any>, ContextProviderA> = <T extends {
|
|
11
12
|
config?: Partial<Record<keyof RequestContextMap, any>>;
|
|
12
|
-
}, Req extends S.TaggedRequest.All, HandlerR>(schema: T & S.Schema<Req, any, never>, handler: (request: Req, headers: any) => Effect.Effect<EffectRequest.Request.Success<Req>, EffectRequest.Request.Error<Req>, HandlerR>, moduleName
|
|
13
|
+
}, Req extends S.TaggedRequest.All, HandlerR>(schema: T & S.Schema<Req, any, never>, handler: (request: Req, headers: any) => Effect.Effect<EffectRequest.Request.Success<Req>, EffectRequest.Request.Error<Req>, HandlerR>, moduleName: string) => (req: Req, headers: any) => Effect.Effect<Request.Request.Success<Req>, Request.Request.Error<Req> | RequestContextMapErrors<RequestContextMap>, HttpRouter.HttpRouter.Provided | Exclude<Exclude<HandlerR, GetEffectContext<RequestContextMap, (T & S.Schema<Req, any, never>)["config"]>>, ContextProviderA>>;
|
|
13
14
|
export type ContextProviderShape<ContextProviderA, ContextProviderR extends HttpRouter.HttpRouter.Provided> = Effect<Context.Context<ContextProviderA>, never, // no errors are allowed
|
|
14
15
|
ContextProviderR>;
|
|
15
16
|
export interface ContextProviderId {
|
|
16
17
|
_tag: "ContextProvider";
|
|
17
18
|
}
|
|
19
|
+
type RequestContextMapProvider<RequestContextMap extends Record<string, RPCContextMap.Any>> = {
|
|
20
|
+
[K in keyof RequestContextMap]: AnyContextWithLayer<{
|
|
21
|
+
[K in keyof RequestContextMap]?: RequestContextMap[K]["contextActivation"];
|
|
22
|
+
}, RequestContextMap[K]["service"], S.Schema.Type<RequestContextMap[K]["error"]>>;
|
|
23
|
+
};
|
|
18
24
|
export interface MiddlewareMake<RequestContextMap extends Record<string, RPCContextMap.Any>, // what services will the middleware provide dynamically to the handler, or raise errors.
|
|
19
25
|
MakeMiddlewareE, // what the middleware construction can fail with
|
|
20
26
|
MakeMiddlewareR, // what the middleware requires to be constructed
|
|
@@ -22,12 +28,14 @@ MiddlewareDependencies extends NonEmptyArray<Layer.Layer.Any>, // layers provide
|
|
|
22
28
|
ContextProviderA, // what the context provider provides
|
|
23
29
|
ContextProviderR extends HttpRouter.HttpRouter.Provided, // what the context provider requires
|
|
24
30
|
MakeContextProviderE, // what the context provider construction can fail with
|
|
25
|
-
MakeContextProviderR
|
|
31
|
+
MakeContextProviderR, // what the context provider construction requires
|
|
32
|
+
TI extends RequestContextMapProvider<RequestContextMap>> {
|
|
26
33
|
dependencies?: MiddlewareDependencies;
|
|
34
|
+
dynamicMiddlewares: TI;
|
|
27
35
|
contextProvider: Context.Tag<ContextProviderId, ContextProviderShape<ContextProviderA, ContextProviderR>> & {
|
|
28
36
|
Default: Layer.Layer<ContextProviderId, MakeContextProviderE, MakeContextProviderR>;
|
|
29
37
|
};
|
|
30
|
-
execute: (maker: (cb: MakeRPCHandlerFactory<RequestContextMap, ContextProviderA | HttpRouter.HttpRouter.Provided>) => MakeRPCHandlerFactory<RequestContextMap, ContextProviderA | HttpRouter.HttpRouter.Provided>) => Effect<MakeRPCHandlerFactory<RequestContextMap, ContextProviderA | HttpRouter.HttpRouter.Provided>, MakeMiddlewareE, MakeMiddlewareR>;
|
|
38
|
+
execute: (maker: (cb: MakeRPCHandlerFactory<RequestContextMap, ContextProviderA | HttpRouter.HttpRouter.Provided>) => MakeRPCHandlerFactory<RequestContextMap, ContextProviderA | HttpRouter.HttpRouter.Provided>) => Effect<MakeRPCHandlerFactory<RequestContextMap, ContextProviderA | HttpRouter.HttpRouter.Provided>, MakeMiddlewareE, MakeMiddlewareR | Scope>;
|
|
31
39
|
}
|
|
32
40
|
export declare const mergeContextProviders: <TDeps extends Array.NonEmptyReadonlyArray<(Context.Tag<any, Effect<Context.Context<any>, never, any> & {
|
|
33
41
|
_tag: any;
|
|
@@ -40,13 +48,13 @@ export declare const mergeContextProviders: <TDeps extends Array.NonEmptyReadonl
|
|
|
40
48
|
}, any, any>;
|
|
41
49
|
}>>(...deps: { [K in keyof TDeps]: TDeps[K]["Service"] extends Effect<Context.Context<any>, never, HttpRouter.HttpRouter.Provided> ? TDeps[K] : `HttpRouter.HttpRouter.Provided are the only requirements ${TDeps[K]["Service"]["_tag"]}'s returned effect can have`; }) => {
|
|
42
50
|
dependencies: { [K in keyof TDeps]: TDeps[K]["Default"]; };
|
|
43
|
-
effect: Effect.Effect<Effect.Effect<Context.Context<GetContext<Effect.Success<InstanceType<TDeps[number]>>>>, never, Effect.Context<InstanceType<TDeps[number]>>>, LayersUtils.GetLayersError<{ [K in keyof TDeps]: TDeps[K]["Default"]; }>,
|
|
51
|
+
effect: Effect.Effect<Effect.Effect<Context.Context<GetContext<Effect.Success<InstanceType<TDeps[number]>>>>, never, Effect.Context<InstanceType<TDeps[number]>>>, LayersUtils.GetLayersError<{ [K in keyof TDeps]: TDeps[K]["Default"]; }>, LayersUtils.GetLayersSuccess<{ [K in keyof TDeps]: TDeps[K]["Default"]; }>>;
|
|
44
52
|
};
|
|
45
53
|
export interface MiddlewareMakerId {
|
|
46
54
|
_tag: "MiddlewareMaker";
|
|
47
55
|
}
|
|
48
56
|
export declare const ContextProvider: <ContextProviderA, MakeContextProviderE, MakeContextProviderR, ContextProviderR extends HttpRouter.HttpRouter.Provided, Dependencies extends NonEmptyArray<Layer.Layer.Any>>(input: {
|
|
49
|
-
effect: Effect<Effect<ContextProviderA, never, ContextProviderR>, MakeContextProviderE, MakeContextProviderR>;
|
|
57
|
+
effect: Effect<Effect<ContextProviderA, never, ContextProviderR>, MakeContextProviderE, MakeContextProviderR | Scope>;
|
|
50
58
|
dependencies?: Dependencies;
|
|
51
59
|
}) => Context.Tag<ContextProviderId, Effect<ContextProviderA, never, ContextProviderR>> & {
|
|
52
60
|
Default: Layer.Layer<ContextProviderId, MakeContextProviderE | LayersUtils.GetLayersError<Dependencies>, Exclude<MakeContextProviderR, LayersUtils.GetLayersSuccess<Dependencies>> | LayersUtils.GetLayersContext<Dependencies>>;
|
|
@@ -75,13 +83,18 @@ ContextProviderA> = Context.Tag<MiddlewareMakerId, MiddlewareMakerId & {
|
|
|
75
83
|
Default: Layer.Layer<MiddlewareMakerId, MakeMiddlewareE, MakeMiddlewareR>;
|
|
76
84
|
};
|
|
77
85
|
export type RequestContextMapErrors<RequestContextMap extends Record<string, RPCContextMap.Any>> = S.Schema.Type<RequestContextMap[keyof RequestContextMap]["error"]>;
|
|
86
|
+
declare const DevMode_base: Context.ReferenceClass<DevMode, "DevMode", boolean>;
|
|
87
|
+
export declare class DevMode extends DevMode_base {
|
|
88
|
+
}
|
|
89
|
+
export declare const requestMiddleware: <A, E, R>(handle: (input: any, headers: HttpHeaders.Headers) => Effect.Effect<A, E, R>, moduleName: string) => (input: any, rpcHeaders: HttpHeaders.Headers) => Effect.Effect<A, E, HttpServerRequest.HttpServerRequest | R>;
|
|
78
90
|
export declare const makeMiddleware: <RequestContextMap extends Record<string, RPCContextMap.Any>>() => <MakeMiddlewareE, // what the middleware construction can fail with
|
|
79
91
|
MakeMiddlewareR, // what the middlware requires to be constructed
|
|
80
92
|
MiddlewareDependencies extends NonEmptyArray<Layer.Layer.Any>, // layers provided for the middlware to be constructed
|
|
81
93
|
ContextProviderA, // what the context provider provides
|
|
82
94
|
ContextProviderR extends HttpRouter.HttpRouter.Provided, // what the context provider requires
|
|
83
95
|
MakeContextProviderE, // what the context provider construction can fail with
|
|
84
|
-
MakeContextProviderR
|
|
96
|
+
MakeContextProviderR, // what the context provider construction requires
|
|
97
|
+
TI extends RequestContextMapProvider<RequestContextMap>>(make: MiddlewareMake<RequestContextMap, MakeMiddlewareE, MakeMiddlewareR, MiddlewareDependencies, ContextProviderA, ContextProviderR, MakeContextProviderE, MakeContextProviderR, TI>) => Context.Tag<MiddlewareMakerId, {
|
|
85
98
|
effect: RPCHandlerFactory<RequestContextMap, ContextProviderA>;
|
|
86
99
|
_tag: "MiddlewareMaker";
|
|
87
100
|
}> & {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DynamicMiddleware.d.ts","sourceRoot":"","sources":["../../../src/api/routing/DynamicMiddleware.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,KAAK,
|
|
1
|
+
{"version":3,"file":"DynamicMiddleware.d.ts","sourceRoot":"","sources":["../../../src/api/routing/DynamicMiddleware.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,20 +1,29 @@
|
|
|
1
1
|
/* eslint-disable @typescript-eslint/no-unsafe-assignment */
|
|
2
2
|
/* eslint-disable @typescript-eslint/no-unsafe-return */
|
|
3
3
|
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
4
|
-
import { Context, Effect, Layer, pipe } from "effect-app";
|
|
4
|
+
import { Array, Cause, Context, Effect, Layer, ParseResult, pipe } from "effect-app";
|
|
5
|
+
import { HttpHeaders, HttpServerRequest } from "effect-app/http";
|
|
6
|
+
import { pretty } from "effect-app/utils";
|
|
7
|
+
import { logError, reportError } from "../../errorReporter.js";
|
|
8
|
+
import { InfraLogger } from "../../logger.js";
|
|
9
|
+
import { implementMiddleware, mergeContexts } from "./dynamic-middleware.js";
|
|
5
10
|
// Note: the type here must be aligned with MergedContextProvider
|
|
6
11
|
export const mergeContextProviders = (...deps) => ({
|
|
7
12
|
dependencies: deps.map((_) => _.Default),
|
|
8
13
|
effect: Effect.gen(function* () {
|
|
9
|
-
const
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
14
|
+
const makers = yield* Effect.all(deps);
|
|
15
|
+
return Effect
|
|
16
|
+
.gen(function* () {
|
|
17
|
+
const services = makers.map((handle, i) => ({ maker: deps[i], handle }));
|
|
18
|
+
// services are effects which return some Context.Context<...>
|
|
19
|
+
const context = yield* mergeContexts(services);
|
|
20
|
+
return context;
|
|
21
|
+
});
|
|
13
22
|
})
|
|
14
23
|
});
|
|
15
24
|
export const ContextProvider = (input) => {
|
|
16
25
|
const ctx = Context.GenericTag("ContextProvider");
|
|
17
|
-
const l = Layer.
|
|
26
|
+
const l = Layer.scoped(ctx, input.effect);
|
|
18
27
|
return Object.assign(ctx, {
|
|
19
28
|
Default: l.pipe(input.dependencies ? Layer.provide(input.dependencies) : (_) => _)
|
|
20
29
|
});
|
|
@@ -22,35 +31,92 @@ export const ContextProvider = (input) => {
|
|
|
22
31
|
// Note: the type here must be aligned with mergeContextProviders
|
|
23
32
|
export const MergedContextProvider = (...deps) => pipe(deps, (_) => mergeContextProviders(..._), (_) => ContextProvider(_));
|
|
24
33
|
export const EmptyContextProvider = ContextProvider({ effect: Effect.succeed(Effect.succeed(Context.empty())) });
|
|
34
|
+
const logRequestError = logError("Request");
|
|
35
|
+
const reportRequestError = reportError("Request");
|
|
36
|
+
export class DevMode extends Context.Reference()("DevMode", { defaultValue: () => false }) {
|
|
37
|
+
}
|
|
38
|
+
// TODO: pull out to a generic middleware system..
|
|
39
|
+
export const requestMiddleware = (handle, moduleName) => Effect.fnUntraced(function* (input, rpcHeaders) {
|
|
40
|
+
const devMode = yield* DevMode;
|
|
41
|
+
// merge in the request headers
|
|
42
|
+
// we should consider if we should merge them into rpc headers on the Protocol layer instead.
|
|
43
|
+
const httpReq = yield* HttpServerRequest.HttpServerRequest;
|
|
44
|
+
const headers = HttpHeaders.merge(httpReq.headers, rpcHeaders);
|
|
45
|
+
return yield* Effect
|
|
46
|
+
.annotateCurrentSpan("requestInput", Object.entries(input).reduce((prev, [key, value]) => {
|
|
47
|
+
prev[key] = key === "password"
|
|
48
|
+
? "<redacted>"
|
|
49
|
+
: typeof value === "string" || typeof value === "number" || typeof value === "boolean"
|
|
50
|
+
? typeof value === "string" && value.length > 256
|
|
51
|
+
? (value.substring(0, 253) + "...")
|
|
52
|
+
: value
|
|
53
|
+
: Array.isArray(value)
|
|
54
|
+
? `Array[${value.length}]`
|
|
55
|
+
: value === null || value === undefined
|
|
56
|
+
? `${value}`
|
|
57
|
+
: typeof value === "object" && value
|
|
58
|
+
? `Object[${Object.keys(value).length}]`
|
|
59
|
+
: typeof value;
|
|
60
|
+
return prev;
|
|
61
|
+
}, {}))
|
|
62
|
+
.pipe(
|
|
63
|
+
// can't use andThen due to some being a function and effect
|
|
64
|
+
Effect.zipRight(handle(input, headers)),
|
|
65
|
+
// TODO: support ParseResult if the error channel of the request allows it.. but who would want that?
|
|
66
|
+
Effect.catchAll((_) => ParseResult.isParseError(_) ? Effect.die(_) : Effect.fail(_)), Effect.tapErrorCause((cause) => Cause.isFailure(cause) ? logRequestError(cause) : Effect.void), Effect.tapDefect((cause) => Effect
|
|
67
|
+
.all([
|
|
68
|
+
reportRequestError(cause, {
|
|
69
|
+
action: `${moduleName}.${input._tag}`
|
|
70
|
+
}),
|
|
71
|
+
InfraLogger
|
|
72
|
+
.logError("Finished request", cause)
|
|
73
|
+
.pipe(Effect.annotateLogs({
|
|
74
|
+
action: `${moduleName}.${input._tag}`,
|
|
75
|
+
req: pretty(input),
|
|
76
|
+
headers: pretty(headers)
|
|
77
|
+
// resHeaders: pretty(
|
|
78
|
+
// Object
|
|
79
|
+
// .entries(headers)
|
|
80
|
+
// .reduce((prev, [key, value]) => {
|
|
81
|
+
// prev[key] = value && typeof value === "string" ? snipString(value) : value
|
|
82
|
+
// return prev
|
|
83
|
+
// }, {} as Record<string, any>)
|
|
84
|
+
// )
|
|
85
|
+
}))
|
|
86
|
+
])), devMode ? (_) => _ : Effect.catchAllDefect(() => Effect.die("Internal Server Error")));
|
|
87
|
+
});
|
|
25
88
|
// factory for middlewares
|
|
26
89
|
export const makeMiddleware =
|
|
27
90
|
// by setting RequestContextMap beforehand, execute contextual typing does not fuck up itself to anys
|
|
28
91
|
() => (make) => {
|
|
29
92
|
// type Id = MiddlewareMakerId &
|
|
30
93
|
const MiddlewareMaker = Context.GenericTag("MiddlewareMaker");
|
|
31
|
-
const
|
|
94
|
+
const dynamicMiddlewares = implementMiddleware()(make.dynamicMiddlewares);
|
|
95
|
+
const l = Layer.scoped(MiddlewareMaker, Effect
|
|
32
96
|
.all({
|
|
97
|
+
dynamicMiddlewares: dynamicMiddlewares.effect,
|
|
33
98
|
middleware: make.execute((cb) => cb),
|
|
34
99
|
contextProvider: make.contextProvider // uses the middleware.contextProvider tag to get the context provider service
|
|
35
100
|
})
|
|
36
|
-
.pipe(Effect.map(({ contextProvider, middleware }) => ({
|
|
101
|
+
.pipe(Effect.map(({ contextProvider, dynamicMiddlewares, middleware }) => ({
|
|
37
102
|
_tag: "MiddlewareMaker",
|
|
38
103
|
effect: makeRpcEffect()((schema, handler, moduleName) => {
|
|
39
104
|
const h = middleware(schema, handler, moduleName);
|
|
40
|
-
return (req, headers)
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
.pipe(Effect.
|
|
44
|
-
|
|
45
|
-
|
|
105
|
+
return requestMiddleware(Effect.fnUntraced(function* (req, headers) {
|
|
106
|
+
yield* Effect.annotateCurrentSpan("request.name", moduleName ? `${moduleName}.${req._tag}` : req._tag);
|
|
107
|
+
// the contextProvider is an Effect that builds the context for the request
|
|
108
|
+
return yield* contextProvider.pipe(Effect.flatMap((contextProviderContext) =>
|
|
109
|
+
// the dynamicMiddlewares is an Effect that builds the dynamiuc context for the request
|
|
110
|
+
dynamicMiddlewares(schema.config ?? {}, headers).pipe(Effect.flatMap((dynamicContext) => h(req, headers).pipe(Effect.provide(dynamicContext))), Effect.provide(contextProviderContext))));
|
|
111
|
+
}), moduleName);
|
|
46
112
|
})
|
|
47
113
|
}))));
|
|
48
114
|
const middlewareLayer = l
|
|
49
|
-
.pipe(make.dependencies ?
|
|
115
|
+
.pipe(Layer.provide(Layer.mergeAll(make.dependencies ? make.dependencies : Layer.empty, ...dynamicMiddlewares.dependencies, make.contextProvider.Default)));
|
|
50
116
|
return Object.assign(MiddlewareMaker, { Default: middlewareLayer });
|
|
51
117
|
};
|
|
52
118
|
// it just provides the right types without cluttering the implementation with them
|
|
53
119
|
function makeRpcEffect() {
|
|
54
120
|
return (cb) => cb;
|
|
55
121
|
}
|
|
56
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
122
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRHluYW1pY01pZGRsZXdhcmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYXBpL3JvdXRpbmcvRHluYW1pY01pZGRsZXdhcmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsNERBQTREO0FBQzVELHdEQUF3RDtBQUN4RCx1REFBdUQ7QUFDdkQsT0FBTyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQXNCLFdBQVcsRUFBRSxJQUFJLEVBQW9DLE1BQU0sWUFBWSxDQUFBO0FBRTFJLE9BQU8sRUFBRSxXQUFXLEVBQW1CLGlCQUFpQixFQUFFLE1BQU0saUJBQWlCLENBQUE7QUFFakYsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGtCQUFrQixDQUFBO0FBRXpDLE9BQU8sRUFBRSxRQUFRLEVBQUUsV0FBVyxFQUFFLE1BQU0sd0JBQXdCLENBQUE7QUFDOUQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGlCQUFpQixDQUFBO0FBRTdDLE9BQU8sRUFBNEIsbUJBQW1CLEVBQUUsYUFBYSxFQUFFLE1BQU0seUJBQXlCLENBQUE7QUFxSXRHLGlFQUFpRTtBQUNqRSxNQUFNLENBQUMsTUFBTSxxQkFBcUIsR0FBRyxDQWlCbkMsR0FBRyxJQU1GLEVBWUQsRUFBRSxDQUFDLENBQUM7SUFDSixZQUFZLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBUTtJQUMvQyxNQUFNLEVBQUUsTUFBTSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUM7UUFDMUIsTUFBTSxNQUFNLEdBQUcsS0FBSyxDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQTtRQUN0QyxPQUFPLE1BQU07YUFDVixHQUFHLENBQUMsUUFBUSxDQUFDO1lBQ1osTUFBTSxRQUFRLEdBQUksTUFBZ0IsQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUE7WUFDbkYsOERBQThEO1lBQzlELE1BQU0sT0FBTyxHQUFHLEtBQUssQ0FBQyxDQUFDLGFBQWEsQ0FBQyxRQUFlLENBQUMsQ0FBQTtZQUNyRCxPQUFPLE9BQU8sQ0FBQTtRQUNoQixDQUFDLENBQUMsQ0FBQTtJQUNOLENBQUMsQ0FBUTtDQUNWLENBQUMsQ0FBQTtBQU1GLE1BQU0sQ0FBQyxNQUFNLGVBQWUsR0FBRyxDQU83QixLQU9DLEVBQ0QsRUFBRTtJQUNGLE1BQU0sR0FBRyxHQUFHLE9BQU8sQ0FBQyxVQUFVLENBSTVCLGlCQUFpQixDQUNsQixDQUFBO0lBQ0QsTUFBTSxDQUFDLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFBO0lBQ3pDLE9BQU8sTUFBTSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUU7UUFDeEIsT0FBTyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQ2IsS0FBSyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBT3pFO0tBQ0YsQ0FBQyxDQUFBO0FBQ0osQ0FBQyxDQUFBO0FBRUQsaUVBQWlFO0FBQ2pFLE1BQU0sQ0FBQyxNQUFNLHFCQUFxQixHQUFHLENBaUJuQyxHQUFHLElBTUYsRUFDRCxFQUFFLENBQ0YsSUFBSSxDQUNGLElBQXFELEVBQ3JELENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxxQkFBcUIsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUNsQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsZUFBZSxDQUFDLENBQVEsQ0FBQyxDQW9CL0IsQ0FBQTtBQUVMLE1BQU0sQ0FBQyxNQUFNLG9CQUFvQixHQUFHLGVBQWUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxNQUFNLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUE7QUEwQmhILE1BQU0sZUFBZSxHQUFHLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQTtBQUMzQyxNQUFNLGtCQUFrQixHQUFHLFdBQVcsQ0FBQyxTQUFTLENBQUMsQ0FBQTtBQUVqRCxNQUFNLE9BQU8sT0FBUSxTQUFRLE9BQU8sQ0FBQyxTQUFTLEVBQVcsQ0FBQyxTQUFTLEVBQUUsRUFBRSxZQUFZLEVBQUUsR0FBRyxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUM7Q0FBRztBQUV0RyxrREFBa0Q7QUFDbEQsTUFBTSxDQUFDLE1BQU0saUJBQWlCLEdBQUcsQ0FDL0IsTUFBNEUsRUFDNUUsVUFBa0IsRUFDbEIsRUFBRSxDQUNGLE1BQU0sQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLEVBQUMsS0FBVSxFQUFFLFVBQStCO0lBQ3JFLE1BQU0sT0FBTyxHQUFHLEtBQUssQ0FBQyxDQUFDLE9BQU8sQ0FBQTtJQUM5QiwrQkFBK0I7SUFDL0IsNkZBQTZGO0lBQzdGLE1BQU0sT0FBTyxHQUFHLEtBQUssQ0FBQyxDQUFDLGlCQUFpQixDQUFDLGlCQUFpQixDQUFBO0lBQzFELE1BQU0sT0FBTyxHQUFHLFdBQVcsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxVQUFVLENBQUMsQ0FBQTtJQUU5RCxPQUFPLEtBQUssQ0FBQyxDQUFDLE1BQU07U0FDakIsbUJBQW1CLENBQ2xCLGNBQWMsRUFDZCxNQUFNLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQW9CLEVBQUUsRUFBRTtRQUNyRSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxLQUFLLFVBQVU7WUFDNUIsQ0FBQyxDQUFDLFlBQVk7WUFDZCxDQUFDLENBQUMsT0FBTyxLQUFLLEtBQUssUUFBUSxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsSUFBSSxPQUFPLEtBQUssS0FBSyxTQUFTO2dCQUN0RixDQUFDLENBQUMsT0FBTyxLQUFLLEtBQUssUUFBUSxJQUFJLEtBQUssQ0FBQyxNQUFNLEdBQUcsR0FBRztvQkFDL0MsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEdBQUcsS0FBSyxDQUFDO29CQUNuQyxDQUFDLENBQUMsS0FBSztnQkFDVCxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUM7b0JBQ3RCLENBQUMsQ0FBQyxTQUFTLEtBQUssQ0FBQyxNQUFNLEdBQUc7b0JBQzFCLENBQUMsQ0FBQyxLQUFLLEtBQUssSUFBSSxJQUFJLEtBQUssS0FBSyxTQUFTO3dCQUN2QyxDQUFDLENBQUMsR0FBRyxLQUFLLEVBQUU7d0JBQ1osQ0FBQyxDQUFDLE9BQU8sS0FBSyxLQUFLLFFBQVEsSUFBSSxLQUFLOzRCQUNwQyxDQUFDLENBQUMsVUFBVSxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLE1BQU0sR0FBRzs0QkFDeEMsQ0FBQyxDQUFDLE9BQU8sS0FBSyxDQUFBO1FBQ2hCLE9BQU8sSUFBSSxDQUFBO0lBQ2IsQ0FBQyxFQUFFLEVBQStDLENBQUMsQ0FDcEQ7U0FDQSxJQUFJO0lBQ0gsNERBQTREO0lBQzVELE1BQU0sQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsQ0FBQztJQUN2QyxxR0FBcUc7SUFDckcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsV0FBVyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUNwRixNQUFNLENBQUMsYUFBYSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFDOUYsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQ3pCLE1BQU07U0FDSCxHQUFHLENBQUM7UUFDSCxrQkFBa0IsQ0FBQyxLQUFLLEVBQUU7WUFDeEIsTUFBTSxFQUFFLEdBQUcsVUFBVSxJQUFJLEtBQUssQ0FBQyxJQUFJLEVBQUU7U0FDdEMsQ0FBQztRQUNGLFdBQVc7YUFDUixRQUFRLENBQUMsa0JBQWtCLEVBQUUsS0FBSyxDQUFDO2FBQ25DLElBQUksQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDO1lBQ3hCLE1BQU0sRUFBRSxHQUFHLFVBQVUsSUFBSSxLQUFLLENBQUMsSUFBSSxFQUFFO1lBQ3JDLEdBQUcsRUFBRSxNQUFNLENBQUMsS0FBSyxDQUFDO1lBQ2xCLE9BQU8sRUFBRSxNQUFNLENBQUMsT0FBTyxDQUFDO1lBQ3hCLHNCQUFzQjtZQUN0QixXQUFXO1lBQ1gsd0JBQXdCO1lBQ3hCLHdDQUF3QztZQUN4QyxtRkFBbUY7WUFDbkYsb0JBQW9CO1lBQ3BCLG9DQUFvQztZQUNwQyxJQUFJO1NBQ0wsQ0FBQyxDQUFDO0tBQ04sQ0FBQyxDQUNMLEVBQ0QsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDLEdBQUcsRUFBRSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsdUJBQXVCLENBQUMsQ0FBQyxDQUN0RixDQUFBO0FBQ0wsQ0FBQyxDQUFDLENBQUE7QUFFSiwwQkFBMEI7QUFDMUIsTUFBTSxDQUFDLE1BQU0sY0FBYztBQUN6QixxR0FBcUc7QUFDckcsR0FFSSxFQUFFLENBQ04sQ0FZRSxJQVVDLEVBQ0QsRUFBRTtJQUNGLGdDQUFnQztJQUNoQyxNQUFNLGVBQWUsR0FBRyxPQUFPLENBQUMsVUFBVSxDQU94QyxpQkFBaUIsQ0FDbEIsQ0FBQTtJQUVELE1BQU0sa0JBQWtCLEdBQUcsbUJBQW1CLEVBQXFCLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLENBQUE7SUFFNUYsTUFBTSxDQUFDLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FDcEIsZUFBZSxFQUNmLE1BQU07U0FDSCxHQUFHLENBQUM7UUFDSCxrQkFBa0IsRUFBRSxrQkFBa0IsQ0FBQyxNQUFNO1FBQzdDLFVBQVUsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLENBQ3ZCLEVBQStGLEVBQy9GLEVBQUUsQ0FBQyxFQUFFLENBQUM7UUFDUixlQUFlLEVBQUUsSUFBSSxDQUFDLGVBQWUsQ0FBQyw4RUFBOEU7S0FDckgsQ0FBQztTQUNELElBQUksQ0FDSCxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxlQUFlLEVBQUUsa0JBQWtCLEVBQUUsVUFBVSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDbkUsSUFBSSxFQUFFLGlCQUEwQjtRQUNoQyxNQUFNLEVBQUUsYUFBYSxFQUF1QyxDQUMxRCxDQUFDLE1BQU0sRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUFFLEVBQUU7WUFDOUIsTUFBTSxDQUFDLEdBQUcsVUFBVSxDQUFDLE1BQU0sRUFBRSxPQUFjLEVBQUUsVUFBVSxDQUFDLENBQUE7WUFDeEQsT0FBTyxpQkFBaUIsQ0FDdEIsTUFBTSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsRUFBQyxHQUFHLEVBQUUsT0FBTztnQkFDdEMsS0FBSyxDQUFDLENBQUMsTUFBTSxDQUFDLG1CQUFtQixDQUMvQixjQUFjLEVBQ2QsVUFBVSxDQUFDLENBQUMsQ0FBQyxHQUFHLFVBQVUsSUFBSSxHQUFHLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQ3BELENBQUE7Z0JBRUQsMkVBQTJFO2dCQUMzRSxPQUFPLEtBQUssQ0FBQyxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQ2hDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxzQkFBc0IsRUFBRSxFQUFFO2dCQUN4Qyx1RkFBdUY7Z0JBQ3ZGLGtCQUFrQixDQUFDLE1BQU0sQ0FBQyxNQUFNLElBQUksRUFBRSxFQUFFLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FDbkQsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLGNBQWMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLEVBQ3hGLE1BQU0sQ0FBQyxPQUFPLENBQUMsc0JBQXNCLENBQUMsQ0FDdkMsQ0FDRixDQUNGLENBQUE7WUFDSCxDQUFDLENBQVEsRUFDVCxVQUFVLENBQ1gsQ0FBQTtRQUNILENBQUMsQ0FDRjtLQUNGLENBQUMsQ0FBQyxDQUNKLENBQ0osQ0FBQTtJQUNELE1BQU0sZUFBZSxHQUFHLENBQUM7U0FDdEIsSUFBSSxDQUNILEtBQUssQ0FBQyxPQUFPLENBQ1gsS0FBSyxDQUFDLFFBQVEsQ0FDWixJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsWUFBbUIsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssRUFDMUQsR0FBSSxrQkFBa0IsQ0FBQyxZQUFvQixFQUMzQyxJQUFJLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FDN0IsQ0FDRixDQVVGLENBQUE7SUFFSCxPQUFPLE1BQU0sQ0FBQyxNQUFNLENBQUMsZUFBZSxFQUFFLEVBQUUsT0FBTyxFQUFFLGVBQWUsRUFBRSxDQUFDLENBQUE7QUFDckUsQ0FBQyxDQUFBO0FBRUgsbUZBQW1GO0FBQ25GLFNBQVMsYUFBYTtJQUlwQixPQUFPLENBQ0wsRUE2QkMsRUFDRCxFQUFFLENBQUMsRUFBRSxDQUFBO0FBQ1QsQ0FBQyJ9
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { Context, Effect, type Layer, Option, type S } from "effect-app";
|
|
2
|
+
import { type GetEffectContext, type RPCContextMap } from "effect-app/client";
|
|
3
|
+
import { type Tag } from "effect-app/Context";
|
|
4
|
+
export type ContextWithLayer<Config, Id, Service, E, R, MakeE, MakeR, Tag extends string, Args extends [config: Config, headers: Record<string, string>], Dependencies extends any[]> = Context.Tag<Id, {
|
|
5
|
+
handle: (...args: Args) => Effect<Option<Context<Service>>, E, R>;
|
|
6
|
+
_tag: Tag;
|
|
7
|
+
}> & {
|
|
8
|
+
Default: Layer.Layer<Id, MakeE, MakeR>;
|
|
9
|
+
dependsOn?: Dependencies;
|
|
10
|
+
};
|
|
11
|
+
export type AnyContextWithLayer<Config, Service, Error> = ContextWithLayer<Config, any, Service, Error, any, any, any, string, any, any> | ContextWithLayer<Config, any, Service, Error, never, any, never, any, any, any> | ContextWithLayer<Config, any, Service, Error, any, any, never, any, any, any> | ContextWithLayer<Config, any, Service, Error, never, any, any, any, any, any>;
|
|
12
|
+
export declare const mergeContexts: <T extends readonly {
|
|
13
|
+
maker: any;
|
|
14
|
+
handle: Effect<Context<any>>;
|
|
15
|
+
}[]>(makers: T) => Effect.Effect<Context.Context<Effect.Effect.Success<T[number]["handle"]>>, never, never>;
|
|
16
|
+
export declare const mergeOptionContexts: <T extends readonly {
|
|
17
|
+
maker: any;
|
|
18
|
+
handle: Effect<Option<Context<any>>>;
|
|
19
|
+
}[]>(makers: T) => Effect.Effect<Context.Context<never>, never, never>;
|
|
20
|
+
export declare const implementMiddleware: <T extends Record<string, RPCContextMap.Any>>() => <TI extends { [K in keyof T]: AnyContextWithLayer<{ [K_1 in keyof T]?: T[K_1]["contextActivation"]; }, T[K]["service"], S.Schema.Type<T[K]["error"]>>; }>(implementations: TI) => {
|
|
21
|
+
dependencies: { [K in keyof TI]: TI[K]["Default"]; }[keyof TI][];
|
|
22
|
+
effect: Effect.Effect<(config: { [K in keyof T]?: T[K]["contextActivation"]; }, headers: Record<string, string>) => Effect.Effect<Context.Context<GetEffectContext<T, typeof config>>, Effect.Error<ReturnType<Tag.Service<TI[keyof TI]>["handle"]>>, Effect.Context<ReturnType<Tag.Service<TI[keyof TI]>["handle"]>>>, unknown, unknown>;
|
|
23
|
+
};
|
|
24
|
+
//# sourceMappingURL=dynamic-middleware.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dynamic-middleware.d.ts","sourceRoot":"","sources":["../../../src/api/routing/dynamic-middleware.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
2
|
+
import { Array, Context, Effect, Option } from "effect-app";
|
|
3
|
+
import { typedValuesOf } from "effect-app/utils";
|
|
4
|
+
import { InfraLogger } from "../../logger.js";
|
|
5
|
+
import { sort } from "./tsort.js";
|
|
6
|
+
export const mergeContexts = Effect.fnUntraced(function* (makers) {
|
|
7
|
+
let context = Context.empty();
|
|
8
|
+
for (const mw of makers) {
|
|
9
|
+
yield* InfraLogger.logDebug("Building context for middleware", mw.maker.key ?? mw.maker);
|
|
10
|
+
const moreContext = yield* mw.handle.pipe(Effect.provide(context));
|
|
11
|
+
yield* InfraLogger.logDebug("Built context for middleware", mw.maker.key ?? mw.maker, moreContext.toJSON().services);
|
|
12
|
+
context = Context.merge(context, moreContext);
|
|
13
|
+
}
|
|
14
|
+
return context;
|
|
15
|
+
});
|
|
16
|
+
export const mergeOptionContexts = Effect.fnUntraced(function* (makers) {
|
|
17
|
+
let context = Context.empty();
|
|
18
|
+
for (const mw of makers) {
|
|
19
|
+
yield* InfraLogger.logDebug("Building context for middleware", mw.maker.key ?? mw.maker);
|
|
20
|
+
const moreContext = yield* mw.handle.pipe(Effect.provide(context));
|
|
21
|
+
yield* InfraLogger.logDebug("Built context for middleware", mw.maker.key ?? mw.maker, Option.map(moreContext, (c) => c.toJSON().services));
|
|
22
|
+
if (moreContext.value) {
|
|
23
|
+
context = Context.merge(context, moreContext.value);
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
return context;
|
|
27
|
+
});
|
|
28
|
+
export const implementMiddleware = () => (implementations) => ({
|
|
29
|
+
dependencies: typedValuesOf(implementations).map((_) => _.Default),
|
|
30
|
+
effect: Effect.gen(function* () {
|
|
31
|
+
const sorted = sort(typedValuesOf(implementations));
|
|
32
|
+
const makers = yield* Effect.all(sorted);
|
|
33
|
+
return Effect.fnUntraced(function* (config, headers) {
|
|
34
|
+
const ctx = yield* mergeOptionContexts(Array.map(makers, (_, i) => ({ maker: sorted[i], handle: _.handle(config, headers) })));
|
|
35
|
+
return ctx;
|
|
36
|
+
});
|
|
37
|
+
})
|
|
38
|
+
});
|
|
39
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHluYW1pYy1taWRkbGV3YXJlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2FwaS9yb3V0aW5nL2R5bmFtaWMtbWlkZGxld2FyZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSx1REFBdUQ7QUFDdkQsT0FBTyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFjLE1BQU0sRUFBVSxNQUFNLFlBQVksQ0FBQTtBQUcvRSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sa0JBQWtCLENBQUE7QUFDaEQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGlCQUFpQixDQUFBO0FBQzdDLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxZQUFZLENBQUE7QUF5RWpDLE1BQU0sQ0FBQyxNQUFNLGFBQWEsR0FBRyxNQUFNLENBQUMsVUFBVSxDQUM1QyxRQUFRLENBQUMsRUFBb0UsTUFBUztJQUNwRixJQUFJLE9BQU8sR0FBRyxPQUFPLENBQUMsS0FBSyxFQUFFLENBQUE7SUFDN0IsS0FBSyxNQUFNLEVBQUUsSUFBSSxNQUFNLEVBQUUsQ0FBQztRQUN4QixLQUFLLENBQUMsQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLGlDQUFpQyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsR0FBRyxJQUFJLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQTtRQUN4RixNQUFNLFdBQVcsR0FBRyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUE7UUFDbEUsS0FBSyxDQUFDLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FDekIsOEJBQThCLEVBQzlCLEVBQUUsQ0FBQyxLQUFLLENBQUMsR0FBRyxJQUFJLEVBQUUsQ0FBQyxLQUFLLEVBQ3ZCLFdBQW1CLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxDQUN2QyxDQUFBO1FBQ0QsT0FBTyxHQUFHLE9BQU8sQ0FB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
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export declare function tsort(edges: any): any[];
|
|
2
|
+
export declare const createEdges: <T extends {
|
|
3
|
+
dependsOn?: any[];
|
|
4
|
+
}>(dep: readonly T[]) => any[];
|
|
5
|
+
export declare const sort: <T>(dep: readonly (T & {
|
|
6
|
+
dependsOn?: any[];
|
|
7
|
+
})[]) => readonly T[];
|
|
8
|
+
//# sourceMappingURL=tsort.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tsort.d.ts","sourceRoot":"","sources":["../../../src/api/routing/tsort.ts"],"names":[],"mappings":"AAEA,wBAAgB,KAAK,CAAC,KAAK,KAAA,SAqC1B;AAED,eAAO,MAAM,WAAW,GAAI,CAAC,SAAS;IAAE,SAAS,CAAC,EAAE,GAAG,EAAE,CAAA;CAAE,EAAE,KAAK,SAAS,CAAC,EAAE,UAQ7E,CAAA;AAED,eAAO,MAAM,IAAI,GAAI,CAAC,EAAE,KAAK,SAAS,CAAC,CAAC,GAAG;IAAE,SAAS,CAAC,EAAE,GAAG,EAAE,CAAA;CAAE,CAAC,EAAE,KAAG,SAAS,CAAC,EAI/E,CAAA"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
|
2
|
+
// @ts-nocheck
|
|
3
|
+
export function tsort(edges) {
|
|
4
|
+
const nodes = new Map(), sorted = [], visited = new Map();
|
|
5
|
+
const Node = function (id) {
|
|
6
|
+
this.id = id;
|
|
7
|
+
this.afters = [];
|
|
8
|
+
};
|
|
9
|
+
edges.forEach((v) => {
|
|
10
|
+
const from = v[0], to = v[1];
|
|
11
|
+
if (!nodes.get(from))
|
|
12
|
+
nodes.set(from, new Node(from));
|
|
13
|
+
if (!nodes.get(to))
|
|
14
|
+
nodes.set(to, new Node(to));
|
|
15
|
+
nodes.get(from).afters.push(to);
|
|
16
|
+
});
|
|
17
|
+
[...nodes.keys()].forEach(function visit(idstr, ancestors) {
|
|
18
|
+
const node = nodes.get(idstr), id = node.id;
|
|
19
|
+
if (visited.get(idstr))
|
|
20
|
+
return;
|
|
21
|
+
if (!Array.isArray(ancestors))
|
|
22
|
+
ancestors = [];
|
|
23
|
+
ancestors.push(id);
|
|
24
|
+
visited.set(idstr, true);
|
|
25
|
+
node.afters.forEach(function (afterID) {
|
|
26
|
+
if (ancestors.indexOf(afterID) >= 0) {
|
|
27
|
+
throw new Error("closed chain : " + afterID + " is in " + id);
|
|
28
|
+
}
|
|
29
|
+
visit(afterID, ancestors.map(function (v) {
|
|
30
|
+
return v;
|
|
31
|
+
}));
|
|
32
|
+
});
|
|
33
|
+
sorted.unshift(id);
|
|
34
|
+
});
|
|
35
|
+
return sorted;
|
|
36
|
+
}
|
|
37
|
+
export const createEdges = (dep) => {
|
|
38
|
+
const result = [];
|
|
39
|
+
dep.forEach((key) => {
|
|
40
|
+
key.dependsOn?.forEach((n) => {
|
|
41
|
+
result.push([n, key]);
|
|
42
|
+
});
|
|
43
|
+
});
|
|
44
|
+
return result;
|
|
45
|
+
};
|
|
46
|
+
export const sort = (dep) => {
|
|
47
|
+
const edges = createEdges(dep);
|
|
48
|
+
const result = tsort(edges);
|
|
49
|
+
return result.concat(dep.filter((v) => !result.includes(v)));
|
|
50
|
+
};
|
|
51
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHNvcnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYXBpL3JvdXRpbmcvdHNvcnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsNkRBQTZEO0FBQzdELGNBQWM7QUFDZCxNQUFNLFVBQVUsS0FBSyxDQUFDLEtBQUs7SUFDekIsTUFBTSxLQUFLLEdBQUcsSUFBSSxHQUFHLEVBQUUsRUFBRSxNQUFNLEdBQUcsRUFBRSxFQUFFLE9BQU8sR0FBRyxJQUFJLEdBQUcsRUFBRSxDQUFBO0lBRXpELE1BQU0sSUFBSSxHQUFHLFVBQVMsRUFBRTtRQUN0QixJQUFJLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQTtRQUNaLElBQUksQ0FBQyxNQUFNLEdBQUcsRUFBRSxDQUFBO0lBQ2xCLENBQUMsQ0FBQTtJQUVELEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRTtRQUNsQixNQUFNLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQTtRQUM1QixJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUM7WUFBRSxLQUFLLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFBO1FBQ3JELElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUFFLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLElBQUksSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUE7UUFDL0MsS0FBSyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFBO0lBQ2pDLENBQUMsQ0FBQyxDQUNEO0lBQUEsQ0FBQyxHQUFHLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxTQUFTLEtBQUssQ0FBQyxLQUFLLEVBQUUsU0FBUztRQUN4RCxNQUFNLElBQUksR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFLEVBQUUsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFBO1FBRTNDLElBQUksT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUM7WUFBRSxPQUFNO1FBQzlCLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQztZQUFFLFNBQVMsR0FBRyxFQUFFLENBQUE7UUFFN0MsU0FBUyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQTtRQUNsQixPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQTtRQUN4QixJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxVQUFTLE9BQU87WUFDbEMsSUFBSSxTQUFTLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO2dCQUNwQyxNQUFNLElBQUksS0FBSyxDQUFDLGlCQUFpQixHQUFHLE9BQU8sR0FBRyxTQUFTLEdBQUcsRUFBRSxDQUFDLENBQUE7WUFDL0QsQ0FBQztZQUNELEtBQUssQ0FDSCxPQUFPLEVBQ1AsU0FBUyxDQUFDLEdBQUcsQ0FBQyxVQUFTLENBQUM7Z0JBQ3RCLE9BQU8sQ0FBQyxDQUFBO1lBQ1YsQ0FBQyxDQUFDLENBQ0gsQ0FBQTtRQUNILENBQUMsQ0FBQyxDQUFBO1FBQ0YsTUFBTSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQTtJQUNwQixDQUFDLENBQUMsQ0FBQTtJQUVGLE9BQU8sTUFBTSxDQUFBO0FBQ2YsQ0FBQztBQUVELE1BQU0sQ0FBQyxNQUFNLFdBQVcsR0FBRyxDQUFrQyxHQUFpQixFQUFFLEVBQUU7SUFDaEYsTUFBTSxNQUFNLEdBQUcsRUFBRSxDQUFBO0lBQ2pCLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRTtRQUNsQixHQUFHLENBQUMsU0FBUyxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFO1lBQzNCLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQTtRQUN2QixDQUFDLENBQUMsQ0FBQTtJQUNKLENBQUMsQ0FBQyxDQUFBO0lBQ0YsT0FBTyxNQUFNLENBQUE7QUFDZixDQUFDLENBQUE7QUFFRCxNQUFNLENBQUMsTUFBTSxJQUFJLEdBQUcsQ0FBSSxHQUEyQyxFQUFnQixFQUFFO0lBQ25GLE1BQU0sS0FBSyxHQUFHLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQTtJQUM5QixNQUFNLE1BQU0sR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUE7SUFDM0IsT0FBTyxNQUFNLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUE7QUFDOUQsQ0FBQyxDQUFBIn0=
|
package/dist/api/routing.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Array, Effect, Layer, type NonEmptyReadonlyArray,
|
|
1
|
+
import { type Array, Effect, Layer, type NonEmptyReadonlyArray, S } from "effect-app";
|
|
2
2
|
import type { GetEffectContext, RPCContextMap } from "effect-app/client/req";
|
|
3
3
|
import { type HttpHeaders, HttpRouter } from "effect-app/http";
|
|
4
4
|
import type { Contravariant } from "effect/Types";
|
|
@@ -105,7 +105,7 @@ export declare const makeRouter: <RequestContextMap extends Record<string, RPCCo
|
|
|
105
105
|
meta: {
|
|
106
106
|
moduleName: ModuleName;
|
|
107
107
|
};
|
|
108
|
-
})[K]>) => Generator<YieldWrap<Effect<any, ParseResult.ParseError | S.Schema.Type<GetFailure<(Resource & {
|
|
108
|
+
})[K]>) => Generator<YieldWrap<Effect<any, S.ParseResult.ParseError | S.Schema.Type<GetFailure<(Resource & {
|
|
109
109
|
meta: {
|
|
110
110
|
moduleName: ModuleName;
|
|
111
111
|
};
|
|
@@ -127,7 +127,7 @@ export declare const makeRouter: <RequestContextMap extends Record<string, RPCCo
|
|
|
127
127
|
meta: {
|
|
128
128
|
moduleName: ModuleName;
|
|
129
129
|
};
|
|
130
|
-
})[K]>>, ParseResult.ParseError | S.Schema.Type<GetFailure<(Resource & {
|
|
130
|
+
})[K]>>, S.ParseResult.ParseError | S.Schema.Type<GetFailure<(Resource & {
|
|
131
131
|
meta: {
|
|
132
132
|
moduleName: ModuleName;
|
|
133
133
|
};
|
|
@@ -141,7 +141,7 @@ export declare const makeRouter: <RequestContextMap extends Record<string, RPCCo
|
|
|
141
141
|
meta: {
|
|
142
142
|
moduleName: ModuleName;
|
|
143
143
|
};
|
|
144
|
-
})[K]>>, ParseResult.ParseError | S.Schema.Type<GetFailure<(Resource & {
|
|
144
|
+
})[K]>>, S.ParseResult.ParseError | S.Schema.Type<GetFailure<(Resource & {
|
|
145
145
|
meta: {
|
|
146
146
|
moduleName: ModuleName;
|
|
147
147
|
};
|
|
@@ -154,7 +154,7 @@ export declare const makeRouter: <RequestContextMap extends Record<string, RPCCo
|
|
|
154
154
|
meta: {
|
|
155
155
|
moduleName: ModuleName;
|
|
156
156
|
};
|
|
157
|
-
})[K]>) => Generator<YieldWrap<Effect<any, ParseResult.ParseError | S.Schema.Type<GetFailure<(Resource & {
|
|
157
|
+
})[K]>) => Generator<YieldWrap<Effect<any, S.ParseResult.ParseError | S.Schema.Type<GetFailure<(Resource & {
|
|
158
158
|
meta: {
|
|
159
159
|
moduleName: ModuleName;
|
|
160
160
|
};
|
|
@@ -174,7 +174,7 @@ export declare const makeRouter: <RequestContextMap extends Record<string, RPCCo
|
|
|
174
174
|
meta: {
|
|
175
175
|
moduleName: ModuleName;
|
|
176
176
|
};
|
|
177
|
-
})[K]>>, ParseResult.ParseError | S.Schema.Type<GetFailure<(Resource & {
|
|
177
|
+
})[K]>>, S.ParseResult.ParseError | S.Schema.Type<GetFailure<(Resource & {
|
|
178
178
|
meta: {
|
|
179
179
|
moduleName: ModuleName;
|
|
180
180
|
};
|
|
@@ -186,7 +186,7 @@ export declare const makeRouter: <RequestContextMap extends Record<string, RPCCo
|
|
|
186
186
|
meta: {
|
|
187
187
|
moduleName: ModuleName;
|
|
188
188
|
};
|
|
189
|
-
})[K]>>, ParseResult.ParseError | S.Schema.Type<GetFailure<(Resource & {
|
|
189
|
+
})[K]>>, S.ParseResult.ParseError | S.Schema.Type<GetFailure<(Resource & {
|
|
190
190
|
meta: {
|
|
191
191
|
moduleName: ModuleName;
|
|
192
192
|
};
|
|
@@ -219,12 +219,12 @@ export declare const makeRouter: <RequestContextMap extends Record<string, RPCCo
|
|
|
219
219
|
<const Make extends {
|
|
220
220
|
dependencies: Array<Layer.Layer.Any>;
|
|
221
221
|
effect: (match: <const Impl extends { [K in keyof FilterRequestModules<Resource_1>]: ({
|
|
222
|
-
raw: (req: S.Schema.Type<Resource_1[K]>) => Generator<YieldWrap<Effect<any, ParseResult.ParseError | S.Schema.Type<GetFailure<Resource_1[K]>>, ContextProviderA | GetEffectContext<RequestContextMap, Resource_1[K]["config"]>>>, S.Schema.Encoded<GetSuccess<Resource_1[K]>>, never>;
|
|
222
|
+
raw: (req: S.Schema.Type<Resource_1[K]>) => Generator<YieldWrap<Effect<any, S.ParseResult.ParseError | S.Schema.Type<GetFailure<Resource_1[K]>>, ContextProviderA | GetEffectContext<RequestContextMap, Resource_1[K]["config"]>>>, S.Schema.Encoded<GetSuccess<Resource_1[K]>>, never>;
|
|
223
223
|
} | {
|
|
224
|
-
raw: (req: S.Schema.Type<Resource_1[K]>) => Effect<S.Schema.Encoded<GetSuccess<Resource_1[K]>>, ParseResult.ParseError | S.Schema.Type<GetFailure<Resource_1[K]>>, ContextProviderA | GetEffectContext<RequestContextMap, Resource_1[K]["config"]>>;
|
|
224
|
+
raw: (req: S.Schema.Type<Resource_1[K]>) => Effect<S.Schema.Encoded<GetSuccess<Resource_1[K]>>, S.ParseResult.ParseError | S.Schema.Type<GetFailure<Resource_1[K]>>, ContextProviderA | GetEffectContext<RequestContextMap, Resource_1[K]["config"]>>;
|
|
225
225
|
} | {
|
|
226
|
-
raw: Effect<S.Schema.Encoded<GetSuccess<Resource_1[K]>>, ParseResult.ParseError | S.Schema.Type<GetFailure<Resource_1[K]>>, ContextProviderA | GetEffectContext<RequestContextMap, Resource_1[K]["config"]>>;
|
|
227
|
-
}) | (((req: S.Schema.Type<Resource_1[K]>) => Generator<YieldWrap<Effect<any, ParseResult.ParseError | S.Schema.Type<GetFailure<Resource_1[K]>>, ContextProviderA | GetEffectContext<RequestContextMap, Resource_1[K]["config"]>>>, S.Schema.Type<GetSuccess<Resource_1[K]>>, never>) | ((req: S.Schema.Type<Resource_1[K]>) => Effect<S.Schema.Type<GetSuccess<Resource_1[K]>>, ParseResult.ParseError | S.Schema.Type<GetFailure<Resource_1[K]>>, ContextProviderA | GetEffectContext<RequestContextMap, Resource_1[K]["config"]>>) | Effect<S.Schema.Type<GetSuccess<Resource_1[K]>>, ParseResult.ParseError | S.Schema.Type<GetFailure<Resource_1[K]>>, ContextProviderA | GetEffectContext<RequestContextMap, Resource_1[K]["config"]>>); }>(impl: Impl) => { [K in keyof Impl & keyof FilterRequestModules<Resource_1>]: Handler<FilterRequestModules<Resource_1>[K], Impl[K] extends {
|
|
226
|
+
raw: Effect<S.Schema.Encoded<GetSuccess<Resource_1[K]>>, S.ParseResult.ParseError | S.Schema.Type<GetFailure<Resource_1[K]>>, ContextProviderA | GetEffectContext<RequestContextMap, Resource_1[K]["config"]>>;
|
|
227
|
+
}) | (((req: S.Schema.Type<Resource_1[K]>) => Generator<YieldWrap<Effect<any, S.ParseResult.ParseError | S.Schema.Type<GetFailure<Resource_1[K]>>, ContextProviderA | GetEffectContext<RequestContextMap, Resource_1[K]["config"]>>>, S.Schema.Type<GetSuccess<Resource_1[K]>>, never>) | ((req: S.Schema.Type<Resource_1[K]>) => Effect<S.Schema.Type<GetSuccess<Resource_1[K]>>, S.ParseResult.ParseError | S.Schema.Type<GetFailure<Resource_1[K]>>, ContextProviderA | GetEffectContext<RequestContextMap, Resource_1[K]["config"]>>) | Effect<S.Schema.Type<GetSuccess<Resource_1[K]>>, S.ParseResult.ParseError | S.Schema.Type<GetFailure<Resource_1[K]>>, ContextProviderA | GetEffectContext<RequestContextMap, Resource_1[K]["config"]>>); }>(impl: Impl) => { [K in keyof Impl & keyof FilterRequestModules<Resource_1>]: Handler<FilterRequestModules<Resource_1>[K], Impl[K] extends {
|
|
228
228
|
raw: any;
|
|
229
229
|
} ? RequestTypes.TYPE : RequestTypes.DECODED, Exclude<Exclude<Impl[K] extends {
|
|
230
230
|
raw: any;
|
|
@@ -293,12 +293,12 @@ export declare const makeRouter: <RequestContextMap extends Record<string, RPCCo
|
|
|
293
293
|
<const Make extends {
|
|
294
294
|
dependencies: Array<Layer.Layer.Any>;
|
|
295
295
|
effect: (match: <const Impl extends { [K in keyof FilterRequestModules<Resource_1>]: ({
|
|
296
|
-
raw: (req: S.Schema.Type<Resource_1[K]>) => Generator<YieldWrap<Effect<any, ParseResult.ParseError | S.Schema.Type<GetFailure<Resource_1[K]>>, ContextProviderA | GetEffectContext<RequestContextMap, Resource_1[K]["config"]>>>, S.Schema.Encoded<GetSuccess<Resource_1[K]>>, never>;
|
|
296
|
+
raw: (req: S.Schema.Type<Resource_1[K]>) => Generator<YieldWrap<Effect<any, S.ParseResult.ParseError | S.Schema.Type<GetFailure<Resource_1[K]>>, ContextProviderA | GetEffectContext<RequestContextMap, Resource_1[K]["config"]>>>, S.Schema.Encoded<GetSuccess<Resource_1[K]>>, never>;
|
|
297
297
|
} | {
|
|
298
|
-
raw: (req: S.Schema.Type<Resource_1[K]>) => Effect<S.Schema.Encoded<GetSuccess<Resource_1[K]>>, ParseResult.ParseError | S.Schema.Type<GetFailure<Resource_1[K]>>, ContextProviderA | GetEffectContext<RequestContextMap, Resource_1[K]["config"]>>;
|
|
298
|
+
raw: (req: S.Schema.Type<Resource_1[K]>) => Effect<S.Schema.Encoded<GetSuccess<Resource_1[K]>>, S.ParseResult.ParseError | S.Schema.Type<GetFailure<Resource_1[K]>>, ContextProviderA | GetEffectContext<RequestContextMap, Resource_1[K]["config"]>>;
|
|
299
299
|
} | {
|
|
300
|
-
raw: Effect<S.Schema.Encoded<GetSuccess<Resource_1[K]>>, ParseResult.ParseError | S.Schema.Type<GetFailure<Resource_1[K]>>, ContextProviderA | GetEffectContext<RequestContextMap, Resource_1[K]["config"]>>;
|
|
301
|
-
}) | (((req: S.Schema.Type<Resource_1[K]>) => Generator<YieldWrap<Effect<any, ParseResult.ParseError | S.Schema.Type<GetFailure<Resource_1[K]>>, ContextProviderA | GetEffectContext<RequestContextMap, Resource_1[K]["config"]>>>, S.Schema.Type<GetSuccess<Resource_1[K]>>, never>) | ((req: S.Schema.Type<Resource_1[K]>) => Effect<S.Schema.Type<GetSuccess<Resource_1[K]>>, ParseResult.ParseError | S.Schema.Type<GetFailure<Resource_1[K]>>, ContextProviderA | GetEffectContext<RequestContextMap, Resource_1[K]["config"]>>) | Effect<S.Schema.Type<GetSuccess<Resource_1[K]>>, ParseResult.ParseError | S.Schema.Type<GetFailure<Resource_1[K]>>, ContextProviderA | GetEffectContext<RequestContextMap, Resource_1[K]["config"]>>); }>(impl: Impl) => { [K in keyof Impl & keyof FilterRequestModules<Resource_1>]: Handler<FilterRequestModules<Resource_1>[K], Impl[K] extends {
|
|
300
|
+
raw: Effect<S.Schema.Encoded<GetSuccess<Resource_1[K]>>, S.ParseResult.ParseError | S.Schema.Type<GetFailure<Resource_1[K]>>, ContextProviderA | GetEffectContext<RequestContextMap, Resource_1[K]["config"]>>;
|
|
301
|
+
}) | (((req: S.Schema.Type<Resource_1[K]>) => Generator<YieldWrap<Effect<any, S.ParseResult.ParseError | S.Schema.Type<GetFailure<Resource_1[K]>>, ContextProviderA | GetEffectContext<RequestContextMap, Resource_1[K]["config"]>>>, S.Schema.Type<GetSuccess<Resource_1[K]>>, never>) | ((req: S.Schema.Type<Resource_1[K]>) => Effect<S.Schema.Type<GetSuccess<Resource_1[K]>>, S.ParseResult.ParseError | S.Schema.Type<GetFailure<Resource_1[K]>>, ContextProviderA | GetEffectContext<RequestContextMap, Resource_1[K]["config"]>>) | Effect<S.Schema.Type<GetSuccess<Resource_1[K]>>, S.ParseResult.ParseError | S.Schema.Type<GetFailure<Resource_1[K]>>, ContextProviderA | GetEffectContext<RequestContextMap, Resource_1[K]["config"]>>); }>(impl: Impl) => { [K in keyof Impl & keyof FilterRequestModules<Resource_1>]: Handler<FilterRequestModules<Resource_1>[K], Impl[K] extends {
|
|
302
302
|
raw: any;
|
|
303
303
|
} ? RequestTypes.TYPE : RequestTypes.DECODED, Exclude<Exclude<Impl[K] extends {
|
|
304
304
|
raw: any;
|
|
@@ -322,12 +322,12 @@ export declare const makeRouter: <RequestContextMap extends Record<string, RPCCo
|
|
|
322
322
|
} & RouteMatcher<RequestContextMap, Resource_1> & {
|
|
323
323
|
router: AddAction<FilterRequestModules<Resource_1>[keyof FilterRequestModules<Resource_1>], {}>;
|
|
324
324
|
router3: <const Impl extends { [K in keyof FilterRequestModules<Resource_1>]: ({
|
|
325
|
-
raw: (req: S.Schema.Type<Resource_1[K]>) => Generator<YieldWrap<Effect<any, ParseResult.ParseError | S.Schema.Type<GetFailure<Resource_1[K]>>, ContextProviderA | GetEffectContext<RequestContextMap, Resource_1[K]["config"]>>>, S.Schema.Encoded<GetSuccess<Resource_1[K]>>, never>;
|
|
325
|
+
raw: (req: S.Schema.Type<Resource_1[K]>) => Generator<YieldWrap<Effect<any, S.ParseResult.ParseError | S.Schema.Type<GetFailure<Resource_1[K]>>, ContextProviderA | GetEffectContext<RequestContextMap, Resource_1[K]["config"]>>>, S.Schema.Encoded<GetSuccess<Resource_1[K]>>, never>;
|
|
326
326
|
} | {
|
|
327
|
-
raw: (req: S.Schema.Type<Resource_1[K]>) => Effect<S.Schema.Encoded<GetSuccess<Resource_1[K]>>, ParseResult.ParseError | S.Schema.Type<GetFailure<Resource_1[K]>>, ContextProviderA | GetEffectContext<RequestContextMap, Resource_1[K]["config"]>>;
|
|
327
|
+
raw: (req: S.Schema.Type<Resource_1[K]>) => Effect<S.Schema.Encoded<GetSuccess<Resource_1[K]>>, S.ParseResult.ParseError | S.Schema.Type<GetFailure<Resource_1[K]>>, ContextProviderA | GetEffectContext<RequestContextMap, Resource_1[K]["config"]>>;
|
|
328
328
|
} | {
|
|
329
|
-
raw: Effect<S.Schema.Encoded<GetSuccess<Resource_1[K]>>, ParseResult.ParseError | S.Schema.Type<GetFailure<Resource_1[K]>>, ContextProviderA | GetEffectContext<RequestContextMap, Resource_1[K]["config"]>>;
|
|
330
|
-
}) | (((req: S.Schema.Type<Resource_1[K]>) => Generator<YieldWrap<Effect<any, ParseResult.ParseError | S.Schema.Type<GetFailure<Resource_1[K]>>, ContextProviderA | GetEffectContext<RequestContextMap, Resource_1[K]["config"]>>>, S.Schema.Type<GetSuccess<Resource_1[K]>>, never>) | ((req: S.Schema.Type<Resource_1[K]>) => Effect<S.Schema.Type<GetSuccess<Resource_1[K]>>, ParseResult.ParseError | S.Schema.Type<GetFailure<Resource_1[K]>>, ContextProviderA | GetEffectContext<RequestContextMap, Resource_1[K]["config"]>>) | Effect<S.Schema.Type<GetSuccess<Resource_1[K]>>, ParseResult.ParseError | S.Schema.Type<GetFailure<Resource_1[K]>>, ContextProviderA | GetEffectContext<RequestContextMap, Resource_1[K]["config"]>>); }>(impl: Impl) => { [K in keyof Impl & keyof FilterRequestModules<Resource_1>]: Handler<FilterRequestModules<Resource_1>[K], Impl[K] extends {
|
|
329
|
+
raw: Effect<S.Schema.Encoded<GetSuccess<Resource_1[K]>>, S.ParseResult.ParseError | S.Schema.Type<GetFailure<Resource_1[K]>>, ContextProviderA | GetEffectContext<RequestContextMap, Resource_1[K]["config"]>>;
|
|
330
|
+
}) | (((req: S.Schema.Type<Resource_1[K]>) => Generator<YieldWrap<Effect<any, S.ParseResult.ParseError | S.Schema.Type<GetFailure<Resource_1[K]>>, ContextProviderA | GetEffectContext<RequestContextMap, Resource_1[K]["config"]>>>, S.Schema.Type<GetSuccess<Resource_1[K]>>, never>) | ((req: S.Schema.Type<Resource_1[K]>) => Effect<S.Schema.Type<GetSuccess<Resource_1[K]>>, S.ParseResult.ParseError | S.Schema.Type<GetFailure<Resource_1[K]>>, ContextProviderA | GetEffectContext<RequestContextMap, Resource_1[K]["config"]>>) | Effect<S.Schema.Type<GetSuccess<Resource_1[K]>>, S.ParseResult.ParseError | S.Schema.Type<GetFailure<Resource_1[K]>>, ContextProviderA | GetEffectContext<RequestContextMap, Resource_1[K]["config"]>>); }>(impl: Impl) => { [K in keyof Impl & keyof FilterRequestModules<Resource_1>]: Handler<FilterRequestModules<Resource_1>[K], Impl[K] extends {
|
|
331
331
|
raw: any;
|
|
332
332
|
} ? RequestTypes.TYPE : RequestTypes.DECODED, Exclude<Exclude<Impl[K] extends {
|
|
333
333
|
raw: any;
|