@effect-app/infra 0.85.0-next.3 → 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 -25
  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 +31 -31
  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,278 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.RequestSettings = void 0;
7
- exports.handle = handle;
8
- exports.makeRequestHandler = makeRequestHandler;
9
- exports.makeRequestParsers = makeRequestParsers;
10
- exports.match = match;
11
- exports.matchAll = matchAll;
12
- exports.matchAllAlt = matchAllAlt;
13
- exports.matchResource = matchResource;
14
- exports.respondSuccess = respondSuccess;
15
- var tsplus_module_1 = _interopRequireWildcard(require("effect/FiberRef"));
16
- var tsplus_module_2 = _interopRequireWildcard(require("effect/Option"));
17
- var tsplus_module_3 = _interopRequireWildcard(require("effect/impl/Option"));
18
- var tsplus_module_4 = _interopRequireWildcard(require("effect/Effect"));
19
- var tsplus_module_5 = _interopRequireWildcard(require("@effect-app/core/EffectX"));
20
- var tsplus_module_6 = _interopRequireWildcard(require("effect/impl/Effect"));
21
- var tsplus_module_7 = _interopRequireWildcard(require("@effect-app/schema/ext"));
22
- var _utils = _interopRequireWildcard(require("@effect-app/prelude/utils"));
23
- var tsplus_module_8 = _utils;
24
- var tsplus_module_9 = _interopRequireWildcard(require("effect/impl/FiberRef"));
25
- var tsplus_module_10 = _interopRequireWildcard(require("@effect-app/core/OptionX"));
26
- var tsplus_module_11 = _interopRequireWildcard(require("@effect-app/infra/api/setupRequest"));
27
- var Ex = _interopRequireWildcard(require("@effect-app/infra-adapters/express"));
28
- var _ids = require("@effect-app/prelude/ids");
29
- var _schema = _interopRequireWildcard(require("@effect-app/prelude/schema"));
30
- var MO = _schema;
31
- var _RequestContext = require("../RequestContext.cjs");
32
- var _RequestContextContainer = require("../services/RequestContextContainer.cjs");
33
- var _Memory = require("../services/Store/Memory.cjs");
34
- var _defaultErrorHandler = require("./defaultErrorHandler.cjs");
35
- var _requestHandler = require("./express/schema/requestHandler.cjs");
36
- var _routing = require("./express/schema/routing.cjs");
37
- var _reportError = require("./reportError.cjs");
38
- var _util = require("./util.cjs");
39
- function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
40
- function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
41
- /* eslint-disable @typescript-eslint/no-explicit-any */
42
-
43
- const RequestSettings = exports.RequestSettings = tsplus_module_1.FiberRef.unsafeMake({
44
- verbose: false
45
- });
46
- function makeRequestParsers(Request) {
47
- 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));
48
- const parseHeaders = u => tsplus_module_5.flatMapOption(ph, d => d(u));
49
- 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));
50
- const parseQuery = u => tsplus_module_5.flatMapOption(pq, d => d(u));
51
- 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));
52
- const parseBody = u => tsplus_module_5.flatMapOption(pb, d => d(u));
53
- 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));
54
- const parsePath = u => tsplus_module_5.flatMapOption(pp, d => d(u));
55
- 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));
56
- const parseCookie = u => tsplus_module_5.flatMapOption(pc, d => d(u));
57
- return {
58
- parseBody,
59
- parseCookie,
60
- parseHeaders,
61
- parsePath,
62
- parseQuery
63
- };
64
- }
65
- function match(requestHandler, errorHandler, middleware) {
66
- let makeMiddlewareContext = undefined;
67
- if (middleware) {
68
- const {
69
- handler,
70
- makeContext
71
- } = middleware(requestHandler);
72
- requestHandler = handler;
73
- makeMiddlewareContext = makeContext;
74
- }
75
- return tsplus_module_6.zipRight(Ex.match(requestHandler.Request.method.toLowerCase())(requestHandler.Request.path.split("?")[0], makeRequestHandler(requestHandler, errorHandler, makeMiddlewareContext)), tsplus_module_4.Effect.sync(() => (0, _routing.makeRouteDescriptor)(requestHandler.Request.path, requestHandler.Request.method, requestHandler)));
76
- }
77
- function respondSuccess(encodeResponse) {
78
- return (req, res, a) => tsplus_module_6.flatMap(tsplus_module_4.Effect.sync(() => encodeResponse(req)(a)), r => tsplus_module_4.Effect.sync(() => {
79
- r === undefined ? res.status(204).send() : res.status(200).send(JSON.stringify(r));
80
- }));
81
- }
82
- function makeRequestHandler(handler, errorHandler, makeMiddlewareContext) {
83
- const {
84
- Request,
85
- Response,
86
- adaptResponse,
87
- h: handle
88
- } = handler;
89
- const response = Response ? (0, _schema.extractSchema)(Response) : MO.Void;
90
- const encoder = MO.Encoder.for(response);
91
- const encodeResponse = adaptResponse ? req => MO.Encoder.for(adaptResponse(req)) : () => encoder;
92
- const requestParsers = makeRequestParsers(Request);
93
- const parseRequest = (0, _requestHandler.parseRequestParams)(requestParsers);
94
- const respond = respondSuccess(encodeResponse);
95
- function getParams(req) {
96
- return tsplus_module_4.Effect.sync(() => ({
97
- path: req.params,
98
- query: req.query,
99
- body: req.body,
100
- headers: req.headers,
101
- cookies: req.cookies
102
- }));
103
- }
104
- function makeContext(req) {
105
- const start = new Date();
106
- const supported = ["en", "de"];
107
- const desiredLocale = req.headers["x-locale"];
108
- const locale = desiredLocale && supported.includes(desiredLocale) ? desiredLocale : "en";
109
- // const context = getAppInsightsContext()
110
- // if (!context) {
111
- // throw new Error("AI Context missing")
112
- // }
113
- const requestId = req.headers["request-id"];
114
- const rootId = requestId ? tsplus_module_7.parseUnsafe(_ids.RequestId)(requestId) : _ids.RequestId.make();
115
- const storeId = req.headers["x-store-id"];
116
- const namespace = MO.ReasonableString(storeId && (Array.isArray(storeId) ? storeId[0] : storeId) || "primary");
117
- const requestContext = new _RequestContext.RequestContext({
118
- rootId,
119
- name: MO.ReasonableString(Request.Model instanceof _schema.SchemaNamed ? Request.Model.name : Request.name),
120
- locale,
121
- createdAt: start,
122
- namespace
123
- // ...(context.operation.parentId
124
- // ? {
125
- // parent: new RequestContextParent({
126
- // id: RequestId(context.operation.parentId),
127
- // locale,
128
- // name: ReasonableString("API Request")
129
- // })
130
- // }
131
- // : {})
132
- });
133
- // context.requestContext = requestContext
134
- return requestContext;
135
- }
136
- return (req, res) => {
137
- return tsplus_module_6.flatMap(tsplus_module_4.Effect.all({
138
- requestContext: tsplus_module_4.Effect.sync(() => {
139
- const requestContext = makeContext(req);
140
- if (req.method === "GET") {
141
- res.setHeader("Cache-Control", "no-store");
142
- }
143
- res.setHeader("Content-Language", requestContext.locale);
144
- return requestContext;
145
- }),
146
- pars: getParams(req)
147
- }), ({
148
- pars,
149
- requestContext
150
- }) => 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({
151
- method: req.method,
152
- path: req.originalUrl,
153
- ...(s.verbose ? {
154
- reqPath: tsplus_module_8.RecordPretty(tsplus_module_8.object$(pars.path)),
155
- reqQuery: tsplus_module_8.RecordPretty(tsplus_module_8.object$(pars.query)),
156
- reqBody: (0, _utils.pretty)(pars.body),
157
- reqCookies: (0, _utils.pretty)(pars.cookies),
158
- reqHeaders: tsplus_module_8.RecordPretty(tsplus_module_8.object$(pars.headers))
159
- } : undefined)
160
- })(
161
- // TODO: we don;t have access to user id here cause context is not yet created
162
- tsplus_module_4.Effect.logInfo("Incoming request"))), tsplus_module_4.Effect.suspend(() => {
163
- const handleRequest = tsplus_module_6.flatMap(tsplus_module_6.map(parseRequest(req), ({
164
- body,
165
- path,
166
- query
167
- }) => {
168
- const hn = {
169
- ...tsplus_module_10.getOrUndefined(body),
170
- ...tsplus_module_10.getOrUndefined(query),
171
- ...tsplus_module_10.getOrUndefined(path)
172
- };
173
- return hn;
174
- }), parsedReq => tsplus_module_6.flatMap(handle(parsedReq), r => respond(parsedReq, res, r)));
175
- // Commands should not be interruptable.
176
- const r = req.method !== "GET" ? tsplus_module_6.uninterruptible(handleRequest) : handleRequest; // .instrument("Performance.RequestResponse")
177
- // the first log entry should be of the request start.
178
- const r2 = makeMiddlewareContext ? tsplus_module_6.zipRight(_Memory.restoreFromRequestContext, tsplus_module_5.provideSomeContextEffect(makeMiddlewareContext(req, res))(r
179
- // the db namespace must be restored, before calling provide here
180
- )) : tsplus_module_6.zipRight(_Memory.restoreFromRequestContext
181
- // PR is not relevant here
182
- , r);
183
- return errorHandler(req, res, r2);
184
- })), cause => tsplus_module_6.tapErrorCause(tsplus_module_4.Effect.all([tsplus_module_4.Effect.sync(() => res.status(500).send()), tsplus_module_4.Effect.sync(() => (0, _reportError.reportRequestError)(cause, {
185
- path: req.originalUrl,
186
- method: req.method
187
- })), tsplus_module_4.Effect.suspend(() => {
188
- const headers = res.getHeaders();
189
- return tsplus_module_4.Effect.annotateLogs({
190
- method: req.method,
191
- path: req.originalUrl,
192
- statusCode: res.statusCode.toString(),
193
- reqPath: tsplus_module_8.RecordPretty(tsplus_module_8.object$(pars.path)),
194
- reqQuery: tsplus_module_8.RecordPretty(tsplus_module_8.object$(pars.query)),
195
- reqBody: (0, _utils.pretty)(pars.body),
196
- reqCookies: (0, _utils.pretty)(pars.cookies),
197
- reqHeaders: tsplus_module_8.RecordPretty(tsplus_module_8.object$(pars.headers)),
198
- resHeaders: tsplus_module_8.RecordPretty(tsplus_module_8.object$(Object.entries(headers).reduce((prev, [key, value]) => {
199
- prev[key] = value && typeof value === "string" ? (0, _util.snipString)(value) : value;
200
- return prev;
201
- }, {})))
202
- })(tsplus_module_4.Effect.logError("Finished request", cause));
203
- })], {
204
- concurrency: "inherit"
205
- }), cause => tsplus_module_4.Effect.sync(() => console.error("Error occurred while reporting error", cause)))), () => tsplus_module_6.flatMap(tsplus_module_9.get(RequestSettings), s => {
206
- const headers = res.getHeaders();
207
- return tsplus_module_4.Effect.annotateLogs({
208
- method: req.method,
209
- path: req.originalUrl,
210
- statusCode: res.statusCode.toString(),
211
- ...(s.verbose ? {
212
- resHeaders: tsplus_module_8.RecordPretty(tsplus_module_8.object$(headers))
213
- } : undefined)
214
- })(tsplus_module_4.Effect.logInfo("Finished request"));
215
- }))), _RequestContextContainer.RequestContextContainer, new _RequestContextContainer.RequestContextContainerImpl(requestContext)) // otherwise external error reporter breaks.
216
- );
217
- };
218
- }
219
- /**
220
- * Gather all handlers of a module and attach them to the Server.
221
- * Requires no login.
222
- */
223
- function matchAll(handlers) {
224
- const mapped = tsplus_module_8.RecordKeys(tsplus_module_8.object$(handlers)).reduce((prev, cur) => {
225
- prev[cur] = match(handlers[cur], _defaultErrorHandler.defaultBasicErrorHandler);
226
- return prev;
227
- }, {});
228
- return mapped;
229
- }
230
- /**
231
- * Gather all handlers of a module and attach them to the Server.
232
- * Requires no login.
233
- */
234
- function matchAllAlt(handlers) {
235
- const mapped = tsplus_module_8.RecordKeys(tsplus_module_8.object$(handlers)).reduce((prev, cur) => {
236
- const matches = matchAll(handlers[cur]);
237
- tsplus_module_8.RecordKeys(tsplus_module_8.object$(matches)).forEach(key => prev[`${cur}.${key}`] = matches[key]);
238
- return prev;
239
- }, {});
240
- return mapped;
241
- }
242
- function handle(_, adaptResponse) {
243
- // TODO: Prevent over providing // no strict/shrink yet.
244
- const Request = MO.extractRequest(_);
245
- const Response = MO.extractResponse(_);
246
- return h => ({
247
- adaptResponse,
248
- h,
249
- Request,
250
- Response,
251
- ResponseOpenApi: _.ResponseOpenApi ?? Response
252
- });
253
- }
254
- /**
255
- * Provided a module with resources, and provided an Object with resource handlers, will prepare route handlers to be attached to server.
256
- * @param mod The module with Resources you want to match.
257
- * @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.
258
- *
259
- * Example:
260
- * ```
261
- * class SayHelloRequest extends Get("/say-hello")<SayHelloRequest>()({ name: prop(ReasonableString) }) {}
262
- * class SayHelloResponse extends Model<SayHelloRequest>()({ message: prop(LongString) }) {}
263
- *
264
- * export const SayHelloControllers = matchResource({ SayHello: { SayHelloRequest, SayHelloResponse } })({
265
- * SayHello: (req) => Effect.sync(() => { message: `Hi ${req.name}` })
266
- * })
267
- * ```
268
- */
269
- function matchResource(mod) {
270
- return handlers => {
271
- const handler = tsplus_module_8.RecordKeys(tsplus_module_8.object$(mod)).reduce((prev, cur) => {
272
- prev[cur] = handle(mod[cur])(handlers[cur]);
273
- return prev;
274
- }, {});
275
- return handler;
276
- };
277
- }
278
- //# sourceMappingURL=routing.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"routing.cjs","names":["Ex","_interopRequireWildcard","require","_ids","_schema","MO","_RequestContext","_RequestContextContainer","_Memory","_defaultErrorHandler","_requestHandler","_routing","_reportError","_util","_getRequireWildcardCache","e","WeakMap","r","t","__esModule","default","has","get","n","__proto__","a","Object","defineProperty","getOwnPropertyDescriptor","u","prototype","hasOwnProperty","call","i","set","RequestSettings","exports","tsplus_module_1","FiberRef","unsafeMake","verbose","makeRequestParsers","Request","ph","tsplus_module_4","Effect","sync","tsplus_module_3","map","tsplus_module_2","Option","fromNullable","Headers","s","Parser","for","condemnFail","parseHeaders","tsplus_module_5","flatMapOption","d","pq","Query","parseQuery","pb","Body","parseBody","pp","Path","parsePath","pc","Cookie","parseCookie","match","requestHandler","errorHandler","middleware","makeMiddlewareContext","undefined","handler","makeContext","tsplus_module_6","zipRight","method","toLowerCase","path","split","makeRequestHandler","makeRouteDescriptor","respondSuccess","encodeResponse","req","res","flatMap","status","send","JSON","stringify","Response","adaptResponse","h","handle","response","extractSchema","Void","encoder","Encoder","requestParsers","parseRequest","parseRequestParams","respond","getParams","params","query","body","headers","cookies","start","Date","supported","desiredLocale","locale","includes","requestId","rootId","tsplus_module_7","parseUnsafe","RequestId","make","storeId","namespace","ReasonableString","Array","isArray","requestContext","RequestContext","name","Model","SchemaNamed","createdAt","all","setHeader","pars","provideService","tsplus_module_11","withRequestSpan","tap","tapErrorCause","tsplus_module_9","annotateLogs","originalUrl","reqPath","tsplus_module_8","RecordPretty","object$","reqQuery","reqBody","pretty","reqCookies","reqHeaders","logInfo","suspend","handleRequest","hn","tsplus_module_10","getOrUndefined","parsedReq","uninterruptible","r2","restoreFromRequestContext","provideSomeContextEffect","cause","reportRequestError","getHeaders","statusCode","toString","resHeaders","entries","reduce","prev","key","value","snipString","logError","concurrency","console","error","RequestContextContainer","RequestContextContainerImpl","matchAll","handlers","mapped","RecordKeys","cur","defaultBasicErrorHandler","matchAllAlt","matches","forEach","_","extractRequest","extractResponse","ResponseOpenApi","matchResource","mod"],"sources":["../../_src/api/routing.ts"],"sourcesContent":[null],"mappings":"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"}
@@ -1,372 +0,0 @@
1
- /* eslint-disable @typescript-eslint/no-explicit-any */
2
- /* eslint-disable @typescript-eslint/ban-types */
3
- import * as MO from "@effect-app/schema"
4
- import type { Methods } from "@effect-app/schema"
5
- import { Parser } from "@effect-app/schema"
6
- import type express from "express"
7
- import { ValidationError } from "../../../errors.js"
8
-
9
- export type _R<T extends Effect<any, any, any>> = [T] extends [
10
- Effect<infer R, any, any>
11
- ] ? R
12
- : never
13
-
14
- export type _E<T extends Effect<any, any, any>> = [T] extends [
15
- Effect<any, infer E, any>
16
- ] ? E
17
- : never
18
-
19
- export type Request<
20
- PathA,
21
- CookieA,
22
- QueryA,
23
- BodyA,
24
- HeaderA,
25
- ReqA extends PathA & QueryA & BodyA
26
- > = MO.ReqResSchemed<unknown, ReqA> & {
27
- method: Methods
28
- path: string
29
- Cookie?: MO.ReqRes<Record<string, string>, CookieA>
30
- Path?: MO.ReqRes<Record<string, string>, PathA>
31
- Body?: MO.ReqRes<unknown, BodyA>
32
- Query?: MO.ReqRes<Record<string, string>, QueryA>
33
- Headers?: MO.ReqRes<Record<string, string>, HeaderA>
34
- }
35
-
36
- export type Request2<
37
- Path extends string,
38
- Method extends Methods,
39
- ReqA
40
- > = MO.ReqResSchemed<unknown, ReqA> & {
41
- method: Method
42
- path: Path
43
- }
44
-
45
- export type Encode<A, E> = (a: A) => E
46
-
47
- // function getErrorMessage(current: ContextEntry) {
48
- // switch (current.type.name) {
49
- // case "NonEmptyString":
50
- // return "Must not be empty"
51
- // }
52
- // if (current.type.name?.startsWith("NonEmptyReadonlyArray<")) {
53
- // return "Must not be empty"
54
- // }
55
- // return `Invalid value specified`
56
- // }
57
- export function decodeErrors(x: unknown) {
58
- return [x]
59
- }
60
-
61
- // const ValidationApplicative = Effect.getValidationApplicative(
62
- // makeAssociative<ReadonlyArray<{ type: string; errors: ReturnType<typeof decodeErrors> }>>(
63
- // (l, r) => l.concat(r)
64
- // )
65
- // )
66
-
67
- // const structValidation = DSL.structF(ValidationApplicative)
68
- export function parseRequestParams<PathA, CookieA, QueryA, BodyA, HeaderA>(
69
- parsers: RequestParsers<PathA, CookieA, QueryA, BodyA, HeaderA>
70
- ) {
71
- return ({ body, cookies, headers, params, query }: express.Request) =>
72
- Effect
73
- .all({
74
- body: parsers
75
- .parseBody(body)
76
- .exit
77
- .flatMap((_) =>
78
- _.isFailure() && !_.cause.isFailure()
79
- ? (Effect.failCauseSync(() => _.cause) as Effect<never, ValidationError, never>)
80
- : Effect.sync(() =>
81
- _.isSuccess()
82
- ? { _tag: "Success" as const, value: _.value }
83
- : { _tag: "Failure", errors: _.cause.failures }
84
- )
85
- ),
86
- cookie: parsers
87
- .parseCookie(cookies)
88
- .exit
89
- .flatMap((_) =>
90
- _.isFailure() && !_.cause.isFailure()
91
- ? (Effect.failCauseSync(() => _.cause) as Effect<never, ValidationError, never>)
92
- : Effect.sync(() =>
93
- _.isSuccess()
94
- ? { _tag: "Success" as const, value: _.value }
95
- : { _tag: "Failure", errors: _.cause.failures }
96
- )
97
- ),
98
- headers: parsers
99
- .parseHeaders(headers)
100
- .exit
101
- .flatMap((_) =>
102
- _.isFailure() && !_.cause.isFailure()
103
- ? (Effect.failCauseSync(() => _.cause) as Effect<never, ValidationError, never>)
104
- : Effect.sync(() =>
105
- _.isSuccess()
106
- ? { _tag: "Success" as const, value: _.value }
107
- : { _tag: "Failure", errors: _.cause.failures }
108
- )
109
- ),
110
- query: parsers
111
- .parseQuery(query)
112
- .exit
113
- .flatMap((_) =>
114
- _.isFailure() && !_.cause.isFailure()
115
- ? (Effect.failCauseSync(() => _.cause) as Effect<never, ValidationError, never>)
116
- : Effect.sync(() =>
117
- _.isSuccess()
118
- ? { _tag: "Success" as const, value: _.value }
119
- : { _tag: "Failure", errors: _.cause.failures }
120
- )
121
- ),
122
- path: parsers
123
- .parsePath(params)
124
- .exit
125
- .flatMap((_) =>
126
- _.isFailure() && !_.cause.isFailure()
127
- ? (Effect.failCauseSync(() => _.cause) as Effect<never, ValidationError, never>)
128
- : Effect.sync(() =>
129
- _.isSuccess()
130
- ? { _tag: "Success" as const, value: _.value }
131
- : { _tag: "Failure", errors: _.cause.failures }
132
- )
133
- )
134
- })
135
- .flatMap(({ body, cookie, headers, path, query }) => {
136
- const errors: unknown[] = []
137
- if (body._tag === "Failure") {
138
- errors.push(makeError("body")(body.errors))
139
- }
140
- if (cookie._tag === "Failure") {
141
- errors.push(makeError("cookie")(cookie.errors))
142
- }
143
- if (headers._tag === "Failure") {
144
- errors.push(makeError("headers")(headers.errors))
145
- }
146
- if (path._tag === "Failure") {
147
- errors.push(makeError("path")(path.errors))
148
- }
149
- if (query._tag === "Failure") {
150
- errors.push(makeError("query")(query.errors))
151
- }
152
- if (errors.length) {
153
- return new ValidationError({ errors })
154
- }
155
- return Effect.sync(() => ({
156
- body: body.value!,
157
- cookie: cookie.value!,
158
- headers: headers.value!,
159
- path: path.value!,
160
- query: query.value!
161
- }))
162
- })
163
- }
164
-
165
- // // eslint-disable-next-line @typescript-eslint/no-explicit-any
166
- // function mapErrors_<E, NE, NER extends Record<string, Effect<any, E, any>>>(
167
- // t: NER, // TODO: enforce non empty
168
- // mapErrors: (k: keyof NER) => (err: E) => NE
169
- // ): {
170
- // [K in keyof NER]: Effect<_R<NER[K]>, NE, Effect.Success<NER[K]>>
171
- // } {
172
- // return typedKeysOf(t).reduce(
173
- // (prev, cur) => {
174
- // prev[cur] = t[cur].mapError(mapErrors(cur))
175
- // return prev
176
- // },
177
- // {} as {
178
- // [K in keyof NER]: Effect<_R<NER[K]>, NE, Effect.Success<NER[K]>>
179
- // }
180
- // )
181
- // }
182
-
183
- function makeError(type: string) {
184
- return (e: unknown) => [{ type, errors: decodeErrors(e) }]
185
- }
186
-
187
- export function respondSuccess<ReqA, A, E>(
188
- encodeResponse: (req: ReqA) => Encode<A, E>
189
- ) {
190
- return (req: ReqA, res: express.Response) =>
191
- flow(encodeResponse(req), Effect.succeed, (_) =>
192
- _.flatMap((r) =>
193
- Effect.sync(() => {
194
- r === undefined
195
- ? res.status(204).send()
196
- : res.status(200).send(r === null ? JSON.stringify(null) : r)
197
- })
198
- ))
199
- }
200
-
201
- export interface RequestHandlerOptRes<
202
- R,
203
- PathA,
204
- CookieA,
205
- QueryA,
206
- BodyA,
207
- HeaderA,
208
- ReqA extends PathA & QueryA & BodyA,
209
- ResA,
210
- ResE
211
- > {
212
- adaptResponse?: any
213
- h: (i: PathA & QueryA & BodyA & {}) => Effect<R, ResE, ResA>
214
- Request: Request<PathA, CookieA, QueryA, BodyA, HeaderA, ReqA>
215
- Response?: MO.ReqRes<unknown, ResA> | MO.ReqResSchemed<unknown, ResA>
216
- }
217
-
218
- export interface RequestHandler<
219
- R,
220
- PathA,
221
- CookieA,
222
- QueryA,
223
- BodyA,
224
- HeaderA,
225
- ReqA extends PathA & QueryA & BodyA,
226
- ResA,
227
- ResE
228
- > {
229
- adaptResponse?: any
230
- h: (i: PathA & QueryA & BodyA & {}) => Effect<R, ResE, ResA>
231
- Request: Request<PathA, CookieA, QueryA, BodyA, HeaderA, ReqA>
232
- Response: MO.ReqRes<unknown, ResA> | MO.ReqResSchemed<unknown, ResA>
233
- ResponseOpenApi?: any
234
- }
235
-
236
- export interface RequestHandler2<
237
- R,
238
- Path extends string,
239
- Method extends Methods,
240
- ReqA,
241
- ResA,
242
- ResE
243
- > {
244
- h: (i: ReqA) => Effect<R, ResE, ResA>
245
- Request: Request2<Path, Method, ReqA>
246
- Response: MO.ReqRes<unknown, ResA> | MO.ReqResSchemed<unknown, ResA>
247
- }
248
-
249
- export type MiddlewareHandler<ResE, R2 = never, PR = never> = (
250
- req: express.Request,
251
- res: express.Response
252
- ) => Layer<R2, ResE, PR>
253
-
254
- export type Middleware<
255
- R,
256
- PathA,
257
- CookieA,
258
- QueryA,
259
- BodyA,
260
- HeaderA,
261
- ReqA extends PathA & QueryA & BodyA,
262
- ResA,
263
- ResE,
264
- R2 = never,
265
- PR = never
266
- > = (
267
- handler: RequestHandler<R, PathA, CookieA, QueryA, BodyA, HeaderA, ReqA, ResA, ResE>
268
- ) => {
269
- handler: typeof handler
270
- handle: MiddlewareHandler<ResE, R2, PR>
271
- }
272
-
273
- export type Middleware2<R, ReqA, ResA, R2 = never, PR = never> = Middleware<
274
- R,
275
- any,
276
- any,
277
- any,
278
- any,
279
- any,
280
- ReqA,
281
- ResA,
282
- any,
283
- R2,
284
- PR
285
- >
286
-
287
- export function makeRequestParsers<
288
- R,
289
- PathA,
290
- CookieA,
291
- QueryA,
292
- BodyA,
293
- HeaderA,
294
- ReqA extends PathA & QueryA & BodyA,
295
- ResA,
296
- Errors
297
- >(
298
- Request: RequestHandler<
299
- R,
300
- PathA,
301
- CookieA,
302
- QueryA,
303
- BodyA,
304
- HeaderA,
305
- ReqA,
306
- ResA,
307
- Errors
308
- >["Request"]
309
- ): RequestParsers<PathA, CookieA, QueryA, BodyA, HeaderA> {
310
- const ph = Effect.sync(() =>
311
- Option
312
- .fromNullable(Request.Headers)
313
- .map((s) => s)
314
- .map(Parser.for)
315
- .map(MO.condemn)
316
- )
317
- const parseHeaders = (u: unknown) => ph.flatMapOpt((d) => d(u))
318
-
319
- const pq = Effect.sync(() =>
320
- Option
321
- .fromNullable(Request.Query)
322
- .map((s) => s)
323
- .map(Parser.for)
324
- .map(MO.condemn)
325
- )
326
- const parseQuery = (u: unknown) => pq.flatMapOpt((d) => d(u))
327
-
328
- const pb = Effect.sync(() =>
329
- Option
330
- .fromNullable(Request.Body)
331
- .map((s) => s)
332
- .map(Parser.for)
333
- .map(MO.condemn)
334
- )
335
- const parseBody = (u: unknown) => pb.flatMapOpt((d) => d(u))
336
-
337
- const pp = Effect.sync(() =>
338
- Option
339
- .fromNullable(Request.Path)
340
- .map((s) => s)
341
- .map(Parser.for)
342
- .map(MO.condemn)
343
- )
344
- const parsePath = (u: unknown) => pp.flatMapOpt((d) => d(u))
345
-
346
- const pc = Effect.sync(() =>
347
- Option
348
- .fromNullable(Request.Cookie)
349
- .map((s) => s)
350
- .map(Parser.for)
351
- .map(MO.condemn)
352
- )
353
- const parseCookie = (u: unknown) => pc.flatMapOpt((d) => d(u))
354
-
355
- return {
356
- parseBody,
357
- parseCookie,
358
- parseHeaders,
359
- parsePath,
360
- parseQuery
361
- }
362
- }
363
-
364
- type Decode<A> = (u: unknown) => Effect<never, unknown, A>
365
-
366
- export interface RequestParsers<PathA, CookieA, QueryA, BodyA, HeaderA> {
367
- parseHeaders: Decode<Option<HeaderA>>
368
- parseQuery: Decode<Option<QueryA>>
369
- parseBody: Decode<Option<BodyA>>
370
- parsePath: Decode<Option<PathA>>
371
- parseCookie: Decode<Option<CookieA>>
372
- }