@effect-app/infra 2.35.4 → 2.37.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 +23 -0
- package/dist/api/routing.d.ts +4 -216
- package/dist/api/routing.d.ts.map +1 -1
- package/dist/api/routing.js +2 -2
- package/package.json +10 -22
- package/src/api/routing.ts +14 -58
- package/test/controller.test.ts +48 -4
- package/test/dist/controller.test.d.ts.map +1 -1
- package/dist/api/routing.legacy.d.ts +0 -104
- package/dist/api/routing.legacy.d.ts.map +0 -1
- package/dist/api/routing.legacy.js +0 -209
- package/dist/api/routing.legacy2.d.ts +0 -192
- package/dist/api/routing.legacy2.d.ts.map +0 -1
- package/dist/api/routing.legacy2.js +0 -226
- package/dist/api/routing.legacy3.d.ts +0 -263
- package/dist/api/routing.legacy3.d.ts.map +0 -1
- package/dist/api/routing.legacy3.js +0 -233
- package/src/api/routing.legacy.ts +0 -530
- package/src/api/routing.legacy2.ts +0 -802
- package/src/api/routing.legacy3.ts +0 -989
- package/test/controller.legacy2.test.ts +0 -197
- package/test/controller.legacy3.test.ts +0 -195
|
@@ -1,263 +0,0 @@
|
|
|
1
|
-
import type * as HttpApp from "@effect/platform/HttpApp";
|
|
2
|
-
import { Rpc, RpcRouter } from "@effect/rpc";
|
|
3
|
-
import type { NonEmptyReadonlyArray } from "effect-app";
|
|
4
|
-
import { Array, Effect, Layer, S } from "effect-app";
|
|
5
|
-
import type { GetEffectContext, RPCContextMap } from "effect-app/client/req";
|
|
6
|
-
import type { HttpServerError } from "effect-app/http";
|
|
7
|
-
import { HttpRouter } from "effect-app/http";
|
|
8
|
-
import type { Contravariant } from "effect/Types";
|
|
9
|
-
import type { Middleware } from "./routing/DynamicMiddleware.js";
|
|
10
|
-
export type _R<T extends Effect<any, any, any>> = [T] extends [
|
|
11
|
-
Effect<any, any, infer R>
|
|
12
|
-
] ? R : never;
|
|
13
|
-
export type _E<T extends Effect<any, any, any>> = [T] extends [
|
|
14
|
-
Effect<any, infer E, any>
|
|
15
|
-
] ? E : never;
|
|
16
|
-
export type EffectDeps<A> = {
|
|
17
|
-
[K in keyof A as A[K] extends Effect<any, any, any> ? K : never]: A[K] extends Effect<any, any, any> ? A[K] : never;
|
|
18
|
-
};
|
|
19
|
-
/**
|
|
20
|
-
* Plain jane JSON version
|
|
21
|
-
* @deprecated use HttpRpcRouterNoStream.toHttpApp once support options
|
|
22
|
-
*/
|
|
23
|
-
export declare const toHttpApp: <R extends RpcRouter.RpcRouter<any, any>>(self: R, options?: {
|
|
24
|
-
readonly spanPrefix?: string;
|
|
25
|
-
}) => HttpApp.Default<HttpServerError.RequestError, RpcRouter.RpcRouter.Context<R>>;
|
|
26
|
-
export interface Hint<Err extends string> {
|
|
27
|
-
Err: Err;
|
|
28
|
-
}
|
|
29
|
-
type HandleVoid<Expected, Actual, Result> = [Expected] extends [void] ? [Actual] extends [void] ? Result : Hint<"You're returning non void for a void Response, please fix"> : Result;
|
|
30
|
-
export type AnyRequestModule = S.Schema.Any & {
|
|
31
|
-
_tag: string;
|
|
32
|
-
config: any;
|
|
33
|
-
success: S.Schema.Any;
|
|
34
|
-
failure: S.Schema.Any;
|
|
35
|
-
};
|
|
36
|
-
export type Method<Rsc extends Record<string, AnyRequestModule>, K extends keyof Rsc, RT extends "d" | "raw", CTXMap extends Record<string, any>, Context, Accum> = [GetSuccessShape<Rsc[K], RT>] extends [void] ? VoidMethod<Rsc, K, RT, CTXMap, Context, Accum> : NormalMethod<Rsc, K, RT, CTXMap, Context, Accum>;
|
|
37
|
-
export interface NormalMethod<Rsc extends Record<string, AnyRequestModule>, K extends keyof Rsc, RT extends "d" | "raw", CTXMap extends Record<string, any>, Context, Accum> {
|
|
38
|
-
<A extends GetSuccessShape<Rsc[K], RT>, R2 = never, E = never>(f: Effect<A, E, R2>): keyof {
|
|
39
|
-
[k in keyof Rsc as k extends K | keyof Accum ? never : k]: Rsc[k];
|
|
40
|
-
} extends never ? {
|
|
41
|
-
/** @deprecated these are the finalized routes, nothing to see here */
|
|
42
|
-
ಠ_ಠ: {
|
|
43
|
-
[k in K]: Handler<Rsc[K], RT, Exclude<Context | Exclude<R2, GetEffectContext<CTXMap, Rsc[K]["config"]>>, HttpRouter.HttpRouter.Provided>>;
|
|
44
|
-
} & Accum;
|
|
45
|
-
} : RRouter<{
|
|
46
|
-
[k in keyof Rsc as k extends K | keyof Accum ? never : k]: Rsc[k];
|
|
47
|
-
}, CTXMap, Context, {
|
|
48
|
-
[k in K]: Handler<Rsc[K], RT, Exclude<Context | Exclude<R2, GetEffectContext<CTXMap, Rsc[K]["config"]>>, HttpRouter.HttpRouter.Provided>>;
|
|
49
|
-
} & Accum>;
|
|
50
|
-
<A extends GetSuccessShape<Rsc[K], RT>, R2 = never, E = never>(f: (req: S.Schema.Type<Rsc[K]>) => Effect<A, E, R2>): keyof {
|
|
51
|
-
[k in keyof Rsc as k extends K | keyof Accum ? never : k]: Rsc[k];
|
|
52
|
-
} extends never ? {
|
|
53
|
-
/** @deprecated these are the finalized routes, nothing to see here */
|
|
54
|
-
ಠ_ಠ: {
|
|
55
|
-
[k in K]: Handler<Rsc[K], RT, Exclude<Context | Exclude<R2, GetEffectContext<CTXMap, Rsc[K]["config"]>>, HttpRouter.HttpRouter.Provided>>;
|
|
56
|
-
} & Accum;
|
|
57
|
-
} : RRouter<{
|
|
58
|
-
[k in keyof Rsc as k extends K | keyof Accum ? never : k]: Rsc[k];
|
|
59
|
-
}, CTXMap, Context, {
|
|
60
|
-
[k in K]: Handler<Rsc[K], RT, Exclude<Context | Exclude<R2, GetEffectContext<CTXMap, Rsc[K]["config"]>>, HttpRouter.HttpRouter.Provided>>;
|
|
61
|
-
} & Accum>;
|
|
62
|
-
}
|
|
63
|
-
export interface VoidMethod<Rsc extends Record<string, AnyRequestModule>, K extends keyof Rsc, RT extends "d" | "raw", CTXMap extends Record<string, any>, Context, Accum> {
|
|
64
|
-
<A, R2 = never, E = never>(f: Effect<A, E, R2>): HandleVoid<GetSuccessShape<Rsc[K], RT>, A, keyof {
|
|
65
|
-
[k in keyof Rsc as k extends K | keyof Accum ? never : k]: Rsc[k];
|
|
66
|
-
} extends never ? {
|
|
67
|
-
/** @deprecated these are the finalized routes, nothing to see here */
|
|
68
|
-
ಠ_ಠ: {
|
|
69
|
-
[k in K]: Handler<Rsc[K], RT, Exclude<Context | Exclude<R2, GetEffectContext<CTXMap, Rsc[K]["config"]>>, HttpRouter.HttpRouter.Provided>>;
|
|
70
|
-
} & Accum;
|
|
71
|
-
} : RRouter<{
|
|
72
|
-
[k in keyof Rsc as k extends K | keyof Accum ? never : k]: Rsc[k];
|
|
73
|
-
}, CTXMap, Context, {
|
|
74
|
-
[k in K]: Handler<Rsc[K], RT, Exclude<Context | Exclude<R2, GetEffectContext<CTXMap, Rsc[K]["config"]>>, HttpRouter.HttpRouter.Provided>>;
|
|
75
|
-
} & Accum>>;
|
|
76
|
-
<A, R2 = never, E = never>(f: (req: S.Schema.Type<Rsc[K]>) => Effect<A, E, R2>): HandleVoid<GetSuccessShape<Rsc[K], RT>, A, keyof {
|
|
77
|
-
[k in keyof Rsc as k extends K | keyof Accum ? never : k]: Rsc[k];
|
|
78
|
-
} extends never ? {
|
|
79
|
-
/** @deprecated these are the finalized routes, nothing to see here */
|
|
80
|
-
ಠ_ಠ: {
|
|
81
|
-
[k in K]: Handler<Rsc[K], RT, Exclude<Context | Exclude<R2, GetEffectContext<CTXMap, Rsc[K]["config"]>>, HttpRouter.HttpRouter.Provided>>;
|
|
82
|
-
} & Accum;
|
|
83
|
-
} : RRouter<{
|
|
84
|
-
[k in keyof Rsc as k extends K | keyof Accum ? never : k]: Rsc[k];
|
|
85
|
-
}, CTXMap, Context, {
|
|
86
|
-
[k in K]: Handler<Rsc[K], RT, Exclude<Context | Exclude<R2, GetEffectContext<CTXMap, Rsc[K]["config"]>>, HttpRouter.HttpRouter.Provided>>;
|
|
87
|
-
} & Accum>>;
|
|
88
|
-
}
|
|
89
|
-
type RRouter<Rsc extends Record<string, AnyRequestModule>, CTXMap extends Record<string, any>, Context, Accum = {}> = {
|
|
90
|
-
[K in keyof Rsc]: (Method<Rsc, K, "d", CTXMap, Context, Accum>) & {
|
|
91
|
-
raw: Method<Rsc, K, "raw", CTXMap, Context, Accum>;
|
|
92
|
-
};
|
|
93
|
-
} & {
|
|
94
|
-
/** @deprecated these are the finalized routes, nothing to see here */
|
|
95
|
-
ಠ_ಠ: Accum;
|
|
96
|
-
};
|
|
97
|
-
type GetSuccess<T> = T extends {
|
|
98
|
-
success: S.Schema.Any;
|
|
99
|
-
} ? T["success"] : typeof S.Void;
|
|
100
|
-
type GetSuccessShape<Action extends {
|
|
101
|
-
success?: S.Schema.Any;
|
|
102
|
-
}, RT extends "d" | "raw"> = RT extends "raw" ? S.Schema.Encoded<GetSuccess<Action>> : S.Schema.Type<GetSuccess<Action>>;
|
|
103
|
-
type GetFailure<T extends {
|
|
104
|
-
failure?: S.Schema.Any;
|
|
105
|
-
}> = T["failure"] extends never ? typeof S.Never : T["failure"];
|
|
106
|
-
type HandlerFull<Action extends AnyRequestModule, RT extends "raw" | "d", A, E, R> = {
|
|
107
|
-
new (): {};
|
|
108
|
-
_tag: RT;
|
|
109
|
-
stack: string;
|
|
110
|
-
handler: (req: S.Schema.Type<Action>) => Effect<A, E, R>;
|
|
111
|
-
};
|
|
112
|
-
export interface Handler<Action extends AnyRequestModule, RT extends "raw" | "d", R> extends HandlerFull<Action, RT, GetSuccessShape<Action, RT>, S.Schema.Type<GetFailure<Action>> | S.ParseResult.ParseError, R> {
|
|
113
|
-
}
|
|
114
|
-
type AHandler<Action extends AnyRequestModule> = Handler<Action, any, any>;
|
|
115
|
-
type Filter<T> = {
|
|
116
|
-
[K in keyof T as T[K] extends AnyRequestModule ? K : never]: T[K];
|
|
117
|
-
};
|
|
118
|
-
export declare const RouterSymbol: unique symbol;
|
|
119
|
-
export interface RouterShape<Rsc> {
|
|
120
|
-
[RouterSymbol]: Rsc;
|
|
121
|
-
}
|
|
122
|
-
type RPCRouteR<T extends Rpc.Rpc<any, any>> = [T] extends [
|
|
123
|
-
Rpc.Rpc<any, infer R>
|
|
124
|
-
] ? R : never;
|
|
125
|
-
type Match<Rsc extends Record<string, any>, CTXMap extends Record<string, any>, RT extends "raw" | "d", Key extends keyof Rsc, Context> = {
|
|
126
|
-
<A extends GetSuccessShape<Rsc[Key], RT>, R2 = never, E = never>(f: Effect<A, E, R2>): HandleVoid<GetSuccessShape<Rsc[Key], RT>, A, Handler<Rsc[Key], RT, Exclude<Context | Exclude<R2, GetEffectContext<CTXMap, Rsc[Key]["config"]>>, HttpRouter.HttpRouter.Provided>>>;
|
|
127
|
-
<A extends GetSuccessShape<Rsc[Key], RT>, R2 = never, E = never>(f: (req: S.Schema.Type<Rsc[Key]>) => Effect<A, E, R2>): HandleVoid<GetSuccessShape<Rsc[Key], RT>, A, Handler<Rsc[Key], RT, Exclude<Context | Exclude<R2, GetEffectContext<CTXMap, Rsc[Key]["config"]>>, HttpRouter.HttpRouter.Provided>>>;
|
|
128
|
-
};
|
|
129
|
-
export type RouteMatcher<CTXMap extends Record<string, any>, Rsc extends Record<string, any>, Context> = {
|
|
130
|
-
[Key in keyof Filter<Rsc>]: Match<Rsc, CTXMap, "d", Key, Context> & {
|
|
131
|
-
success: Rsc[Key]["success"];
|
|
132
|
-
successRaw: S.SchemaClass<S.Schema.Encoded<Rsc[Key]["success"]>>;
|
|
133
|
-
failure: Rsc[Key]["failure"];
|
|
134
|
-
/**
|
|
135
|
-
* Requires the Encoded shape (e.g directly undecoded from DB, so that we don't do multiple Decode/Encode)
|
|
136
|
-
*/
|
|
137
|
-
raw: Match<Rsc, CTXMap, "raw", Key, Context>;
|
|
138
|
-
};
|
|
139
|
-
};
|
|
140
|
-
export declare const makeMiddleware: <Context, CTXMap extends Record<string, RPCContextMap.Any>, RMW, Layers extends NonEmptyReadonlyArray<Layer.Layer.Any> | never[]>(content: Middleware<Context, CTXMap, RMW, Layers>) => Middleware<Context, CTXMap, RMW, Layers>;
|
|
141
|
-
export declare const makeRouter: <Context, CTXMap extends Record<string, RPCContextMap.Any>, RMW, Layers extends NonEmptyReadonlyArray<Layer.Layer.Any> | never[]>(middleware: Middleware<Context, CTXMap, RMW, Layers>, devMode: boolean) => {
|
|
142
|
-
matchAll: <T extends {
|
|
143
|
-
[key: string]: {
|
|
144
|
-
Router: {
|
|
145
|
-
router: Effect<HttpRouter.HttpRouter<any, any>, any, any>;
|
|
146
|
-
};
|
|
147
|
-
routes: Layer.Layer<any, any, any>;
|
|
148
|
-
moduleName: string;
|
|
149
|
-
};
|
|
150
|
-
}, A, E, R>(handlers: T, requestLayer: Layer.Layer<A, E, R>) => {
|
|
151
|
-
layer: Layer.Layer<never, Layer.Layer.Error<(typeof handlers)[keyof typeof handlers]["routes"]>, Layer.Layer.Context<(typeof handlers)[keyof typeof handlers]["routes"]>>;
|
|
152
|
-
Router: HttpRouter.HttpRouter.TagClass<"RootRouter", "RootRouter", Effect.Effect.Success<T[keyof T]["Router"]["router"]> extends infer T_3 ? T_3 extends Effect.Effect.Success<T[keyof T]["Router"]["router"]> ? T_3 extends HttpRouter.HttpRouter<infer E_1, any> ? E_1 : never : never : never, R | Exclude<Effect.Effect.Success<T[keyof T]["Router"]["router"]> extends infer T_4 ? T_4 extends Effect.Effect.Success<T[keyof T]["Router"]["router"]> ? T_4 extends HttpRouter.HttpRouter<any, infer R_1> ? R_1 : never : never : never, A>>;
|
|
153
|
-
};
|
|
154
|
-
matchFor: <const ModuleName extends string, const Rsc extends Record<string, any>>(rsc: Rsc & {
|
|
155
|
-
meta: {
|
|
156
|
-
moduleName: ModuleName;
|
|
157
|
-
};
|
|
158
|
-
}) => {
|
|
159
|
-
<const Make extends {
|
|
160
|
-
dependencies: Array<Layer.Layer.Any>;
|
|
161
|
-
effect: Effect<{
|
|
162
|
-
ಠ_ಠ: { [K in keyof Filter<Rsc>]: AHandler<Rsc[K]>; };
|
|
163
|
-
}, 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>;
|
|
164
|
-
strict?: boolean;
|
|
165
|
-
/** @deprecated */
|
|
166
|
-
readonly ಠ_ಠ: never;
|
|
167
|
-
}>(make: Make): {
|
|
168
|
-
moduleName: ModuleName;
|
|
169
|
-
Router: HttpRouter.HttpRouter.TagClass<RouterShape<Rsc>, `${ModuleName}Router`, never, Exclude<Context, HttpRouter.HttpRouter.Provided> | Exclude<RPCRouteR<{ [K in keyof Filter<Rsc>]: Rpc.Rpc<Rsc[K], _R<ReturnType<MakeHandlers<Make, Filter<Rsc>>[K]["handler"]>>>; }[keyof Filter<Rsc>]>, HttpRouter.HttpRouter.Provided>>;
|
|
170
|
-
routes: Layer.Layer<RouterShape<Rsc>, 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<MakeContext<Make> | RMW, (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) | (Layers extends readonly [Layer.Layer.Any, ...Layer.Layer.Any[]] ? { [k_4 in keyof Layers]: Layer.Layer.Success<Layers[k_4]>; }[number] : never)>>;
|
|
171
|
-
};
|
|
172
|
-
<const Make extends {
|
|
173
|
-
dependencies: Array<Layer.Layer.Any>;
|
|
174
|
-
effect: Effect<{
|
|
175
|
-
ಠ_ಠ: { [K in keyof Filter<Rsc>]: AHandler<Rsc[K]>; };
|
|
176
|
-
}, 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>;
|
|
177
|
-
strict?: boolean;
|
|
178
|
-
/** @deprecated */
|
|
179
|
-
readonly ಠ_ಠ: never;
|
|
180
|
-
}>(make: Make): {
|
|
181
|
-
moduleName: ModuleName;
|
|
182
|
-
Router: HttpRouter.HttpRouter.TagClass<RouterShape<Rsc>, `${ModuleName}Router`, never, Exclude<Context, HttpRouter.HttpRouter.Provided> | Exclude<RPCRouteR<{ [K in keyof Filter<Rsc>]: Rpc.Rpc<Rsc[K], _R<ReturnType<MakeHandlers<Make, Filter<Rsc>>[K]["handler"]>>>; }[keyof Filter<Rsc>]>, HttpRouter.HttpRouter.Provided>>;
|
|
183
|
-
routes: Layer.Layer<RouterShape<Rsc>, 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<MakeContext<Make> | RMW, (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) | (Layers extends readonly [Layer.Layer.Any, ...Layer.Layer.Any[]] ? { [k_4 in keyof Layers]: Layer.Layer.Success<Layers[k_4]>; }[number] : never)>>;
|
|
184
|
-
};
|
|
185
|
-
<const Make extends {
|
|
186
|
-
dependencies: Array<Layer.Layer.Any>;
|
|
187
|
-
effect: Effect<{
|
|
188
|
-
ಠ_ಠ: { [K in keyof Filter<Rsc>]: AHandler<Rsc[K]>; };
|
|
189
|
-
}, 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>;
|
|
190
|
-
strict?: boolean;
|
|
191
|
-
/** @deprecated */
|
|
192
|
-
readonly ಠ_ಠ: never;
|
|
193
|
-
}>(make: Make): {
|
|
194
|
-
moduleName: ModuleName;
|
|
195
|
-
Router: HttpRouter.HttpRouter.TagClass<RouterShape<Rsc>, `${ModuleName}Router`, never, Exclude<Context, HttpRouter.HttpRouter.Provided> | Exclude<RPCRouteR<{ [K in keyof Filter<Rsc>]: Rpc.Rpc<Rsc[K], _R<ReturnType<MakeHandlers<Make, Filter<Rsc>>[K]["handler"]>>>; }[keyof Filter<Rsc>]>, HttpRouter.HttpRouter.Provided>>;
|
|
196
|
-
routes: Layer.Layer<RouterShape<Rsc>, 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<MakeContext<Make> | RMW, (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) | (Layers extends readonly [Layer.Layer.Any, ...Layer.Layer.Any[]] ? { [k_4 in keyof Layers]: Layer.Layer.Success<Layers[k_4]>; }[number] : never)>>;
|
|
197
|
-
};
|
|
198
|
-
<const Make extends {
|
|
199
|
-
dependencies: Array<Layer.Layer.Any>;
|
|
200
|
-
effect: Effect<{
|
|
201
|
-
ಠ_ಠ: { [K in keyof Filter<Rsc>]: AHandler<Rsc[K]>; };
|
|
202
|
-
}, 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>;
|
|
203
|
-
strict?: boolean;
|
|
204
|
-
/** @deprecated */
|
|
205
|
-
readonly ಠ_ಠ: never;
|
|
206
|
-
}>(make: Make): {
|
|
207
|
-
moduleName: ModuleName;
|
|
208
|
-
Router: HttpRouter.HttpRouter.TagClass<RouterShape<Rsc>, `${ModuleName}Router`, never, Exclude<Context, HttpRouter.HttpRouter.Provided> | Exclude<RPCRouteR<{ [K in keyof Filter<Rsc>]: Rpc.Rpc<Rsc[K], _R<ReturnType<MakeHandlers<Make, Filter<Rsc>>[K]["handler"]>>>; }[keyof Filter<Rsc>]>, HttpRouter.HttpRouter.Provided>>;
|
|
209
|
-
routes: Layer.Layer<RouterShape<Rsc>, 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<MakeContext<Make> | RMW, (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) | (Layers extends readonly [Layer.Layer.Any, ...Layer.Layer.Any[]] ? { [k_4 in keyof Layers]: Layer.Layer.Success<Layers[k_4]>; }[number] : never)>>;
|
|
210
|
-
};
|
|
211
|
-
<const Make extends {
|
|
212
|
-
dependencies: Array<Layer.Layer.Any>;
|
|
213
|
-
effect: Effect<{
|
|
214
|
-
ಠ_ಠ: { [K in keyof Filter<Rsc>]: AHandler<Rsc[K]>; };
|
|
215
|
-
}, 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>;
|
|
216
|
-
strict?: boolean;
|
|
217
|
-
}>(make: Make): {
|
|
218
|
-
moduleName: ModuleName;
|
|
219
|
-
Router: HttpRouter.HttpRouter.TagClass<RouterShape<Rsc>, `${ModuleName}Router`, never, Exclude<Context, HttpRouter.HttpRouter.Provided> | Exclude<RPCRouteR<{ [K in keyof Filter<Rsc>]: Rpc.Rpc<Rsc[K], _R<ReturnType<MakeHandlers<Make, Filter<Rsc>>[K]["handler"]>>>; }[keyof Filter<Rsc>]>, HttpRouter.HttpRouter.Provided>>;
|
|
220
|
-
routes: Layer.Layer<RouterShape<Rsc>, 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<MakeContext<Make> | RMW, (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) | (Layers extends readonly [Layer.Layer.Any, ...Layer.Layer.Any[]] ? { [k_4 in keyof Layers]: Layer.Layer.Success<Layers[k_4]>; }[number] : never)>>;
|
|
221
|
-
};
|
|
222
|
-
<const Make extends {
|
|
223
|
-
dependencies: [...Make["dependencies"], ...Exclude<Effect.Context<Make["effect"]>, MakeDepsOut<Make>> extends never ? [] : [Layer.Layer<Exclude<Effect.Context<Make["effect"]>, MakeDepsOut<Make>>, never, never>]];
|
|
224
|
-
effect: Effect<{
|
|
225
|
-
ಠ_ಠ: { [K in keyof Filter<Rsc>]: AHandler<Rsc[K]>; };
|
|
226
|
-
}, any, any>;
|
|
227
|
-
strict?: boolean;
|
|
228
|
-
}>(make: Make): {
|
|
229
|
-
moduleName: ModuleName;
|
|
230
|
-
Router: HttpRouter.HttpRouter.TagClass<RouterShape<Rsc>, `${ModuleName}Router`, never, Exclude<Context, HttpRouter.HttpRouter.Provided>>;
|
|
231
|
-
routes: any;
|
|
232
|
-
};
|
|
233
|
-
} & (Filter<Rsc> extends infer T extends Record<string, AnyRequestModule> ? { [K in keyof T]: Method<Filter<Rsc>, K, "d", CTXMap, Context, {}> & {
|
|
234
|
-
raw: Method<Filter<Rsc>, K, "raw", CTXMap, Context, {}>;
|
|
235
|
-
}; } : never) & {
|
|
236
|
-
/** @deprecated these are the finalized routes, nothing to see here */
|
|
237
|
-
ಠ_ಠ: {};
|
|
238
|
-
};
|
|
239
|
-
};
|
|
240
|
-
export type MakeDeps<Make> = Make extends {
|
|
241
|
-
readonly dependencies: ReadonlyArray<Layer.Layer.Any>;
|
|
242
|
-
} ? Make["dependencies"][number] : never;
|
|
243
|
-
export type MakeErrors<Make> = Make extends {
|
|
244
|
-
readonly effect: Effect<any, infer E, any>;
|
|
245
|
-
} ? E : never;
|
|
246
|
-
export type MakeContext<Make> = Make extends {
|
|
247
|
-
readonly effect: Effect<any, any, infer R>;
|
|
248
|
-
} ? R : never;
|
|
249
|
-
export type MakeHandlers<Make, Handlers extends Record<string, any>> = Make extends {
|
|
250
|
-
readonly effect: Effect<{
|
|
251
|
-
ಠ_ಠ: {
|
|
252
|
-
[K in keyof Handlers]: AHandler<Handlers[K]>;
|
|
253
|
-
};
|
|
254
|
-
}, any, any>;
|
|
255
|
-
} ? Effect.Success<Make["effect"]> extends {
|
|
256
|
-
ಠ_ಠ: any;
|
|
257
|
-
} ? Effect.Success<Make["effect"]>["ಠ_ಠ"] : never : never;
|
|
258
|
-
/**
|
|
259
|
-
* @since 3.9.0
|
|
260
|
-
*/
|
|
261
|
-
export type MakeDepsOut<Make> = Contravariant.Type<MakeDeps<Make>[Layer.LayerTypeId]["_ROut"]>;
|
|
262
|
-
export {};
|
|
263
|
-
//# sourceMappingURL=routing.legacy3.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"routing.legacy3.d.ts","sourceRoot":"","sources":["../../src/api/routing.legacy3.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,233 +0,0 @@
|
|
|
1
|
-
import { Rpc, RpcRouter } from "@effect/rpc";
|
|
2
|
-
import { Array, Cause, Chunk, Context, Effect, FiberRef, flow, Layer, Predicate, S, Schema, Stream } from "effect-app";
|
|
3
|
-
import { HttpRouter, HttpServerRequest, HttpServerResponse } from "effect-app/http";
|
|
4
|
-
import { pretty, typedKeysOf, typedValuesOf } from "effect-app/utils";
|
|
5
|
-
import { logError, reportError } from "../errorReporter.js";
|
|
6
|
-
import { InfraLogger } from "../logger.js";
|
|
7
|
-
import { makeRpc } from "./routing/DynamicMiddleware.js";
|
|
8
|
-
const logRequestError = logError("Request");
|
|
9
|
-
const reportRequestError = reportError("Request");
|
|
10
|
-
/**
|
|
11
|
-
* Plain jane JSON version
|
|
12
|
-
* @deprecated use HttpRpcRouterNoStream.toHttpApp once support options
|
|
13
|
-
*/
|
|
14
|
-
export const toHttpApp = (self, options) => {
|
|
15
|
-
const handler = RpcRouter.toHandler(self, options);
|
|
16
|
-
return Effect.withFiberRuntime((fiber) => {
|
|
17
|
-
const context = fiber.getFiberRef(FiberRef.currentContext);
|
|
18
|
-
const request = Context.unsafeGet(context, HttpServerRequest.HttpServerRequest);
|
|
19
|
-
return Effect.flatMap(request.json, (_) => handler(_).pipe(Stream.provideContext(context), Stream.runCollect, Effect.map((_) => Chunk.toReadonlyArray(_)), Effect.andThen((_) => {
|
|
20
|
-
let status = 200;
|
|
21
|
-
for (const r of _.flat()) {
|
|
22
|
-
if (typeof r === "number")
|
|
23
|
-
continue;
|
|
24
|
-
const results = Array.isArray(r) ? r : [r];
|
|
25
|
-
if (results.some((_) => _._tag === "Failure" && _.cause._tag === "Die")) {
|
|
26
|
-
status = 500;
|
|
27
|
-
break;
|
|
28
|
-
}
|
|
29
|
-
if (results.some((_) => _._tag === "Failure" && _.cause._tag === "Fail")) {
|
|
30
|
-
status = 422; // 418
|
|
31
|
-
break;
|
|
32
|
-
}
|
|
33
|
-
}
|
|
34
|
-
return HttpServerResponse.json(_, { status });
|
|
35
|
-
}), Effect.orDie, Effect.tapDefect(reportError("RPCHttpApp"))));
|
|
36
|
-
});
|
|
37
|
-
};
|
|
38
|
-
export const RouterSymbol = Symbol();
|
|
39
|
-
// export interface RouteMatcher<
|
|
40
|
-
// Filtered extends Record<string, any>,
|
|
41
|
-
// CTXMap extends Record<string, any>,
|
|
42
|
-
// Rsc extends Filtered
|
|
43
|
-
// > extends RouteMatcherInt<Filtered, CTXMap, Rsc> {}
|
|
44
|
-
export const makeMiddleware = (content) => content;
|
|
45
|
-
export const makeRouter = (middleware, devMode) => {
|
|
46
|
-
function matchFor(rsc) {
|
|
47
|
-
const meta = rsc.meta;
|
|
48
|
-
const filtered = typedKeysOf(rsc).reduce((acc, cur) => {
|
|
49
|
-
if (Predicate.isObject(rsc[cur]) && rsc[cur]["success"]) {
|
|
50
|
-
acc[cur] = rsc[cur];
|
|
51
|
-
}
|
|
52
|
-
return acc;
|
|
53
|
-
}, {});
|
|
54
|
-
const items = typedKeysOf(filtered).reduce((prev, cur) => {
|
|
55
|
-
;
|
|
56
|
-
prev[cur] = Object.assign((fnOrEffect) => {
|
|
57
|
-
const stack = new Error().stack?.split("\n").slice(2).join("\n");
|
|
58
|
-
return Effect.isEffect(fnOrEffect)
|
|
59
|
-
? class {
|
|
60
|
-
static request = rsc[cur];
|
|
61
|
-
static stack = stack;
|
|
62
|
-
static _tag = "d";
|
|
63
|
-
static handler = () => fnOrEffect;
|
|
64
|
-
}
|
|
65
|
-
: class {
|
|
66
|
-
static request = rsc[cur];
|
|
67
|
-
static stack = stack;
|
|
68
|
-
static _tag = "d";
|
|
69
|
-
static handler = fnOrEffect;
|
|
70
|
-
};
|
|
71
|
-
}, {
|
|
72
|
-
success: rsc[cur].success,
|
|
73
|
-
successRaw: S.encodedSchema(rsc[cur].success),
|
|
74
|
-
failure: rsc[cur].failure,
|
|
75
|
-
raw: // "Raw" variations are for when you don't want to decode just to encode it again on the response
|
|
76
|
-
// e.g for direct projection from DB
|
|
77
|
-
// but more importantly, to skip Effectful decoders, like to resolve relationships from the database or remote client.
|
|
78
|
-
(fnOrEffect) => {
|
|
79
|
-
const stack = new Error().stack?.split("\n").slice(2).join("\n");
|
|
80
|
-
return Effect.isEffect(fnOrEffect)
|
|
81
|
-
? class {
|
|
82
|
-
static request = rsc[cur];
|
|
83
|
-
static stack = stack;
|
|
84
|
-
static _tag = "raw";
|
|
85
|
-
static handler = () => fnOrEffect;
|
|
86
|
-
}
|
|
87
|
-
: class {
|
|
88
|
-
static request = rsc[cur];
|
|
89
|
-
static stack = stack;
|
|
90
|
-
static _tag = "raw";
|
|
91
|
-
static handler = (req, ctx) => fnOrEffect(req, { ...ctx, Response: rsc[cur].success });
|
|
92
|
-
};
|
|
93
|
-
}
|
|
94
|
-
});
|
|
95
|
-
return prev;
|
|
96
|
-
}, {});
|
|
97
|
-
const f = (layers, make) => {
|
|
98
|
-
const r = (class Router extends HttpRouter.Tag(`${meta.moduleName}Router`)() {
|
|
99
|
-
});
|
|
100
|
-
const layer = r.use((router) => Effect.gen(function* () {
|
|
101
|
-
const controllers = yield* make;
|
|
102
|
-
const rpc = yield* makeRpc(middleware);
|
|
103
|
-
// return make.pipe(Effect.map((c) => controllers(c, layers)))
|
|
104
|
-
const mapped = typedKeysOf(filtered).reduce((acc, cur) => {
|
|
105
|
-
const handler = controllers[cur];
|
|
106
|
-
const req = rsc[cur];
|
|
107
|
-
acc[cur] = rpc.effect(handler._tag === "raw"
|
|
108
|
-
? class extends req {
|
|
109
|
-
static success = S.encodedSchema(req.success);
|
|
110
|
-
get [Schema.symbolSerializable]() {
|
|
111
|
-
return this.constructor;
|
|
112
|
-
}
|
|
113
|
-
get [Schema.symbolWithResult]() {
|
|
114
|
-
return {
|
|
115
|
-
failure: req.failure,
|
|
116
|
-
success: S.encodedSchema(req.success)
|
|
117
|
-
};
|
|
118
|
-
}
|
|
119
|
-
}
|
|
120
|
-
: req, (req) =>
|
|
121
|
-
// TODO: render more data... similar to console?
|
|
122
|
-
Effect
|
|
123
|
-
.annotateCurrentSpan("requestInput", Object.entries(req).reduce((prev, [key, value]) => {
|
|
124
|
-
prev[key] = key === "password"
|
|
125
|
-
? "<redacted>"
|
|
126
|
-
: typeof value === "string" || typeof value === "number" || typeof value === "boolean"
|
|
127
|
-
? typeof value === "string" && value.length > 256
|
|
128
|
-
? (value.substring(0, 253) + "...")
|
|
129
|
-
: value
|
|
130
|
-
: Array.isArray(value)
|
|
131
|
-
? `Array[${value.length}]`
|
|
132
|
-
: value === null || value === undefined
|
|
133
|
-
? `${value}`
|
|
134
|
-
: typeof value === "object" && value
|
|
135
|
-
? `Object[${Object.keys(value).length}]`
|
|
136
|
-
: typeof value;
|
|
137
|
-
return prev;
|
|
138
|
-
}, {}))
|
|
139
|
-
.pipe(
|
|
140
|
-
// can't use andThen due to some being a function and effect
|
|
141
|
-
Effect.zipRight(handler.handler(req)), Effect.tapErrorCause((cause) => Cause.isFailure(cause) ? logRequestError(cause) : Effect.void), Effect.tapDefect((cause) => Effect
|
|
142
|
-
.all([
|
|
143
|
-
reportRequestError(cause, {
|
|
144
|
-
action: `${meta.moduleName}.${req._tag}`
|
|
145
|
-
}),
|
|
146
|
-
Rpc.currentHeaders.pipe(Effect.andThen((headers) => {
|
|
147
|
-
return InfraLogger
|
|
148
|
-
.logError("Finished request", cause)
|
|
149
|
-
.pipe(Effect.annotateLogs({
|
|
150
|
-
action: `${meta.moduleName}.${req._tag}`,
|
|
151
|
-
req: pretty(req),
|
|
152
|
-
headers: pretty(headers)
|
|
153
|
-
// resHeaders: pretty(
|
|
154
|
-
// Object
|
|
155
|
-
// .entries(headers)
|
|
156
|
-
// .reduce((prev, [key, value]) => {
|
|
157
|
-
// prev[key] = value && typeof value === "string" ? snipString(value) : value
|
|
158
|
-
// return prev
|
|
159
|
-
// }, {} as Record<string, any>)
|
|
160
|
-
// )
|
|
161
|
-
}));
|
|
162
|
-
}))
|
|
163
|
-
])), devMode ? (_) => _ : Effect.catchAllDefect(() => Effect.die("Internal Server Error")), Effect.withSpan("Request." + meta.moduleName + "." + req._tag, {
|
|
164
|
-
captureStackTrace: () => handler.stack
|
|
165
|
-
})), meta.moduleName); // TODO
|
|
166
|
-
return acc;
|
|
167
|
-
}, {});
|
|
168
|
-
const rpcRouter = RpcRouter.make(...Object.values(mapped));
|
|
169
|
-
const httpApp = toHttpApp(rpcRouter, {
|
|
170
|
-
spanPrefix: rsc
|
|
171
|
-
.meta
|
|
172
|
-
.moduleName + "."
|
|
173
|
-
});
|
|
174
|
-
yield* router
|
|
175
|
-
.post("/", httpApp,
|
|
176
|
-
// TODO: not queries.
|
|
177
|
-
{ uninterruptible: true });
|
|
178
|
-
}));
|
|
179
|
-
// eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion
|
|
180
|
-
const routes = layer.pipe(Layer.provideMerge(r.Live), layers && Array.isNonEmptyReadonlyArray(layers) ? Layer.provide(layers) : (_) => _,
|
|
181
|
-
// TODO: only provide to the middleware?
|
|
182
|
-
middleware.dependencies ? Layer.provide(middleware.dependencies) : (_) => _);
|
|
183
|
-
// Effect.Effect<HttpRouter.HttpRouter<unknown, HttpRouter.HttpRouter.DefaultServices>, never, UserRouter>
|
|
184
|
-
return {
|
|
185
|
-
moduleName: meta.moduleName,
|
|
186
|
-
Router: r,
|
|
187
|
-
routes
|
|
188
|
-
};
|
|
189
|
-
};
|
|
190
|
-
const effect = ((m) => f(m.dependencies, m.effect));
|
|
191
|
-
const total = Object.keys(filtered).length;
|
|
192
|
-
// TODO
|
|
193
|
-
const accum = {};
|
|
194
|
-
const router2 = typedKeysOf(filtered).reduce((prev, cur) => {
|
|
195
|
-
prev[cur] = Object.assign((it) => {
|
|
196
|
-
accum[cur] = items[cur](it);
|
|
197
|
-
if (Object.keys(accum).length === total)
|
|
198
|
-
return accum;
|
|
199
|
-
return router2;
|
|
200
|
-
}, {
|
|
201
|
-
raw: (it) => {
|
|
202
|
-
accum[cur] = items[cur](it);
|
|
203
|
-
if (Object.keys(accum).length === total)
|
|
204
|
-
return accum;
|
|
205
|
-
return router2;
|
|
206
|
-
}
|
|
207
|
-
});
|
|
208
|
-
return prev;
|
|
209
|
-
}, {});
|
|
210
|
-
return Object.assign(effect, router2);
|
|
211
|
-
}
|
|
212
|
-
function matchAll(handlers, requestLayer) {
|
|
213
|
-
const routers = typedValuesOf(handlers);
|
|
214
|
-
const rootRouter = class extends HttpRouter.Tag("RootRouter")() {
|
|
215
|
-
};
|
|
216
|
-
const r = rootRouter
|
|
217
|
-
.use((router) => Effect.gen(function* () {
|
|
218
|
-
for (const route of routers) {
|
|
219
|
-
yield* router.mount(("/rpc/" + route.moduleName), yield* route
|
|
220
|
-
.Router
|
|
221
|
-
.router
|
|
222
|
-
.pipe(Effect.map(HttpRouter.use(flow(Effect.provide(requestLayer))))));
|
|
223
|
-
}
|
|
224
|
-
}))
|
|
225
|
-
.pipe(Layer.provide(routers.map((r) => r.routes).flat()));
|
|
226
|
-
return {
|
|
227
|
-
layer: r,
|
|
228
|
-
Router: rootRouter
|
|
229
|
-
};
|
|
230
|
-
}
|
|
231
|
-
return { matchAll, matchFor };
|
|
232
|
-
};
|
|
233
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGluZy5sZWdhY3kzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2FwaS9yb3V0aW5nLmxlZ2FjeTMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBU0EsT0FBTyxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsTUFBTSxhQUFhLENBQUE7QUFFNUMsT0FBTyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLENBQUMsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sWUFBWSxDQUFBO0FBR3RILE9BQU8sRUFBRSxVQUFVLEVBQUUsaUJBQWlCLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQTtBQUNuRixPQUFPLEVBQUUsTUFBTSxFQUFFLFdBQVcsRUFBRSxhQUFhLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQTtBQUVyRSxPQUFPLEVBQUUsUUFBUSxFQUFFLFdBQVcsRUFBRSxNQUFNLHFCQUFxQixDQUFBO0FBQzNELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxjQUFjLENBQUE7QUFFMUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLGdDQUFnQyxDQUFBO0FBRXhELE1BQU0sZUFBZSxHQUFHLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQTtBQUMzQyxNQUFNLGtCQUFrQixHQUFHLFdBQVcsQ0FBQyxTQUFTLENBQUMsQ0FBQTtBQWVqRDs7O0dBR0c7QUFDSCxNQUFNLENBQUMsTUFBTSxTQUFTLEdBQUcsQ0FBMEMsSUFBTyxFQUFFLE9BRTNFLEVBR0MsRUFBRTtJQUNGLE1BQU0sT0FBTyxHQUFHLFNBQVMsQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFBO0lBQ2xELE9BQU8sTUFBTSxDQUFDLGdCQUFnQixDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7UUFDdkMsTUFBTSxPQUFPLEdB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
|