@effect-app/infra 0.17.0 → 0.17.2

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.
Files changed (41) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/_cjs/api/routing.cjs +70 -64
  3. package/_cjs/api/routing.cjs.map +1 -1
  4. package/_cjs/api/setupRequest.cjs +22 -4
  5. package/_cjs/api/setupRequest.cjs.map +1 -1
  6. package/_cjs/services/QueueMaker/errors.cjs +54 -0
  7. package/_cjs/services/QueueMaker/errors.cjs.map +1 -0
  8. package/_cjs/services/QueueMaker/memQueue.cjs +79 -0
  9. package/_cjs/services/QueueMaker/memQueue.cjs.map +1 -0
  10. package/_cjs/services/QueueMaker/sbqueue.cjs +80 -0
  11. package/_cjs/services/QueueMaker/sbqueue.cjs.map +1 -0
  12. package/_cjs/services/QueueMaker/service.cjs +9 -0
  13. package/_cjs/services/QueueMaker/service.cjs.map +1 -0
  14. package/_src/_global.ext.ts +4 -0
  15. package/_src/api/routing.ts +36 -29
  16. package/_src/api/setupRequest.ts +19 -0
  17. package/_src/services/QueueMaker/errors.ts +48 -0
  18. package/_src/services/QueueMaker/memQueue.ts +102 -0
  19. package/_src/services/QueueMaker/sbqueue.ts +118 -0
  20. package/_src/services/QueueMaker/service.ts +14 -0
  21. package/dist/_global.ext.d.ts +4 -0
  22. package/dist/_global.ext.d.ts.map +1 -1
  23. package/dist/api/routing.d.ts +4 -1
  24. package/dist/api/routing.d.ts.map +1 -1
  25. package/dist/api/routing.js +73 -71
  26. package/dist/api/setupRequest.d.ts +5 -0
  27. package/dist/api/setupRequest.d.ts.map +1 -1
  28. package/dist/api/setupRequest.js +20 -3
  29. package/dist/services/QueueMaker/errors.d.ts +24 -0
  30. package/dist/services/QueueMaker/errors.d.ts.map +1 -0
  31. package/dist/services/QueueMaker/errors.js +37 -0
  32. package/dist/services/QueueMaker/memQueue.d.ts +25 -0
  33. package/dist/services/QueueMaker/memQueue.d.ts.map +1 -0
  34. package/dist/services/QueueMaker/memQueue.js +60 -0
  35. package/dist/services/QueueMaker/sbqueue.d.ts +31 -0
  36. package/dist/services/QueueMaker/sbqueue.d.ts.map +1 -0
  37. package/dist/services/QueueMaker/sbqueue.js +61 -0
  38. package/dist/services/QueueMaker/service.d.ts +15 -0
  39. package/dist/services/QueueMaker/service.d.ts.map +1 -0
  40. package/dist/services/QueueMaker/service.js +2 -0
  41. package/package.json +43 -2
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sbqueue.cjs","mappings":"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","names":["makeServiceBusQueue","_queueName","queueDrainName","encoder","makeHandleEvent","provideContext","parseDrain","tsplus_module_1","$","s","Sender","receiver","Receiver","receiverLayer","tsplus_module_2","drain","handleEvent","processMessage","messageBody","tsplus_module_6","JSON","parse","x","report","body","meta","RequestContext","inherit","id","locale","name","tsplus_module_5","_tag","tsplus_module_4","processError","err","error","publish","messages","requestContext","sendMessages","map","stringify","messageId","contentType","makeServiceBusLayers","url","queueName","tsplus_module_9","cause"],"sourceRoot":"","sources":["../../../_src/services/QueueMaker/sbqueue.ts"],"sourcesContent":[null]}
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.QueueMaker = void 0;
7
+ const QueueMaker = {};
8
+ exports.QueueMaker = QueueMaker;
9
+ //# sourceMappingURL=service.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"service.cjs","mappings":";;;;;;AAaO,MAAMA,UAAU,GAAkB,EAAE;AAAA","names":["QueueMaker"],"sourceRoot":"","sources":["../../../_src/services/QueueMaker/service.ts"],"sourcesContent":[null]}
@@ -10,6 +10,10 @@ import type {} from "@effect-app/infra/services/Emailer/Sendgrid"
10
10
  * @tsplus global
