@effect-app/infra 0.18.1 → 0.18.3
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 +16 -0
- package/_cjs/api/defaultErrorHandler.cjs +7 -6
- package/_cjs/api/defaultErrorHandler.cjs.map +1 -1
- package/_cjs/api/reportError.cjs +8 -7
- package/_cjs/api/reportError.cjs.map +1 -1
- package/_cjs/api/routing.cjs +4 -3
- package/_cjs/api/routing.cjs.map +1 -1
- package/_cjs/api/setupRequest.cjs +9 -8
- package/_cjs/api/setupRequest.cjs.map +1 -1
- package/_cjs/errorReporter.cjs +5 -4
- package/_cjs/errorReporter.cjs.map +1 -1
- package/_cjs/services/Operations/service.cjs +5 -4
- package/_cjs/services/Operations/service.cjs.map +1 -1
- package/_cjs/services/Repository.cjs +6 -5
- package/_cjs/services/Repository.cjs.map +1 -1
- package/_src/api/defaultErrorHandler.ts +51 -47
- package/_src/api/reportError.ts +17 -9
- package/_src/api/routing.ts +101 -99
- package/_src/api/setupRequest.ts +15 -11
- package/_src/errorReporter.ts +30 -26
- package/_src/services/Operations/service.ts +29 -23
- package/_src/services/Repository.ts +10 -8
- package/dist/api/defaultErrorHandler.d.ts.map +1 -1
- package/dist/api/defaultErrorHandler.js +8 -7
- package/dist/api/reportError.d.ts.map +1 -1
- package/dist/api/reportError.js +8 -7
- package/dist/api/routing.d.ts +1 -1
- package/dist/api/routing.d.ts.map +1 -1
- package/dist/api/routing.js +5 -4
- package/dist/api/setupRequest.d.ts.map +1 -1
- package/dist/api/setupRequest.js +10 -9
- package/dist/errorReporter.d.ts.map +1 -1
- package/dist/errorReporter.js +6 -5
- package/dist/services/Operations/service.d.ts.map +1 -1
- package/dist/services/Operations/service.js +6 -5
- package/dist/services/Repository.d.ts +9 -9
- package/dist/services/Repository.d.ts.map +1 -1
- package/dist/services/Repository.js +7 -6
- package/dist/services/simpledb/cosmosdb.d.ts +2 -2
- package/dist/services/simpledb/diskdb.d.ts +2 -2
- package/dist/services/simpledb/memdb.d.ts +2 -2
- package/dist/services/simpledb/mongodb.d.ts +2 -2
- package/dist/services/simpledb/redisdb.d.ts +2 -2
- package/dist/services/simpledb/simpledb.d.ts +3 -3
- package/package.json +3 -3
package/_src/api/reportError.ts
CHANGED
|
@@ -10,12 +10,16 @@ export class RequestException<E> extends CauseException<E> {
|
|
|
10
10
|
export const reportRequestError_ = reportError(cause => new RequestException(cause))
|
|
11
11
|
|
|
12
12
|
export const reportRequestError = (cause: Cause<unknown>, context?: Record<string, unknown> | undefined) =>
|
|
13
|
-
|
|
13
|
+
Debug.untraced(() =>
|
|
14
|
+
RequestContext.Tag.accessWithEffect(requestContext => reportRequestError_(cause, { requestContext, ...context }))
|
|
15
|
+
)
|
|
14
16
|
|
|
15
17
|
export const logRequestError_ = logError(cause => new RequestException(cause))
|
|
16
18
|
|
|
17
19
|
export const logRequestError = (cause: Cause<unknown>, context?: Record<string, unknown> | undefined) =>
|
|
18
|
-
|
|
20
|
+
Debug.untraced(() =>
|
|
21
|
+
RequestContext.Tag.accessWithEffect(requestContext => logRequestError_(cause, { requestContext, ...context }))
|
|
22
|
+
)
|
|
19
23
|
|
|
20
24
|
/**
|
|
21
25
|
* Forks the effect into a new fiber attached to the global scope. Because the
|
|
@@ -27,8 +31,10 @@ export const logRequestError = (cause: Cause<unknown>, context?: Record<string,
|
|
|
27
31
|
* @tsplus getter effect/io/Effect forkDaemonReportRequest
|
|
28
32
|
*/
|
|
29
33
|
export function forkDaemonReportRequest<R, E, A>(self: Effect<R, E, A>) {
|
|
30
|
-
return
|
|
31
|
-
.
|
|
34
|
+
return Debug.untraced(() =>
|
|
35
|
+
self.tapErrorCause(reportRequestError)
|
|
36
|
+
.fork.daemonChildren
|
|
37
|
+
)
|
|
32
38
|
}
|
|
33
39
|
|
|
34
40
|
/**
|
|
@@ -41,10 +47,12 @@ export function forkDaemonReportRequest<R, E, A>(self: Effect<R, E, A>) {
|
|
|
41
47
|
* @tsplus getter effect/io/Effect forkDaemonReportRequestUnexpected
|
|
42
48
|
*/
|
|
43
49
|
export function forkDaemonReportRequestUnexpected<R, E, A>(self: Effect<R, E, A>) {
|
|
44
|
-
return
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
50
|
+
return Debug.untraced(() =>
|
|
51
|
+
self.tapErrorCause(cause =>
|
|
52
|
+
cause.isInterruptedOnly() || cause.isDie()
|
|
53
|
+
? reportRequestError(cause)
|
|
54
|
+
: logRequestError(cause)
|
|
55
|
+
)
|
|
56
|
+
.fork.daemonChildren
|
|
48
57
|
)
|
|
49
|
-
.fork.daemonChildren
|
|
50
58
|
}
|
package/_src/api/routing.ts
CHANGED
|
@@ -294,116 +294,118 @@ export function makeRequestHandler<
|
|
|
294
294
|
}
|
|
295
295
|
|
|
296
296
|
return (req: express.Request, res: express.Response) => {
|
|
297
|
-
return
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
Effect.
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
297
|
+
return Debug.untraced(restore =>
|
|
298
|
+
Effect.struct({
|
|
299
|
+
requestContext: Effect(() => {
|
|
300
|
+
const requestContext = makeContext(req)
|
|
301
|
+
if (req.method === "GET") {
|
|
302
|
+
res.setHeader("Cache-Control", "no-store")
|
|
303
|
+
}
|
|
304
|
+
res.setHeader("Content-Language", requestContext.locale)
|
|
305
|
+
return requestContext
|
|
306
|
+
}),
|
|
307
|
+
pars: getParams(req)
|
|
308
|
+
})
|
|
309
|
+
.flatMap(({ pars, requestContext }) =>
|
|
310
|
+
RequestSettings.get.flatMap(s =>
|
|
311
|
+
Effect.logInfo("Incoming request").apply(
|
|
312
|
+
Effect.logAnnotates({
|
|
313
|
+
method: req.method,
|
|
314
|
+
path: req.originalUrl,
|
|
315
|
+
...s.verbose
|
|
316
|
+
? {
|
|
317
|
+
reqPath: pars.path.$$.pretty,
|
|
318
|
+
reqQuery: pars.query.$$.pretty,
|
|
319
|
+
reqBody: pretty(pars.body),
|
|
320
|
+
reqCookies: pretty(pars.cookies),
|
|
321
|
+
reqHeaders: pars.headers.$$.pretty
|
|
322
|
+
} :
|
|
323
|
+
undefined
|
|
324
|
+
})
|
|
325
|
+
)
|
|
326
|
+
).zipRight(
|
|
327
|
+
Effect.suspendSucceed(() => {
|
|
328
|
+
const handleRequest = parseRequest(req)
|
|
329
|
+
.map(({ body, path, query }) => {
|
|
330
|
+
const hn = {
|
|
331
|
+
...body.value,
|
|
332
|
+
...query.value,
|
|
333
|
+
...path.value
|
|
334
|
+
} as unknown as ReqA
|
|
335
|
+
return hn
|
|
336
|
+
})
|
|
337
|
+
.flatMap(parsedReq =>
|
|
338
|
+
restore(() => handle(parsedReq as any))()
|
|
339
|
+
.flatMap(r => respond(parsedReq, res, r))
|
|
340
|
+
)
|
|
341
|
+
// Commands should not be interruptable.
|
|
342
|
+
const r = req.method !== "GET" ? handleRequest.uninterruptible : handleRequest // .instrument("Performance.RequestResponse")
|
|
343
|
+
// the first log entry should be of the request start.
|
|
344
|
+
const r2 = makeMiddlewareContext
|
|
345
|
+
? r.provideSomeContextEffect(makeMiddlewareContext(req, res, requestContext))
|
|
346
|
+
// PR is not relevant here
|
|
347
|
+
: r as Effect<R, E | ValidationError, void>
|
|
348
|
+
return errorHandler(
|
|
349
|
+
req,
|
|
350
|
+
res,
|
|
351
|
+
requestContext,
|
|
352
|
+
r2
|
|
353
|
+
)
|
|
323
354
|
})
|
|
324
355
|
)
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
.
|
|
356
|
+
.tapErrorCause(cause =>
|
|
357
|
+
Effect.tuplePar(
|
|
358
|
+
Effect(() => res.status(500).send()),
|
|
359
|
+
reportRequestError(cause, {
|
|
360
|
+
requestContext,
|
|
361
|
+
path: req.originalUrl,
|
|
362
|
+
method: req.method
|
|
363
|
+
}),
|
|
364
|
+
Effect.suspendSucceed(() => {
|
|
365
|
+
const headers = res.getHeaders()
|
|
366
|
+
return Effect.logErrorCauseMessage(
|
|
367
|
+
"Finished request",
|
|
368
|
+
cause
|
|
369
|
+
).apply(Effect.logAnnotates({
|
|
370
|
+
method: req.method,
|
|
371
|
+
path: req.originalUrl,
|
|
372
|
+
statusCode: res.statusCode.toString(),
|
|
373
|
+
|
|
374
|
+
reqPath: pars.path.$$.pretty,
|
|
375
|
+
reqQuery: pars.query.$$.pretty,
|
|
376
|
+
reqBody: pretty(pars.body),
|
|
377
|
+
reqCookies: pretty(pars.cookies),
|
|
378
|
+
reqHeaders: pars.headers.$$.pretty,
|
|
379
|
+
|
|
380
|
+
resHeaders: Object.entries(headers).reduce((prev, [key, value]) => {
|
|
381
|
+
prev[key] = value && typeof value === "string" ? snipString(value) : value
|
|
382
|
+
return prev
|
|
383
|
+
}, {} as Record<string, any>)
|
|
384
|
+
.$$.pretty
|
|
385
|
+
}))
|
|
386
|
+
})
|
|
339
387
|
)
|
|
340
|
-
|
|
341
|
-
const r = req.method !== "GET" ? handleRequest.uninterruptible : handleRequest // .instrument("Performance.RequestResponse")
|
|
342
|
-
// the first log entry should be of the request start.
|
|
343
|
-
const r2 = makeMiddlewareContext
|
|
344
|
-
? r.provideSomeContextEffect(makeMiddlewareContext(req, res, requestContext))
|
|
345
|
-
// PR is not relevant here
|
|
346
|
-
: r as Effect<R, E | ValidationError, void>
|
|
347
|
-
return errorHandler(
|
|
348
|
-
req,
|
|
349
|
-
res,
|
|
350
|
-
requestContext,
|
|
351
|
-
r2
|
|
388
|
+
.tapErrorCause(cause => Effect(() => console.error("Error occurred while reporting error", cause)))
|
|
352
389
|
)
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
.tapErrorCause(cause =>
|
|
356
|
-
Effect.tuplePar(
|
|
357
|
-
Effect(() => res.status(500).send()),
|
|
358
|
-
reportRequestError(cause, {
|
|
359
|
-
requestContext,
|
|
360
|
-
path: req.originalUrl,
|
|
361
|
-
method: req.method
|
|
362
|
-
}),
|
|
363
|
-
Effect.suspendSucceed(() => {
|
|
390
|
+
.tap(() =>
|
|
391
|
+
RequestSettings.get.flatMap(s => {
|
|
364
392
|
const headers = res.getHeaders()
|
|
365
|
-
return Effect.
|
|
366
|
-
"Finished request",
|
|
367
|
-
cause
|
|
368
|
-
).apply(Effect.logAnnotates({
|
|
393
|
+
return Effect.logInfo("Finished request").apply(Effect.logAnnotates({
|
|
369
394
|
method: req.method,
|
|
370
395
|
path: req.originalUrl,
|
|
371
396
|
statusCode: res.statusCode.toString(),
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
reqHeaders: pars.headers.$$.pretty,
|
|
378
|
-
|
|
379
|
-
resHeaders: Object.entries(headers).reduce((prev, [key, value]) => {
|
|
380
|
-
prev[key] = value && typeof value === "string" ? snipString(value) : value
|
|
381
|
-
return prev
|
|
382
|
-
}, {} as Record<string, any>)
|
|
383
|
-
.$$.pretty
|
|
397
|
+
...s.verbose
|
|
398
|
+
? {
|
|
399
|
+
resHeaders: headers.$$.pretty
|
|
400
|
+
} :
|
|
401
|
+
undefined
|
|
384
402
|
}))
|
|
385
403
|
})
|
|
386
404
|
)
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
const headers = res.getHeaders()
|
|
392
|
-
return Effect.logInfo("Finished request").apply(Effect.logAnnotates({
|
|
393
|
-
method: req.method,
|
|
394
|
-
path: req.originalUrl,
|
|
395
|
-
statusCode: res.statusCode.toString(),
|
|
396
|
-
...s.verbose
|
|
397
|
-
? {
|
|
398
|
-
resHeaders: headers.$$.pretty
|
|
399
|
-
} :
|
|
400
|
-
undefined
|
|
401
|
-
}))
|
|
402
|
-
})
|
|
403
|
-
)
|
|
404
|
-
.provideService(RequestContext.Tag, requestContext) // otherwise external error reporter breaks.
|
|
405
|
-
.setupRequest(requestContext)
|
|
406
|
-
)
|
|
405
|
+
.provideService(RequestContext.Tag, requestContext) // otherwise external error reporter breaks.
|
|
406
|
+
.setupRequest(requestContext)
|
|
407
|
+
)
|
|
408
|
+
)
|
|
407
409
|
}
|
|
408
410
|
}
|
|
409
411
|
|
package/_src/api/setupRequest.ts
CHANGED
|
@@ -4,13 +4,15 @@ import { RequestContext } from "../RequestContext.js"
|
|
|
4
4
|
* @tsplus fluent effect/io/Effect setupRequest
|
|
5
5
|
*/
|
|
6
6
|
export function setupRequest<R, E, A>(self: Effect<R, E, A>, requestContext: RequestContext) {
|
|
7
|
-
return
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
7
|
+
return Debug.untraced(() =>
|
|
8
|
+
pipe(
|
|
9
|
+
self.logSpan("request"),
|
|
10
|
+
Effect.logAnnotates({
|
|
11
|
+
requestRootId: requestContext.rootId,
|
|
12
|
+
requestId: requestContext.id,
|
|
13
|
+
requestName: requestContext.name
|
|
14
|
+
})
|
|
15
|
+
)
|
|
14
16
|
)
|
|
15
17
|
}
|
|
16
18
|
|
|
@@ -18,16 +20,18 @@ export function setupRequest<R, E, A>(self: Effect<R, E, A>, requestContext: Req
|
|
|
18
20
|
* @tsplus getter effect/io/Effect setupRequestFrom
|
|
19
21
|
*/
|
|
20
22
|
export function setupRequestFrom<R, E, A>(self: Effect<R, E, A>) {
|
|
21
|
-
return RequestContext.Tag.accessWithEffect(requestContext => self.setupRequest(requestContext))
|
|
23
|
+
return Debug.untraced(() => RequestContext.Tag.accessWithEffect(requestContext => self.setupRequest(requestContext)))
|
|
22
24
|
}
|
|
23
25
|
|
|
24
26
|
/**
|
|
25
27
|
* @tsplus fluent effect/io/Effect setupRequestFromWith
|
|
26
28
|
*/
|
|
27
29
|
export function setupReq3<R, E, A>(self: Effect<R, E, A>, name: string) {
|
|
28
|
-
return
|
|
29
|
-
|
|
30
|
-
|
|
30
|
+
return Debug.untraced(() =>
|
|
31
|
+
self
|
|
32
|
+
.setupRequestFrom
|
|
33
|
+
.provideService(RequestContext.Tag, makeInternalRequestContext(name))
|
|
34
|
+
)
|
|
31
35
|
}
|
|
32
36
|
|
|
33
37
|
function makeInternalRequestContext(name: string) {
|
package/_src/errorReporter.ts
CHANGED
|
@@ -5,21 +5,23 @@ export function reportError<E, E2 extends CauseException<unknown>>(
|
|
|
5
5
|
makeError: (cause: Cause<E>) => E2
|
|
6
6
|
) {
|
|
7
7
|
return (cause: Cause<E>, context?: Record<string, unknown>) =>
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
8
|
+
Debug.untraced(() =>
|
|
9
|
+
Effect.gen(function*($) {
|
|
10
|
+
if (cause.isInterrupted()) {
|
|
11
|
+
yield* $(Effect.logDebug("Interrupted: " + (context ? context.$$.pretty : "")))
|
|
12
|
+
return
|
|
13
|
+
}
|
|
14
|
+
const error = makeError(cause)
|
|
15
|
+
const extras = { context, error: error.toJSON() }
|
|
16
|
+
reportSentry(error, extras)
|
|
17
|
+
yield* $(
|
|
18
|
+
cause.logErrorCause.logAnnotate(
|
|
19
|
+
"extras",
|
|
20
|
+
JSON.stringify({ context, error: { _tag: error._tag, message: error.message } })
|
|
21
|
+
)
|
|
20
22
|
)
|
|
21
|
-
)
|
|
22
|
-
|
|
23
|
+
})
|
|
24
|
+
)
|
|
23
25
|
}
|
|
24
26
|
|
|
25
27
|
function reportSentry(error: unknown, extras: Record<string, unknown>) {
|
|
@@ -32,19 +34,21 @@ export function logError<E, E2 extends CauseException<unknown>>(
|
|
|
32
34
|
makeError: (cause: Cause<E>) => E2
|
|
33
35
|
) {
|
|
34
36
|
return (cause: Cause<E>, context?: Record<string, unknown>) =>
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
37
|
+
Debug.untraced(() =>
|
|
38
|
+
Effect.gen(function*($) {
|
|
39
|
+
if (cause.isInterrupted()) {
|
|
40
|
+
yield* $(Effect.logDebug("Interrupted: " + (context ? context.$$.pretty : "")))
|
|
41
|
+
return
|
|
42
|
+
}
|
|
43
|
+
const error = makeError(cause)
|
|
44
|
+
yield* $(
|
|
45
|
+
cause.logWarningCause.logAnnotate(
|
|
46
|
+
"extras",
|
|
47
|
+
JSON.stringify({ context, error: { _tag: error._tag, message: error.message } })
|
|
48
|
+
)
|
|
45
49
|
)
|
|
46
|
-
)
|
|
47
|
-
|
|
50
|
+
})
|
|
51
|
+
)
|
|
48
52
|
}
|
|
49
53
|
|
|
50
54
|
export function captureException(error: unknown) {
|
|
@@ -19,13 +19,15 @@ export const Operations: OperationsOps = Tag<Operations>()
|
|
|
19
19
|
* @tsplus getter effect/io/Effect forkOperation
|
|
20
20
|
*/
|
|
21
21
|
export function forkOperation<R, E, A>(self: Effect<R, E, A>) {
|
|
22
|
-
return
|
|
23
|
-
Operations
|
|
24
|
-
|
|
25
|
-
.
|
|
26
|
-
|
|
27
|
-
.
|
|
28
|
-
|
|
22
|
+
return Debug.untraced(() =>
|
|
23
|
+
Operations.accessWithEffect(
|
|
24
|
+
Operations =>
|
|
25
|
+
Scope.make()
|
|
26
|
+
.flatMap(scope =>
|
|
27
|
+
Operations.register.extend(scope)
|
|
28
|
+
.tap(() => self.use(scope).forkDaemonReportRequestUnexpected)
|
|
29
|
+
)
|
|
30
|
+
)
|
|
29
31
|
)
|
|
30
32
|
}
|
|
31
33
|
|
|
@@ -33,20 +35,22 @@ export function forkOperation<R, E, A>(self: Effect<R, E, A>) {
|
|
|
33
35
|
* @tsplus getter function forkOperation
|
|
34
36
|
*/
|
|
35
37
|
export function forkOperationFunction<R, E, A, Inp>(fnc: (inp: Inp) => Effect<R, E, A>) {
|
|
36
|
-
return (inp: Inp) => fnc(inp).forkOperation
|
|
38
|
+
return (inp: Inp) => Debug.untraced(() => fnc(inp).forkOperation)
|
|
37
39
|
}
|
|
38
40
|
|
|
39
41
|
/**
|
|
40
42
|
* @tsplus static effect/io/Effect.Ops forkOperation
|
|
41
43
|
*/
|
|
42
44
|
export function forkOperation2<R, E, A>(self: (opId: OperationId) => Effect<R, E, A>) {
|
|
43
|
-
return
|
|
44
|
-
Operations
|
|
45
|
-
|
|
46
|
-
.
|
|
47
|
-
|
|
48
|
-
.
|
|
49
|
-
|
|
45
|
+
return Debug.untraced(restore =>
|
|
46
|
+
Operations.accessWithEffect(
|
|
47
|
+
Operations =>
|
|
48
|
+
Scope.make()
|
|
49
|
+
.flatMap(scope =>
|
|
50
|
+
Operations.register.extend(scope)
|
|
51
|
+
.tap(id => restore(self)(id).use(scope).forkDaemonReportRequestUnexpected)
|
|
52
|
+
)
|
|
53
|
+
)
|
|
50
54
|
)
|
|
51
55
|
}
|
|
52
56
|
|
|
@@ -57,13 +61,15 @@ export function forkOperationWithEffect<R, R2, E, E2, A, A2>(
|
|
|
57
61
|
self: (id: OperationId) => Effect<R, E, A>,
|
|
58
62
|
fnc: (id: OperationId) => Effect<R2, E2, A2>
|
|
59
63
|
) {
|
|
60
|
-
return
|
|
61
|
-
Operations
|
|
62
|
-
|
|
63
|
-
.
|
|
64
|
-
|
|
65
|
-
.
|
|
66
|
-
|
|
67
|
-
|
|
64
|
+
return Debug.untraced(restore =>
|
|
65
|
+
Operations.accessWithEffect(
|
|
66
|
+
Operations =>
|
|
67
|
+
Scope.make()
|
|
68
|
+
.flatMap(scope =>
|
|
69
|
+
Operations.register.extend(scope)
|
|
70
|
+
.tap(opId => restore(self)(opId).use(scope).forkDaemonReportRequestUnexpected)
|
|
71
|
+
.tap(opId => restore(fnc)(opId).interruptible.forkScoped.extend(scope))
|
|
72
|
+
)
|
|
73
|
+
)
|
|
68
74
|
)
|
|
69
75
|
}
|
|
@@ -279,8 +279,10 @@ export function queryAndSavePureEffect<
|
|
|
279
279
|
map: Effect<R, E, { filter: Filter<PM>; collect: (t: T) => Option<S>; limit?: number; skip?: number }>
|
|
280
280
|
) {
|
|
281
281
|
return <R2, A, E2, S2 extends T>(pure: Effect<FixEnv<R2, Evt, Chunk<S>, Iterable<S2>>, E2, A>) =>
|
|
282
|
-
|
|
283
|
-
|
|
282
|
+
Debug.untraced(restore =>
|
|
283
|
+
queryEffect(self, map)
|
|
284
|
+
.flatMap(restore(_ => self.saveManyWithPure_(_, pure)))
|
|
285
|
+
)
|
|
284
286
|
}
|
|
285
287
|
|
|
286
288
|
/**
|
|
@@ -411,12 +413,12 @@ function saveAllWithEffectInt<
|
|
|
411
413
|
self: Repository<T, PM, Evt, Id, ItemType>,
|
|
412
414
|
gen: Effect<R, E, readonly [Iterable<P>, Iterable<Evt>, A]>
|
|
413
415
|
) {
|
|
414
|
-
return
|
|
415
|
-
|
|
416
|
-
(
|
|
417
|
-
self.saveAndPublish(items, events)
|
|
418
|
-
|
|
419
|
-
|
|
416
|
+
return Debug.untraced(restore =>
|
|
417
|
+
gen
|
|
418
|
+
.flatMap(
|
|
419
|
+
([items, events, a]) => restore(() => self.saveAndPublish(items, events))().map(() => a)
|
|
420
|
+
)
|
|
421
|
+
)
|
|
420
422
|
}
|
|
421
423
|
|
|
422
424
|
const anyDSL = makeDSL<any, any, any>()
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"defaultErrorHandler.d.ts","sourceRoot":"","sources":["../../_src/api/defaultErrorHandler.ts"],"names":[],"mappings":";AAAA,OAAO,KAAK,OAAO,MAAM,SAAS,CAAA;AAClC,OAAO,KAAK,EACV,iBAAiB,EACjB,aAAa,EACb,gBAAgB,EAChB,8BAA8B,EAC9B,iBAAiB,EACjB,eAAe,EAChB,MAAM,cAAc,CAAA;AACrB,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AAG1D,wBAAgB,wBAAwB,CAAC,CAAC,EACxC,IAAI,EAAE,OAAO,CAAC,OAAO,EACrB,GAAG,EAAE,OAAO,CAAC,QAAQ,EACrB,eAAe,EAAE,cAAc,EAC/B,EAAE,EAAE,MAAM,CAAC,CAAC,EAAE,eAAe,EAAE,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"defaultErrorHandler.d.ts","sourceRoot":"","sources":["../../_src/api/defaultErrorHandler.ts"],"names":[],"mappings":";AAAA,OAAO,KAAK,OAAO,MAAM,SAAS,CAAA;AAClC,OAAO,KAAK,EACV,iBAAiB,EACjB,aAAa,EACb,gBAAgB,EAChB,8BAA8B,EAC9B,iBAAiB,EACjB,eAAe,EAChB,MAAM,cAAc,CAAA;AACrB,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AAG1D,wBAAgB,wBAAwB,CAAC,CAAC,EACxC,IAAI,EAAE,OAAO,CAAC,OAAO,EACrB,GAAG,EAAE,OAAO,CAAC,QAAQ,EACrB,eAAe,EAAE,cAAc,EAC/B,EAAE,EAAE,MAAM,CAAC,CAAC,EAAE,eAAe,EAAE,IAAI,CAAC,uEAkBrC;AAKD,wBAAgB,mBAAmB,CAAC,CAAC,EACnC,GAAG,EAAE,OAAO,CAAC,OAAO,EACpB,GAAG,EAAE,OAAO,CAAC,QAAQ,EACrB,CAAC,EAAE,cAAc,EACjB,EAAE,EAAE,MAAM,CAAC,CAAC,EAAE,eAAe,EAAE,IAAI,CAAC,uEA0CrC;AAED,MAAM,MAAM,eAAe,GACvB,eAAe,GACf,aAAa,GACb,gBAAgB,GAChB,iBAAiB,GACjB,iBAAiB,GACjB,8BAA8B,CAAA"}
|
|
@@ -1,21 +1,22 @@
|
|
|
1
1
|
import * as tsplus_module_1 from "@effect/io/Effect";
|
|
2
2
|
import * as tsplus_module_2 from "@effect/io/Cause";
|
|
3
3
|
import * as tsplus_module_3 from "@effect-app/core/Effect";
|
|
4
|
-
import * as tsplus_module_4 from "@effect/io/
|
|
4
|
+
import * as tsplus_module_4 from "@effect/io/Debug";
|
|
5
|
+
import * as tsplus_module_5 from "@effect/io/Schedule";
|
|
5
6
|
import { logRequestError } from "./reportError.js";
|
|
6
7
|
export function defaultBasicErrorHandler(_req, res, _requestContext, r2) {
|
|
7
|
-
return tsplus_module_1.catchAll(tsplus_module_1.catchTag(tsplus_module_1.tapErrorCause(r2, cause => tsplus_module_2.isFailure(cause) ? logRequestError(cause) : tsplus_module_3.unit), "ValidationError", err => tsplus_module_1.sync(() => {
|
|
8
|
+
return tsplus_module_4.untraced(() => tsplus_module_1.catchAll(tsplus_module_1.catchTag(tsplus_module_1.tapErrorCause(r2, cause => tsplus_module_2.isFailure(cause) ? logRequestError(cause) : tsplus_module_3.unit), "ValidationError", err => tsplus_module_1.sync(() => {
|
|
8
9
|
res.status(400).send(err.errors);
|
|
9
10
|
}))
|
|
10
11
|
// final catch all; expecting never so that unhandled known errors will show up
|
|
11
|
-
, (err) => tsplus_module_1.flatMap(tsplus_module_1.map(tsplus_module_1.logError("Program error, compiler probably silenced, got an unsupported Error in Error Channel of Effect" + err), () => err), tsplus_module_1.die));
|
|
12
|
+
, (err) => tsplus_module_1.flatMap(tsplus_module_1.map(tsplus_module_1.logError("Program error, compiler probably silenced, got an unsupported Error in Error Channel of Effect" + err), () => err), tsplus_module_1.die)));
|
|
12
13
|
}
|
|
13
|
-
const optimisticConcurrencySchedule =
|
|
14
|
+
const optimisticConcurrencySchedule = tsplus_module_5.intersect(tsplus_module_5.recurWhile(a => a._tag === "OptimisticConcurrencyException"))(tsplus_module_5.once());
|
|
14
15
|
export function defaultErrorHandler(req, res, _, r2) {
|
|
15
16
|
const r3 = req.method === "PATCH"
|
|
16
17
|
? tsplus_module_1.retry(r2, optimisticConcurrencySchedule)
|
|
17
18
|
: r2;
|
|
18
|
-
return tsplus_module_1.catchAll(tsplus_module_1.catchTag(tsplus_module_1.catchTag(tsplus_module_1.catchTag(tsplus_module_1.catchTag(tsplus_module_1.catchTag(tsplus_module_1.catchTag(tsplus_module_1.tapErrorCause(r3, cause => tsplus_module_2.isFailure(cause) ? logRequestError(cause) : tsplus_module_3.unit), "ValidationError", err => tsplus_module_1.sync(() => {
|
|
19
|
+
return tsplus_module_4.untraced(() => tsplus_module_1.catchAll(tsplus_module_1.catchTag(tsplus_module_1.catchTag(tsplus_module_1.catchTag(tsplus_module_1.catchTag(tsplus_module_1.catchTag(tsplus_module_1.catchTag(tsplus_module_1.tapErrorCause(r3, cause => tsplus_module_2.isFailure(cause) ? logRequestError(cause) : tsplus_module_3.unit), "ValidationError", err => tsplus_module_1.sync(() => {
|
|
19
20
|
res.status(400).send(err.errors);
|
|
20
21
|
})), "NotFoundError", err => tsplus_module_1.sync(() => {
|
|
21
22
|
res.status(404).send(err);
|
|
@@ -30,6 +31,6 @@ export function defaultErrorHandler(req, res, _, r2) {
|
|
|
30
31
|
res.status(412).send(err);
|
|
31
32
|
}))
|
|
32
33
|
// final catch all; expecting never so that unhandled known errors will show up
|
|
33
|
-
, (err) => tsplus_module_1.flatMap(tsplus_module_1.map(tsplus_module_1.logError("Program error, compiler probably silenced, got an unsupported Error in Error Channel of Effect" + err), () => err), tsplus_module_1.die));
|
|
34
|
+
, (err) => tsplus_module_1.flatMap(tsplus_module_1.map(tsplus_module_1.logError("Program error, compiler probably silenced, got an unsupported Error in Error Channel of Effect" + err), () => err), tsplus_module_1.die)));
|
|
34
35
|
}
|
|
35
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
36
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVmYXVsdEVycm9ySGFuZGxlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL19zcmMvYXBpL2RlZmF1bHRFcnJvckhhbmRsZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFVQSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sa0JBQWtCLENBQUE7QUFFbEQsTUFBTSxVQUFVLHdCQUF3QixDQUN0QyxJQUFxQixFQUNyQixHQUFxQixFQUNyQixlQUErQixFQUMvQixFQUFvQztJQUVwQyxPQUFPLHlCQUFlLEdBQUcsRUFBRSxDQUN6Qix5QkFBQSx5QkFBQSw4QkFBQSxFQUFFLEVBQ2UsS0FBSyxDQUFDLEVBQUUsQ0FBQywwQkFBQSxLQUFLLENBQVksQ0FBQyxDQUFDLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMscUJBQVksQ0FBQyxFQUN2RSxpQkFBaUIsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUNqQyxxQkFBTyxHQUFHLEVBQUU7UUFDVixHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUE7SUFDbEMsQ0FBQyxDQUFDLENBQUM7SUFDTCwrRUFBK0U7TUFDckUsQ0FBQyxHQUFVLEVBQUUsRUFBRSxDQUN2Qix3QkFBQSxvQkFBQSx5QkFDRSxnR0FBZ0csR0FBRyxHQUFHLENBQ3ZHLEVBQ00sR0FBRyxFQUFFLENBQUMsR0FBYyxDQUFDLHNCQUNOLENBQ3ZCLENBQ0osQ0FBQTtBQUNILENBQUM7QUFFRCxNQUFNLDZCQUE2Qiw2QkFDakMsMkJBQXFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxnQ0FBZ0MsQ0FBQyxFQURsRCxzQkFBZSxDQUNtQyxDQUFBO0FBRXhGLE1BQU0sVUFBVSxtQkFBbUIsQ0FDakMsR0FBb0IsRUFDcEIsR0FBcUIsRUFDckIsQ0FBaUIsRUFDakIsRUFBb0M7SUFFcEMsTUFBTSxFQUFFLEdBQUcsR0FBRyxDQUFDLE1BQU0sS0FBSyxPQUFPO1FBQy9CLENBQUMsQ0FBQyxzQkFBQSxFQUFFLEVBQU8sNkJBQTZCLENBQUM7UUFDekMsQ0FBQyxDQUFDLEVBQUUsQ0FBQTtJQUNOLE9BQU8seUJBQWUsR0FBRyxFQUFFLENBQ3pCLHlCQUFBLHlCQUFBLHlCQUFBLHlCQUFBLHlCQUFBLHlCQUFBLHlCQUFBLDhCQUFBLEVBQUUsRUFDZSxLQUFLLENBQUMsRUFBRSxDQUFDLDBCQUFBLEtBQUssQ0FBWSxDQUFDLENBQUMsQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxxQkFBWSxDQUFDLEVBQ3ZFLGlCQUFpQixFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQ2pDLHFCQUFPLEdBQUcsRUFBRTtRQUNWLEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQTtJQUNsQyxDQUFDLENBQUMsQ0FBQyxFQUNLLGVBQWUsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUMvQixxQkFBTyxHQUFHLEVBQUU7UUFDVixHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQTtJQUMzQixDQUFDLENBQUMsQ0FBQyxFQUNLLGtCQUFrQixFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQ2xDLHFCQUFPLEdBQUcsRUFBRTtRQUNWLEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFBO0lBQzNCLENBQUMsQ0FBQyxDQUFDLEVBQ0ssbUJBQW1CLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FDbkMscUJBQU8sR0FBRyxFQUFFO1FBQ1YsR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUE7SUFDM0IsQ0FBQyxDQUFDLENBQUMsRUFDSyxtQkFBbUIsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUNuQyxxQkFBTyxHQUFHLEVBQUU7UUFDVixHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQTtJQUMzQixDQUFDLENBQUMsQ0FBQyxFQUNLLGdDQUFnQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQ2hELHFCQUFPLEdBQUcsRUFBRTtRQUNWLDRJQUE0STtRQUM1SSxHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQTtJQUMzQixDQUFDLENBQUMsQ0FBQztJQUNMLCtFQUErRTtNQUNyRSxDQUFDLEdBQVUsRUFBRSxFQUFFLENBQ3ZCLHdCQUFBLG9CQUFBLHlCQUNFLGdHQUFnRyxHQUFHLEdBQUcsQ0FDdkcsRUFDTSxHQUFHLEVBQUUsQ0FBQyxHQUFjLENBQUMsc0JBQ04sQ0FDdkIsQ0FDSixDQUFBO0FBQ0gsQ0FBQyJ9
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reportError.d.ts","sourceRoot":"","sources":["../../_src/api/reportError.ts"],"names":[],"mappings":";;AACA,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAA;AAC7C,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AAErD,qBAAa,gBAAgB,CAAC,CAAC,CAAE,SAAQ,cAAc,CAAC,CAAC,CAAC;gBAC5C,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC;CAG5B;AACD,eAAO,MAAM,mBAAmB,6JAAoD,CAAA;AAEpF,eAAO,MAAM,kBAAkB,UAAW,MAAM,OAAO,CAAC,YAAY,OAAO,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,
|
|
1
|
+
{"version":3,"file":"reportError.d.ts","sourceRoot":"","sources":["../../_src/api/reportError.ts"],"names":[],"mappings":";;AACA,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAA;AAC7C,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AAErD,qBAAa,gBAAgB,CAAC,CAAC,CAAE,SAAQ,cAAc,CAAC,CAAC,CAAC;gBAC5C,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC;CAG5B;AACD,eAAO,MAAM,mBAAmB,6JAAoD,CAAA;AAEpF,eAAO,MAAM,kBAAkB,UAAW,MAAM,OAAO,CAAC,YAAY,OAAO,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,oEAGpG,CAAA;AAEH,eAAO,MAAM,gBAAgB,6JAAiD,CAAA;AAE9E,eAAO,MAAM,eAAe,UAAW,MAAM,OAAO,CAAC,YAAY,OAAO,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,oEAGjG,CAAA;;;;;;;;;;AAWH,wBAAgB,uBAAuB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,gHAKrE;;;;;;;;;;AAWD,wBAAgB,iCAAiC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,gHAS/E"}
|
package/dist/api/reportError.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import * as tsplus_module_1 from "@effect-app/infra/RequestContext";
|
|
2
2
|
import * as tsplus_module_2 from "@effect/io/Effect";
|
|
3
|
-
import * as tsplus_module_3 from "@effect/io/
|
|
3
|
+
import * as tsplus_module_3 from "@effect/io/Debug";
|
|
4
|
+
import * as tsplus_module_4 from "@effect/io/Cause";
|
|
4
5
|
import { logError, reportError } from "../errorReporter.js";
|
|
5
6
|
import { CauseException } from "../errors.js";
|
|
6
7
|
import "../RequestContext.js";
|
|
@@ -10,9 +11,9 @@ export class RequestException extends CauseException {
|
|
|
10
11
|
}
|
|
11
12
|
}
|
|
12
13
|
export const reportRequestError_ = reportError(cause => new RequestException(cause));
|
|
13
|
-
export const reportRequestError = (cause, context) => tsplus_module_2.serviceWithEffect(tsplus_module_1.tag, requestContext => reportRequestError_(cause, { requestContext, ...context }));
|
|
14
|
+
export const reportRequestError = (cause, context) => tsplus_module_3.untraced(() => tsplus_module_2.serviceWithEffect(tsplus_module_1.tag, requestContext => reportRequestError_(cause, { requestContext, ...context })));
|
|
14
15
|
export const logRequestError_ = logError(cause => new RequestException(cause));
|
|
15
|
-
export const logRequestError = (cause, context) => tsplus_module_2.serviceWithEffect(tsplus_module_1.tag, requestContext => logRequestError_(cause, { requestContext, ...context }));
|
|
16
|
+
export const logRequestError = (cause, context) => tsplus_module_3.untraced(() => tsplus_module_2.serviceWithEffect(tsplus_module_1.tag, requestContext => logRequestError_(cause, { requestContext, ...context })));
|
|
16
17
|
/**
|
|
17
18
|
* Forks the effect into a new fiber attached to the global scope. Because the
|
|
18
19
|
* new fiber is attached to the global scope, when the fiber executing the
|
|
@@ -23,7 +24,7 @@ export const logRequestError = (cause, context) => tsplus_module_2.serviceWithEf
|
|
|
23
24
|
* @tsplus getter effect/io/Effect forkDaemonReportRequest
|
|
24
25
|
*/
|
|
25
26
|
export function forkDaemonReportRequest(self) {
|
|
26
|
-
return tsplus_module_2.daemonChildren(tsplus_module_2.fork(tsplus_module_2.tapErrorCause(self, reportRequestError)));
|
|
27
|
+
return tsplus_module_3.untraced(() => tsplus_module_2.daemonChildren(tsplus_module_2.fork(tsplus_module_2.tapErrorCause(self, reportRequestError))));
|
|
27
28
|
}
|
|
28
29
|
/**
|
|
29
30
|
* Forks the effect into a new fiber attached to the global scope. Because the
|
|
@@ -35,8 +36,8 @@ export function forkDaemonReportRequest(self) {
|
|
|
35
36
|
* @tsplus getter effect/io/Effect forkDaemonReportRequestUnexpected
|
|
36
37
|
*/
|
|
37
38
|
export function forkDaemonReportRequestUnexpected(self) {
|
|
38
|
-
return tsplus_module_2.daemonChildren(tsplus_module_2.fork(tsplus_module_2.tapErrorCause(self, cause =>
|
|
39
|
+
return tsplus_module_3.untraced(() => tsplus_module_2.daemonChildren(tsplus_module_2.fork(tsplus_module_2.tapErrorCause(self, cause => tsplus_module_4.isInterruptedOnly(cause) || tsplus_module_4.isDie(cause)
|
|
39
40
|
? reportRequestError(cause)
|
|
40
|
-
: logRequestError(cause))));
|
|
41
|
+
: logRequestError(cause)))));
|
|
41
42
|
}
|
|
42
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
43
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVwb3J0RXJyb3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9fc3JjL2FwaS9yZXBvcnRFcnJvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxXQUFXLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQTtBQUMzRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sY0FBYyxDQUFBO0FBQzdDLE9BQStCLHNCQUFzQixDQUFBO0FBRXJELE1BQU0sT0FBTyxnQkFBb0IsU0FBUSxjQUFpQjtJQUN4RCxZQUFZLEtBQWU7UUFDekIsS0FBSyxDQUFDLEtBQUssRUFBRSxTQUFTLENBQUMsQ0FBQTtJQUN6QixDQUFDO0NBQ0Y7QUFDRCxNQUFNLENBQUMsTUFBTSxtQkFBbUIsR0FBRyxXQUFXLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxJQUFJLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUE7QUFFcEYsTUFBTSxDQUFDLE1BQU0sa0JBQWtCLEdBQUcsQ0FBQyxLQUFxQixFQUFFLE9BQTZDLEVBQUUsRUFBRSxDQUN6Ryx5QkFBZSxHQUFHLEVBQUUsQ0FDbEIsdURBQW9DLGNBQWMsQ0FBQyxFQUFFLENBQUMsbUJBQW1CLENBQUMsS0FBSyxFQUFFLEVBQUUsY0FBYyxFQUFFLEdBQUcsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUNsSCxDQUFBO0FBRUgsTUFBTSxDQUFDLE1BQU0sZ0JBQWdCLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsSUFBSSxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFBO0FBRTlFLE1BQU0sQ0FBQyxNQUFNLGVBQWUsR0FBRyxDQUFDLEtBQXFCLEVBQUUsT0FBNkMsRUFBRSxFQUFFLENBQ3RHLHlCQUFlLEdBQUcsRUFBRSxDQUNsQix1REFBb0MsY0FBYyxDQUFDLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLEVBQUUsRUFBRSxjQUFjLEVBQUUsR0FBRyxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQy9HLENBQUE7QUFFSDs7Ozs7Ozs7R0FRRztBQUNILE1BQU0sVUFBVSx1QkFBdUIsQ0FBVSxJQUFxQjtJQUNwRSxPQUFPLHlCQUFlLEdBQUcsRUFBRSxxREFDekIsOEJBQUEsSUFBSSxFQUFlLGtCQUFrQixDQUFDLEVBQ2hCLENBQ3ZCLENBQUE7QUFDSCxDQUFDO0FBRUQ7Ozs7Ozs7O0dBUUc7QUFDSCxNQUFNLFVBQVUsaUNBQWlDLENBQVUsSUFBcUI7SUFDOUUsT0FBTyx5QkFBZSxHQUFHLEVBQUUscURBQ3pCLDhCQUFBLElBQUksRUFBZSxLQUFLLENBQUMsRUFBRSxDQUN6QixrQ0FBQSxLQUFLLENBQW9CLElBQUksc0JBQUEsS0FBSyxDQUFRO1FBQ3hDLENBQUMsQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLENBQUM7UUFDM0IsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsQ0FDM0IsRUFDcUIsQ0FDdkIsQ0FBQTtBQUNILENBQUMifQ==
|
package/dist/api/routing.d.ts
CHANGED
|
@@ -94,7 +94,7 @@ export interface ReqHandler<Req, R, E, Res, ReqSchema extends MO.SchemaAny, ResS
|
|
|
94
94
|
* })
|
|
95
95
|
* ```
|
|
96
96
|
*/
|
|
97
|
-
export declare function matchResource<TModules extends Record<string, Record<string, any>>>(mod: TModules): <THandlers extends { [K in keyof TModules]: (req: InstanceType<GetRequest<TModules[K]> extends infer T ? T extends GetRequest<TModules[K]> ? T extends new (...args: any[]) => any ? T : never : never : never>) => import("@effect/io/Effect").Effect<any, SupportedErrors, MO.ParsedShapeOf<Extr<GetResponse<TModules[K]>>>>; }>(handlers: THandlers) => { [K_1 in keyof TModules]: ReqHandler<InstanceType<GetRequest<TModules[K_1]> extends infer
|
|
97
|
+
export declare function matchResource<TModules extends Record<string, Record<string, any>>>(mod: TModules): <THandlers extends { [K in keyof TModules]: (req: InstanceType<GetRequest<TModules[K]> extends infer T ? T extends GetRequest<TModules[K]> ? T extends new (...args: any[]) => any ? T : never : never : never>) => import("@effect/io/Effect").Effect<any, SupportedErrors, MO.ParsedShapeOf<Extr<GetResponse<TModules[K]>>>>; }>(handlers: THandlers) => { [K_1 in keyof TModules]: ReqHandler<InstanceType<GetRequest<TModules[K_1]> extends infer T ? T extends GetRequest<TModules[K_1]> ? T extends new (...args: any[]) => any ? T : never : never : never>, _R<ReturnType<THandlers[K_1]>>, _E<ReturnType<THandlers[K_1]>>, MO.ParsedShapeOf<Extr<GetResponse<TModules[K_1]>>>, GetRequest<TModules[K_1]>, GetResponse<TModules[K_1]>, any>; };
|
|
98
98
|
export type ReqFromSchema<ReqSchema> = InstanceType<ReqSchema extends {
|
|
99
99
|
new (...args: any[]): any;
|
|
100
100
|
} ? ReqSchema : never>;
|