@effect-app/infra 1.42.0 → 1.43.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +12 -0
- package/_cjs/api/routing3.cjs +22 -87
- package/_cjs/api/routing3.cjs.map +1 -1
- package/dist/api/routing3.d.ts +17 -20
- package/dist/api/routing3.d.ts.map +1 -1
- package/dist/api/routing3.js +21 -112
- package/package.json +2 -2
- package/src/api/routing3.ts +31 -191
- package/_cjs/api/routing2 copy.cjs +0 -256
- package/_cjs/api/routing2 copy.cjs.map +0 -1
- package/dist/api/routing2 copy.d.ts +0 -105
- package/dist/api/routing2 copy.d.ts.map +0 -1
- package/dist/api/routing2 copy.js +0 -300
package/src/api/routing3.ts
CHANGED
|
@@ -176,10 +176,7 @@ export const makeRouter = <Context, CTXMap extends Record<string, RPCContextMap.
|
|
|
176
176
|
return acc
|
|
177
177
|
}, {} as Filtered)
|
|
178
178
|
|
|
179
|
-
type
|
|
180
|
-
success: RT extends "raw" ? S.SchemaClass<S.Schema.Encoded<Rsc[Key]["success"]>> : Rsc[Key]["success"]
|
|
181
|
-
failure: Rsc[Key]["failure"]
|
|
182
|
-
|
|
179
|
+
type Match<RT extends "raw" | "d", Key extends keyof Rsc> = {
|
|
183
180
|
// TODO: deal with HandleVoid and ability to extends from GetSuccessShape...
|
|
184
181
|
// aka we want to make sure that the return type is void if the success is void,
|
|
185
182
|
// and make sure A is the actual expected type
|
|
@@ -227,200 +224,47 @@ export const makeRouter = <Context, CTXMap extends Record<string, RPCContextMap.
|
|
|
227
224
|
}
|
|
228
225
|
}, {
|
|
229
226
|
success: rsc[cur].success,
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
227
|
+
successRaw: S.encodedSchema(rsc[cur].success),
|
|
228
|
+
failure: rsc[cur].failure,
|
|
229
|
+
raw: // "Raw" variations are for when you don't want to decode just to encode it again on the response
|
|
230
|
+
// e.g for direct projection from DB
|
|
231
|
+
// but more importantly, to skip Effectful decoders, like to resolve relationships from the database or remote client.
|
|
232
|
+
(fnOrEffect: any) => {
|
|
233
|
+
const stack = new Error().stack?.split("\n").slice(2).join("\n")
|
|
234
|
+
return Effect.isEffect(fnOrEffect)
|
|
235
|
+
? class {
|
|
236
|
+
static stack = stack
|
|
237
|
+
static _tag = "raw"
|
|
238
|
+
static handler = () => fnOrEffect
|
|
239
|
+
}
|
|
240
|
+
: class {
|
|
241
|
+
static stack = stack
|
|
242
|
+
static _tag = "raw"
|
|
243
|
+
static handler = (req: any, ctx: any) => fnOrEffect(req, { ...ctx, Response: rsc[cur].success })
|
|
244
|
+
}
|
|
246
245
|
}
|
|
247
|
-
}, {
|
|
248
|
-
success: S.encodedSchema(rsc[cur].success),
|
|
249
|
-
failure: rsc[cur].failure
|
|
250
246
|
})
|
|
251
247
|
return prev
|
|
252
248
|
},
|
|
253
|
-
{} as
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
[Key
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
// use Rsc as Key over using Keys, so that the Go To on X.Action remain in tact in Controllers files
|
|
249
|
+
{} as {
|
|
250
|
+
// use Rsc as Key over using Keys, so that the Go To on X.Action remain in tact in Controllers files
|
|
251
|
+
/**
|
|
252
|
+
* Requires the Type shape
|
|
253
|
+
*/
|
|
254
|
+
[Key in keyof Filtered]: Match<"d", Key> & {
|
|
255
|
+
success: Rsc[Key]["success"]
|
|
256
|
+
successRaw: S.SchemaClass<S.Schema.Encoded<Rsc[Key]["success"]>>
|
|
257
|
+
failure: Rsc[Key]["failure"]
|
|
263
258
|
/**
|
|
264
259
|
* Requires the Encoded shape (e.g directly undecoded from DB, so that we don't do multiple Decode/Encode)
|
|
265
260
|
*/
|
|
266
|
-
|
|
261
|
+
raw: Match<"raw", Key>
|
|
267
262
|
}
|
|
263
|
+
}
|
|
268
264
|
)
|
|
269
265
|
|
|
270
266
|
type Keys = keyof Filtered
|
|
271
267
|
|
|
272
|
-
const controllers = <
|
|
273
|
-
THandlers extends {
|
|
274
|
-
// import to keep them separate via | for type checking!!
|
|
275
|
-
[K in Keys]: AHandler<Rsc[K]>
|
|
276
|
-
},
|
|
277
|
-
TLayers extends NonEmptyArray<Layer.Layer.Any>
|
|
278
|
-
>(
|
|
279
|
-
controllers: THandlers,
|
|
280
|
-
layers?: TLayers
|
|
281
|
-
) => {
|
|
282
|
-
const mapped = typedKeysOf(filtered).reduce((acc, cur) => {
|
|
283
|
-
const handler = controllers[cur as keyof typeof controllers]
|
|
284
|
-
const req = rsc[cur]
|
|
285
|
-
|
|
286
|
-
acc[cur] = rpc.effect(
|
|
287
|
-
handler._tag === "raw"
|
|
288
|
-
? class extends (req as any) {
|
|
289
|
-
static success = S.encodedSchema(req.success)
|
|
290
|
-
get [Serializable.symbol]() {
|
|
291
|
-
return this.constructor
|
|
292
|
-
}
|
|
293
|
-
get [Serializable.symbolResult]() {
|
|
294
|
-
return {
|
|
295
|
-
failure: req.failure,
|
|
296
|
-
success: S.encodedSchema(req.success)
|
|
297
|
-
}
|
|
298
|
-
}
|
|
299
|
-
} as any
|
|
300
|
-
: req,
|
|
301
|
-
(req) =>
|
|
302
|
-
Effect
|
|
303
|
-
.annotateCurrentSpan(
|
|
304
|
-
"requestInput",
|
|
305
|
-
Object.entries(req).reduce((prev, [key, value]: [string, unknown]) => {
|
|
306
|
-
prev[key] = key === "password"
|
|
307
|
-
? "<redacted>"
|
|
308
|
-
: typeof value === "string" || typeof value === "number" || typeof value === "boolean"
|
|
309
|
-
? typeof value === "string" && value.length > 256
|
|
310
|
-
? (value.substring(0, 253) + "...")
|
|
311
|
-
: value
|
|
312
|
-
: Array.isArray(value)
|
|
313
|
-
? `Array[${value.length}]`
|
|
314
|
-
: value === null || value === undefined
|
|
315
|
-
? `${value}`
|
|
316
|
-
: typeof value === "object" && value
|
|
317
|
-
? `Object[${Object.keys(value).length}]`
|
|
318
|
-
: typeof value
|
|
319
|
-
return prev
|
|
320
|
-
}, {} as Record<string, string | number | boolean>)
|
|
321
|
-
)
|
|
322
|
-
.pipe(
|
|
323
|
-
// can't use andThen due to some being a function and effect
|
|
324
|
-
Effect.zipRight(handler.handler(req as any) as any),
|
|
325
|
-
Effect.tapErrorCause((cause) => Cause.isFailure(cause) ? logRequestError(cause) : Effect.void),
|
|
326
|
-
Effect.tapDefect((cause) =>
|
|
327
|
-
Effect
|
|
328
|
-
.all([
|
|
329
|
-
reportRequestError(cause, {
|
|
330
|
-
action: `${meta.moduleName}.${req._tag}`
|
|
331
|
-
}),
|
|
332
|
-
Rpc.currentHeaders.pipe(Effect.andThen((headers) => {
|
|
333
|
-
return InfraLogger
|
|
334
|
-
.logError("Finished request", cause)
|
|
335
|
-
.pipe(Effect.annotateLogs({
|
|
336
|
-
action: `${meta.moduleName}.${req._tag}`,
|
|
337
|
-
req: pretty(req),
|
|
338
|
-
headers: pretty(headers)
|
|
339
|
-
// resHeaders: pretty(
|
|
340
|
-
// Object
|
|
341
|
-
// .entries(headers)
|
|
342
|
-
// .reduce((prev, [key, value]) => {
|
|
343
|
-
// prev[key] = value && typeof value === "string" ? snipString(value) : value
|
|
344
|
-
// return prev
|
|
345
|
-
// }, {} as Record<string, any>)
|
|
346
|
-
// )
|
|
347
|
-
}))
|
|
348
|
-
}))
|
|
349
|
-
])
|
|
350
|
-
),
|
|
351
|
-
devMode ? (_) => _ : Effect.catchAllDefect(() => Effect.die("Internal Server Error")),
|
|
352
|
-
Effect.withSpan("Request." + meta.moduleName + "." + req._tag, {
|
|
353
|
-
captureStackTrace: () => handler.stack
|
|
354
|
-
})
|
|
355
|
-
),
|
|
356
|
-
meta.moduleName
|
|
357
|
-
) // TODO
|
|
358
|
-
return acc
|
|
359
|
-
}, {} as any) as {
|
|
360
|
-
[K in Keys]: Rpc.Rpc<
|
|
361
|
-
Rsc[K],
|
|
362
|
-
_R<ReturnType<THandlers[K]["handler"]>>
|
|
363
|
-
>
|
|
364
|
-
}
|
|
365
|
-
|
|
366
|
-
const rpcRouter = RpcRouter.make(...Object.values(mapped) as any) as RpcRouter.RpcRouter<
|
|
367
|
-
RPCRouteReq<typeof mapped[keyof typeof mapped]>,
|
|
368
|
-
RPCRouteR<typeof mapped[keyof typeof mapped]>
|
|
369
|
-
>
|
|
370
|
-
|
|
371
|
-
type Router = RouterShape<Rsc>
|
|
372
|
-
const r: HttpRouter.HttpRouter.TagClass<
|
|
373
|
-
Router,
|
|
374
|
-
`${typeof meta.moduleName}Router`,
|
|
375
|
-
never,
|
|
376
|
-
Exclude<
|
|
377
|
-
RPCRouteR<
|
|
378
|
-
{ [K in keyof Filter<Rsc>]: Rpc.Rpc<Rsc[K], _R<ReturnType<THandlers[K]["handler"]>>> }[keyof Filter<Rsc>]
|
|
379
|
-
>,
|
|
380
|
-
{ [k in keyof TLayers]: Layer.Layer.Success<TLayers[k]> }[number]
|
|
381
|
-
>
|
|
382
|
-
> = (class Router extends HttpRouter.Tag(`${meta.moduleName}Router`)<Router>() {}) as any
|
|
383
|
-
|
|
384
|
-
const layer = r.use((router) =>
|
|
385
|
-
Effect.gen(function*() {
|
|
386
|
-
const httpApp = toHttpApp(rpcRouter, {
|
|
387
|
-
spanPrefix: rsc
|
|
388
|
-
.meta
|
|
389
|
-
.moduleName + "."
|
|
390
|
-
})
|
|
391
|
-
const services = (yield* Effect.context<never>()).pipe(
|
|
392
|
-
Context.omit(Scope.Scope as never),
|
|
393
|
-
Context.omit(Tracer.ParentSpan as never)
|
|
394
|
-
)
|
|
395
|
-
yield* router
|
|
396
|
-
.all(
|
|
397
|
-
"/",
|
|
398
|
-
(httpApp
|
|
399
|
-
.pipe(HttpMiddleware.make(Effect.provide(services)))) as any,
|
|
400
|
-
// TODO: not queries.
|
|
401
|
-
{ uninterruptible: true }
|
|
402
|
-
)
|
|
403
|
-
})
|
|
404
|
-
)
|
|
405
|
-
|
|
406
|
-
const routes = layer.pipe(
|
|
407
|
-
Layer.provideMerge(r.Live),
|
|
408
|
-
layers ? Layer.provide(layers) : (_) => _
|
|
409
|
-
) as Layer.Layer<
|
|
410
|
-
Router,
|
|
411
|
-
{ [k in keyof TLayers]: Layer.Layer.Error<TLayers[k]> }[number],
|
|
412
|
-
{ [k in keyof TLayers]: Layer.Layer.Context<TLayers[k]> }[number]
|
|
413
|
-
>
|
|
414
|
-
|
|
415
|
-
// Effect.Effect<HttpRouter.HttpRouter<unknown, HttpRouter.HttpRouter.DefaultServices>, never, UserRouter>
|
|
416
|
-
|
|
417
|
-
return {
|
|
418
|
-
moduleName: meta.moduleName,
|
|
419
|
-
Router: r,
|
|
420
|
-
routes
|
|
421
|
-
}
|
|
422
|
-
}
|
|
423
|
-
|
|
424
268
|
const effect = <
|
|
425
269
|
E,
|
|
426
270
|
R,
|
|
@@ -578,11 +422,7 @@ export const makeRouter = <Context, CTXMap extends Record<string, RPCContextMap.
|
|
|
578
422
|
}
|
|
579
423
|
}
|
|
580
424
|
|
|
581
|
-
|
|
582
|
-
effect,
|
|
583
|
-
controllers
|
|
584
|
-
}
|
|
585
|
-
return r
|
|
425
|
+
return effect
|
|
586
426
|
}
|
|
587
427
|
|
|
588
428
|
type HR<T> = T extends HttpRouter.HttpRouter<any, infer R> ? R : never
|
|
@@ -1,256 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
Object.defineProperty(exports, "__esModule", {
|
|
4
|
-
value: true
|
|
5
|
-
});
|
|
6
|
-
exports.toHttpApp = exports.makeRouter = exports.RouterSymbol = void 0;
|
|
7
|
-
var _utils = require("@effect-app/core/utils");
|
|
8
|
-
var _rpc = require("@effect/rpc");
|
|
9
|
-
var _schema = require("@effect/schema");
|
|
10
|
-
var _effectApp = require("effect-app");
|
|
11
|
-
var _http = require("effect-app/http");
|
|
12
|
-
var _errorReporter = require("../errorReporter.cjs");
|
|
13
|
-
var _logger = require("../logger.cjs");
|
|
14
|
-
var _DynamicMiddleware = require("./routing/DynamicMiddleware.cjs");
|
|
15
|
-
/* eslint-disable @typescript-eslint/no-unsafe-argument */
|
|
16
|
-
/* eslint-disable @typescript-eslint/no-empty-object-type */
|
|
17
|
-
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
18
|
-
/*
|
|
19
|
-
TODO: Effect.retry(r2, optimisticConcurrencySchedule) / was for PATCH only
|
|
20
|
-
TODO: uninteruptible commands! was for All except GET.
|
|
21
|
-
*/
|
|
22
|
-
|
|
23
|
-
const logRequestError = (0, _errorReporter.logError)("Request");
|
|
24
|
-
const reportRequestError = (0, _errorReporter.reportError)("Request");
|
|
25
|
-
/**
|
|
26
|
-
* Plain jane JSON version
|
|
27
|
-
* @deprecated use HttpRpcRouterNoStream.toHttpApp once support options
|
|
28
|
-
*/
|
|
29
|
-
const toHttpApp = (self, options) => {
|
|
30
|
-
const handler = _rpc.RpcRouter.toHandler(self, options);
|
|
31
|
-
return _effectApp.Effect.withFiberRuntime(fiber => {
|
|
32
|
-
const context = fiber.getFiberRef(_effectApp.FiberRef.currentContext);
|
|
33
|
-
const request = _effectApp.Context.unsafeGet(context, _http.HttpServerRequest.HttpServerRequest);
|
|
34
|
-
return _effectApp.Effect.flatMap(request.json, _ => handler(_).pipe(_effectApp.Stream.provideContext(context), _effectApp.Stream.runCollect, _effectApp.Effect.map(_ => _effectApp.Chunk.toReadonlyArray(_)), _effectApp.Effect.andThen(_ => {
|
|
35
|
-
let status = 200;
|
|
36
|
-
for (const r of _.flat()) {
|
|
37
|
-
if (typeof r === "number") continue;
|
|
38
|
-
const results = Array.isArray(r) ? r : [r];
|
|
39
|
-
if (results.some(_ => _._tag === "Failure" && _.cause._tag === "Die")) {
|
|
40
|
-
status = 500;
|
|
41
|
-
break;
|
|
42
|
-
}
|
|
43
|
-
if (results.some(_ => _._tag === "Failure" && _.cause._tag === "Fail")) {
|
|
44
|
-
status = 422; // 418
|
|
45
|
-
break;
|
|
46
|
-
}
|
|
47
|
-
}
|
|
48
|
-
return _http.HttpServerResponse.json(_, {
|
|
49
|
-
status
|
|
50
|
-
});
|
|
51
|
-
}), _effectApp.Effect.orDie, _effectApp.Effect.tapDefect((0, _errorReporter.reportError)("RPCHttpApp"))));
|
|
52
|
-
});
|
|
53
|
-
};
|
|
54
|
-
exports.toHttpApp = toHttpApp;
|
|
55
|
-
const RouterSymbol = exports.RouterSymbol = Symbol();
|
|
56
|
-
const makeRouter = (middleware, devMode) => {
|
|
57
|
-
const rpc = (0, _DynamicMiddleware.makeRpc)(middleware);
|
|
58
|
-
function matchFor(rsc) {
|
|
59
|
-
const meta = rsc.meta;
|
|
60
|
-
const filtered = (0, _utils.typedKeysOf)(rsc).reduce((acc, cur) => {
|
|
61
|
-
if (_effectApp.Predicate.isObject(rsc[cur]) && rsc[cur]["success"]) {
|
|
62
|
-
acc[cur] = rsc[cur];
|
|
63
|
-
}
|
|
64
|
-
return acc;
|
|
65
|
-
}, {});
|
|
66
|
-
const items = (0, _utils.typedKeysOf)(filtered).reduce((prev, cur) => {
|
|
67
|
-
;
|
|
68
|
-
prev[cur] = Object.assign(fnOrEffect => {
|
|
69
|
-
const stack = new Error().stack?.split("\n").slice(2).join("\n");
|
|
70
|
-
return _effectApp.Effect.isEffect(fnOrEffect) ? class {
|
|
71
|
-
static stack = stack;
|
|
72
|
-
static _tag = "d";
|
|
73
|
-
static handler = () => fnOrEffect;
|
|
74
|
-
} : class {
|
|
75
|
-
static stack = stack;
|
|
76
|
-
static _tag = "d";
|
|
77
|
-
static handler = fnOrEffect;
|
|
78
|
-
};
|
|
79
|
-
}, {
|
|
80
|
-
success: rsc[cur].success,
|
|
81
|
-
failure: rsc[cur].failure
|
|
82
|
-
}) // "Raw" variations are for when you don't want to decode just to encode it again on the response
|
|
83
|
-
;
|
|
84
|
-
prev[cur + "Raw"] = Object.assign(fnOrEffect => {
|
|
85
|
-
const stack = new Error().stack?.split("\n").slice(2).join("\n");
|
|
86
|
-
return _effectApp.Effect.isEffect(fnOrEffect) ? class {
|
|
87
|
-
static stack = stack;
|
|
88
|
-
static _tag = "raw";
|
|
89
|
-
static handler = () => fnOrEffect;
|
|
90
|
-
} : class {
|
|
91
|
-
static stack = stack;
|
|
92
|
-
static _tag = "raw";
|
|
93
|
-
static handler = (req, ctx) => fnOrEffect(req, {
|
|
94
|
-
...ctx,
|
|
95
|
-
Response: rsc[cur].success
|
|
96
|
-
});
|
|
97
|
-
};
|
|
98
|
-
}, {
|
|
99
|
-
success: _effectApp.S.encodedSchema(rsc[cur].success),
|
|
100
|
-
failure: rsc[cur].failure
|
|
101
|
-
});
|
|
102
|
-
return prev;
|
|
103
|
-
}, {});
|
|
104
|
-
const controllers = (controllers, layers) => {
|
|
105
|
-
const mapped = (0, _utils.typedKeysOf)(filtered).reduce((acc, cur) => {
|
|
106
|
-
const handler = controllers[cur];
|
|
107
|
-
const req = rsc[cur];
|
|
108
|
-
acc[cur] = rpc.effect(handler._tag === "raw" ? class extends req {
|
|
109
|
-
static success = _effectApp.S.encodedSchema(req.success);
|
|
110
|
-
get [_schema.Serializable.symbol]() {
|
|
111
|
-
return this.constructor;
|
|
112
|
-
}
|
|
113
|
-
get [_schema.Serializable.symbolResult]() {
|
|
114
|
-
return {
|
|
115
|
-
failure: req.failure,
|
|
116
|
-
success: _effectApp.S.encodedSchema(req.success)
|
|
117
|
-
};
|
|
118
|
-
}
|
|
119
|
-
} : req, req => _effectApp.Effect.annotateCurrentSpan("requestInput", Object.entries(req).reduce((prev, [key, value]) => {
|
|
120
|
-
prev[key] = key === "password" ? "<redacted>" : typeof value === "string" || typeof value === "number" || typeof value === "boolean" ? typeof value === "string" && value.length > 256 ? value.substring(0, 253) + "..." : value : Array.isArray(value) ? `Array[${value.length}]` : value === null || value === undefined ? `${value}` : typeof value === "object" && value ? `Object[${Object.keys(value).length}]` : typeof value;
|
|
121
|
-
return prev;
|
|
122
|
-
}, {})).pipe(
|
|
123
|
-
// can't use andThen due to some being a function and effect
|
|
124
|
-
_effectApp.Effect.zipRight(handler.handler(req)), _effectApp.Effect.tapErrorCause(cause => _effectApp.Cause.isFailure(cause) ? logRequestError(cause) : _effectApp.Effect.void), _effectApp.Effect.tapDefect(cause => _effectApp.Effect.all([reportRequestError(cause, {
|
|
125
|
-
action: `${meta.moduleName}.${req._tag}`
|
|
126
|
-
}), _rpc.Rpc.currentHeaders.pipe(_effectApp.Effect.andThen(headers => {
|
|
127
|
-
return _logger.InfraLogger.logError("Finished request", cause).pipe(_effectApp.Effect.annotateLogs({
|
|
128
|
-
action: `${meta.moduleName}.${req._tag}`,
|
|
129
|
-
req: (0, _utils.pretty)(req),
|
|
130
|
-
headers: (0, _utils.pretty)(headers)
|
|
131
|
-
// resHeaders: pretty(
|
|
132
|
-
// Object
|
|
133
|
-
// .entries(headers)
|
|
134
|
-
// .reduce((prev, [key, value]) => {
|
|
135
|
-
// prev[key] = value && typeof value === "string" ? snipString(value) : value
|
|
136
|
-
// return prev
|
|
137
|
-
// }, {} as Record<string, any>)
|
|
138
|
-
// )
|
|
139
|
-
}));
|
|
140
|
-
}))])), devMode ? _ => _ : _effectApp.Effect.catchAllDefect(() => _effectApp.Effect.die("Internal Server Error")), _effectApp.Effect.withSpan("Request." + meta.moduleName + "." + req._tag, {
|
|
141
|
-
captureStackTrace: () => handler.stack
|
|
142
|
-
})), meta.moduleName); // TODO
|
|
143
|
-
return acc;
|
|
144
|
-
}, {});
|
|
145
|
-
const rpcRouter = _rpc.RpcRouter.make(...Object.values(mapped));
|
|
146
|
-
const r = class Router extends _http.HttpRouter.Tag(`${meta.moduleName}Router`)() {};
|
|
147
|
-
const layer = r.use(router => _effectApp.Effect.gen(function* () {
|
|
148
|
-
const httpApp = toHttpApp(rpcRouter, {
|
|
149
|
-
spanPrefix: rsc.meta.moduleName + "."
|
|
150
|
-
});
|
|
151
|
-
const services = (yield* _effectApp.Effect.context()).pipe(_effectApp.Context.omit(_effectApp.Scope.Scope), _effectApp.Context.omit(_effectApp.Tracer.ParentSpan));
|
|
152
|
-
yield* router.all("/", httpApp.pipe(_http.HttpMiddleware.make(_effectApp.Effect.provide(services))),
|
|
153
|
-
// TODO: not queries.
|
|
154
|
-
{
|
|
155
|
-
uninterruptible: true
|
|
156
|
-
});
|
|
157
|
-
}));
|
|
158
|
-
const routes = layer.pipe(_effectApp.Layer.provideMerge(r.Live), layers ? _effectApp.Layer.provide(layers) : _ => _);
|
|
159
|
-
// Effect.Effect<HttpRouter.HttpRouter<unknown, HttpRouter.HttpRouter.DefaultServices>, never, UserRouter>
|
|
160
|
-
return {
|
|
161
|
-
moduleName: meta.moduleName,
|
|
162
|
-
Router: r,
|
|
163
|
-
routes
|
|
164
|
-
};
|
|
165
|
-
};
|
|
166
|
-
const effect = (layers, make) => {
|
|
167
|
-
const r = class Router extends _http.HttpRouter.Tag(`${meta.moduleName}Router`)() {};
|
|
168
|
-
const layer = r.use(router => _effectApp.Effect.gen(function* () {
|
|
169
|
-
const controllers = yield* make(items);
|
|
170
|
-
// return make.pipe(Effect.map((c) => controllers(c, layers)))
|
|
171
|
-
const mapped = (0, _utils.typedKeysOf)(filtered).reduce((acc, cur) => {
|
|
172
|
-
const handler = controllers[cur];
|
|
173
|
-
const req = rsc[cur];
|
|
174
|
-
acc[cur] = rpc.effect(handler._tag === "raw" ? class extends req {
|
|
175
|
-
static success = _effectApp.S.encodedSchema(req.success);
|
|
176
|
-
get [_schema.Serializable.symbol]() {
|
|
177
|
-
return this.constructor;
|
|
178
|
-
}
|
|
179
|
-
get [_schema.Serializable.symbolResult]() {
|
|
180
|
-
return {
|
|
181
|
-
failure: req.failure,
|
|
182
|
-
success: _effectApp.S.encodedSchema(req.success)
|
|
183
|
-
};
|
|
184
|
-
}
|
|
185
|
-
} : req, req => _effectApp.Effect.annotateCurrentSpan("requestInput", Object.entries(req).reduce((prev, [key, value]) => {
|
|
186
|
-
prev[key] = key === "password" ? "<redacted>" : typeof value === "string" || typeof value === "number" || typeof value === "boolean" ? typeof value === "string" && value.length > 256 ? value.substring(0, 253) + "..." : value : Array.isArray(value) ? `Array[${value.length}]` : value === null || value === undefined ? `${value}` : typeof value === "object" && value ? `Object[${Object.keys(value).length}]` : typeof value;
|
|
187
|
-
return prev;
|
|
188
|
-
}, {})).pipe(
|
|
189
|
-
// can't use andThen due to some being a function and effect
|
|
190
|
-
_effectApp.Effect.zipRight(handler.handler(req)), _effectApp.Effect.tapErrorCause(cause => _effectApp.Cause.isFailure(cause) ? logRequestError(cause) : _effectApp.Effect.void), _effectApp.Effect.tapDefect(cause => _effectApp.Effect.all([reportRequestError(cause, {
|
|
191
|
-
action: `${meta.moduleName}.${req._tag}`
|
|
192
|
-
}), _rpc.Rpc.currentHeaders.pipe(_effectApp.Effect.andThen(headers => {
|
|
193
|
-
return _logger.InfraLogger.logError("Finished request", cause).pipe(_effectApp.Effect.annotateLogs({
|
|
194
|
-
action: `${meta.moduleName}.${req._tag}`,
|
|
195
|
-
req: (0, _utils.pretty)(req),
|
|
196
|
-
headers: (0, _utils.pretty)(headers)
|
|
197
|
-
// resHeaders: pretty(
|
|
198
|
-
// Object
|
|
199
|
-
// .entries(headers)
|
|
200
|
-
// .reduce((prev, [key, value]) => {
|
|
201
|
-
// prev[key] = value && typeof value === "string" ? snipString(value) : value
|
|
202
|
-
// return prev
|
|
203
|
-
// }, {} as Record<string, any>)
|
|
204
|
-
// )
|
|
205
|
-
}));
|
|
206
|
-
}))])), devMode ? _ => _ : _effectApp.Effect.catchAllDefect(() => _effectApp.Effect.die("Internal Server Error")), _effectApp.Effect.withSpan("Request." + meta.moduleName + "." + req._tag, {
|
|
207
|
-
captureStackTrace: () => handler.stack
|
|
208
|
-
})), meta.moduleName); // TODO
|
|
209
|
-
return acc;
|
|
210
|
-
}, {});
|
|
211
|
-
const rpcRouter = _rpc.RpcRouter.make(...Object.values(mapped));
|
|
212
|
-
const httpApp = toHttpApp(rpcRouter, {
|
|
213
|
-
spanPrefix: rsc.meta.moduleName + "."
|
|
214
|
-
});
|
|
215
|
-
const services = (yield* _effectApp.Effect.context()).pipe(_effectApp.Context.omit(_effectApp.Scope.Scope), _effectApp.Context.omit(_effectApp.Tracer.ParentSpan));
|
|
216
|
-
yield* router.all("/", httpApp.pipe(_http.HttpMiddleware.make(_effectApp.Effect.provide(services))),
|
|
217
|
-
// TODO: not queries.
|
|
218
|
-
{
|
|
219
|
-
uninterruptible: true
|
|
220
|
-
});
|
|
221
|
-
}));
|
|
222
|
-
// eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion
|
|
223
|
-
const routes = layer.pipe(_effectApp.Layer.provideMerge(r.Live), layers ? _effectApp.Layer.provide(layers) : _ => _);
|
|
224
|
-
// Effect.Effect<HttpRouter.HttpRouter<unknown, HttpRouter.HttpRouter.DefaultServices>, never, UserRouter>
|
|
225
|
-
return {
|
|
226
|
-
moduleName: meta.moduleName,
|
|
227
|
-
Router: r,
|
|
228
|
-
routes
|
|
229
|
-
};
|
|
230
|
-
};
|
|
231
|
-
const r = {
|
|
232
|
-
effect,
|
|
233
|
-
controllers
|
|
234
|
-
};
|
|
235
|
-
return r;
|
|
236
|
-
}
|
|
237
|
-
function matchAll(handlers, requestLayer) {
|
|
238
|
-
const routers = (0, _utils.typedValuesOf)(handlers);
|
|
239
|
-
const rootRouter = class extends _http.HttpRouter.Tag("RootRouter")() {};
|
|
240
|
-
const r = rootRouter.use(router => _effectApp.Effect.gen(function* () {
|
|
241
|
-
for (const route of routers) {
|
|
242
|
-
yield* router.mount("/rpc/" + route.moduleName, yield* route.Router.router.pipe(_effectApp.Effect.map(_http.HttpRouter.use((0, _effectApp.flow)(_effectApp.Effect.provide(requestLayer))))));
|
|
243
|
-
}
|
|
244
|
-
})).pipe(_effectApp.Layer.provide(routers.map(r => r.routes).flat()));
|
|
245
|
-
return {
|
|
246
|
-
layer: r,
|
|
247
|
-
Router: rootRouter
|
|
248
|
-
};
|
|
249
|
-
}
|
|
250
|
-
return {
|
|
251
|
-
matchAll,
|
|
252
|
-
matchFor
|
|
253
|
-
};
|
|
254
|
-
};
|
|
255
|
-
exports.makeRouter = makeRouter;
|
|
256
|
-
//# sourceMappingURL=routing2 copy.cjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"routing2 copy.cjs","names":["_utils","require","_rpc","_schema","_effectApp","_http","_errorReporter","_logger","_DynamicMiddleware","logRequestError","logError","reportRequestError","reportError","toHttpApp","self","options","handler","RpcRouter","toHandler","Effect","withFiberRuntime","fiber","context","getFiberRef","FiberRef","currentContext","request","Context","unsafeGet","HttpServerRequest","flatMap","json","_","pipe","Stream","provideContext","runCollect","map","Chunk","toReadonlyArray","andThen","status","r","flat","results","Array","isArray","some","_tag","cause","HttpServerResponse","orDie","tapDefect","exports","RouterSymbol","Symbol","makeRouter","middleware","devMode","rpc","makeRpc","matchFor","rsc","meta","filtered","typedKeysOf","reduce","acc","cur","Predicate","isObject","items","prev","Object","assign","fnOrEffect","stack","Error","split","slice","join","isEffect","success","failure","req","ctx","Response","S","encodedSchema","controllers","layers","mapped","effect","Serializable","symbol","constructor","symbolResult","annotateCurrentSpan","entries","key","value","length","substring","undefined","keys","zipRight","tapErrorCause","Cause","isFailure","void","all","action","moduleName","Rpc","currentHeaders","headers","InfraLogger","annotateLogs","pretty","catchAllDefect","die","withSpan","captureStackTrace","rpcRouter","make","values","Router","HttpRouter","Tag","layer","use","router","gen","httpApp","spanPrefix","services","omit","Scope","Tracer","ParentSpan","HttpMiddleware","provide","uninterruptible","routes","Layer","provideMerge","Live","matchAll","handlers","requestLayer","routers","typedValuesOf","rootRouter","route","mount","flow"],"sources":["../../src/api/routing2 copy.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
|
|
@@ -1,105 +0,0 @@
|
|
|
1
|
-
import type * as HttpApp from "@effect/platform/HttpApp";
|
|
2
|
-
import { Rpc, RpcRouter } from "@effect/rpc";
|
|
3
|
-
import type { NonEmptyArray } from "effect-app";
|
|
4
|
-
import { 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 { Middleware } from "./routing/DynamicMiddleware.js";
|
|
9
|
-
export type _R<T extends Effect<any, any, any>> = [T] extends [
|
|
10
|
-
Effect<any, any, infer R>
|
|
11
|
-
] ? R : never;
|
|
12
|
-
export type _E<T extends Effect<any, any, any>> = [T] extends [
|
|
13
|
-
Effect<any, infer E, any>
|
|
14
|
-
] ? E : never;
|
|
15
|
-
export type EffectDeps<A> = {
|
|
16
|
-
[K in keyof A as A[K] extends Effect<any, any, any> ? K : never]: A[K] extends Effect<any, any, any> ? A[K] : never;
|
|
17
|
-
};
|
|
18
|
-
/**
|
|
19
|
-
* Plain jane JSON version
|
|
20
|
-
* @deprecated use HttpRpcRouterNoStream.toHttpApp once support options
|
|
21
|
-
*/
|
|
22
|
-
export declare const toHttpApp: <R extends RpcRouter.RpcRouter<any, any>>(self: R, options?: {
|
|
23
|
-
readonly spanPrefix?: string;
|
|
24
|
-
}) => HttpApp.Default<HttpServerError.RequestError, RpcRouter.RpcRouter.Context<R>>;
|
|
25
|
-
export interface Hint<Err extends string> {
|
|
26
|
-
Err: Err;
|
|
27
|
-
}
|
|
28
|
-
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;
|
|
29
|
-
type AnyRequestModule = S.Schema.Any & {
|
|
30
|
-
success?: S.Schema.Any;
|
|
31
|
-
failure?: S.Schema.Any;
|
|
32
|
-
};
|
|
33
|
-
type GetSuccess<T> = T extends {
|
|
34
|
-
success: S.Schema.Any;
|
|
35
|
-
} ? T["success"] : typeof S.Void;
|
|
36
|
-
type GetFailure<T extends {
|
|
37
|
-
failure?: S.Schema.Any;
|
|
38
|
-
}> = T["failure"] extends never ? typeof S.Never : T["failure"];
|
|
39
|
-
export interface Handler<Action extends AnyRequestModule, RT extends "raw" | "d", A, E, R> {
|
|
40
|
-
new (): {};
|
|
41
|
-
_tag: RT;
|
|
42
|
-
stack: string;
|
|
43
|
-
handler: (req: S.Schema.Type<Action>) => Effect<A, E, R>;
|
|
44
|
-
}
|
|
45
|
-
type AHandler<Action extends AnyRequestModule> = Handler<Action, "raw", S.Schema.Encoded<GetSuccess<Action>>, S.Schema.Type<GetFailure<Action>> | S.ParseResult.ParseError, any> | Handler<Action, "d", S.Schema.Type<GetSuccess<Action>>, S.Schema.Type<GetFailure<Action>> | S.ParseResult.ParseError, any>;
|
|
46
|
-
type Filter<T> = {
|
|
47
|
-
[K in keyof T as T[K] extends S.Schema.All & {
|
|
48
|
-
success: S.Schema.Any;
|
|
49
|
-
failure: S.Schema.Any;
|
|
50
|
-
} ? K : never]: T[K];
|
|
51
|
-
};
|
|
52
|
-
export interface ExtendedMiddleware<Context, CTXMap extends Record<string, RPCContextMap.Any>> extends Middleware<Context, CTXMap> {
|
|
53
|
-
makeContext: Effect<{
|
|
54
|
-
[K in keyof CTXMap as CTXMap[K][1] extends never ? never : CTXMap[K][0]]: CTXMap[K][1];
|
|
55
|
-
}, never, never>;
|
|
56
|
-
}
|
|
57
|
-
export declare const RouterSymbol: unique symbol;
|
|
58
|
-
export interface RouterShape<Rsc> {
|
|
59
|
-
[RouterSymbol]: Rsc;
|
|
60
|
-
}
|
|
61
|
-
type RPCRouteR<T extends Rpc.Rpc<any, any>> = [T] extends [
|
|
62
|
-
Rpc.Rpc<any, infer R>
|
|
63
|
-
] ? R : never;
|
|
64
|
-
export declare const makeRouter: <Context, CTXMap extends Record<string, RPCContextMap.Any>>(middleware: ExtendedMiddleware<Context, CTXMap>, devMode: boolean) => {
|
|
65
|
-
matchAll: <T extends {
|
|
66
|
-
[key: string]: {
|
|
67
|
-
Router: {
|
|
68
|
-
router: Effect<HttpRouter.HttpRouter<any, any>, any, any>;
|
|
69
|
-
};
|
|
70
|
-
routes: Layer.Layer<any, any, any>;
|
|
71
|
-
moduleName: string;
|
|
72
|
-
};
|
|
73
|
-
}, A, E, R>(handlers: T, requestLayer: Layer.Layer<A, E, R>) => {
|
|
74
|
-
layer: Layer.Layer<never, Layer.Layer.Error<(typeof handlers)[keyof typeof handlers]["routes"]>, Layer.Layer.Context<(typeof handlers)[keyof typeof handlers]["routes"]>>;
|
|
75
|
-
Router: HttpRouter.HttpRouter.TagClass<"RootRouter", "RootRouter", Effect.Effect.Success<T[keyof T]["Router"]["router"]> extends infer T_1 ? T_1 extends Effect.Effect.Success<T[keyof T]["Router"]["router"]> ? T_1 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_2 ? T_2 extends Effect.Effect.Success<T[keyof T]["Router"]["router"]> ? T_2 extends HttpRouter.HttpRouter<any, infer R_1> ? R_1 : never : never : never, A>>;
|
|
76
|
-
};
|
|
77
|
-
matchFor: <const ModuleName extends string, const Rsc extends Record<string, any>>(rsc: Rsc & {
|
|
78
|
-
meta: {
|
|
79
|
-
moduleName: ModuleName;
|
|
80
|
-
};
|
|
81
|
-
}) => {
|
|
82
|
-
effect: <E_1, R_1, THandlers extends { [K in keyof Filter<Rsc>]: AHandler<Rsc[K]>; }, TLayers extends NonEmptyArray<Layer.Layer.Any>>(layers: TLayers, make: (requests: { [Key in keyof Filter<Rsc>]: {
|
|
83
|
-
<A_1 extends S.Schema.Type<GetSuccess<Rsc[Key]>>, R2 = never, E_2 = never>(f: Effect<A_1, E_2, R2>): HandleVoid<S.Schema.Type<GetSuccess<Rsc[Key]>>, A_1, Handler<Rsc[Key], "d", A_1, E_2, Exclude<R2, GetEffectContext<CTXMap, Rsc[Key]["config"]>>>>;
|
|
84
|
-
<A_1 extends S.Schema.Type<GetSuccess<Rsc[Key]>>, R2_1 = never, E_3 = never>(f: (req: S.Schema.Type<Rsc[Key]>) => Effect<A_1, E_3, R2_1>): HandleVoid<S.Schema.Type<GetSuccess<Rsc[Key]>>, A_1, Handler<Rsc[Key], "d", A_1, E_3, Exclude<R2_1, GetEffectContext<CTXMap, Rsc[Key]["config"]>>>>;
|
|
85
|
-
success: Rsc[Key]["success"];
|
|
86
|
-
failure: Rsc[Key]["failure"];
|
|
87
|
-
}; } & { [Key_1 in keyof Filter<Rsc> as Key_1 extends string ? `${Key_1}Raw` : never]: {
|
|
88
|
-
<A_1 extends S.Schema.Encoded<GetSuccess<Rsc[Key_1]>>, R2 = never, E_2 = never>(f: Effect<A_1, E_2, R2>): HandleVoid<S.Schema.Encoded<GetSuccess<Rsc[Key_1]>>, A_1, Handler<Rsc[Key_1], "raw", A_1, E_2, Exclude<R2, GetEffectContext<CTXMap, Rsc[Key_1]["config"]>>>>;
|
|
89
|
-
<A_1 extends S.Schema.Encoded<GetSuccess<Rsc[Key_1]>>, R2_1 = never, E_3 = never>(f: (req: S.Schema.Type<Rsc[Key_1]>) => Effect<A_1, E_3, R2_1>): HandleVoid<S.Schema.Encoded<GetSuccess<Rsc[Key_1]>>, A_1, Handler<Rsc[Key_1], "raw", A_1, E_3, Exclude<R2_1, GetEffectContext<CTXMap, Rsc[Key_1]["config"]>>>>;
|
|
90
|
-
success: S.SchemaClass<S.Schema.Encoded<Rsc[Key_1]["success"]>, S.Schema.Encoded<Rsc[Key_1]["success"]>, never>;
|
|
91
|
-
failure: Rsc[Key_1]["failure"];
|
|
92
|
-
}; }) => Effect<THandlers, E_1, R_1>) => {
|
|
93
|
-
moduleName: ModuleName;
|
|
94
|
-
Router: HttpRouter.HttpRouter.TagClass<RouterShape<Rsc>, `${ModuleName}Router`, never, Exclude<RPCRouteR<{ [K in keyof Filter<Rsc>]: Rpc.Rpc<Rsc[K], _R<ReturnType<THandlers[K]["handler"]>>>; }[keyof Filter<Rsc>]>, { [k in keyof TLayers]: Layer.Layer.Success<TLayers[k]>; }[number]>>;
|
|
95
|
-
routes: Layer.Layer<RouterShape<Rsc>, E_1 | { [k_1 in keyof TLayers]: Layer.Layer.Error<TLayers[k_1]>; }[number], { [k_2 in keyof TLayers]: Layer.Layer.Context<TLayers[k_2]>; }[number] | Exclude<R_1, { [k_3 in keyof TLayers]: Layer.Layer.Success<TLayers[k_3]>; }[number]>>;
|
|
96
|
-
};
|
|
97
|
-
controllers: <THandlers_1 extends { [K in keyof Filter<Rsc>]: AHandler<Rsc[K]>; }, TLayers_1 extends NonEmptyArray<Layer.Layer.Any>>(controllers: THandlers_1, layers?: TLayers_1) => {
|
|
98
|
-
moduleName: ModuleName;
|
|
99
|
-
Router: HttpRouter.HttpRouter.TagClass<RouterShape<Rsc>, `${ModuleName}Router`, never, Exclude<RPCRouteR<{ [K in keyof Filter<Rsc>]: Rpc.Rpc<Rsc[K], _R<ReturnType<THandlers_1[K]["handler"]>>>; }[keyof Filter<Rsc>]>, { [k in keyof TLayers_1]: Layer.Layer.Success<TLayers_1[k]>; }[number]>>;
|
|
100
|
-
routes: Layer.Layer<RouterShape<Rsc>, { [k_1 in keyof TLayers_1]: Layer.Layer.Error<TLayers_1[k_1]>; }[number], { [k_2 in keyof TLayers_1]: Layer.Layer.Context<TLayers_1[k_2]>; }[number]>;
|
|
101
|
-
};
|
|
102
|
-
};
|
|
103
|
-
};
|
|
104
|
-
export {};
|
|
105
|
-
//# sourceMappingURL=routing2%20copy.d.ts.map
|