11
11
  */
12
12
  import type {} from "@effect-app/infra/services/Operations/live"
13
+ /**
14
+ * @tsplus global
15
+ */
16
+ import type {} from "@effect-app/infra/services/QueueMaker/errors"
13
17
  /**
14
18
  * @tsplus global
15
19
  */
@@ -15,7 +15,11 @@ import { parseRequestParams } from "./express/schema/requestHandler.js"
15
15
  import type { RouteDescriptorAny } from "./express/schema/routing.js"
16
16
  import { makeRouteDescriptor } from "./express/schema/routing.js"
17
17
  import { reportRequestError } from "./reportError.js"
18
- import { snipString, snipValue } from "./util.js"
18
+ import { snipString } from "./util.js"
19
+
20
+ export const RequestSettings = FiberRef.unsafeMake({
21
+ verbose: false
22
+ })
19
23
 
20
24
  export function makeRequestParsers<
21
25
  R,
@@ -247,20 +251,8 @@ export function makeRequestHandler<
247
251
  path: req.params,
248
252
  query: req.query,
249
253
  body: req.body,
250
- headers: req.headers
251
- ? Object.entries(req.headers).reduce((prev, [key, value]) => {
252
- prev[key] = snipValue(value)
253
- return prev
254
- }, {} as Record<string, any>)
255
- : req.headers,
254
+ headers: req.headers,
256
255
  cookies: req.cookies
257
- ? Object.entries(req.cookies).reduce((prev, [key, value]) => {
258
- prev[key] = typeof value === "string" || Array.isArray(value)
259
- ? snipValue(value)
260
- : value
261
- return prev
262
- }, {} as Record<string, any>)
263
- : req.cookies
264
256
  }))
265
257
  }
266
258
 
@@ -314,15 +306,23 @@ export function makeRequestHandler<
314
306
  pars: getParams(req)
315
307
  })
