@effect-app/infra 0.85.0-next.4 → 0.85.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (232) hide show
  1. package/CHANGELOG.md +3 -36
  2. package/_cjs/_ext/Array.cjs +2 -3
  3. package/_cjs/_ext/Array.cjs.map +1 -1
  4. package/_cjs/api/defaultErrorHandler.cjs +10 -11
  5. package/_cjs/api/defaultErrorHandler.cjs.map +1 -1
  6. package/_cjs/api/express/makeJsonSchema.cjs +2 -3
  7. package/_cjs/api/express/makeJsonSchema.cjs.map +1 -1
  8. package/_cjs/api/express/makeJsonSchema.test.cjs +2 -2
  9. package/_cjs/api/express/makeJsonSchema.test.cjs.map +1 -1
  10. package/_cjs/api/express/makeOpenApiSpecs.cjs +4 -6
  11. package/_cjs/api/express/makeOpenApiSpecs.cjs.map +1 -1
  12. package/_cjs/api/express/schema/routing.cjs +22 -23
  13. package/_cjs/api/express/schema/routing.cjs.map +1 -1
  14. package/_cjs/api/reportError.cjs +2 -2
  15. package/_cjs/api/setupRequest.cjs +4 -5
  16. package/_cjs/api/setupRequest.cjs.map +1 -1
  17. package/_cjs/api/writeDocs.cjs +4 -6
  18. package/_cjs/api/writeDocs.cjs.map +1 -1
  19. package/_cjs/errorReporter.cjs +11 -12
  20. package/_cjs/errorReporter.cjs.map +1 -1
  21. package/_cjs/errors.cjs +8 -8
  22. package/_cjs/errors.cjs.map +1 -1
  23. package/_cjs/instrument.cjs +1 -2
  24. package/_cjs/instrument.cjs.map +1 -1
  25. package/_cjs/logger/jsonLogger.cjs +10 -11
  26. package/_cjs/logger/jsonLogger.cjs.map +1 -1
  27. package/_cjs/logger/logFmtLogger.cjs +5 -5
  28. package/_cjs/logger/logFmtLogger.cjs.map +1 -1
  29. package/_cjs/logger/shared.cjs +4 -4
  30. package/_cjs/logger/shared.cjs.map +1 -1
  31. package/_cjs/rateLimit.cjs +7 -8
  32. package/_cjs/rateLimit.cjs.map +1 -1
  33. package/_cjs/services/Emailer/Sendgrid.cjs +12 -14
  34. package/_cjs/services/Emailer/Sendgrid.cjs.map +1 -1
  35. package/_cjs/services/Emailer/fake.cjs +4 -5
  36. package/_cjs/services/Emailer/fake.cjs.map +1 -1
  37. package/_cjs/services/Operations/live.cjs +29 -31
  38. package/_cjs/services/Operations/live.cjs.map +1 -1
  39. package/_cjs/services/Operations/service.cjs +5 -6
  40. package/_cjs/services/Operations/service.cjs.map +1 -1
  41. package/_cjs/services/QueueMaker/errors.cjs +6 -7
  42. package/_cjs/services/QueueMaker/errors.cjs.map +1 -1
  43. package/_cjs/services/QueueMaker/memQueue.cjs +17 -18
  44. package/_cjs/services/QueueMaker/memQueue.cjs.map +1 -1
  45. package/_cjs/services/QueueMaker/sbqueue.cjs +15 -16
  46. package/_cjs/services/QueueMaker/sbqueue.cjs.map +1 -1
  47. package/_cjs/services/Repository.cjs +16 -17
  48. package/_cjs/services/Repository.cjs.map +1 -1
  49. package/_cjs/services/RepositoryBase.cjs +33 -35
  50. package/_cjs/services/RepositoryBase.cjs.map +1 -1
  51. package/_cjs/services/RequestContextContainer.cjs +20 -15
  52. package/_cjs/services/RequestContextContainer.cjs.map +1 -1
  53. package/_cjs/services/Store/Cosmos.cjs +46 -49
  54. package/_cjs/services/Store/Cosmos.cjs.map +1 -1
  55. package/_cjs/services/Store/Disk.cjs +18 -19
  56. package/_cjs/services/Store/Disk.cjs.map +1 -1
  57. package/_cjs/services/Store/Memory.cjs +39 -43
  58. package/_cjs/services/Store/Memory.cjs.map +1 -1
  59. package/_cjs/services/Store/Redis.cjs +14 -16
  60. package/_cjs/services/Store/Redis.cjs.map +1 -1
  61. package/_cjs/services/Store/codeFilter.test.cjs +1 -1
  62. package/_cjs/services/Store/index.cjs +6 -7
  63. package/_cjs/services/Store/index.cjs.map +1 -1
  64. package/_cjs/services/Store/service.cjs +1 -1
  65. package/_cjs/services/Store/service.cjs.map +1 -1
  66. package/_cjs/services/Store/utils.cjs +13 -13
  67. package/_cjs/services/Store/utils.cjs.map +1 -1
  68. package/_cjs/services/simpledb/cosmosdb.cjs +17 -19
  69. package/_cjs/services/simpledb/cosmosdb.cjs.map +1 -1
  70. package/_cjs/services/simpledb/diskdb.cjs +8 -9
  71. package/_cjs/services/simpledb/diskdb.cjs.map +1 -1
  72. package/_cjs/services/simpledb/memdb.cjs +9 -11
  73. package/_cjs/services/simpledb/memdb.cjs.map +1 -1
  74. package/_cjs/services/simpledb/mongodb.cjs +18 -20
  75. package/_cjs/services/simpledb/mongodb.cjs.map +1 -1
  76. package/_cjs/services/simpledb/redisdb.cjs +10 -11
  77. package/_cjs/services/simpledb/redisdb.cjs.map +1 -1
  78. package/_cjs/services/simpledb/shared.cjs +5 -5
  79. package/_cjs/services/simpledb/shared.cjs.map +1 -1
  80. package/_cjs/services/simpledb/simpledb.cjs +17 -18
  81. package/_cjs/services/simpledb/simpledb.cjs.map +1 -1
  82. package/_src/api/authorization.jwt.ts +1 -1
  83. package/_src/api/defaultErrorHandler.ts +2 -2
  84. package/_src/api/express/routing.ts.bak +8 -8
  85. package/_src/api/express/schema/routing.ts +59 -37
  86. package/_src/api/setupRequest.ts +11 -10
  87. package/_src/errorReporter.ts +1 -1
  88. package/_src/services/Emailer/Sendgrid.ts +1 -1
  89. package/_src/services/Operations/live.ts +5 -5
  90. package/_src/services/QueueMaker/errors.ts +1 -1
  91. package/_src/services/QueueMaker/memQueue.ts +2 -2
  92. package/_src/services/QueueMaker/sbqueue.ts +1 -1
  93. package/_src/services/Repository.ts +9 -9
  94. package/_src/services/RepositoryBase.ts +6 -8
  95. package/_src/services/RequestContextContainer.ts +12 -7
  96. package/_src/services/Store/Cosmos.ts +12 -17
  97. package/_src/services/Store/Disk.ts +4 -4
  98. package/_src/services/Store/Memory.ts +4 -4
  99. package/_src/services/Store/Redis.ts +1 -1
  100. package/_src/services/Store/index.test.ts.bak +5 -5
  101. package/_src/services/Store/index.ts +1 -1
  102. package/_src/services/Store/utils.ts +16 -16
  103. package/_src/services/simpledb/diskdb.ts +1 -1
  104. package/_src/services/simpledb/memdb.ts +1 -1
  105. package/_src/services/simpledb/redisdb.ts +1 -1
  106. package/_src/services/simpledb/shared.ts +1 -1
  107. package/_src/services/simpledb/simpledb.ts +3 -3
  108. package/dist/RequestContext.d.ts +4 -4
  109. package/dist/_ext/Array.d.ts +1 -1
  110. package/dist/_ext/Array.d.ts.map +1 -1
  111. package/dist/_ext/Array.js +3 -4
  112. package/dist/api/codec.d.ts +1 -1
  113. package/dist/api/codec.d.ts.map +1 -1
  114. package/dist/api/defaultErrorHandler.d.ts +2 -2
  115. package/dist/api/defaultErrorHandler.d.ts.map +1 -1
  116. package/dist/api/defaultErrorHandler.js +11 -13
  117. package/dist/api/express/makeJsonSchema.d.ts +2 -2
  118. package/dist/api/express/makeJsonSchema.d.ts.map +1 -1
  119. package/dist/api/express/makeJsonSchema.js +3 -4
  120. package/dist/api/express/makeOpenApiSpecs.d.ts +1 -1
  121. package/dist/api/express/makeOpenApiSpecs.js +5 -7
  122. package/dist/api/express/schema/routing.d.ts +22 -7
  123. package/dist/api/express/schema/routing.d.ts.map +1 -1
  124. package/dist/api/express/schema/routing.js +23 -24
  125. package/dist/api/reportError.d.ts +5 -5
  126. package/dist/api/reportError.d.ts.map +1 -1
  127. package/dist/api/reportError.js +2 -2
  128. package/dist/api/setupRequest.d.ts +2 -2
  129. package/dist/api/setupRequest.d.ts.map +1 -1
  130. package/dist/api/setupRequest.js +7 -7
  131. package/dist/api/writeDocs.d.ts +1 -1
  132. package/dist/api/writeDocs.d.ts.map +1 -1
  133. package/dist/api/writeDocs.js +5 -7
  134. package/dist/errorReporter.d.ts +3 -3
  135. package/dist/errorReporter.d.ts.map +1 -1
  136. package/dist/errorReporter.js +12 -13
  137. package/dist/errors.d.ts +7 -7
  138. package/dist/errors.js +9 -9
  139. package/dist/instrument.d.ts +1 -1
  140. package/dist/instrument.d.ts.map +1 -1
  141. package/dist/instrument.js +2 -3
  142. package/dist/logger/jsonLogger.d.ts +2 -2
  143. package/dist/logger/jsonLogger.d.ts.map +1 -1
  144. package/dist/logger/jsonLogger.js +11 -12
  145. package/dist/logger/logFmtLogger.d.ts +2 -2
  146. package/dist/logger/logFmtLogger.d.ts.map +1 -1
  147. package/dist/logger/logFmtLogger.js +6 -6
  148. package/dist/logger/shared.d.ts +1 -1
  149. package/dist/logger/shared.d.ts.map +1 -1
  150. package/dist/logger/shared.js +5 -5
  151. package/dist/rateLimit.d.ts +3 -3
  152. package/dist/rateLimit.d.ts.map +1 -1
  153. package/dist/rateLimit.js +8 -9
  154. package/dist/services/Emailer/Sendgrid.d.ts +1 -1
  155. package/dist/services/Emailer/Sendgrid.d.ts.map +1 -1
  156. package/dist/services/Emailer/Sendgrid.js +15 -17
  157. package/dist/services/Emailer/fake.d.ts +1 -1
  158. package/dist/services/Emailer/fake.d.ts.map +1 -1
  159. package/dist/services/Emailer/fake.js +5 -6
  160. package/dist/services/Emailer/service.d.ts +3 -3
  161. package/dist/services/Operations/live.d.ts +1 -1
  162. package/dist/services/Operations/live.d.ts.map +1 -1
  163. package/dist/services/Operations/live.js +37 -39
  164. package/dist/services/Operations/service.d.ts +8 -8
  165. package/dist/services/Operations/service.d.ts.map +1 -1
  166. package/dist/services/Operations/service.js +12 -13
  167. package/dist/services/QueueMaker/errors.d.ts +3 -3
  168. package/dist/services/QueueMaker/errors.d.ts.map +1 -1
  169. package/dist/services/QueueMaker/errors.js +6 -7
  170. package/dist/services/QueueMaker/memQueue.d.ts +3 -3
  171. package/dist/services/QueueMaker/memQueue.js +16 -17
  172. package/dist/services/QueueMaker/sbqueue.d.ts +4 -4
  173. package/dist/services/QueueMaker/sbqueue.d.ts.map +1 -1
  174. package/dist/services/QueueMaker/sbqueue.js +15 -16
  175. package/dist/services/Repository.d.ts +42 -42
  176. package/dist/services/Repository.d.ts.map +1 -1
  177. package/dist/services/Repository.js +17 -18
  178. package/dist/services/RepositoryBase.d.ts +12 -11
  179. package/dist/services/RepositoryBase.d.ts.map +1 -1
  180. package/dist/services/RepositoryBase.js +35 -37
  181. package/dist/services/RequestContextContainer.d.ts +14 -11
  182. package/dist/services/RequestContextContainer.d.ts.map +1 -1
  183. package/dist/services/RequestContextContainer.js +19 -18
  184. package/dist/services/Store/Cosmos.d.ts +3 -3
  185. package/dist/services/Store/Cosmos.d.ts.map +1 -1
  186. package/dist/services/Store/Cosmos.js +51 -54
  187. package/dist/services/Store/Disk.d.ts +3 -3
  188. package/dist/services/Store/Disk.d.ts.map +1 -1
  189. package/dist/services/Store/Disk.js +19 -20
  190. package/dist/services/Store/Memory.d.ts +5 -5
  191. package/dist/services/Store/Memory.d.ts.map +1 -1
  192. package/dist/services/Store/Memory.js +41 -45
  193. package/dist/services/Store/Redis.d.ts +3 -3
  194. package/dist/services/Store/Redis.d.ts.map +1 -1
  195. package/dist/services/Store/Redis.js +15 -17
  196. package/dist/services/Store/index.d.ts +1 -1
  197. package/dist/services/Store/index.d.ts.map +1 -1
  198. package/dist/services/Store/index.js +7 -8
  199. package/dist/services/Store/service.d.ts +8 -8
  200. package/dist/services/Store/service.d.ts.map +1 -1
  201. package/dist/services/Store/service.js +2 -2
  202. package/dist/services/Store/utils.d.ts +2 -2
  203. package/dist/services/Store/utils.d.ts.map +1 -1
  204. package/dist/services/Store/utils.js +21 -21
  205. package/dist/services/simpledb/cosmosdb.d.ts +5 -5
  206. package/dist/services/simpledb/cosmosdb.js +17 -19
  207. package/dist/services/simpledb/diskdb.d.ts +4 -4
  208. package/dist/services/simpledb/diskdb.js +9 -10
  209. package/dist/services/simpledb/memdb.d.ts +4 -4
  210. package/dist/services/simpledb/memdb.js +11 -13
  211. package/dist/services/simpledb/mongodb.d.ts +5 -5
  212. package/dist/services/simpledb/mongodb.js +14 -16
  213. package/dist/services/simpledb/redisdb.d.ts +4 -4
  214. package/dist/services/simpledb/redisdb.js +11 -12
  215. package/dist/services/simpledb/shared.d.ts +4 -4
  216. package/dist/services/simpledb/shared.js +6 -6
  217. package/dist/services/simpledb/simpledb.d.ts +6 -6
  218. package/dist/services/simpledb/simpledb.d.ts.map +1 -1
  219. package/dist/services/simpledb/simpledb.js +15 -16
  220. package/package.json +5 -25
  221. package/_cjs/api/express/schema/requestHandler.cjs +0 -172
  222. package/_cjs/api/express/schema/requestHandler.cjs.map +0 -1
  223. package/_cjs/api/routing.cjs +0 -278
  224. package/_cjs/api/routing.cjs.map +0 -1
  225. package/_src/api/express/schema/requestHandler.ts +0 -372
  226. package/_src/api/routing.ts +0 -660
  227. package/dist/api/express/schema/requestHandler.d.ts +0 -71
  228. package/dist/api/express/schema/requestHandler.d.ts.map +0 -1
  229. package/dist/api/express/schema/requestHandler.js +0 -140
  230. package/dist/api/routing.d.ts +0 -103
  231. package/dist/api/routing.d.ts.map +0 -1
  232. package/dist/api/routing.js +0 -265
