@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
@@ -1,12 +1,13 @@
1
- import * as tsplus_module_1 from "@fp-ts/core/Option";
2
- import * as tsplus_module_2 from "@effect/io/Effect";
3
- import * as tsplus_module_3 from "@effect-app/core/Effect";
4
- import * as tsplus_module_4 from "@effect-app/prelude/_ext/Schema.ext";
5
- import * as tsplus_module_5 from "@effect-app/infra/RequestContext";
6
- import * as tsplus_module_6 from "@effect-app/prelude/utils";
7
- import * as tsplus_module_7 from "@effect-app/prelude/_ext/misc";
8
- import * as tsplus_module_8 from "@effect-app/core/Option";
9
- import * as tsplus_module_9 from "@effect-app/infra/api/setupRequest";
1
+ import * as tsplus_module_1 from "@effect/io/FiberRef";
2
+ import * as tsplus_module_2 from "@fp-ts/core/Option";
3
+ import * as tsplus_module_3 from "@effect/io/Effect";
4
+ import * as tsplus_module_4 from "@effect-app/core/Effect";
5
+ import * as tsplus_module_5 from "@effect-app/prelude/_ext/Schema.ext";
6
+ import * as tsplus_module_6 from "@effect-app/infra/RequestContext";
7
+ import * as tsplus_module_7 from "@effect-app/prelude/utils";
8
+ import * as tsplus_module_8 from "@effect-app/prelude/_ext/misc";
9
+ import * as tsplus_module_9 from "@effect-app/core/Option";
10
+ import * as tsplus_module_10 from "@effect-app/infra/api/setupRequest";
10
11
  /* eslint-disable @typescript-eslint/no-explicit-any */
11
12
  import * as Ex from "@effect-app/infra-adapters/express";
12
13
  import { extractSchema, SchemaNamed } from "@effect-app/prelude/schema";
@@ -17,18 +18,21 @@ import { defaultBasicErrorHandler } from "./defaultErrorHandler.js";
17
18
  import { parseRequestParams } from "./express/schema/requestHandler.js";
18
19
  import { makeRouteDescriptor } from "./express/schema/routing.js";
19
20
  import { reportRequestError } from "./reportError.js";