316
308
  .flatMap(({ pars, requestContext }) =>
317
- Effect.logInfo("Processing request").apply(Effect.logAnnotates({
318
- method: req.method,
319
- path: req.originalUrl,
320
- reqPath: pars.path.$$.pretty,
321
- reqQuery: pars.query.$$.pretty,
322
- reqBody: pretty(pars.body),
323
- reqCookies: pretty(pars.cookies),
324
- reqHeaders: pars.headers.$$.pretty
325
- })).zipRight(
309
+ RequestSettings.get.flatMap(s =>
310
+ Effect.logInfo("Processing request").apply(
311
+ Effect.logAnnotates({
312
+ method: req.method,
313
+ path: req.originalUrl,
314
+ ...s.verbose
315
+ ? {
316
+ reqPath: pars.path.$$.pretty,
317
+ reqQuery: pars.query.$$.pretty,
318
+ reqBody: pretty(pars.body),
319
+ reqCookies: pretty(pars.cookies),
320
+ reqHeaders: pars.headers.$$.pretty
321
+ } :
322
+ undefined
323
+ })
324
+ )
325
+ ).zipRight(
326
326
  Effect.suspendSucceed(() => {
327
327
  const handleRequest = parseRequest(req)
328
328
  .map(({ body, path, query }) => {
@@ -370,6 +370,13 @@ export function makeRequestHandler<
370
370
  method: req.method,
371
371
  path: req.originalUrl,
372
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
+
373
380
  resHeaders: Object.entries(headers).reduce((prev, [key, value]) => {
374
381
  prev[key] = value && typeof value === "string" ? snipString(value) : value
375
382
  return prev
@@ -381,17 +388,17 @@ export function makeRequestHandler<
381
388
  .tapErrorCause(cause => Effect(() => console.error("Error occurred while reporting error", cause)))
382
389
  )
383
390
  .tap(() =>
384
- Effect.suspendSucceed(() => {
391
+ RequestSettings.get.map(s => {
385
392
  const headers = res.getHeaders()
386
393
  return Effect.logInfo("Processed request").apply(Effect.logAnnotates({
387
394
  method: req.method,
388
395
  path: req.originalUrl,
389
396
  statusCode: res.statusCode.toString(),
390
- resHeaders: Object.entries(headers).reduce((prev, [key, value]) => {
391
- prev[key] = value && typeof value === "string" ? snipString(value) : value
392
- return prev
393
- }, {} as Record<string, any>)
394
- .$$.pretty
397
+ ...s.verbose
398
+ ? {
399
+ resHeaders: headers.$$.pretty
400
+ } :
401
+ undefined
395
402
  }))
396
403
  })
397
404
  )
@@ -20,3 +20,22 @@ export function setupRequest<R, E, A>(self: Effect<R, E, A>, requestContext: Req
20
20
  export function setupRequestFrom<R, E, A>(self: Effect<R, E, A>) {
21
21
  return RequestContext.Tag.accessWithEffect(requestContext => self.setupRequest(requestContext))
22
22
  }
23
+
24
+ /**
25
+ * @tsplus fluent effect/io/Effect setupRequestFromWith
26
+ */
27
+ export function setupReq3<R, E, A>(self: Effect<R, E, A>, name: string) {
28
+ return self
29
+ .setupRequestFrom
30
+ .provideService(RequestContext.Tag, makeInternalRequestContext(name))
31
+ }
32
+
33
+ function makeInternalRequestContext(name: string) {
34
+ const id = StringId.make()
35
+ return new RequestContext({
36
+ id,
37
+ rootId: id,
38
+ locale: "en",
39
+ name: ReasonableString(name)
40
+ })
41
+ }
@@ -0,0 +1,48 @@
1
+ import { reportError } from "@effect-app/infra/errorReporter"
2
+ import { CauseException } from "@effect-app/infra/errors"
3
+ import { RequestContext } from "@effect-app/infra/RequestContext"
4
+
5
+ export class MessageException<E> extends CauseException<E> {
6
+ constructor(cause: Cause<E>) {
7
+ super(cause, "Message")
8
+ }
9
+ }
10
+
11
+ export class FatalQueueException<E> extends CauseException<E> {
12
+ constructor(cause: Cause<E>) {
13
+ super(cause, "Message")
14
+ }
15
+ }
16
+
17
+ const reportQueueError_ = reportError(cause => new MessageException(cause))
18
+
19
+ export const reportQueueError = (cause: Cause<unknown>, context?: Record<string, unknown> | undefined) =>
20
+ RequestContext.Tag.accessWithEffect(requestContext =>
21
+ Effect(reportQueueError_(cause, { requestContext, ...context }))
22
+ )
23
+
24
+ /**
25
+ * Forks the effect into a new fiber attached to the global scope. Because the
26
+ * new fiber is attached to the global scope, when the fiber executing the
27
+ * returned effect terminates, the forked fiber will continue running.
28
+ *
29
+ * Reports errors.
30
+ *
31
+ * @tsplus getter effect/io/Effect forkDaemonReportQueue
32
+ */
33
+ export function forkDaemonReportQueue<R, E, A>(self: Effect<R, E, A>) {
34
+ return self.tapErrorCause(reportQueueError).fork.daemonChildren
35
+ }
36
+
37
+ export const reportFatalQueueError = reportError(
38
+ cause => new FatalQueueException(cause)
39
+ )
40
+
41
+ export function reportFailure(name: string) {
42
+ return <R, E, A>(self: Effect<R, E, A>) =>
43
+ self.exit.tap(exit =>
44
+ exit._tag === "Failure"
45
+ ? reportFatalQueueError(exit.cause, { name })
46
+ : Effect.unit
47
+ )
48
+ }
@@ -0,0 +1,102 @@
1
+ import { MemQueue } from "@effect-app/infra-adapters/memQueue"
2
+ import { RequestContext } from "@effect-app/infra/RequestContext"
3
+ import type { CustomSchemaException } from "@effect-app/prelude/schema"
4
+ import { reportFailure, reportQueueError } from "./errors.js"
5
+ import type { QueueBase } from "./service.js"
6
+
7
+ /**
8
+ * @tsplus static QueueMaker.Ops makeMem
9
+ */
10
+ export function makeMemQueue<DrainR, Evt, DrainEvt extends { id: StringId; _tag: string }, RContext, EvtE, DrainE>(
11
+ queueName: string,
12
+ queueDrainName: string,
13
+ encoder: (e: { body: Evt; meta: RequestContext }) => EvtE,
14
+ makeHandleEvent: Effect<DrainR, never, (ks: DrainEvt) => Effect<RContext, DrainE, void>>,
15
+ provideContext: (context: RequestContext) => <R, E, A>(
16
+ eff: Effect<RContext | R, E, A>
17
+ ) => Effect<Exclude<R, RContext>, E, A>,
18
+ parseDrain: (
19
+ a: unknown,
20
+ env?: Parser.ParserEnv | undefined
21
+ ) => Effect<never, CustomSchemaException, { body: DrainEvt; meta: RequestContext }>
22
+ ) {
23
+ return Effect.gen(function*($) {
24
+ const mem = yield* $(MemQueue.access)
25
+ const q = yield* $(mem.getOrCreateQueue(queueName))
26
+ const qReply = yield* $(mem.getOrCreateQueue(queueDrainName))
27
+
28
+ return {
29
+ publish: (...messages) =>
30
+ Effect.gen(function*($) {
31
+ const requestContext = yield* $(RequestContext.Tag.access)
32
+ return yield* $(
33
+ messages.forEachEffect(m =>
34
+ // we JSON encode, because that is what the wire also does, and it reveals holes in e.g unknown encoders (Date->String)
35
+ Effect(() =>
36
+ JSON.stringify(
37
+ encoder({ body: m, meta: requestContext })
38
+ )
39
+ )
40
+ // .tap((msg) => info("Publishing Mem Message: " + utils.inspect(msg)))
41
+ .flatMap(_ => q.offer(_))
42
+ .asUnit
43
+ )
44
+ .forkDaemonReportQueue
45
+ )
46
+ }),
47
+ drain: Effect.gen(function*($) {
48
+ const handleEvent = yield* $(makeHandleEvent)
49
+ const processMessage = (msg: string) =>
50
+ // we JSON parse, because that is what the wire also does, and it reveals holes in e.g unknown encoders (Date->String)
51
+ Effect(() => JSON.parse(msg))
52
+ .flatMap(parseDrain)
53
+ .orDie
54
+ .flatMap(({ body, meta }) =>
55
+ Effect
56
+ .logDebug(`$$ [${queueDrainName}] Processing incoming message`)
57
+ .apply(Effect.logAnnotates({ body: body.$$.pretty, meta: meta.$$.pretty }))
58
+ .zipRight(silence(handleEvent(body)))
59
+ .apply(
60
+ provideContext(
61
+ RequestContext.inherit(meta, {
62
+ id: body.id,
63
+ locale: "en" as const,
64
+ name: ReasonableString(body._tag)
65
+ })
66
+ )
67
+ )
68
+ )
69
+ return yield* $(
70
+ qReply.take()
71
+ .flatMap(x => processMessage(x).uninterruptible)
72
+ .forever
73
+ .apply(reportFailure("drain"))
74
+ .setupRequestFromWith("Queue.ReceiveMessage")
75
+ .forkScoped
76
+ )
77
+ })
78
+ } satisfies QueueBase<DrainR, Evt>
79
+ })
80
+ }
81
+
82
+ // We want the Queue to continue processing even on errors per messages
83
+ // must make sure that the errors are processed/handled beforehand.
84
+ export function silence<R, E, A>(inp: Effect<R, E, A>) {
85
+ return inp.exit.flatMap(result =>
86
+ Effect.gen(function*($) {
87
+ const requestContext = yield* $(RequestContext.Tag.access)
88
+ return yield* $(
89
+ result.match(
90
+ cause => {
91
+ if (cause.isInterrupted()) {
92
+ return (cause as Cause<never>).failCause
93
+ }
94
+ reportQueueError(cause, { requestContext })
95
+ return Effect.unit
96
+ },
97
+ () => Effect.unit
98
+ )
99
+ )
100
+ })
101
+ )
102
+ }
@@ -0,0 +1,118 @@
1
+ import {
2
+ LiveReceiver,
3
+ LiveSender,
4
+ LiveServiceBusClient,
5
+ Receiver,
6
+ Sender,
7
+ subscribe
8
+ } from "@effect-app/infra-adapters/ServiceBus"
9
+ import type {} from "@azure/service-bus"
10
+ import { captureException } from "@effect-app/infra/errorReporter"
11
+ import { RequestContext } from "@effect-app/infra/RequestContext"
12
+ import type { CustomSchemaException } from "@effect-app/prelude/schema"
13
+ import { reportQueueError } from "./errors.js"
14
+ import type { QueueBase } from "./service.js"
15
+
16
+ /**
17
+ * @tsplus static QueueMaker.Ops makeServiceBus
18
+ */
19
+ export function makeServiceBusQueue<
20
+ DrainR,
21
+ Evt extends { id: StringId; _tag: string },
22
+ DrainEvt extends { id: StringId; _tag: string },
23
+ RContext,
24
+ EvtE,
25
+ DrainE
26
+ >(
27
+ _queueName: string,
28
+ queueDrainName: string,
29
+ encoder: (e: { body: Evt; meta: RequestContext }) => EvtE,
30
+ makeHandleEvent: Effect<DrainR, never, (ks: DrainEvt) => Effect<RContext, DrainE, void>>,
31
+ provideContext: (context: RequestContext) => <R, E, A>(
32
+ eff: Effect<RContext | R, E, A>
33
+ ) => Effect<Exclude<R, RContext>, E, A>,
34
+ parseDrain: (
35
+ a: unknown,
36
+ env?: Parser.ParserEnv | undefined
37
+ ) => Effect<never, CustomSchemaException, { body: DrainEvt; meta: RequestContext }>
38
+ ) {
39
+ return Effect.gen(function*($) {
40
+ const s = yield* $(Sender.access)
41
+ const receiver = yield* $(Receiver.access)
42
+ const receiverLayer = Receiver.makeLayer(receiver)
43
+
44
+ return {
45
+ drain: Effect.gen(function*($) {
46
+ const handleEvent = yield* $(makeHandleEvent)
47
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
48
+ function processMessage(messageBody: any) {
49
+ return Effect.sync(() => JSON.parse(messageBody))
50
+ .flatMap(x => parseDrain(x))
51
+ .orDie
52
+ .tapErrorCause(report)
53
+ .flatMap(({ body, meta }) =>
54
+ Effect
55
+ .logDebug(`$$ [${queueDrainName}] Processing incoming message`)
56
+ .apply(Effect.logAnnotates({ body: body.$$.pretty, meta: meta.$$.pretty }))
57
+ .zipRight(handleEvent(body))
58
+ .tapErrorCause(report)
59
+ .apply(
60
+ provideContext(
61
+ RequestContext.inherit(meta, {
62
+ id: body.id,
63
+ locale: "en" as const,
64
+ name: ReasonableString(body._tag)
65
+ })
66
+ )
67
+ )
68
+ )
69
+ .setupRequestFromWith("Queue.ReceiveMessage")
70
+ .orDie
71
+ .asUnit
72
+ }
73
+
74
+ return yield* $(
75
+ subscribe({
76
+ processMessage: x => processMessage(x.body).uninterruptible,
77
+ processError: err => Effect(captureException(err.error))
78
+ })
79
+ .provideSomeLayer(receiverLayer)
80
+ )
81
+ }),
82
+
83
+ publish: (...messages) =>
84
+ Effect.gen(function*($) {
85
+ const requestContext = yield* $(RequestContext.Tag.access)
86
+ return yield* $(
87
+ Effect.promise(() =>
88
+ s.sendMessages(
89
+ messages.map(x => ({
90
+ body: JSON.stringify(
91
+ encoder({ body: x, meta: requestContext })
92
+ ),
93
+ messageId: x.id, /* correllationid: requestId */
94
+ contentType: "application/json"
95
+ }))
96
+ )
97
+ )
98
+ .forkDaemonReportQueue
99
+ )
100
+ })
101
+ } satisfies QueueBase<DrainR, Evt>
102
+ })
103
+ }
104
+
105
+ /**
106
+ * @tsplus static QueueMaker.Ops makeServiceBusLayers
107
+ */
108
+ export function makeServiceBusLayers(url: string, queueName: string, queueDrainName: string) {
109
+ return LiveServiceBusClient(url)
110
+ >> (LiveReceiver(queueDrainName) + LiveSender(queueName))
111
+ }
112
+
113
+ function report<E>(cause: Cause<E>) {
114
+ return Effect.gen(function*($) {
115
+ const requestContext = yield* $(RequestContext.Tag.access)
116
+ return reportQueueError(cause, { requestContext })
117
+ })
118
+ }
@@ -0,0 +1,14 @@
1
+ import type { RequestContext } from "@effect-app/infra/RequestContext"
2
+
3
+ export interface QueueBase<RContext, Evt> {
4
+ drain: Effect<Scope | RContext, never, void>
5
+ publish: (
6
+ ...messages: NonEmptyReadonlyArray<Evt>
7
+ ) => Effect<RequestContext, never, void>
8
+ }
9
+
10
+ /**
11
+ * @tsplus type QueueMaker.Ops
12
+ */
13
+ export interface QueueMakerOps {}
14
+ export const QueueMaker: QueueMakerOps = {}
@@ -10,6 +10,10 @@ import type {} from "@effect-app/infra/services/Emailer/Sendgrid";
10
10
  * @tsplus global
11
11
  */
12
12
  import type {} from "@effect-app/infra/services/Operations/live";
13
+ /**
14
+ * @tsplus global
15
+ */
16
+ import type {} from "@effect-app/infra/services/QueueMaker/errors";
13
17
  /**
14
18
  * @tsplus global
15
19
  */
@@ -1 +1 @@
1
- {"version":3,"file":"_global.ext.d.ts","sourceRoot":"","sources":["../_src/_global.ext.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,EAAE,MAAM,yCAAyC,CAAA;AAC7D;;GAEG;AACH,OAAO,KAAK,EAAE,MAAM,6CAA6C,CAAA;AACjE;;GAEG;AACH,OAAO,KAAK,EAAE,MAAM,4CAA4C,CAAA;AAChE;;GAEG;AACH,OAAO,KAAK,EAAE,MAAM,6BAA6B,CAAA;AACjD;;GAEG;AACH,OAAO,KAAK,EAAE,MAAM,8BAA8B,CAAA;AAClD;;GAEG;AACH,OAAO,KAAK,EAAE,MAAM,8BAA8B,CAAA;AAClD;;GAEG;AACH,OAAO,KAAK,EAAE,MAAM,6BAA6B,CAAA;AAEjD;;GAEG;AACH,OAAO,KAAK,EAAE,MAAM,oCAAoC,CAAA;AAExD;;GAEG;AACH,OAAO,EAAE,MAAM,mCAAmC,CAAA"}
1
+ {"version":3,"file":"_global.ext.d.ts","sourceRoot":"","sources":["../_src/_global.ext.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,EAAE,MAAM,yCAAyC,CAAA;AAC7D;;GAEG;AACH,OAAO,KAAK,EAAE,MAAM,6CAA6C,CAAA;AACjE;;GAEG;AACH,OAAO,KAAK,EAAE,MAAM,4CAA4C,CAAA;AAChE;;GAEG;AACH,OAAO,KAAK,EAAE,MAAM,8CAA8C,CAAA;AAClE;;GAEG;AACH,OAAO,KAAK,EAAE,MAAM,6BAA6B,CAAA;AACjD;;GAEG;AACH,OAAO,KAAK,EAAE,MAAM,8BAA8B,CAAA;AAClD;;GAEG;AACH,OAAO,KAAK,EAAE,MAAM,8BAA8B,CAAA;AAClD;;GAEG;AACH,OAAO,KAAK,EAAE,MAAM,6BAA6B,CAAA;AAEjD;;GAEG;AACH,OAAO,KAAK,EAAE,MAAM,oCAAoC,CAAA;AAExD;;GAEG;AACH,OAAO,EAAE,MAAM,mCAAmC,CAAA"}
@@ -11,6 +11,9 @@ import { RequestContext } from "../RequestContext.js";
11
11
  import type { SupportedErrors } from "./defaultErrorHandler.js";
12
12
  import type { Encode, RequestHandler, RequestHandlerOptRes, RequestParsers } from "./express/schema/requestHandler.js";
13
13
  import type { RouteDescriptorAny } from "./express/schema/routing.js";
14
+ export declare const RequestSettings: import("@effect/io/FiberRef").FiberRef<{
15
+ verbose: boolean;
16
+ }>;
14
17
  export declare function makeRequestParsers<R, PathA, CookieA, QueryA, BodyA, HeaderA, ReqA extends PathA & QueryA & BodyA, ResA, Errors>(Request: RequestHandler<R, PathA, CookieA, QueryA, BodyA, HeaderA, ReqA, ResA, Errors>["Request"]): RequestParsers<PathA, CookieA, QueryA, BodyA, HeaderA>;
15
18
  export type MakeMiddlewareContext<ResE, R2 = never, PR = never> = (req: express.Request, res: express.Response, context: RequestContext) => Effect<R2, ResE, Context<PR>>;
16
19
  export type Middleware<R, PathA, CookieA, QueryA, BodyA, HeaderA, ReqA extends PathA & QueryA & BodyA, ResA, ResE, R2 = never, PR = never> = (handler: RequestHandler<R, PathA, CookieA, QueryA, BodyA, HeaderA, ReqA, ResA, ResE>) => {
@@ -91,7 +94,7 @@ export interface ReqHandler<Req, R, E, Res, ReqSchema extends MO.SchemaAny, ResS
91
94
  * })
92
95
  * ```
93
96
  */
94
- 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_1 ? T_1 extends GetRequest<TModules[K_1]> ? T_1 extends new (...args: any[]) => any ? T_1 : 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>; };
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>; };
95
98
  export type ReqFromSchema<ReqSchema> = InstanceType<ReqSchema extends {
96
99
  new (...args: any[]): any;
97
100
  } ? ReqSchema : never>;
@@ -1 +1 @@
1
- {"version":3,"file":"routing.d.ts","sourceRoot":"","sources":["../../_src/api/routing.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"routing.d.ts","sourceRoot":"","sources":["../../_src/api/routing.ts"],"names":[],"mappings":"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"}