@@ -1,265 +0,0 @@
1
- import * as tsplus_module_1 from "effect/FiberRef";
2
- import * as tsplus_module_2 from "effect/Option";
3
- import * as tsplus_module_3 from "effect/impl/Option";
4
- import * as tsplus_module_4 from "effect/Effect";
5
- import * as tsplus_module_5 from "@effect-app/core/EffectX";
6
- import * as tsplus_module_6 from "effect/impl/Effect";
7
- import * as tsplus_module_7 from "@effect-app/schema/ext";
8
- import * as tsplus_module_8 from "@effect-app/prelude/utils";
9
- import * as tsplus_module_9 from "effect/impl/FiberRef";
10
- import * as tsplus_module_10 from "@effect-app/core/OptionX";
11
- import * as tsplus_module_11 from "@effect-app/infra/api/setupRequest";
12
- /* eslint-disable @typescript-eslint/no-explicit-any */
13
- import * as Ex from "@effect-app/infra-adapters/express";
14
- import { RequestId } from "@effect-app/prelude/ids";
15
- import { extractSchema, SchemaNamed } from "@effect-app/prelude/schema";
16
- import * as MO from "@effect-app/prelude/schema";
17
- import { pretty } from "@effect-app/prelude/utils";
18
- import { RequestContext } from "../RequestContext.js";
19
- import { RequestContextContainer, RequestContextContainerImpl } from "../services/RequestContextContainer.js";
20
- import { restoreFromRequestContext } from "../services/Store/Memory.js";
21
- import { defaultBasicErrorHandler } from "./defaultErrorHandler.js";
22
- import { parseRequestParams } from "./express/schema/requestHandler.js";
23
- import { makeRouteDescriptor } from "./express/schema/routing.js";
24
- import { reportRequestError } from "./reportError.js";
25
- import { snipString } from "./util.js";
26
- export const RequestSettings = tsplus_module_1.FiberRef.unsafeMake({
27
- verbose: false
28
- });
29
- export function makeRequestParsers(Request) {
30
- const ph = tsplus_module_4.Effect.sync(() => tsplus_module_3.map(tsplus_module_3.map(tsplus_module_3.map(tsplus_module_2.Option.fromNullable(Request.Headers), (s) => s), MO.Parser.for), MO.condemnFail));
31
- const parseHeaders = (u) => tsplus_module_5.flatMapOption(ph, (d) => d(u));
32
- const pq = tsplus_module_4.Effect.sync(() => tsplus_module_3.map(tsplus_module_3.map(tsplus_module_3.map(tsplus_module_2.Option.fromNullable(Request.Query), (s) => s), MO.Parser.for), MO.condemnFail));
33
- const parseQuery = (u) => tsplus_module_5.flatMapOption(pq, (d) => d(u));
34
- const pb = tsplus_module_4.Effect.sync(() => tsplus_module_3.map(tsplus_module_3.map(tsplus_module_3.map(tsplus_module_2.Option.fromNullable(Request.Body), (s) => s), MO.Parser.for), MO.condemnFail));
35
- const parseBody = (u) => tsplus_module_5.flatMapOption(pb, (d) => d(u));
36
- const pp = tsplus_module_4.Effect.sync(() => tsplus_module_3.map(tsplus_module_3.map(tsplus_module_3.map(tsplus_module_2.Option.fromNullable(Request.Path), (s) => s), MO.Parser.for), MO.condemnFail));
37
- const parsePath = (u) => tsplus_module_5.flatMapOption(pp, (d) => d(u));
38
- const pc = tsplus_module_4.Effect.sync(() => tsplus_module_3.map(tsplus_module_3.map(tsplus_module_3.map(tsplus_module_2.Option.fromNullable(Request.Cookie), (s) => s), MO.Parser.for), MO.condemnFail));
39
- const parseCookie = (u) => tsplus_module_5.flatMapOption(pc, (d) => d(u));
40
- return {
41
- parseBody,
42
- parseCookie,
43
- parseHeaders,
44
- parsePath,
45
- parseQuery
46
- };
47
- }
48
- export function match(requestHandler, errorHandler, middleware) {
49
- let makeMiddlewareContext = undefined;
50
- if (middleware) {
51
- const { handler, makeContext } = middleware(requestHandler);
52
- requestHandler = handler;
53
- makeMiddlewareContext = makeContext;
54
- }
55
- return tsplus_module_6.zipRight(Ex
56
- .match(requestHandler.Request.method.toLowerCase())(requestHandler.Request.path.split("?")[0], makeRequestHandler(requestHandler, errorHandler, makeMiddlewareContext)), tsplus_module_4.Effect.sync(() => makeRouteDescriptor(requestHandler.Request.path, requestHandler.Request.method, requestHandler)));
57
- }
58
- export function respondSuccess(encodeResponse) {
59
- return (req, res, a) => tsplus_module_6.flatMap(tsplus_module_4.Effect.sync(() => encodeResponse(req)(a)), (r) => tsplus_module_4.Effect.sync(() => {
60
- r === undefined
61
- ? res.status(204).send()
62
- : res
63
- .status(200)
64
- .send(JSON.stringify(r));
65
- }));
66
- }
67
- export function makeRequestHandler(handler, errorHandler, makeMiddlewareContext) {
68
- const { Request, Response, adaptResponse, h: handle } = handler;
69
- const response = Response ? extractSchema(Response) : MO.Void;
70
- const encoder = MO.Encoder.for(response);
71
- const encodeResponse = adaptResponse
72
- ? (req) => MO.Encoder.for(adaptResponse(req))
73
- : () => encoder;
74
- const requestParsers = makeRequestParsers(Request);
75
- const parseRequest = parseRequestParams(requestParsers);
76
- const respond = respondSuccess(encodeResponse);
77
- function getParams(req) {
78
- return tsplus_module_4.Effect.sync(() => ({
79
- path: req.params,
80
- query: req.query,
81
- body: req.body,
82
- headers: req.headers,
83
- cookies: req.cookies
84
- }));
85
- }
86
- function makeContext(req) {
87
- const start = new Date();
88
- const supported = ["en", "de"];
89
- const desiredLocale = req.headers["x-locale"];
90
- const locale = desiredLocale && supported.includes(desiredLocale)
91
- ? desiredLocale
92
- : "en";
93
- // const context = getAppInsightsContext()
94
- // if (!context) {
95
- // throw new Error("AI Context missing")
96
- // }
97
- const requestId = req.headers["request-id"];
98
- const rootId = requestId ? tsplus_module_7.parseUnsafe(RequestId)(requestId) : RequestId.make();
99
- const storeId = req.headers["x-store-id"];
100
- const namespace = MO.ReasonableString((storeId && (Array.isArray(storeId) ? storeId[0] : storeId)) || "primary");
101
- const requestContext = new RequestContext({
102
- rootId,
103
- name: MO.ReasonableString(Request.Model instanceof SchemaNamed ? Request.Model.name : Request.name),
104
- locale,
105
- createdAt: start,
106
- namespace
107
- // ...(context.operation.parentId
108
- // ? {
109
- // parent: new RequestContextParent({
110
- // id: RequestId(context.operation.parentId),
111
- // locale,
112
- // name: ReasonableString("API Request")
113
- // })
114
- // }
115
- // : {})
116
- });
117
- // context.requestContext = requestContext
118
- return requestContext;
119
- }
120
- return (req, res) => {
121
- return tsplus_module_6.flatMap(tsplus_module_4.Effect.all({
122
- requestContext: tsplus_module_4.Effect.sync(() => {
123
- const requestContext = makeContext(req);
124
- if (req.method === "GET") {
125
- res.setHeader("Cache-Control", "no-store");
126
- }
127
- res.setHeader("Content-Language", requestContext.locale);
128
- return requestContext;
129
- }),
130
- pars: getParams(req)
131
- }), ({ pars, requestContext }) => tsplus_module_6.provideService(tsplus_module_11.withRequestSpan(tsplus_module_6.tap(tsplus_module_6.tapErrorCause(tsplus_module_6.zipRight(tsplus_module_6.flatMap(tsplus_module_9.get(RequestSettings), (s) => tsplus_module_4.Effect.annotateLogs({
132
- method: req.method,
133
- path: req.originalUrl,
134
- ...s.verbose
135
- ? {
136
- reqPath: tsplus_module_8.RecordPretty(tsplus_module_8.object$(pars.path)),
137
- reqQuery: tsplus_module_8.RecordPretty(tsplus_module_8.object$(pars.query)),
138
- reqBody: pretty(pars.body),
139
- reqCookies: pretty(pars.cookies),
140
- reqHeaders: tsplus_module_8.RecordPretty(tsplus_module_8.object$(pars.headers))
141
- }
142
- : undefined
143
- })(
144
- // TODO: we don;t have access to user id here cause context is not yet created
145
- tsplus_module_4.Effect.logInfo("Incoming request"))), tsplus_module_4.Effect.suspend(() => {
146
- const handleRequest = tsplus_module_6.flatMap(tsplus_module_6.map(parseRequest(req), ({ body, path, query }) => {
147
- const hn = {
148
- ...tsplus_module_10.getOrUndefined(body),
149
- ...tsplus_module_10.getOrUndefined(query),
150
- ...tsplus_module_10.getOrUndefined(path)
151
- };
152
- return hn;
153
- }), (parsedReq) => tsplus_module_6.flatMap(handle(parsedReq), (r) => respond(parsedReq, res, r)));
154
- // Commands should not be interruptable.
155
- const r = req.method !== "GET" ? tsplus_module_6.uninterruptible(handleRequest) : handleRequest; // .instrument("Performance.RequestResponse")
156
- // the first log entry should be of the request start.
157
- const r2 = makeMiddlewareContext
158
- ? tsplus_module_6.zipRight(restoreFromRequestContext, tsplus_module_5.provideSomeContextEffect(makeMiddlewareContext(req, res))(r
159
- // the db namespace must be restored, before calling provide here
160
- ))
161
- : tsplus_module_6.zipRight(restoreFromRequestContext
162
- // PR is not relevant here
163
- , r);
164
- return errorHandler(req, res, r2);
165
- })), (cause) => tsplus_module_6.tapErrorCause(tsplus_module_4.Effect.all([
166
- tsplus_module_4.Effect.sync(() => res.status(500).send()),
167
- tsplus_module_4.Effect.sync(() => reportRequestError(cause, {
168
- path: req.originalUrl,
169
- method: req.method
170
- })),
171
- tsplus_module_4.Effect.suspend(() => {
172
- const headers = res.getHeaders();
173
- return tsplus_module_4.Effect.annotateLogs({
174
- method: req.method,
175
- path: req.originalUrl,
176
- statusCode: res.statusCode.toString(),
177
- reqPath: tsplus_module_8.RecordPretty(tsplus_module_8.object$(pars.path)),
178
- reqQuery: tsplus_module_8.RecordPretty(tsplus_module_8.object$(pars.query)),
179
- reqBody: pretty(pars.body),
180
- reqCookies: pretty(pars.cookies),
181
- reqHeaders: tsplus_module_8.RecordPretty(tsplus_module_8.object$(pars.headers)),
182
- resHeaders: tsplus_module_8.RecordPretty(tsplus_module_8.object$(Object
183
- .entries(headers)
184
- .reduce((prev, [key, value]) => {
185
- prev[key] = value && typeof value === "string" ? snipString(value) : value;
186
- return prev;
187
- }, {})))
188
- })(tsplus_module_4.Effect.logError("Finished request", cause));
189
- })
190
- ], { concurrency: "inherit" }), (cause) => tsplus_module_4.Effect.sync(() => console.error("Error occurred while reporting error", cause)))), () => tsplus_module_6.flatMap(tsplus_module_9.get(RequestSettings), (s) => {
191
- const headers = res.getHeaders();
192
- return tsplus_module_4.Effect.annotateLogs({
193
- method: req.method,
194
- path: req.originalUrl,
195
- statusCode: res.statusCode.toString(),
196
- ...s.verbose
197
- ? {
198
- resHeaders: tsplus_module_8.RecordPretty(tsplus_module_8.object$(headers))
199
- }
200
- : undefined
201
- })(tsplus_module_4.Effect.logInfo("Finished request"));
202
- }))), RequestContextContainer, new RequestContextContainerImpl(requestContext)) // otherwise external error reporter breaks.
203
- );
204
- };
205
- }
206
- /**
207
- * Gather all handlers of a module and attach them to the Server.
208
- * Requires no login.
209
- */
210
- export function matchAll(handlers) {
211
- const mapped = tsplus_module_8.RecordKeys(tsplus_module_8.object$(handlers)).reduce((prev, cur) => {
212
- prev[cur] = match(handlers[cur], defaultBasicErrorHandler);
213
- return prev;
214
- }, {});
215
- return mapped;
216
- }
217
- /**
218
- * Gather all handlers of a module and attach them to the Server.
219
- * Requires no login.
220
- */
221
- export function matchAllAlt(handlers) {
222
- const mapped = tsplus_module_8.RecordKeys(tsplus_module_8.object$(handlers)).reduce((prev, cur) => {
223
- const matches = matchAll(handlers[cur]);
224
- tsplus_module_8.RecordKeys(tsplus_module_8.object$(matches)).forEach((key) => prev[`${cur}.${key}`] = matches[key]);
225
- return prev;
226
- }, {});
227
- return mapped;
228
- }
229
- export function handle(_, adaptResponse) {
230
- // TODO: Prevent over providing // no strict/shrink yet.
231
- const Request = MO.extractRequest(_);
232
- const Response = MO.extractResponse(_);
233
- return (h) => ({
234
- adaptResponse,
235
- h,
236
- Request,
237
- Response,
238
- ResponseOpenApi: _.ResponseOpenApi ?? Response
239
- });
240
- }
241
- /**
242
- * Provided a module with resources, and provided an Object with resource handlers, will prepare route handlers to be attached to server.
243
- * @param mod The module with Resources you want to match.
244
- * @returns A function that must be called with an Object with a handler "Request -> Effect<R, E, Response>" for each resource defined in the Module.
245
- *
246
- * Example:
247
- * ```
248
- * class SayHelloRequest extends Get("/say-hello")<SayHelloRequest>()({ name: prop(ReasonableString) }) {}
249
- * class SayHelloResponse extends Model<SayHelloRequest>()({ message: prop(LongString) }) {}
250
- *
251
- * export const SayHelloControllers = matchResource({ SayHello: { SayHelloRequest, SayHelloResponse } })({
252
- * SayHello: (req) => Effect.sync(() => { message: `Hi ${req.name}` })
253
- * })
254
- * ```
255
- */
256
- export function matchResource(mod) {
257
- return (handlers) => {
258
- const handler = tsplus_module_8.RecordKeys(tsplus_module_8.object$(mod)).reduce((prev, cur) => {
259
- prev[cur] = handle(mod[cur])(handlers[cur]);
260
- return prev;
261
- }, {});
262
- return handler;
263
- };
264
- }
265
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGluZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL19zcmMvYXBpL3JvdXRpbmcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFBQSx1REFBdUQ7QUFDdkQsT0FBTyxLQUFLLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQTtBQUd4RCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0seUJBQXlCLENBQUE7QUFFbkQsT0FBTyxFQUFFLGFBQWEsRUFBRSxXQUFXLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQTtBQUN2RSxPQUFPLEtBQUssRUFBRSxNQUFNLDRCQUE0QixDQUFBO0FBQ2hELE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQTtBQUdsRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sc0JBQXNCLENBQUE7QUFDckQsT0FBTyxFQUFFLHVCQUF1QixFQUFFLDJCQUEyQixFQUFFLE1BQU0sd0NBQXdDLENBQUE7QUFDN0csT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sNkJBQTZCLENBQUE7QUFDdkUsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sMEJBQTBCLENBQUE7QUFFbkUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sb0NBQW9DLENBQUE7QUFFdkUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sNkJBQTZCLENBQUE7QUFDakUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sa0JBQWtCLENBQUE7QUFDckQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLFdBQVcsQ0FBQTtBQUV0QyxNQUFNLENBQUMsTUFBTSxlQUFlLEdBQUcsZ0JBQUEsUUFBUSxDQUFDLFVBQVUsQ0FBQztJQUNqRCxPQUFPLEVBQUUsS0FBSztDQUNmLENBQUMsQ0FBQTtBQUVGLE1BQU0sVUFBVSxrQkFBa0IsQ0FXaEMsT0FVWTtJQUVaLE1BQU0sRUFBRSxHQUFHLGdCQUFBLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLENB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