@effect-app/infra 2.45.3 → 2.47.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 +17 -0
- package/dist/Model/filter/types/path/eager.d.ts +2 -2
- package/dist/Model/filter/types/path/eager.d.ts.map +1 -1
- package/dist/RequestFiberSet.d.ts +1 -1
- package/dist/Store/Cosmos/query.d.ts.map +1 -1
- package/dist/Store/Cosmos/query.js +4 -2
- package/dist/api/routing/DynamicMiddleware.d.ts +3 -4
- package/dist/api/routing/DynamicMiddleware.d.ts.map +1 -1
- package/dist/api/routing/DynamicMiddleware.js +4 -3
- package/dist/api/routing.d.ts +9 -33
- package/dist/api/routing.d.ts.map +1 -1
- package/dist/api/routing.js +97 -115
- package/package.json +17 -17
- package/src/Model/filter/types/path/eager.ts +2 -2
- package/src/Store/Cosmos/query.ts +2 -0
- package/src/api/routing/DynamicMiddleware.ts +12 -9
- package/src/api/routing.ts +197 -316
- package/test/dist/query.test.d.ts.map +1 -1
- package/test/query.test.ts +42 -2
- /package/test/{controller.test.ts → controller.test.ts.bak} +0 -0
package/dist/api/routing.js
CHANGED
|
@@ -1,32 +1,17 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
1
|
+
/* eslint-disable @typescript-eslint/no-unsafe-assignment */
|
|
2
|
+
/* eslint-disable @typescript-eslint/no-unsafe-argument */
|
|
3
|
+
/* eslint-disable @typescript-eslint/no-empty-object-type */
|
|
4
|
+
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
5
|
+
import { determineMethod } from "@effect-app/infra/api/routing/utils";
|
|
6
|
+
import { logError, reportError } from "@effect-app/infra/errorReporter";
|
|
7
|
+
import { InfraLogger } from "@effect-app/infra/logger";
|
|
8
|
+
import { Rpc, RpcGroup, RpcServer } from "@effect/rpc";
|
|
9
|
+
import { Array, Cause, Duration, Effect, Layer, Predicate, Request, S, Schedule, Schema } from "effect-app";
|
|
4
10
|
import { pretty, typedKeysOf, typedValuesOf } from "effect-app/utils";
|
|
5
|
-
import { logError, reportError } from "../errorReporter.js";
|
|
6
|
-
import { InfraLogger } from "../logger.js";
|
|
7
11
|
import { makeRpc } from "./routing/DynamicMiddleware.js";
|
|
8
|
-
import { determineMethod } from "./routing/utils.js";
|
|
9
12
|
const logRequestError = logError("Request");
|
|
10
13
|
const reportRequestError = reportError("Request");
|
|
11
14
|
const optimisticConcurrencySchedule = Schedule.once.pipe(Schedule.intersect(Schedule.recurWhile((a) => a?._tag === "OptimisticConcurrencyException")));
|
|
12
|
-
/**
|
|
13
|
-
* Plain jane JSON version, with custom status codes just for fun
|
|
14
|
-
*/
|
|
15
|
-
export const toHttpApp = (self, options) => {
|
|
16
|
-
const handler = RpcRouter.toHandlerNoStream(self, options);
|
|
17
|
-
return HttpServerRequest.HttpServerRequest.pipe(Effect.flatMap((_) => _.json), Effect.flatMap(handler), Effect.flatMap((r) => {
|
|
18
|
-
// currently only 200, 418, 422 are allowed, see apiClientFactory
|
|
19
|
-
let status = 200;
|
|
20
|
-
const results = Array.isArray(r) ? r : [r];
|
|
21
|
-
if (results.some((_) => _._tag === "Failure" && _.cause._tag === "Die")) {
|
|
22
|
-
status = 418;
|
|
23
|
-
}
|
|
24
|
-
else if (results.some((_) => _._tag === "Failure" && _.cause._tag === "Fail")) {
|
|
25
|
-
status = 422; // 418
|
|
26
|
-
}
|
|
27
|
-
return HttpServerResponse.json(r, { status }).pipe(Effect.orDie);
|
|
28
|
-
}), Effect.tapDefect(reportError("RPCHttpApp")));
|
|
29
|
-
};
|
|
30
15
|
export const RouterSymbol = Symbol();
|
|
31
16
|
// export interface RouteMatcher<
|
|
32
17
|
// Filtered extends Record<string, any>,
|
|
@@ -87,9 +72,8 @@ export const makeRouter = (middleware, devMode) => {
|
|
|
87
72
|
return prev;
|
|
88
73
|
}, {});
|
|
89
74
|
const f = (layers, make) => {
|
|
90
|
-
const
|
|
91
|
-
|
|
92
|
-
const layer = r.use((router) => Effect.gen(function* () {
|
|
75
|
+
const layer = (requestLayers) => Effect
|
|
76
|
+
.gen(function* () {
|
|
93
77
|
const controllers = yield* make;
|
|
94
78
|
const rpc = yield* makeRpc(middleware);
|
|
95
79
|
// return make.pipe(Effect.map((c) => controllers(c, layers)))
|
|
@@ -99,49 +83,50 @@ export const makeRouter = (middleware, devMode) => {
|
|
|
99
83
|
const method = determineMethod(String(cur), req);
|
|
100
84
|
const isCommand = method._tag === "command";
|
|
101
85
|
const handle = isCommand
|
|
102
|
-
? (req) => Effect.retry(handler.handler(req), optimisticConcurrencySchedule)
|
|
103
|
-
: (req) => Effect.interruptible(handler.handler(req));
|
|
104
|
-
acc[cur] =
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
86
|
+
? (req, headers) => Effect.retry(handler.handler(req, headers), optimisticConcurrencySchedule)
|
|
87
|
+
: (req, headers) => Effect.interruptible(handler.handler(req, headers));
|
|
88
|
+
acc[cur] = [
|
|
89
|
+
handler._tag === "raw"
|
|
90
|
+
? class extends req {
|
|
91
|
+
static success = S.encodedSchema(req.success);
|
|
92
|
+
get [Schema.symbolSerializable]() {
|
|
93
|
+
return this.constructor;
|
|
94
|
+
}
|
|
95
|
+
get [Schema.symbolWithResult]() {
|
|
96
|
+
return {
|
|
97
|
+
failure: req.failure,
|
|
98
|
+
success: S.encodedSchema(req.success)
|
|
99
|
+
};
|
|
100
|
+
}
|
|
109
101
|
}
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
Effect.zipRight(handle(req)), Effect.tapErrorCause((cause) => Cause.isFailure(cause) ? logRequestError(cause) : Effect.void), Effect.tapDefect((cause) => Effect
|
|
139
|
-
.all([
|
|
140
|
-
reportRequestError(cause, {
|
|
141
|
-
action: `${meta.moduleName}.${req._tag}`
|
|
142
|
-
}),
|
|
143
|
-
Rpc.currentHeaders.pipe(Effect.andThen((headers) => {
|
|
144
|
-
return InfraLogger
|
|
102
|
+
: req,
|
|
103
|
+
(requestLayers) => rpc.effect(req, (input, headers) =>
|
|
104
|
+
// TODO: render more data... similar to console?
|
|
105
|
+
Effect
|
|
106
|
+
.annotateCurrentSpan("requestInput", Object.entries(input).reduce((prev, [key, value]) => {
|
|
107
|
+
prev[key] = key === "password"
|
|
108
|
+
? "<redacted>"
|
|
109
|
+
: typeof value === "string" || typeof value === "number" || typeof value === "boolean"
|
|
110
|
+
? typeof value === "string" && value.length > 256
|
|
111
|
+
? (value.substring(0, 253) + "...")
|
|
112
|
+
: value
|
|
113
|
+
: Array.isArray(value)
|
|
114
|
+
? `Array[${value.length}]`
|
|
115
|
+
: value === null || value === undefined
|
|
116
|
+
? `${value}`
|
|
117
|
+
: typeof value === "object" && value
|
|
118
|
+
? `Object[${Object.keys(value).length}]`
|
|
119
|
+
: typeof value;
|
|
120
|
+
return prev;
|
|
121
|
+
}, {}))
|
|
122
|
+
.pipe(
|
|
123
|
+
// can't use andThen due to some being a function and effect
|
|
124
|
+
Effect.zipRight(handle(input, headers)), Effect.tapErrorCause((cause) => Cause.isFailure(cause) ? logRequestError(cause) : Effect.void), Effect.tapDefect((cause) => Effect
|
|
125
|
+
.all([
|
|
126
|
+
reportRequestError(cause, {
|
|
127
|
+
action: `${meta.moduleName}.${req._tag}`
|
|
128
|
+
}),
|
|
129
|
+
InfraLogger
|
|
145
130
|
.logError("Finished request", cause)
|
|
146
131
|
.pipe(Effect.annotateLogs({
|
|
147
132
|
action: `${meta.moduleName}.${req._tag}`,
|
|
@@ -155,33 +140,54 @@ export const makeRouter = (middleware, devMode) => {
|
|
|
155
140
|
// return prev
|
|
156
141
|
// }, {} as Record<string, any>)
|
|
157
142
|
// )
|
|
158
|
-
}))
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
143
|
+
}))
|
|
144
|
+
])),
|
|
145
|
+
// NOTE: this does not catch errors from the middlewares..
|
|
146
|
+
// we should re-evalute this in any case..
|
|
147
|
+
devMode ? (_) => _ : Effect.catchAllDefect(() => Effect.die("Internal Server Error")), Effect.withSpan("Request." + meta.moduleName + "." + req._tag, {
|
|
148
|
+
captureStackTrace: () => handler.stack
|
|
149
|
+
}), Effect.provide(requestLayers)), meta.moduleName),
|
|
150
|
+
meta.moduleName
|
|
151
|
+
];
|
|
166
152
|
return acc;
|
|
167
153
|
}, {});
|
|
168
|
-
const
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
154
|
+
const rpcs = RpcGroup.make(...typedValuesOf(mapped).map((_) => {
|
|
155
|
+
return Rpc.fromTaggedRequest(_[0]);
|
|
156
|
+
}));
|
|
157
|
+
const rpcLayer = (requestLayers) => rpcs.toLayer(Effect.gen(function* () {
|
|
158
|
+
return typedValuesOf(mapped).reduce((acc, [req, handler]) => {
|
|
159
|
+
acc[req._tag] = handler(requestLayers);
|
|
160
|
+
return acc;
|
|
161
|
+
}, {});
|
|
162
|
+
}));
|
|
163
|
+
const impl = rpcLayer(requestLayers);
|
|
164
|
+
const l = RpcServer.layer(rpcs).pipe(Layer.provide(impl));
|
|
165
|
+
// TODO: also takes optional a RouterTag..
|
|
166
|
+
return l.pipe(Layer.provideMerge(RpcServer.layerProtocolHttp({ path: ("/rpc/" + meta.moduleName) })));
|
|
167
|
+
// const rpcRouter = RpcRouter.make(...typedValuesOf(mapped).map(_ => _[0]) as any) as RpcRouter.RpcRouter<
|
|
168
|
+
// RPCRouteReq<typeof mapped[keyof typeof mapped]>,
|
|
169
|
+
// RPCRouteR<typeof mapped[keyof typeof mapped]>
|
|
170
|
+
// >
|
|
171
|
+
// const httpApp = toHttpApp(rpcRouter, {
|
|
172
|
+
// spanPrefix: rsc
|
|
173
|
+
// .meta
|
|
174
|
+
// .moduleName + "."
|
|
175
|
+
// })
|
|
176
|
+
// yield* router
|
|
177
|
+
// .post(
|
|
178
|
+
// "/",
|
|
179
|
+
// httpApp as any,
|
|
180
|
+
// { uninterruptible: true }
|
|
181
|
+
// )
|
|
182
|
+
})
|
|
183
|
+
.pipe(Layer.unwrapEffect);
|
|
177
184
|
// eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion
|
|
178
|
-
const routes = layer.pipe(
|
|
185
|
+
const routes = ((requestLayer) => layer(requestLayer).pipe(layers && Array.isNonEmptyReadonlyArray(layers) ? Layer.provide(layers) : (_) => _,
|
|
179
186
|
// TODO: only provide to the middleware?
|
|
180
|
-
middleware.dependencies ? Layer.provide(middleware.dependencies) : (_) => _);
|
|
187
|
+
middleware.dependencies ? Layer.provide(middleware.dependencies) : (_) => _));
|
|
181
188
|
// Effect.Effect<HttpRouter.HttpRouter<unknown, HttpRouter.HttpRouter.DefaultServices>, never, UserRouter>
|
|
182
189
|
return {
|
|
183
190
|
moduleName: meta.moduleName,
|
|
184
|
-
Router: r,
|
|
185
191
|
routes
|
|
186
192
|
};
|
|
187
193
|
};
|
|
@@ -206,24 +212,7 @@ export const makeRouter = (middleware, devMode) => {
|
|
|
206
212
|
}
|
|
207
213
|
function matchAll(handlers, requestLayer) {
|
|
208
214
|
const routers = typedValuesOf(handlers);
|
|
209
|
-
|
|
210
|
-
};
|
|
211
|
-
const r = rootRouter
|
|
212
|
-
.use((router) => Effect.gen(function* () {
|
|
213
|
-
for (const route of routers) {
|
|
214
|
-
yield* router.mount(("/rpc/" + route.moduleName), yield* route
|
|
215
|
-
.Router
|
|
216
|
-
.router
|
|
217
|
-
.pipe(Effect.map(HttpRouter.use(flow(Effect.provide(requestLayer))))));
|
|
218
|
-
}
|
|
219
|
-
}))
|
|
220
|
-
.pipe(routers.length
|
|
221
|
-
? Layer.provide(routers.map((r) => r.routes).flat())
|
|
222
|
-
: (_) => _);
|
|
223
|
-
return {
|
|
224
|
-
layer: r,
|
|
225
|
-
Router: rootRouter
|
|
226
|
-
};
|
|
215
|
+
return Layer.mergeAll(...routers.map((_) => _.routes(requestLayer))); // TODO
|
|
227
216
|
}
|
|
228
217
|
return {
|
|
229
218
|
matchAll,
|
|
@@ -232,11 +221,4 @@ export const makeRouter = (middleware, devMode) => {
|
|
|
232
221
|
};
|
|
233
222
|
};
|
|
234
223
|
export const RequestCacheLayers = Layer.mergeAll(Layer.setRequestCache(Request.makeCache({ capacity: 500, timeToLive: Duration.hours(8) })), Layer.setRequestCaching(true), Layer.setRequestBatching(true));
|
|
235
|
-
export const RpcHeadersFromHttpHeaders = Effect
|
|
236
|
-
.gen(function* () {
|
|
237
|
-
const httpReq = yield* HttpServerRequest.HttpServerRequest;
|
|
238
|
-
// TODO: only pass Authentication etc, or move headers to actual Rpc Headers
|
|
239
|
-
yield* FiberRef.update(Rpc.currentHeaders, (headers) => HttpHeaders.merge(httpReq.headers, headers));
|
|
240
|
-
})
|
|
241
|
-
.pipe(Layer.effectDiscard);
|
|
242
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGluZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hcGkvcm91dGluZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFLQSxPQUFPLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxNQUFNLGFBQWEsQ0FBQTtBQUM1QyxPQUFPLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFrRCxTQUFTLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLE1BQU0sWUFBWSxDQUFBO0FBRTNLLE9BQU8sRUFBRSxXQUFXLEVBQUUsVUFBVSxFQUF3QixpQkFBaUIsRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGlCQUFpQixDQUFBO0FBQ3RILE9BQU8sRUFBRSxNQUFNLEVBQUUsV0FBVyxFQUFFLGFBQWEsRUFBRSxNQUFNLGtCQUFrQixDQUFBO0FBR3JFLE9BQU8sRUFBRSxRQUFRLEVBQUUsV0FBVyxFQUFFLE1BQU0scUJBQXFCLENBQUE7QUFDM0QsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGNBQWMsQ0FBQTtBQUMxQyxPQUFPLEVBQUUsT0FBTyxFQUFtQixNQUFNLGdDQUFnQyxDQUFBO0FBQ3pFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQTtBQUVwRCxNQUFNLGVBQWUsR0FBRyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUE7QUFDM0MsTUFBTSxrQkFBa0IsR0FBRyxXQUFXLENBQUMsU0FBUyxDQUFDLENBQUE7QUFFakQsTUFBTSw2QkFBNkIsR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FDdEQsUUFBUSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFNLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsSUFBSSxLQUFLLGdDQUFnQyxDQUFDLENBQUMsQ0FDbEcsQ0FBQTtBQWVEOztHQUVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sU0FBUyxHQUFHLENBQTBDLElBQU8sRUFBRSxPQUUzRSxFQUdDLEVBQUU7SUFDRixNQUFNLE9BQU8sR0FBRyxTQUFTLENBQUMsaUJBQWlCLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFBO0lBQzFELE9BQU8saUJBQWlCLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUM3QyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQzdCLE1BQU0sQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEVBQ3ZCLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRTtRQUNuQixpRUFBaUU7UUFDakUsSUFBSSxNQUFNLEdBQUcsR0FBRyxDQUFBO1FBQ2hCLE1BQU0sT0FBTyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQTtRQUMxQyxJQUFJLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUErQixFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLFNBQVMsSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksS0FBSyxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ3RHLE1BQU0sR0FBRyxHQUFHLENBQUE7UUFDZCxDQUFDO2FBQU0sSUFBSSxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBK0IsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxTQUFTLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLEtBQUssTUFBTSxDQUFDLEVBQUUsQ0FBQztZQUM5RyxNQUFNLEdBQUcsR0FBRyxDQUFBLENBQUMsTUFBTTtRQUNyQixDQUFDO1FBQ0QsT0FBTyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFBO0lBQ2xFLENBQUMsQ0FBQyxFQUNGLE1BQU0sQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQzVDLENBQUE7QUFDSCxDQUFDLENBQUE7QUFrRUQsTUFBTSxDQUFDLE1BQU0sWUFBWSxHQUFHLE1BQU0sRUFBRSxDQUFBO0FBaUVwQyxpQ0FBaUM7QUFDakMsMENBQTBDO0FBQzFDLHdDQUF3QztBQUN4Qyx5QkFBeUI7QUFDekIsc0RBQXNEO0FBRXRELE1BQU0sQ0FBQyxNQUFNLGNBQWMsR0FBRyxDQUs1QixPQUFpRCxFQUE0QyxFQUFFLENBQUMsT0FBTyxDQUFBO0FBRXpHLE1BQU0sQ0FBQyxNQUFNLFVBQVUsR0FBRyxDQU14QixVQUFvRCxFQUNwRCxPQUFnQixFQUNoQixFQUFFO0lBQ0YsU0FBUyxRQUFRLENBSWYsR0FBK0M7UUFFL0MsTUFBTSxJQUFJLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQTtRQUVyQixNQUFNLFFBQVEsR0FBRyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFO1lBQ3BELElBQUksU0FBUyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQztnQkFDeEQsR0FBRyxDQUFDLEdBQXFCLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUE7WUFDdkMsQ0FBQztZQUNELE9BQU8sR0FBRyxDQUFBO1FBQ1osQ0FBQyxFQUFFLEVBQWMsQ0FBQyxDQUFBO1FBRWxCLE1BQU0sS0FBSyxHQUFHLFdBQVcsQ0FBQyxRQUFRLENBQUMsQ0FBQyxNQUFNLENBQ3hDLENBQUMsSUFBSSxFQUFFLEdBQUcsRUFBRSxFQUFFO1lBQ1osQ0FBQztZQUFDLElBQVksQ0FBQyxHQUFHLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsVUFBZSxFQUFFLEVBQUU7Z0JBQ3RELE1BQU0sS0FBSyxHQUFHLElBQUksS0FBSyxFQUFFLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFBO2dCQUNoRSxPQUFPLE1BQU0sQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDO29CQUNoQyxDQUFDLENBQUM7d0JBQ0EsTUFBTSxDQUFDLE9BQU8sR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUE7d0JBQ3pCLE1BQU0sQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFBO3dCQUNwQixNQUFNLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQTt3QkFDakIsTUFBTSxDQUFDLE9BQU8sR0FBRyxHQUFHLEVBQUUsQ0FBQyxVQUFVLENBQUE7cUJBQ2xDO29CQUNELENBQUMsQ0FBQzt3QkFDQSxNQUFNLENBQUMsT0FBTyxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQTt3QkFDekIsTUFBTSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUE7d0JBQ3BCLE1BQU0sQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFBO3dCQUNqQixNQUFNLENBQUMsT0FBTyxHQUFHLFVBQVUsQ0FBQTtxQkFDNUIsQ0FBQTtZQUNMLENBQUMsRUFBRTtnQkFDRCxPQUFPLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE9BQU87Z0JBQ3pCLFVBQVUsRUFBRSxDQUFDLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUM7Z0JBQzdDLE9BQU8sRUFBRSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsT0FBTztnQkFDekIsR0FBRyxFQUFFLGlHQUFpRztnQkFDcEcsb0NBQW9DO2dCQUNwQyxzSEFBc0g7Z0JBQ3RILENBQUMsVUFBZSxFQUFFLEVBQUU7b0JBQ2xCLE1BQU0sS0FBSyxHQUFHLElBQUksS0FBSyxFQUFFLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFBO29CQUNoRSxPQUFPLE1BQU0sQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDO3dCQUNoQyxDQUFDLENBQUM7NEJBQ0EsTUFBTSxDQUFDLE9BQU8sR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUE7NEJBQ3pCLE1BQU0sQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFBOzRCQUNwQixNQUFNLENBQUMsSUFBSSxHQUFHLEtBQUssQ0FBQTs0QkFDbkIsTUFBTSxDQUFDLE9BQU8sR0FBRyxHQUFHLEVBQUUsQ0FBQyxVQUFVLENBQUE7eUJBQ2xDO3dCQUNELENBQUMsQ0FBQzs0QkFDQSxNQUFNLENBQUMsT0FBTyxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQTs0QkFDekIsTUFBTSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUE7NEJBQ3BCLE1BQU0sQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFBOzRCQUNuQixNQUFNLENBQUMsT0FBTyxHQUFHLENBQUMsR0FBUSxFQUFFLEVBQUUsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUE7eUJBQy9DLENBQUE7Z0JBQ0wsQ0FBQzthQUNKLENBQUMsQ0FBQTtZQUNGLE9BQU8sSUFBSSxDQUFBO1FBQ2IsQ0FBQyxFQUNELEVBQXdDLENBQ3pDLENBQUE7UUFvQkQsTUFBTSxDQUFDLEdBQUcsQ0FTUixNQUFlLEVBQ2YsSUFBNkIsRUFDN0IsRUFBRTtZQUtGLE1BQU0sQ0FBQyxHQVdILENBQUMsTUFBTSxNQUFPLFNBQVEsVUFBVSxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxVQUFVLFFBQVEsQ0FBQyxFQUFVO2FBQUcsQ0FBUSxDQUFBO1lBRXpGLE1BQU0sS0FBSyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUM3QixNQUFNLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQztnQkFDbEIsTUFBTSxXQUFXLEdBQUcsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFBO2dCQUMvQixNQUFNLEdBQUcsR0FBRyxLQUFLLENBQUMsQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUE7Z0JBRXRDLDhEQUE4RDtnQkFDOUQsTUFBTSxNQUFNLEdBQUcsV0FBVyxDQUFDLFFBQVEsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRTtvQkFDdkQsTUFBTSxPQUFPLEdBQUcsV0FBVyxDQUFDLEdBQStCLENBQUMsQ0FBQTtvQkFDNUQsTUFBTSxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFBO29CQUVwQixNQUFNLE1BQU0sR0FBRyxlQUFlLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFBO29CQUNoRCxNQUFNLFNBQVMsR0FBRyxNQUFNLENBQUMsSUFBSSxLQUFLLFNBQVMsQ0FBQTtvQkFFM0MsTUFBTSxNQUFNLEdBQUcsU0FBUzt3QkFDdEIsQ0FBQyxDQUFDLENBQUMsR0FBUSxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFRLEVBQUUsNkJBQTZCLENBQUM7d0JBQ3hGLENBQUMsQ0FBQyxDQUFDLEdBQVEsRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBUSxDQUFDLENBQUE7b0JBRW5FLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUMsTUFBTSxDQUNuQixPQUFPLENBQUMsSUFBSSxLQUFLLEtBQUs7d0JBQ3BCLENBQUMsQ0FBQyxLQUFNLFNBQVMsR0FBVzs0QkFDMUIsTUFBTSxDQUFDLE9BQU8sR0FBRyxDQUFDLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQTs0QkFDN0MsSUFBSSxDQUFDLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQztnQ0FDN0IsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFBOzRCQUN6QixDQUFDOzRCQUNELElBQUksQ0FBQyxNQUFNLENBQUMsZ0JBQWdCLENBQUM7Z0NBQzNCLE9BQU87b0NBQ0wsT0FBTyxFQUFFLEdBQUcsQ0FBQyxPQUFPO29DQUNwQixPQUFPLEVBQUUsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDO2lDQUN0QyxDQUFBOzRCQUNILENBQUM7eUJBQ0s7d0JBQ1IsQ0FBQyxDQUFDLEdBQUcsRUFDUCxDQUFDLEdBQUcsRUFBRSxFQUFFO29CQUNOLGdEQUFnRDtvQkFDaEQsTUFBTTt5QkFDSCxtQkFBbUIsQ0FDbEIsY0FBYyxFQUNkLE1BQU0sQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBb0IsRUFBRSxFQUFFO3dCQUNuRSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxLQUFLLFVBQVU7NEJBQzVCLENBQUMsQ0FBQyxZQUFZOzRCQUNkLENBQUMsQ0FBQyxPQUFPLEtBQUssS0FBSyxRQUFRLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxJQUFJLE9BQU8sS0FBSyxLQUFLLFNBQVM7Z0NBQ3RGLENBQUMsQ0FBQyxPQUFPLEtBQUssS0FBSyxRQUFRLElBQUksS0FBSyxDQUFDLE1BQU0sR0FBRyxHQUFHO29DQUMvQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsR0FBRyxLQUFLLENBQUM7b0NBQ25DLENBQUMsQ0FBQyxLQUFLO2dDQUNULENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQztvQ0FDdEIsQ0FBQyxDQUFDLFNBQVMsS0FBSyxDQUFDLE1BQU0sR0FBRztvQ0FDMUIsQ0FBQyxDQUFDLEtBQUssS0FBSyxJQUFJLElBQUksS0FBSyxLQUFLLFNBQVM7d0NBQ3ZDLENBQUMsQ0FBQyxHQUFHLEtBQUssRUFBRTt3Q0FDWixDQUFDLENBQUMsT0FBTyxLQUFLLEtBQUssUUFBUSxJQUFJLEtBQUs7NENBQ3BDLENBQUMsQ0FBQyxVQUFVLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsTUFBTSxHQUFHOzRDQUN4QyxDQUFDLENBQUMsT0FBTyxLQUFLLENBQUE7d0JBQ2hCLE9BQU8sSUFBSSxDQUFBO29CQUNiLENBQUMsRUFBRSxFQUErQyxDQUFDLENBQ3BEO3lCQUNBLElBQUk7b0JBQ0gsNERBQTREO29CQUM1RCxNQUFNLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUM1QixNQUFNLENBQUMsYUFBYSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFDOUYsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQ3pCLE1BQU07eUJBQ0gsR0FBRyxDQUFDO3dCQUNILGtCQUFrQixDQUFDLEtBQUssRUFBRTs0QkFDeEIsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLFVBQVUsSUFBSSxHQUFHLENBQUMsSUFBSSxFQUFFO3lCQUN6QyxDQUFDO3dCQUNGLEdBQUcsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRTs0QkFDakQsT0FBTyxXQUFXO2lDQUNmLFFBQVEsQ0FBQyxrQkFBa0IsRUFBRSxLQUFLLENBQUM7aUNBQ25DLElBQUksQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDO2dDQUN4QixNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsVUFBVSxJQUFJLEdBQUcsQ0FBQyxJQUFJLEVBQUU7Z0NBQ3hDLEdBQUcsRUFBRSxNQUFNLENBQUMsR0FBRyxDQUFDO2dDQUNoQixPQUFPLEVBQUUsTUFBTSxDQUFDLE9BQU8sQ0FBQztnQ0FDeEIsc0JBQXNCO2dDQUN0QixXQUFXO2dDQUNYLHdCQUF3QjtnQ0FDeEIsd0NBQXdDO2dDQUN4QyxtRkFBbUY7Z0NBQ25GLG9CQUFvQjtnQ0FDcEIsb0NBQW9DO2dDQUNwQyxJQUFJOzZCQUNMLENBQUMsQ0FBQyxDQUFBO3dCQUNQLENBQUMsQ0FBQyxDQUFDO3FCQUNKLENBQUMsQ0FDTDtvQkFDRCwwREFBMEQ7b0JBQzFELDBDQUEwQztvQkFDMUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDLEdBQUcsRUFBRSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsdUJBQXVCLENBQUMsQ0FBQyxFQUNyRixNQUFNLENBQUMsUUFBUSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsVUFBVSxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsSUFBSSxFQUFFO3dCQUM3RCxpQkFBaUIsRUFBRSxHQUFHLEVBQUUsQ0FBQyxPQUFPLENBQUMsS0FBSztxQkFDdkMsQ0FBQyxDQUNILEVBQ0wsSUFBSSxDQUFDLFVBQVUsQ0FDaEIsQ0FBQSxDQUFDLE9BQU87b0JBQ1QsT0FBTyxHQUFHLENBQUE7Z0JBQ1osQ0FBQyxFQUFFLEVBQVMsQ0FLWCxDQUFBO2dCQUVELE1BQU0sU0FBUyxHQUFHLFNBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBUSxDQUcvRCxDQUFBO2dCQUNELE1BQU0sT0FBTyxHQUFHLFNBQVMsQ0FBQyxTQUFTLEVBQUU7b0JBQ25DLFVBQVUsRUFBRSxHQUFHO3lCQUNaLElBQUk7eUJBQ0osVUFBVSxHQUFHLEdBQUc7aUJBQ3BCLENBQUMsQ0FBQTtnQkFDRixLQUFLLENBQUMsQ0FBQyxNQUFNO3FCQUNWLElBQUksQ0FDSCxHQUFHLEVBQ0gsT0FBYyxFQUNkLEVBQUUsZUFBZSxFQUFFLElBQUksRUFBRSxDQUMxQixDQUFBO1lBQ0wsQ0FBQyxDQUFDLENBQ0gsQ0FBQTtZQUVELDRFQUE0RTtZQUM1RSxNQUFNLE1BQU0sR0FBRyxLQUFLLENBQUMsSUFBSSxDQUN2QixLQUFLLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFDMUIsTUFBTSxJQUFJLEtBQUssQ0FBQyx1QkFBdUIsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFhLENBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDaEcsd0NBQXdDO1lBQ3hDLFVBQVUsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLFlBQW1CLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FTbkYsQ0FBQTtZQUVELDBHQUEwRztZQUUxRyxPQUFPO2dCQUNMLFVBQVUsRUFBRSxJQUFJLENBQUMsVUFBVTtnQkFDM0IsTUFBTSxFQUFFLENBQUM7Z0JBQ1QsTUFBTTthQUNQLENBQUE7UUFDSCxDQUFDLENBQUE7UUFFRCxNQUFNLE1BQU0sR0E2TlIsQ0FBQyxDQUFDLENBQW1ELEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBUSxDQUFBO1FBRWpHLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsTUFBTSxDQUFBO1FBQzFDLE1BQU0sTUFBTSxHQUF3QztZQUNsRCxLQUFLLEVBQUUsRUFBRTtZQUNULEdBQUcsQ0FBQyxDQUFNO2dCQUNSLENBQUM7Z0JBQUMsSUFBSSxDQUFDLEtBQWEsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FDdkM7Z0JBQUMsSUFBWSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFBO2dCQUNsQyxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLE1BQU0sS0FBSyxLQUFLO29CQUFFLE9BQU8sSUFBSSxDQUFDLEtBQVksQ0FBQTtnQkFDdEUsT0FBTyxJQUFXLENBQUE7WUFDcEIsQ0FBQztTQUNGLENBQUE7UUE0QkQsTUFBTSxPQUFPLEdBd0JULENBQUMsR0FBZ0MsRUFBRSxFQUFFLENBQ3ZDLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUU7WUFDbkMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEtBQUssSUFBSSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUE7WUFDbEYsT0FBTyxHQUFHLENBQUE7UUFDWixDQUFDLEVBQUUsRUFBUyxDQUFDLENBQUE7UUFFZixPQUFPLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFBO0lBQzFELENBQUM7SUFZRCxTQUFTLFFBQVEsQ0FDZixRQUFXLEVBQ1gsWUFBa0M7UUFFbEMsTUFBTSxPQUFPLEdBQUcsYUFBYSxDQUFDLFFBQVEsQ0FBQyxDQUFBO1FBRXZDLE1BQU0sVUFBVSxHQUFHLEtBQU0sU0FBUSxVQUFVLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBQyxFQUkxRDtTQUFHLENBQUE7UUFFTixNQUFNLENBQUMsR0FBRyxVQUFVO2FBQ2pCLEdBQUcsQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQ2QsTUFBTSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUM7WUFDbEIsS0FBSyxNQUFNLEtBQUssSUFBSSxPQUFPLEVBQUUsQ0FBQztnQkFDNUIsS0FBSyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FDakIsQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDLFVBQVUsQ0FBUSxFQUNuQyxLQUFLLENBQUMsQ0FBQyxLQUFLO3FCQUNULE1BQU07cUJBQ04sTUFBTTtxQkFDTixJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFRLENBQy9FLENBQUE7WUFDSCxDQUFDO1FBQ0gsQ0FBQyxDQUFDLENBQ0g7YUFDQSxJQUFJLENBQ0gsT0FBTyxDQUFDLE1BQU07WUFDWixDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxFQUErQyxDQUFDO1lBQ2pHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUNiLENBQUE7UUFFSCxPQUFPO1lBQ0wsS0FBSyxFQUFFLENBSU47WUFDRCxNQUFNLEVBQUUsVUFLUDtTQUNGLENBQUE7SUFDSCxDQUFDO0lBRUQsT0FBTztRQUNMLFFBQVE7UUFDUixRQUFRLEVBQUUsQ0FJUixHQUErQyxFQUMvQyxFQUFFLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLE9BQU87UUFDMUIsTUFBTSxFQUFFLFFBQVE7S0FDakIsQ0FBQTtBQUNILENBQUMsQ0FBQTtBQXNCRCxNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FBRyxLQUFLLENBQUMsUUFBUSxDQUM5QyxLQUFLLENBQUMsZUFBZSxDQUNuQixPQUFPLENBQUMsU0FBUyxDQUFDLEVBQUUsUUFBUSxFQUFFLEdBQUcsRUFBRSxVQUFVLEVBQUUsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQ3BFLEVBQ0QsS0FBSyxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxFQUM3QixLQUFLLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLENBQy9CLENBQUE7QUFFRCxNQUFNLENBQUMsTUFBTSx5QkFBeUIsR0FBRyxNQUFNO0tBQzVDLEdBQUcsQ0FBQyxRQUFRLENBQUM7SUFDWixNQUFNLE9BQU8sR0FBRyxLQUFLLENBQUMsQ0FBQyxpQkFBaUIsQ0FBQyxpQkFBaUIsQ0FBQTtJQUMxRCw0RUFBNEU7SUFDNUUsS0FBSyxDQUFDLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FDcEIsR0FBRyxDQUFDLGNBQWMsRUFDbEIsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FDekQsQ0FBQTtBQUNILENBQUMsQ0FBQztLQUNELElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLENBQUEifQ==
|
|
224
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGluZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hcGkvcm91dGluZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSw0REFBNEQ7QUFDNUQsMERBQTBEO0FBQzFELDREQUE0RDtBQUM1RCx1REFBdUQ7QUFDdkQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHFDQUFxQyxDQUFBO0FBQ3JFLE9BQU8sRUFBRSxRQUFRLEVBQUUsV0FBVyxFQUFFLE1BQU0saUNBQWlDLENBQUE7QUFDdkUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDBCQUEwQixDQUFBO0FBQ3RELE9BQU8sRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxNQUFNLGFBQWEsQ0FBQTtBQUN0RCxPQUFPLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBOEIsU0FBUyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxNQUFNLFlBQVksQ0FBQTtBQUd2SSxPQUFPLEVBQUUsTUFBTSxFQUFFLFdBQVcsRUFBRSxhQUFhLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQTtBQUVyRSxPQUFPLEVBQUUsT0FBTyxFQUFtQixNQUFNLGdDQUFnQyxDQUFBO0FBRXpFLE1BQU0sZUFBZSxHQUFHLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQTtBQUMzQyxNQUFNLGtCQUFrQixHQUFHLFdBQVcsQ0FBQyxTQUFTLENBQUMsQ0FBQTtBQUVqRCxNQUFNLDZCQUE2QixHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUN0RCxRQUFRLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQU0sQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxJQUFJLEtBQUssZ0NBQWdDLENBQUMsQ0FBQyxDQUNsRyxDQUFBO0FBaUZELE1BQU0sQ0FBQyxNQUFNLFlBQVksR0FBRyxNQUFNLEVB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
|
package/package.json
CHANGED
|
@@ -1,31 +1,31 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@effect-app/infra",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.47.0",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"dependencies": {
|
|
7
7
|
"@faker-js/faker": "^8.4.1",
|
|
8
8
|
"change-case": "^5.4.4",
|
|
9
9
|
"cross-fetch": "^4.1.0",
|
|
10
|
-
"express-oauth2-jwt-bearer": "^1.6.
|
|
10
|
+
"express-oauth2-jwt-bearer": "^1.6.1",
|
|
11
11
|
"fast-check": "~4.0.0",
|
|
12
12
|
"path-parser": "^6.1.0",
|
|
13
13
|
"proper-lockfile": "^4.1.2",
|
|
14
14
|
"pure-rand": "7.0.1",
|
|
15
15
|
"query-string": "^9.1.1",
|
|
16
|
-
"effect-app": "2.
|
|
16
|
+
"effect-app": "2.36.0"
|
|
17
17
|
},
|
|
18
18
|
"devDependencies": {
|
|
19
|
-
"@azure/cosmos": "^4.
|
|
19
|
+
"@azure/cosmos": "^4.3.0",
|
|
20
20
|
"@azure/service-bus": "^7.9.5",
|
|
21
21
|
"@babel/cli": "^7.26.4",
|
|
22
|
-
"@babel/core": "^7.26.
|
|
22
|
+
"@babel/core": "^7.26.10",
|
|
23
23
|
"@babel/plugin-proposal-export-namespace-from": "^7.18.9",
|
|
24
24
|
"@babel/plugin-syntax-import-attributes": "^7.26.0",
|
|
25
25
|
"@babel/plugin-transform-modules-commonjs": "^7.26.3",
|
|
26
26
|
"babel-plugin-replace-import-extension": "^1.1.5",
|
|
27
|
-
"@sentry/node": "^9.
|
|
28
|
-
"@types/express": "^5.0.
|
|
27
|
+
"@sentry/node": "^9.6.1",
|
|
28
|
+
"@types/express": "^5.0.1",
|
|
29
29
|
"@types/node": "~22.13.10",
|
|
30
30
|
"@types/proper-lockfile": "^4.1.4",
|
|
31
31
|
"@types/redis": "^2.8.32",
|
|
@@ -33,27 +33,27 @@
|
|
|
33
33
|
"express": "^4.21.2",
|
|
34
34
|
"jwks-rsa": "2.1.4",
|
|
35
35
|
"jwt-decode": "^4.0.0",
|
|
36
|
-
"mongodb": "6.
|
|
36
|
+
"mongodb": "6.15.0",
|
|
37
37
|
"redis": "^3.1.2",
|
|
38
38
|
"redlock": "^4.2.0",
|
|
39
39
|
"strip-ansi": "^7.1.0",
|
|
40
40
|
"typescript": "^5.8.2",
|
|
41
|
-
"vitest": "^3.0.
|
|
41
|
+
"vitest": "^3.0.9"
|
|
42
42
|
},
|
|
43
43
|
"peerDependencies": {
|
|
44
|
-
"@azure/cosmos": "^4.
|
|
44
|
+
"@azure/cosmos": "^4.3.0",
|
|
45
45
|
"@azure/service-bus": "^7.9.5",
|
|
46
|
-
"@effect/experimental": "^0.
|
|
47
|
-
"@effect/platform": "^0.
|
|
48
|
-
"@effect/rpc-http": "^0.52.
|
|
49
|
-
"@effect/rpc": "^0.
|
|
50
|
-
"@effect/sql": "^0.
|
|
51
|
-
"@effect/vitest": "^0.
|
|
46
|
+
"@effect/experimental": "^0.44.0",
|
|
47
|
+
"@effect/platform": "^0.80.0",
|
|
48
|
+
"@effect/rpc-http": "^0.52.4",
|
|
49
|
+
"@effect/rpc": "^0.55.0",
|
|
50
|
+
"@effect/sql": "^0.33.0",
|
|
51
|
+
"@effect/vitest": "^0.20.0",
|
|
52
52
|
"@sendgrid/helpers": "^8.0.0",
|
|
53
53
|
"@sendgrid/mail": "^8.1.4",
|
|
54
54
|
"redis": "^3.1.2",
|
|
55
55
|
"redlock": "^4.2.0",
|
|
56
|
-
"effect": "^3.
|
|
56
|
+
"effect": "^3.14.0",
|
|
57
57
|
"express": "^4.21.2"
|
|
58
58
|
},
|
|
59
59
|
"typesVersions": {
|
|
@@ -23,9 +23,9 @@ type PathImpl<K extends string | number, V> = V extends
|
|
|
23
23
|
* ```
|
|
24
24
|
*/
|
|
25
25
|
export type Path<T> = T extends ReadonlyArray<infer V> ? IsTuple<T> extends true ? {
|
|
26
|
-
[K in TupleKeys<T>]-?: PathImpl<K & string, T[K]>
|
|
26
|
+
[K in TupleKeys<T>]-?: PathImpl<K & string, T[K]> | "length"
|
|
27
27
|
}[TupleKeys<T>]
|
|
28
|
-
: PathImpl<ArrayKey, V>
|
|
28
|
+
: PathImpl<ArrayKey, V> | "length"
|
|
29
29
|
: {
|
|
30
30
|
[K in keyof T]-?: PathImpl<K & string, T[K]>
|
|
31
31
|
}[keyof T]
|
|
@@ -45,6 +45,8 @@ export function buildWhereCosmosQuery3(
|
|
|
45
45
|
}
|
|
46
46
|
let k = x.path.includes(".-1.")
|
|
47
47
|
? `${x.path.split(".-1.")[0]}.${x.path.split(".-1.")[1]!}`
|
|
48
|
+
: x.path.endsWith(".length")
|
|
49
|
+
? `ARRAY_LENGTH(f.${x.path.split(".length")[0]})`
|
|
48
50
|
: `f.${x.path}`
|
|
49
51
|
|
|
50
52
|
// would have to map id, but shouldnt allow id in defaultValues anyway..
|
|
@@ -1,9 +1,8 @@
|
|
|
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 { Rpc } from "@effect/rpc"
|
|
5
4
|
import { type Array, Effect, type Layer, type Request, type S } from "effect-app"
|
|
6
|
-
import type {
|
|
5
|
+
import type { RPCContextMap } from "effect-app/client/req"
|
|
7
6
|
import type * as EffectRequest from "effect/Request"
|
|
8
7
|
|
|
9
8
|
export interface Middleware<
|
|
@@ -25,11 +24,13 @@ export interface Middleware<
|
|
|
25
24
|
>(
|
|
26
25
|
schema: T & S.Schema<Req, any, never>,
|
|
27
26
|
handler: (
|
|
28
|
-
request: Req
|
|
27
|
+
request: Req,
|
|
28
|
+
headers: any
|
|
29
29
|
) => Effect.Effect<EffectRequest.Request.Success<Req>, EffectRequest.Request.Error<Req>, R>,
|
|
30
30
|
moduleName?: string
|
|
31
31
|
) => (
|
|
32
|
-
req: Req
|
|
32
|
+
req: Req,
|
|
33
|
+
headers: any
|
|
33
34
|
) => Effect.Effect<
|
|
34
35
|
Request.Request.Success<Req>,
|
|
35
36
|
Request.Request.Error<Req>,
|
|
@@ -52,7 +53,8 @@ export const makeRpc = <
|
|
|
52
53
|
effect: <T extends { config?: { [K in keyof CTXMap]?: any } }, Req extends S.TaggedRequest.All, R>(
|
|
53
54
|
schema: T & S.Schema<Req, any, never>,
|
|
54
55
|
handler: (
|
|
55
|
-
request: Req
|
|
56
|
+
request: Req,
|
|
57
|
+
headers: any
|
|
56
58
|
) => Effect.Effect<
|
|
57
59
|
EffectRequest.Request.Success<Req>,
|
|
58
60
|
EffectRequest.Request.Error<Req>,
|
|
@@ -60,9 +62,10 @@ export const makeRpc = <
|
|
|
60
62
|
>,
|
|
61
63
|
moduleName?: string
|
|
62
64
|
) => {
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
65
|
+
const h = execute(schema, handler, moduleName)
|
|
66
|
+
return (req: Req, headers: any) =>
|
|
67
|
+
h(req, headers).pipe(
|
|
68
|
+
Effect.uninterruptible // TODO: make this depend on query/command, and consider if middleware also should be affected or not.
|
|
69
|
+
)
|
|
67
70
|
}
|
|
68
71
|
})))
|