20
- import { snipString, snipValue } from "./util.js";
21
+ import { snipString } from "./util.js";
22
+ export const RequestSettings = tsplus_module_1.unsafeMake({
23
+ verbose: false
24
+ });
21
25
  export function makeRequestParsers(Request) {
22
- const ph = tsplus_module_2.sync(() => tsplus_module_1.map(MO.condemnFail)(tsplus_module_1.map(MO.Parser.for)(tsplus_module_1.map(s => s)(tsplus_module_1.fromNullable(Request.Headers)))));
23
- const parseHeaders = (u) => tsplus_module_3.flatMapOption(ph, d => d(u));
24
- const pq = tsplus_module_2.sync(() => tsplus_module_1.map(MO.condemnFail)(tsplus_module_1.map(MO.Parser.for)(tsplus_module_1.map(s => s)(tsplus_module_1.fromNullable(Request.Query)))));
25
- const parseQuery = (u) => tsplus_module_3.flatMapOption(pq, d => d(u));
26
- const pb = tsplus_module_2.sync(() => tsplus_module_1.map(MO.condemnFail)(tsplus_module_1.map(MO.Parser.for)(tsplus_module_1.map(s => s)(tsplus_module_1.fromNullable(Request.Body)))));
27
- const parseBody = (u) => tsplus_module_3.flatMapOption(pb, d => d(u));
28
- const pp = tsplus_module_2.sync(() => tsplus_module_1.map(MO.condemnFail)(tsplus_module_1.map(MO.Parser.for)(tsplus_module_1.map(s => s)(tsplus_module_1.fromNullable(Request.Path)))));
29
- const parsePath = (u) => tsplus_module_3.flatMapOption(pp, d => d(u));
30
- const pc = tsplus_module_2.sync(() => tsplus_module_1.map(MO.condemnFail)(tsplus_module_1.map(MO.Parser.for)(tsplus_module_1.map(s => s)(tsplus_module_1.fromNullable(Request.Cookie)))));
31
- const parseCookie = (u) => tsplus_module_3.flatMapOption(pc, d => d(u));
26
+ const ph = tsplus_module_3.sync(() => tsplus_module_2.map(MO.condemnFail)(tsplus_module_2.map(MO.Parser.for)(tsplus_module_2.map(s => s)(tsplus_module_2.fromNullable(Request.Headers)))));
27
+ const parseHeaders = (u) => tsplus_module_4.flatMapOption(ph, d => d(u));
28
+ const pq = tsplus_module_3.sync(() => tsplus_module_2.map(MO.condemnFail)(tsplus_module_2.map(MO.Parser.for)(tsplus_module_2.map(s => s)(tsplus_module_2.fromNullable(Request.Query)))));
29
+ const parseQuery = (u) => tsplus_module_4.flatMapOption(pq, d => d(u));
30
+ const pb = tsplus_module_3.sync(() => tsplus_module_2.map(MO.condemnFail)(tsplus_module_2.map(MO.Parser.for)(tsplus_module_2.map(s => s)(tsplus_module_2.fromNullable(Request.Body)))));
31
+ const parseBody = (u) => tsplus_module_4.flatMapOption(pb, d => d(u));
32
+ const pp = tsplus_module_3.sync(() => tsplus_module_2.map(MO.condemnFail)(tsplus_module_2.map(MO.Parser.for)(tsplus_module_2.map(s => s)(tsplus_module_2.fromNullable(Request.Path)))));
33
+ const parsePath = (u) => tsplus_module_4.flatMapOption(pp, d => d(u));
34
+ const pc = tsplus_module_3.sync(() => tsplus_module_2.map(MO.condemnFail)(tsplus_module_2.map(MO.Parser.for)(tsplus_module_2.map(s => s)(tsplus_module_2.fromNullable(Request.Cookie)))));
35
+ const parseCookie = (u) => tsplus_module_4.flatMapOption(pc, d => d(u));
32
36
  return {
33
37
  parseBody,
34
38
  parseCookie,
@@ -44,10 +48,10 @@ export function match(requestHandler, errorHandler, middleware) {
44
48
  requestHandler = handler;
45
49
  makeMiddlewareContext = makeContext;
46
50
  }
47
- return tsplus_module_2.zipRight(Ex.match(requestHandler.Request.method.toLowerCase())(requestHandler.Request.path.split("?")[0], makeRequestHandler(requestHandler, errorHandler, makeMiddlewareContext)), tsplus_module_2.sync(() => makeRouteDescriptor(requestHandler.Request.path, requestHandler.Request.method, requestHandler)));
51
+ return tsplus_module_3.zipRight(Ex.match(requestHandler.Request.method.toLowerCase())(requestHandler.Request.path.split("?")[0], makeRequestHandler(requestHandler, errorHandler, makeMiddlewareContext)), tsplus_module_3.sync(() => makeRouteDescriptor(requestHandler.Request.path, requestHandler.Request.method, requestHandler)));
48
52
  }
49
53
  export function respondSuccess(encodeResponse) {
50
- return (req, res, a) => tsplus_module_2.flatMap(tsplus_module_2.sync(() => encodeResponse(req)(a)), r => tsplus_module_2.sync(() => {
54
+ return (req, res, a) => tsplus_module_3.flatMap(tsplus_module_3.sync(() => encodeResponse(req)(a)), r => tsplus_module_3.sync(() => {
51
55
  r === undefined
52
56
  ? res.status(204).send()
53
57
  : res.status(200)
@@ -65,24 +69,12 @@ export function makeRequestHandler(handler, errorHandler, makeMiddlewareContext)
65
69
  const parseRequest = parseRequestParams(requestParsers);
66
70
  const respond = respondSuccess(encodeResponse);
67
71
  function getParams(req) {
68
- return tsplus_module_2.sync(() => ({
72
+ return tsplus_module_3.sync(() => ({
69
73
  path: req.params,
70
74
  query: req.query,
71
75
  body: req.body,
72
- headers: req.headers
73
- ? Object.entries(req.headers).reduce((prev, [key, value]) => {
74
- prev[key] = snipValue(value);
75
- return prev;
76
- }, {})
77
- : req.headers,
76
+ headers: req.headers,
78
77
  cookies: req.cookies
79
- ? Object.entries(req.cookies).reduce((prev, [key, value]) => {
80
- prev[key] = typeof value === "string" || Array.isArray(value)
81
- ? snipValue(value)
82
- : value;
83
- return prev;
84
- }, {})
85
- : req.cookies
86
78
  }));
87
79
  }
88
80
  function makeContext(req) {
@@ -97,7 +89,7 @@ export function makeRequestHandler(handler, errorHandler, makeMiddlewareContext)
97
89
  // throw new Error("AI Context missing")
98
90
  // }
99
91
  const requestId = req.headers["request-id"];
100
- const rootId = requestId ? tsplus_module_4.parseUnsafe(RequestId)(requestId) : RequestId.make();
92
+ const rootId = requestId ? tsplus_module_5.parseUnsafe(RequestId)(requestId) : RequestId.make();
101
93
  const requestContext = new RequestContext({
102
94
  rootId,
103
95
  name: MO.ReasonableString(Request.Model instanceof SchemaNamed ? Request.Model.name : Request.name),
@@ -117,8 +109,8 @@ export function makeRequestHandler(handler, errorHandler, makeMiddlewareContext)
117
109
  return requestContext;
118
110
  }
119
111
  return (req, res) => {
120
- return tsplus_module_2.flatMap(tsplus_module_2.struct({
121
- requestContext: tsplus_module_2.sync(() => {
112
+ return tsplus_module_3.flatMap(tsplus_module_3.struct({
113
+ requestContext: tsplus_module_3.sync(() => {
122
114
  const requestContext = makeContext(req);
123
115
  if (req.method === "GET") {
124
116
  res.setHeader("Cache-Control", "no-store");
@@ -127,61 +119,71 @@ export function makeRequestHandler(handler, errorHandler, makeMiddlewareContext)
127
119
  return requestContext;
128
120
  }),
129
121
  pars: getParams(req)
130
- }), ({ pars, requestContext }) => tsplus_module_9.setupRequest(tsplus_module_2.provideService(tsplus_module_2.tap(tsplus_module_2.tapErrorCause(tsplus_module_2.zipRight(tsplus_module_7.logAnnotates({
122
+ }), ({ pars, requestContext }) => tsplus_module_10.setupRequest(tsplus_module_3.provideService(tsplus_module_3.tap(tsplus_module_3.tapErrorCause(tsplus_module_3.zipRight(tsplus_module_3.flatMap(tsplus_module_1.get(RequestSettings), s => tsplus_module_8.logAnnotates({
131
123
  method: req.method,
132
124
  path: req.originalUrl,
133
- reqPath: tsplus_module_6.RecordPretty(tsplus_module_6.object$(pars.path)),
134
- reqQuery: tsplus_module_6.RecordPretty(tsplus_module_6.object$(pars.query)),
135
- reqBody: pretty(pars.body),
136
- reqCookies: pretty(pars.cookies),
137
- reqHeaders: tsplus_module_6.RecordPretty(tsplus_module_6.object$(pars.headers))
138
- })(tsplus_module_2.logInfo("Processing request")), tsplus_module_2.suspendSucceed(() => {
139
- const handleRequest = tsplus_module_2.flatMap(tsplus_module_2.map(parseRequest(req), ({ body, path, query }) => {
125
+ ...s.verbose
126
+ ? {
127
+ reqPath: tsplus_module_7.RecordPretty(tsplus_module_7.object$(pars.path)),
128
+ reqQuery: tsplus_module_7.RecordPretty(tsplus_module_7.object$(pars.query)),
129
+ reqBody: pretty(pars.body),
130
+ reqCookies: pretty(pars.cookies),
131
+ reqHeaders: tsplus_module_7.RecordPretty(tsplus_module_7.object$(pars.headers))
132
+ } :
133
+ undefined
134
+ })(tsplus_module_3.logInfo("Processing request"))), tsplus_module_3.suspendSucceed(() => {
135
+ const handleRequest = tsplus_module_3.flatMap(tsplus_module_3.map(parseRequest(req), ({ body, path, query }) => {
140
136
  const hn = {
141
- ...tsplus_module_8.getOrUndefined(body),
142
- ...tsplus_module_8.getOrUndefined(query),
143
- ...tsplus_module_8.getOrUndefined(path)
137
+ ...tsplus_module_9.getOrUndefined(body),
138
+ ...tsplus_module_9.getOrUndefined(query),
139
+ ...tsplus_module_9.getOrUndefined(path)
144
140
  };
145
141
  return hn;
146
- }), parsedReq => tsplus_module_2.flatMap(handle(parsedReq), r => respond(parsedReq, res, r)));
142
+ }), parsedReq => tsplus_module_3.flatMap(handle(parsedReq), r => respond(parsedReq, res, r)));
147
143
  // Commands should not be interruptable.
148
- const r = req.method !== "GET" ? tsplus_module_2.uninterruptible(handleRequest) : handleRequest; // .instrument("Performance.RequestResponse")
144
+ const r = req.method !== "GET" ? tsplus_module_3.uninterruptible(handleRequest) : handleRequest; // .instrument("Performance.RequestResponse")
149
145
  // the first log entry should be of the request start.
150
146
  const r2 = makeMiddlewareContext
151
- ? tsplus_module_3.provideSomeContextEffect(makeMiddlewareContext(req, res, requestContext))(r)
147
+ ? tsplus_module_4.provideSomeContextEffect(makeMiddlewareContext(req, res, requestContext))(r)
152
148
  // PR is not relevant here
153
149
  : r;
154
150
  return errorHandler(req, res, requestContext, r2);
155
- })), cause => tsplus_module_2.tapErrorCause(tsplus_module_2.zipRight(tsplus_module_2.suspendSucceed(() => {
151
+ })), cause => tsplus_module_3.tapErrorCause(tsplus_module_3.zipRight(tsplus_module_3.suspendSucceed(() => {
156
152
  res.status(500).send();
157
153
  return reportRequestError(cause, {
158
154
  requestContext,
159
155
  path: req.originalUrl,
160
156
  method: req.method
161
157
  });
162
- }), tsplus_module_2.suspendSucceed(() => {
158
+ }), tsplus_module_3.suspendSucceed(() => {
163
159
  const headers = res.getHeaders();
164
- return tsplus_module_7.logAnnotates({
160
+ return tsplus_module_8.logAnnotates({
165
161
  method: req.method,
166
162
  path: req.originalUrl,
167
163
  statusCode: res.statusCode.toString(),
168
- resHeaders: tsplus_module_6.RecordPretty(tsplus_module_6.object$(Object.entries(headers).reduce((prev, [key, value]) => {
164
+ reqPath: tsplus_module_7.RecordPretty(tsplus_module_7.object$(pars.path)),
165
+ reqQuery: tsplus_module_7.RecordPretty(tsplus_module_7.object$(pars.query)),
166
+ reqBody: pretty(pars.body),
167
+ reqCookies: pretty(pars.cookies),
168
+ reqHeaders: tsplus_module_7.RecordPretty(tsplus_module_7.object$(pars.headers)),
169
+ resHeaders: tsplus_module_7.RecordPretty(tsplus_module_7.object$(Object.entries(headers).reduce((prev, [key, value]) => {
169
170
  prev[key] = value && typeof value === "string" ? snipString(value) : value;
170
171
  return prev;
171
172
  }, {})))
172
- })(tsplus_module_2.logErrorCauseMessage("Processed request", cause));
173
- })), cause => tsplus_module_2.sync(() => console.error("Error occurred while reporting error", cause)))), () => tsplus_module_2.suspendSucceed(() => {
173
+ })(tsplus_module_3.logErrorCauseMessage("Processed request", cause));
174
+ })), cause => tsplus_module_3.sync(() => console.error("Error occurred while reporting error", cause)))), () => tsplus_module_3.map(tsplus_module_1.get(RequestSettings), s => {
174
175
  const headers = res.getHeaders();
175
- return tsplus_module_7.logAnnotates({
176
+ return tsplus_module_8.logAnnotates({
176
177
  method: req.method,
177
178
  path: req.originalUrl,
178
179
  statusCode: res.statusCode.toString(),
179
- resHeaders: tsplus_module_6.RecordPretty(tsplus_module_6.object$(Object.entries(headers).reduce((prev, [key, value]) => {
180
- prev[key] = value && typeof value === "string" ? snipString(value) : value;
181
- return prev;
182
- }, {})))
183
- })(tsplus_module_2.logInfo("Processed request"));
184
- })), tsplus_module_5.tag, requestContext) // otherwise external error reporter breaks.
180
+ ...s.verbose
181
+ ? {
182
+ resHeaders: tsplus_module_7.RecordPretty(tsplus_module_7.object$(headers))
183
+ } :
184
+ undefined
185
+ })(tsplus_module_3.logInfo("Processed request"));
186
+ })), tsplus_module_6.tag, requestContext) // otherwise external error reporter breaks.
185
187
  , requestContext));
186
188
  };
187
189
  }
@@ -190,7 +192,7 @@ export function makeRequestHandler(handler, errorHandler, makeMiddlewareContext)
190
192
  * Requires no login.
191
193
  */
192
194
  export function matchAll(handlers) {
193
- const mapped = tsplus_module_6.RecordKeys(tsplus_module_6.object$(handlers)).reduce((prev, cur) => {
195
+ const mapped = tsplus_module_7.RecordKeys(tsplus_module_7.object$(handlers)).reduce((prev, cur) => {
194
196
  prev[cur] = match(handlers[cur], defaultBasicErrorHandler);
195
197
  return prev;
196
198
  }, {});
@@ -201,9 +203,9 @@ export function matchAll(handlers) {
201
203
  * Requires no login.
202
204
  */
203
205
  export function matchAllAlt(handlers) {
204
- const mapped = tsplus_module_6.RecordKeys(tsplus_module_6.object$(handlers)).reduce((prev, cur) => {
206
+ const mapped = tsplus_module_7.RecordKeys(tsplus_module_7.object$(handlers)).reduce((prev, cur) => {
205
207
  const matches = matchAll(handlers[cur]);
206
- tsplus_module_6.RecordKeys(tsplus_module_6.object$(matches)).forEach(key => prev[`${cur}.${key}`] = matches[key]);
208
+ tsplus_module_7.RecordKeys(tsplus_module_7.object$(matches)).forEach(key => prev[`${cur}.${key}`] = matches[key]);
207
209
  return prev;
208
210
  }, {});
209
211
  return mapped;
@@ -237,11 +239,11 @@ export function handle(_, adaptResponse) {
237
239
  */
238
240
  export function matchResource(mod) {
239
241
  return (handlers) => {
240
- const handler = tsplus_module_6.RecordKeys(tsplus_module_6.object$(mod)).reduce((prev, cur) => {
242
+ const handler = tsplus_module_7.RecordKeys(tsplus_module_7.object$(mod)).reduce((prev, cur) => {
241
243
  prev[cur] = handle(mod[cur])(handlers[cur]);
242
244
  return prev;
243
245
  }, {});
244
246
  return handler;
245
247
  };
246
248
  }
247
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGluZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL19zcmMvYXBpL3JvdXRpbmcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQUEsdURBQXVEO0FBQ3ZELE9BQU8sS0FBSyxFQUFFLE1BQU0sb0NBQW9DLENBQUE7QUFHeEQsT0FBTyxFQUFFLGFBQWEsRUFBRSxXQUFXLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQTtBQUN2RSxPQUFPLEtBQUssRUFBRSxNQUFNLDRCQUE0QixDQUFBO0FBQ2hELE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQTtBQUdsRCxPQUFPLEVBQUUsY0FBYyxFQUFFLFNBQVMsRUFBRSxNQUFNLHNCQUFzQixDQUFBO0FBRWhFLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLDBCQUEwQixDQUFBO0FBRW5FLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLG9DQUFvQyxDQUFBO0FBRXZFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDZCQUE2QixDQUFBO0FBQ2pFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGtCQUFrQixDQUFBO0FBQ3JELE9BQU8sRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFLE1BQU0sV0FBVyxDQUFBO0FBRWpELE1BQU0sVUFBVSxrQkFBa0IsQ0FXaEMsT0FVWTtJQUVaLE1BQU0sRUFBRSxHQUFHLDJCQUNULG9CQUdPLEVBQUUsQ0FBQyxXQUFXLEVBSHJCLG9CQUVPLEFBeENDLEVBQUUsQ0F3Q0gsTUFBTSxDQUFDLEdBQUcsRUFGakIsb0JBQ08sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBRGIsNkJBQW9CLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FDdEIsQ0FDSSxDQUNJLENBQ3ZCLENBQUE7SUFDRCxNQUFNLFlBQVksR0FBRyxDQUFDLENBQVUsRUFBRSxFQUFFLENBQUMsOEJBQUEsRUFBRSxFQUFZLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFD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
249
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGluZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL19zcmMvYXBpL3JvdXRpbmcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7OztBQUFBLHVEQUF1RDtBQUN2RCxPQUFPLEtBQUssRUFBRSxNQUFNLG9DQUFvQyxDQUFBO0FBR3hELE9BQU8sRUFBRSxhQUFhLEVBQUUsV0FBVyxFQUFFLE1BQU0sNEJBQTRCLENBQUE7QUFDdkUsT0FBTyxLQUFLLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQTtBQUNoRCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sMkJBQTJCLENBQUE7QUFHbEQsT0FBTyxFQUFFLGNBQWMsRUFBRSxTQUFTLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQTtBQUVoRSxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQTtBQUVuRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQTtBQUV2RSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQTtBQUNqRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQTtBQUNyRCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sV0FBVyxDQUFBO0FBRXRDLE1BQU0sQ0FBQyxNQUFNLGVBQWUsR0FBRywyQkFBb0I7SUFDakQsT0FBTyxFQUFFLEtBQUs7Q0FDZixDQUFDLENBQUE7QUFFRixNQUFNLFVBQVUsa0JBQWtCLENBV2hDLE9BVVk7SUFFWixNQUFNLEVBQUUsR0FBRywyQkFDVCxvQkFHTyxFQUFFLENBQUMsV0FBVyxFQUhyQixvQkFFTyxBQTVDQyxFQUFFLENBNENILE1BQU0sQ0FBQyxHQUFHLEVBRmpCLG9CQUNPLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQURiLDZCQUFvQixPQUFPLENBQUMsT0FBTyxDQUFDLENBQ3RCLENBQ0ksQ0FDSSxDQUN2QixDQUFBO0lBQ0QsTUFBTSxZQUFZLEdBQUcsQ0FBQyxD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
@@ -10,4 +10,9 @@ export declare function setupRequest<R, E, A>(self: Effect<R, E, A>, requestCont
10
10
  * @tsplus location "@effect-app/infra/api/setupRequest"
11
11
  */
12
12
  export declare function setupRequestFrom<R, E, A>(self: Effect<R, E, A>): import("@effect/io/Effect").Effect<RequestContext | R, E, A>;
13
+ /**
14
+ * @tsplus fluent effect/io/Effect setupRequestFromWith
15
+ * @tsplus location "@effect-app/infra/api/setupRequest"
16
+ */
17
+ export declare function setupReq3<R, E, A>(self: Effect<R, E, A>, name: string): import("@effect/io/Effect").Effect<Exclude<R, RequestContext>, E, A>;
13
18
  //# sourceMappingURL=setupRequest.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"setupRequest.d.ts","sourceRoot":"","sources":["../../_src/api/setupRequest.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;;;;;AAKrD,wBAAgB,YAAY,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,cAAc,EAAE,cAAc,+CAS1F;;;;;AAKD,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,gEAE9D"}
1
+ {"version":3,"file":"setupRequest.d.ts","sourceRoot":"","sources":["../../_src/api/setupRequest.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;;;;;AAKrD,wBAAgB,YAAY,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,cAAc,EAAE,cAAc,+CAS1F;;;;;AAKD,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,gEAE9D;;;;;AAKD,wBAAgB,SAAS,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,wEAIrE"}
@@ -2,8 +2,10 @@ import * as tsplus_module_1 from "@effect/io/Effect";
2
2
  import * as tsplus_module_2 from "@effect-app/prelude/_ext/misc";
3
3
  import * as tsplus_module_3 from "@effect-app/core/Function";
4
4
  import * as tsplus_module_4 from "@effect-app/infra/RequestContext";
5
+ import * as tsplus_module_5 from "@effect-app/prelude/schema";
5
6
  export const setupRequest = setupRequest_1;
6
- import "../RequestContext.js";
7
+ export const setupRequestFrom = setupRequestFrom_1;
8
+ import { RequestContext } from "../RequestContext.js";
7
9
  /**
8
10
  * @tsplus fluent effect/io/Effect setupRequest
9
11
  */
@@ -17,7 +19,22 @@ function setupRequest_1(self, requestContext) {
17
19
  /**
18
20
  * @tsplus getter effect/io/Effect setupRequestFrom
19
21
  */
20
- export function setupRequestFrom(self) {
22
+ function setupRequestFrom_1(self) {
21
23
  return tsplus_module_1.serviceWithEffect(tsplus_module_4.tag, requestContext => setupRequest_1(self, requestContext));
22
24
  }
23
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2V0dXBSZXF1ZXN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vX3NyYy9hcGkvc2V0dXBSZXF1ZXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7YUFLZ0IsWUFBWTtBQUw1QixPQUErQixzQkFBc0IsQ0FBQTtBQUVyRDs7R0FFRztBQUNILHdCQUFzQyxJQUFxQixFQUFFLGNBQThCO0lBQ3pGLE9BQU8sZ0JBQUEsSUFBSSxDQUNULHdCQUFBLElBQUksRUFBUyxTQUFTLENBQUMsRUFDdkIsNkJBQW9CO1FBQ2xCLGFBQWEsRUFBRSxjQUFjLENBQUMsTUFBTTtRQUNwQyxTQUFTLEVBQUUsY0FBYyxDQUFDLEVBQUU7UUFDNUIsV0FBVyxFQUFFLGNBQWMsQ0FBQyxJQUFJO0tBQ2pDLENBQUMsQ0FDSCxDQUFBO0FBQ0gsQ0FBQztBQUVEOztHQUVHO0FBQ0gsTUFBTSxVQUFVLGdCQUFnQixDQUFVLElBQXFCO0lBQzdELE9BQU8sdURBQW9DLGNBQWMsQ0FBQyxFQUFFLENBQUMsZUFBQSxJQUFJLEVBQWMsY0FBYyxDQUFDLENBQUMsQ0FBQTtBQUNqRyxDQUFDIn0=
25
+ /**
26
+ * @tsplus fluent effect/io/Effect setupRequestFromWith
27
+ */
28
+ export function setupReq3(self, name) {
29
+ return tsplus_module_1.provideService(setupRequestFrom_1(self), tsplus_module_4.tag, makeInternalRequestContext(name));
30
+ }
31
+ function makeInternalRequestContext(name) {
32
+ const id = tsplus_module_5.StringId.make();
33
+ return new RequestContext({
34
+ id,
35
+ rootId: id,
36
+ locale: "en",
37
+ name: tsplus_module_5.ReasonableString(name)
38
+ });
39
+ }
40
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2V0dXBSZXF1ZXN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vX3NyYy9hcGkvc2V0dXBSZXF1ZXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O2FBS2dCLFlBQVk7YUFjWixnQkFBZ0I7QUFuQmhDLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQTtBQUVyRDs7R0FFRztBQUNILHdCQUFzQyxJQUFxQixFQUFFLGNBQThCO0lBQ3pGLE9BQU8sZ0JBQUEsSUFBSSxDQUNULHdCQUFBLElBQUksRUFBUyxTQUFTLENBQUMsRUFDdkIsNkJBQW9CO1FBQ2xCLGFBQWEsRUFBRSxjQUFjLENBQUMsTUFBTTtRQUNwQyxTQUFTLEVBQUUsY0FBYyxDQUFDLEVBQUU7UUFDNUIsV0FBVyxFQUFFLGNBQWMsQ0FBQyxJQUFJO0tBQ2pDLENBQUMsQ0FDSCxDQUFBO0FBQ0gsQ0FBQztBQUVEOztHQUVHO0FBQ0gsNEJBQTBDLElBQXFCO0lBQzdELE9BQU8sdURBQW9DLGNBQWMsQ0FBQyxFQUFFLENBQUMsZUFBQSxJQUFJLEVBQWMsY0FBYyxDQUFDLENBQUMsQ0FBQTtBQUNqRyxDQUFDO0FBRUQ7O0dBRUc7QUFDSCxNQUFNLFVBQVUsU0FBUyxDQUFVLElBQXFCLEVBQUUsSUFBWTtJQUNwRSxPQUFPLGtEQUFBLElBQUksd0JBRTJCLDBCQUEwQixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUE7QUFDekUsQ0FBQztBQUVELFNBQVMsMEJBQTBCLENBQUMsSUFBWTtJQUM5QyxNQUFNLEVBQUUsR0FBRyxnQkFBQSxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUE7SUFDMUIsT0FBTyxJQUFJLGNBQWMsQ0FBQztRQUN4QixFQUFFO1FBQ0YsTUFBTSxFQUFFLEVBQUU7UUFDVixNQUFNLEVBQUUsSUFBSTtRQUNaLElBQUksRUFBRSxnQkFBQSxnQkFBZ0IsQ0FBQyxJQUFJLENBQUM7S0FDN0IsQ0FBQyxDQUFBO0FBQ0osQ0FBQyJ9
@@ -0,0 +1,24 @@
1
+ import { Cause } from "@effect/io/Cause";
2
+ import { Effect } from "@effect/io/Effect";
3
+ import { CauseException } from "@effect-app/infra/errors";
4
+ import { RequestContext } from "@effect-app/infra/RequestContext";
5
+ export declare class MessageException<E> extends CauseException<E> {
6
+ constructor(cause: Cause<E>);
7
+ }
8
+ export declare class FatalQueueException<E> extends CauseException<E> {
9
+ constructor(cause: Cause<E>);
10
+ }
11
+ export declare const reportQueueError: (cause: Cause<unknown>, context?: Record<string, unknown> | undefined) => import("@effect/io/Effect").Effect<RequestContext, never, import("@effect/io/Effect").Effect<never, never, void>>;
12
+ /**
13
+ * Forks the effect into a new fiber attached to the global scope. Because the
14
+ * new fiber is attached to the global scope, when the fiber executing the
15
+ * returned effect terminates, the forked fiber will continue running.
16
+ *
17
+ * Reports errors.
18
+ * @tsplus getter effect/io/Effect forkDaemonReportQueue
19
+ * @tsplus location "@effect-app/infra/services/QueueMaker/errors"
20
+ */
21
+ export declare function forkDaemonReportQueue<R, E, A>(self: Effect<R, E, A>): import("@effect/io/Effect").Effect<RequestContext | R, never, import("@effect/io/Fiber").RuntimeFiber<E, A>>;
22
+ export declare const reportFatalQueueError: (cause: import("@effect/io/Cause").Cause<unknown>, context?: Record<string, unknown> | undefined) => import("@effect/io/Effect").Effect<never, never, void>;
23
+ export declare function reportFailure(name: string): <R, E, A>(self: import("@effect/io/Effect").Effect<R, E, A>) => import("@effect/io/Effect").Effect<R, never, import("@effect/io/Exit").Exit<E, A>>;
24
+ //# sourceMappingURL=errors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../../_src/services/QueueMaker/errors.ts"],"names":[],"mappings":";;AACA,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAA;AACzD,OAAO,EAAE,cAAc,EAAE,MAAM,kCAAkC,CAAA;AAEjE,qBAAa,gBAAgB,CAAC,CAAC,CAAE,SAAQ,cAAc,CAAC,CAAC,CAAC;gBAC5C,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC;CAG5B;AAED,qBAAa,mBAAmB,CAAC,CAAC,CAAE,SAAQ,cAAc,CAAC,CAAC,CAAC;gBAC/C,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC;CAG5B;AAID,eAAO,MAAM,gBAAgB,UAAW,MAAM,OAAO,CAAC,YAAY,OAAO,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,sHAGlG,CAAA;;;;;;;;;;AAWH,wBAAgB,qBAAqB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,gHAEnE;AAED,eAAO,MAAM,qBAAqB,6JAEjC,CAAA;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,sJAOzC"}
@@ -0,0 +1,37 @@
1
+ import * as tsplus_module_1 from "@effect/io/Effect";
2
+ import * as tsplus_module_2 from "@effect-app/infra/RequestContext";
3
+ import * as tsplus_module_3 from "@effect-app/core/Effect";
4
+ import { reportError } from "@effect-app/infra/errorReporter";
5
+ import { CauseException } from "@effect-app/infra/errors";
6
+ import "@effect-app/infra/RequestContext";
7
+ export class MessageException extends CauseException {
8
+ constructor(cause) {
9
+ super(cause, "Message");
10
+ }
11
+ }
12
+ export class FatalQueueException extends CauseException {
13
+ constructor(cause) {
14
+ super(cause, "Message");
15
+ }
16
+ }
17
+ const reportQueueError_ = reportError(cause => new MessageException(cause));
18
+ export const reportQueueError = (cause, context) => tsplus_module_1.serviceWithEffect(tsplus_module_2.tag, requestContext => tsplus_module_1.sync(() => reportQueueError_(cause, { requestContext, ...context })));
19
+ /**
20
+ * Forks the effect into a new fiber attached to the global scope. Because the
21
+ * new fiber is attached to the global scope, when the fiber executing the
22
+ * returned effect terminates, the forked fiber will continue running.
23
+ *
24
+ * Reports errors.
25
+ *
26
+ * @tsplus getter effect/io/Effect forkDaemonReportQueue
27
+ */
28
+ export function forkDaemonReportQueue(self) {
29
+ return tsplus_module_1.daemonChildren(tsplus_module_1.fork(tsplus_module_1.tapErrorCause(self, reportQueueError)));
30
+ }
31
+ export const reportFatalQueueError = reportError(cause => new FatalQueueException(cause));
32
+ export function reportFailure(name) {
33
+ return (self) => tsplus_module_1.tap(tsplus_module_1.exit(self), exit => exit._tag === "Failure"
34
+ ? reportFatalQueueError(exit.cause, { name })
35
+ : tsplus_module_3.unit);
36
+ }
37
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXJyb3JzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vX3NyYy9zZXJ2aWNlcy9RdWV1ZU1ha2VyL2Vycm9ycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0saUNBQWlDLENBQUE7QUFDN0QsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDBCQUEwQixDQUFBO0FBQ3pELE9BQStCLGtDQUFrQyxDQUFBO0FBRWpFLE1BQU0sT0FBTyxnQkFBb0IsU0FBUSxjQUFpQjtJQUN4RCxZQUFZLEtBQWU7UUFDekIsS0FBSyxDQUFDLEtBQUssRUFBRSxTQUFTLENBQUMsQ0FBQTtJQUN6QixDQUFDO0NBQ0Y7QUFFRCxNQUFNLE9BQU8sbUJBQXVCLFNBQVEsY0FBaUI7SUFDM0QsWUFBWSxLQUFlO1FBQ3pCLEtBQUssQ0FBQyxLQUFLLEVBQUUsU0FBUyxDQUFDLENBQUE7SUFDekIsQ0FBQztDQUNGO0FBRUQsTUFBTSxpQkFBaUIsR0FBRyxXQUFXLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxJQUFJLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUE7QUFFM0UsTUFBTSxDQUFDLE1BQU0sZ0JBQWdCLEdBQUcsQ0FBQyxLQUFxQixFQUFFLE9BQTZDLEVBQUUsRUFBRSxDQUN2Ryx1REFBb0MsY0FBYyxDQUFDLEVBQUUsQ0FDbkQsMkJBQU8saUJBQWlCLENBQUMsS0FBSyxFQUFFLEVBQUUsY0FBYyxFQUFFLEdBQUcsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUNqRSxDQUFBO0FBRUg7Ozs7Ozs7O0dBUUc7QUFDSCxNQUFNLFVBQVUscUJBQXFCLENBQVUsSUFBcUI7SUFDbEUsMkRBQU8sOEJBQUEsSUFBSSxFQUFlLGdCQUFnQixDQUFDLEdBQW9CO0FBQ2pFLENBQUM7QUFFRCxNQUFNLENBQUMsTUFBTSxxQkFBcUIsR0FBRyxXQUFXLENBQzlDLEtBQUssQ0FBQyxFQUFFLENBQUMsSUFBSSxtQkFBbUIsQ0FBQyxLQUFLLENBQUMsQ0FDeEMsQ0FBQTtBQUVELE1BQU0sVUFBVSxhQUFhLENBQUMsSUFBWTtJQUN4QyxPQUFPLENBQVUsSUFBcUIsRUFBRSxFQUFFLENBQ3hDLHlDQUFBLElBQUksR0FBVSxJQUFJLENBQUMsRUFBRSxDQUNuQixJQUFJLENBQUMsSUFBSSxLQUFLLFNBQVM7UUFDckIsQ0FBQyxDQUFDLHFCQUFxQixDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsRUFBRSxJQUFJLEVBQUUsQ0FBQztRQUM3QyxDQUFDLHFCQUFZLENBQ2hCLENBQUE7QUFDTCxDQUFDIn0=
@@ -0,0 +1,25 @@
1
+ import { StringId, Parser } from "@effect-app/prelude/schema";
2
+ import { Effect } from "@effect/io/Effect";
3
+ import { Cause } from "@effect/io/Cause";
4
+ import { MemQueue } from "@effect-app/infra-adapters/memQueue";
5
+ import { RequestContext } from "@effect-app/infra/RequestContext";
6
+ import type { CustomSchemaException } from "@effect-app/prelude/schema";
7
+ /**
8
+ * @tsplus static QueueMaker.Ops makeMem
9
+ * @tsplus location "@effect-app/infra/services/QueueMaker/memQueue"
10
+ */
11
+ export declare function makeMemQueue<DrainR, Evt, DrainEvt extends {
12
+ id: StringId;
13
+ _tag: string;
14
+ }, RContext, EvtE, DrainE>(queueName: string, queueDrainName: string, encoder: (e: {
15
+ body: Evt;
16
+ meta: RequestContext;
17
+ }) => EvtE, makeHandleEvent: Effect<DrainR, never, (ks: DrainEvt) => Effect<RContext, DrainE, void>>, provideContext: (context: RequestContext) => <R, E, A>(eff: Effect<RContext | R, E, A>) => Effect<Exclude<R, RContext>, E, A>, parseDrain: (a: unknown, env?: Parser.ParserEnv | undefined) => Effect<never, CustomSchemaException, {
18
+ body: DrainEvt;
19
+ meta: RequestContext;
20
+ }>): import("@effect/io/Effect").Effect<MemQueue, never, {
21
+ publish: (messages_0: Evt, ...messages_1: Evt[]) => import("@effect/io/Effect").Effect<RequestContext, never, import("@effect/io/Fiber").RuntimeFiber<never, import("@fp-ts/data/Chunk").Chunk<void>>>;
22
+ drain: import("@effect/io/Effect").Effect<import("@effect/io/Scope").Scope | DrainR, never, import("@effect/io/Fiber").RuntimeFiber<never, import("@effect/io/Exit").Exit<never, never>>>;
23
+ }>;
24
+ export declare function silence<R, E, A>(inp: Effect<R, E, A>): import("@effect/io/Effect").Effect<RequestContext | R, never, void>;
25
+ //# sourceMappingURL=memQueue.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memQueue.d.ts","sourceRoot":"","sources":["../../../_src/services/QueueMaker/memQueue.ts"],"names":[],"mappings":";;;AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,qCAAqC,CAAA;AAC9D,OAAO,EAAE,cAAc,EAAE,MAAM,kCAAkC,CAAA;AACjE,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAA;;;;;AAOvE,wBAAgB,YAAY,CAAC,MAAM,EAAE,GAAG,EAAE,QAAQ,SAAS;IAAE,EAAE,EAAE,QAAQ,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAC/G,SAAS,EAAE,MAAM,EACjB,cAAc,EAAE,MAAM,EACtB,OAAO,EAAE,CAAC,CAAC,EAAE;IAAE,IAAI,EAAE,GAAG,CAAC;IAAC,IAAI,EAAE,cAAc,CAAA;CAAE,KAAK,IAAI,EACzD,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE,QAAQ,KAAK,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC,EACxF,cAAc,EAAE,CAAC,OAAO,EAAE,cAAc,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EACnD,GAAG,EAAE,MAAM,CAAC,QAAQ,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,KAC5B,MAAM,CAAC,OAAO,CAAC,CAAC,EAAE,QAAQ,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EACvC,UAAU,EAAE,CACV,CAAC,EAAE,OAAO,EACV,GAAG,CAAC,EAAE,MAAM,CAAC,SAAS,GAAG,SAAS,KAC/B,MAAM,CAAC,KAAK,EAAE,qBAAqB,EAAE;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,IAAI,EAAE,cAAc,CAAA;CAAE,CAAC;;;GA2DpF;AAID,wBAAgB,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,uEAkBpD"}
@@ -0,0 +1,60 @@
1
+ import * as tsplus_module_1 from "@effect/io/Effect";
2
+ import * as tsplus_module_2 from "@effect-app/infra/RequestContext";
3
+ import * as tsplus_module_3 from "@effect-app/core/_ext/Iterable";
4
+ import * as tsplus_module_4 from "@effect-app/infra/services/QueueMaker/errors";
5
+ import * as tsplus_module_5 from "@effect-app/prelude/utils";
6
+ import * as tsplus_module_6 from "@effect-app/prelude/_ext/misc";
7
+ import * as tsplus_module_7 from "@effect-app/prelude/schema";
8
+ import * as tsplus_module_8 from "@effect-app/infra/api/setupRequest";
9
+ import * as tsplus_module_9 from "@effect/io/Cause";
10
+ import * as tsplus_module_10 from "@effect-app/core/Effect";
11
+ import * as tsplus_module_11 from "@effect/io/Exit";
12
+ import { MemQueue } from "@effect-app/infra-adapters/memQueue";
13
+ import { RequestContext } from "@effect-app/infra/RequestContext";
14
+ import { reportFailure, reportQueueError } from "./errors.js";
15
+ /**
16
+ * @tsplus static QueueMaker.Ops makeMem
17
+ */
18
+ export function makeMemQueue(queueName, queueDrainName, encoder, makeHandleEvent, provideContext, parseDrain) {
19
+ return tsplus_module_1.gen(function* ($) {
20
+ const mem = yield* $(tsplus_module_1.service(MemQueue));
21
+ const q = yield* $(mem.getOrCreateQueue(queueName));
22
+ const qReply = yield* $(mem.getOrCreateQueue(queueDrainName));
23
+ return {
24
+ publish: (...messages) => tsplus_module_1.gen(function* ($) {
25
+ const requestContext = yield* $(tsplus_module_1.service(tsplus_module_2.tag));
26
+ return yield* $(tsplus_module_4.forkDaemonReportQueue(tsplus_module_3.ext_forEach(messages, m => tsplus_module_1.asUnit(
27
+ // we JSON encode, because that is what the wire also does, and it reveals holes in e.g unknown encoders (Date->String)
28
+ tsplus_module_1.flatMap(tsplus_module_1.sync(() => JSON.stringify(encoder({ body: m, meta: requestContext })))
29
+ // .tap((msg) => info("Publishing Mem Message: " + utils.inspect(msg)))
30
+ , _ => q.offer(_))))));
31
+ }),
32
+ drain: tsplus_module_1.gen(function* ($) {
33
+ const handleEvent = yield* $(makeHandleEvent);
34
+ const processMessage = (msg) =>
35
+ // we JSON parse, because that is what the wire also does, and it reveals holes in e.g unknown encoders (Date->String)
36
+ tsplus_module_1.flatMap(tsplus_module_1.orDie(tsplus_module_1.flatMap(tsplus_module_1.sync(() => JSON.parse(msg)), parseDrain)), ({ body, meta }) => provideContext(RequestContext.inherit(meta, {
37
+ id: body.id,
38
+ locale: "en",
39
+ name: tsplus_module_7.ReasonableString(body._tag)
40
+ }))(tsplus_module_1.zipRight(tsplus_module_6.logAnnotates({ body: tsplus_module_5.RecordPretty(tsplus_module_5.object$(body)), meta: tsplus_module_5.RecordPretty(tsplus_module_5.object$(meta)) })(tsplus_module_1.logDebug(`$$ [${queueDrainName}] Processing incoming message`)), silence(handleEvent(body)))));
41
+ return yield* $(tsplus_module_1.forkScoped(tsplus_module_8.setupReq3(reportFailure("drain")(tsplus_module_1.forever(tsplus_module_1.flatMap(qReply.take(), x => tsplus_module_1.uninterruptible(processMessage(x))))), "Queue.ReceiveMessage")));
42
+ })
43
+ };
44
+ });
45
+ }
46
+ // We want the Queue to continue processing even on errors per messages
47
+ // must make sure that the errors are processed/handled beforehand.
48
+ export function silence(inp) {
49
+ return tsplus_module_1.flatMap(tsplus_module_1.exit(inp), result => tsplus_module_1.gen(function* ($) {
50
+ const requestContext = yield* $(tsplus_module_1.service(tsplus_module_2.tag));
51
+ return yield* $(tsplus_module_11.match(result, cause => {
52
+ if (tsplus_module_9.isInterrupted(cause)) {
53
+ return tsplus_module_1.failCause(cause);
54
+ }
55
+ reportQueueError(cause, { requestContext });
56
+ return tsplus_module_10.unit;
57
+ }, () => tsplus_module_10.unit));
58
+ }));
59
+ }
60
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVtUXVldWUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9fc3JjL3NlcnZpY2VzL1F1ZXVlTWFrZXIvbWVtUXVldWUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0scUNBQXFDLENBQUE7QUFDOUQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGtDQUFrQyxDQUFBO0FBRWpFLE9BQU8sRUFBRSxhQUFhLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxhQUFhLENBQUE7QUFHN0Q7O0dBRUc7QUFDSCxNQUFNLFVBQVUsWUFBWSxDQUMxQixTQUFpQixFQUNqQixjQUFzQixFQUN0QixPQUF5RCxFQUN6RCxlQUF3RixFQUN4RixjQUV1QyxFQUN2QyxVQUdtRjtJQUVuRixPQUFPLG9CQUFXLFFBQVEsQ0FBQyxFQUFDLENBQUM7UUFDM0IsTUFBTSxHQUFHLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyx5QkFBQyxRQUFRLEVBQVEsQ0FBQTtRQUNyQyxNQUFNLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLGdCQUFnQixDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUE7UUFDbkQsTUFBTSxNQUFNLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFBO1FBRTdELE9BQU87WUFDTCxPQUFPLEVBQUUsQ0FBQyxHQUFHLFFBQVEsRUFBRSxFQUFFLENBQ3ZCLG9CQUFXLFFBQVEsQ0FBQyxFQUFDLENBQUM7Z0JBQ3BCLE1BQU0sY0FBYyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsOENBQTJCLENBQUE7Z0JBQzFELE9BQU8sS0FBSyxDQUFDLENBQUMsQ0FBQyx1Q0FDYiw0QkFBQSxRQUFRLEVBQWUsQ0FBQyxDQUFDLEVBQUU7Z0JBQ3pCLHVIQUF1SDtnQkFDdkgsd0JBQUEscUJBQU8sR0FBRyxFQUFFLENBQ1YsSUFBSSxDQUFDLFNBQVMsQ0FDWixPQUFPLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxjQUFjLEVBQUUsQ0FBQyxDQUMzQyxDQUNGO2dCQUNDLHVFQUF1RTtrQkFDOUQsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQ2xCLENBQ1YsRUFFRixDQUFBO1lBQ0gsQ0FBQyxDQUFDO1lBQ0osS0FBSyxFQUFFLG9CQUFXLFFBQVEsQ0FBQyxFQUFDLENBQUM7Z0JBQzNCLE1BQU0sV0FBVyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxlQUFlLENBQUMsQ0FBQTtnQkFDN0MsTUFBTSxjQUFjLEdBQUcsQ0FBQyxHQUFXLEVBQUUsRUFBRTtnQkFDckMsc0hBQXNIO2dCQUN0SCw4Q0FBQSx3QkFBQSxxQkFBTyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQ2xCLFVBQVUsQ0FBQyxHQUVYLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxDQU10QixjQUFjLENBQ1osY0FBYyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUU7b0JBQzNCLEVBQUUsRUFBRSxJQUFJLENBQUMsRUFBRTtvQkFDWCxNQUFNLEVBQUUsSUFBYTtvQkFDckIsSUFBSSxFQUFFLGdCQUFBLGdCQUFnQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUM7aUJBQ2xDLENBQUMsQ0FDSCxDQVhMLHlCQUVTLDZCQUFvQixFQUFFLElBQUksdURBQUUsSUFBSSxFQUFVLEVBQUUsSUFBSSx1REFBRSxJQUFJLEVBQVUsRUFBRSxDQUFDLENBRjVFLHlCQUNZLE9BQU8sY0FBYywrQkFBK0IsQ0FBQyxHQUVyRCxPQUFPLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FTcEMsQ0FDSixDQUFBO2dCQUNMLE9BQU8sS0FBSyxDQUFDLENBQUMsQ0FBQyw0QkFDYiwwQkFHUyxhQUFhLENBQUMsT0FBTyxDQUFDLHlCQUgvQix3QkFBQSxNQUFNLENBQUMsSUFBSSxFQUFFLEVBQ0YsQ0FBQyxDQUFDLEVBQUUsaUNBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFnQixDQUFDLElBRzFCLHNCQUFzQixDQUFDLEVBRWhELENBQUE7WUFDSCxDQUFDLENBQUM7U0FDOEIsQ0FBQTtJQUNwQyxDQUFDLENBQUMsQ0FBQTtBQUNKLENBQUM7QUFFRCx1RUFBdUU7QUFDdkUsbUVBQW1FO0FBQ25FLE1BQU0sVUFBVSxPQUFPLENBQVUsR0FBb0I7SUFDbkQsT0FBTyw2Q0FBQSxHQUFHLEdBQWMsTUFBTSxDQUFDLEVBQUUsQ0FDL0Isb0JBQVcsUUFBUSxDQUFDLEVBQUMsQ0FBQztRQUNwQixNQUFNLGNBQWMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLDhDQUEyQixDQUFBO1FBQzFELE9BQU8sS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUNiLHVCQUFBLE1BQU0sRUFDSixLQUFLLENBQUMsRUFBRTtZQUNOLElBQUksOEJBQUEsS0FBSyxDQUFnQixFQUFFO2dCQUN6QixpQ0FBUSxLQUFzQixFQUFVO2FBQ3pDO1lBQ0QsZ0JBQWdCLENBQUMsS0FBSyxFQUFFLEVBQUUsY0FBYyxFQUFFLENBQUMsQ0FBQTtZQUMzQyw2QkFBa0I7UUFDcEIsQ0FBQyxFQUNELEdBQUcsRUFBRSxzQkFBWSxDQUNsQixDQUNGLENBQUE7SUFDSCxDQUFDLENBQUMsQ0FDSCxDQUFBO0FBQ0gsQ0FBQyJ9
@@ -0,0 +1,31 @@
1
+ import { StringId, Parser } from "@effect-app/prelude/schema";
2
+ import { Effect } from "@effect/io/Effect";
3
+ import { Cause } from "@effect/io/Cause";
4
+ import { RequestContext } from "@effect-app/infra/RequestContext";
5
+ import type { CustomSchemaException } from "@effect-app/prelude/schema";
6
+ /**
7
+ * @tsplus static QueueMaker.Ops makeServiceBus
8
+ * @tsplus location "@effect-app/infra/services/QueueMaker/sbqueue"
9
+ */
10
+ export declare function makeServiceBusQueue<DrainR, Evt extends {
11
+ id: StringId;
12
+ _tag: string;
13
+ }, DrainEvt extends {
14
+ id: StringId;
15
+ _tag: string;
16
+ }, RContext, EvtE, DrainE>(_queueName: string, queueDrainName: string, encoder: (e: {
17
+ body: Evt;
18
+ meta: RequestContext;
19
+ }) => EvtE, makeHandleEvent: Effect<DrainR, never, (ks: DrainEvt) => Effect<RContext, DrainE, void>>, provideContext: (context: RequestContext) => <R, E, A>(eff: Effect<RContext | R, E, A>) => Effect<Exclude<R, RContext>, E, A>, parseDrain: (a: unknown, env?: Parser.ParserEnv | undefined) => Effect<never, CustomSchemaException, {
20
+ body: DrainEvt;
21
+ meta: RequestContext;
22
+ }>): import("@effect/io/Effect").Effect<import("@azure/service-bus").ServiceBusReceiver | import("@azure/service-bus").ServiceBusSender, never, {
23
+ drain: import("@effect/io/Effect").Effect<import("@effect/io/Scope").Scope | DrainR, never, void>;
24
+ publish: (messages_0: Evt, ...messages_1: Evt[]) => import("@effect/io/Effect").Effect<RequestContext, never, import("@effect/io/Fiber").RuntimeFiber<never, void>>;
25
+ }>;
26
+ /**
27
+ * @tsplus static QueueMaker.Ops makeServiceBusLayers
28
+ * @tsplus location "@effect-app/infra/services/QueueMaker/sbqueue"
29
+ */
30
+ export declare function makeServiceBusLayers(url: string, queueName: string, queueDrainName: string): import("@effect/io/Layer").Layer<never, never, import("@azure/service-bus").ServiceBusReceiver | import("@azure/service-bus").ServiceBusSender>;
31
+ //# sourceMappingURL=sbqueue.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sbqueue.d.ts","sourceRoot":"","sources":["../../../_src/services/QueueMaker/sbqueue.ts"],"names":[],"mappings":";;;AAUA,OAAO,EAAE,cAAc,EAAE,MAAM,kCAAkC,CAAA;AACjE,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAA;;;;;AAOvE,wBAAgB,mBAAmB,CACjC,MAAM,EACN,GAAG,SAAS;IAAE,EAAE,EAAE,QAAQ,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,EAC1C,QAAQ,SAAS;IAAE,EAAE,EAAE,QAAQ,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,EAC/C,QAAQ,EACR,IAAI,EACJ,MAAM,EAEN,UAAU,EAAE,MAAM,EAClB,cAAc,EAAE,MAAM,EACtB,OAAO,EAAE,CAAC,CAAC,EAAE;IAAE,IAAI,EAAE,GAAG,CAAC;IAAC,IAAI,EAAE,cAAc,CAAA;CAAE,KAAK,IAAI,EACzD,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE,QAAQ,KAAK,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC,EACxF,cAAc,EAAE,CAAC,OAAO,EAAE,cAAc,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EACnD,GAAG,EAAE,MAAM,CAAC,QAAQ,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,KAC5B,MAAM,CAAC,OAAO,CAAC,CAAC,EAAE,QAAQ,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EACvC,UAAU,EAAE,CACV,CAAC,EAAE,OAAO,EACV,GAAG,CAAC,EAAE,MAAM,CAAC,SAAS,GAAG,SAAS,KAC/B,MAAM,CAAC,KAAK,EAAE,qBAAqB,EAAE;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,IAAI,EAAE,cAAc,CAAA;CAAE,CAAC;;;GAkEpF;;;;;AAKD,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,mJAG1F"}