@effect-app/infra 0.7.0 → 0.8.1

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 (449) hide show
  1. package/CHANGELOG.md +19 -0
  2. package/_cjs/{lib/RequestContext.cjs → RequestContext.cjs} +0 -0
  3. package/_cjs/{lib/RequestContext.cjs.map → RequestContext.cjs.map} +1 -1
  4. package/_cjs/{lib/api → api}/authorization.jwt.cjs +1 -1
  5. package/_cjs/{lib/api → api}/authorization.jwt.cjs.map +1 -1
  6. package/_cjs/{vendor/Cache/Cache/operations/makeWith.cjs → api/codec.cjs} +16 -13
  7. package/_cjs/api/codec.cjs.map +1 -0
  8. package/_cjs/{lib/api → api}/defaultErrorHandler.cjs +1 -1
  9. package/_cjs/{lib/api → api}/defaultErrorHandler.cjs.map +1 -1
  10. package/_cjs/{services/memQueue.cjs → api/express/makeJsonSchema.cjs} +42 -22
  11. package/_cjs/api/express/makeJsonSchema.cjs.map +1 -0
  12. package/_cjs/api/express/makeOpenApiSpecs.cjs +66 -0
  13. package/_cjs/api/express/makeOpenApiSpecs.cjs.map +1 -0
  14. package/_cjs/api/express/schema/jwt.cjs +43 -0
  15. package/_cjs/api/express/schema/jwt.cjs.map +1 -0
  16. package/_cjs/api/express/schema/requestHandler.cjs +166 -0
  17. package/_cjs/api/express/schema/requestHandler.cjs.map +1 -0
  18. package/_cjs/api/express/schema/routing.cjs +121 -0
  19. package/_cjs/api/express/schema/routing.cjs.map +1 -0
  20. package/_cjs/{lib/api → api}/reportError.cjs +5 -5
  21. package/_cjs/{lib/api → api}/reportError.cjs.map +1 -1
  22. package/_cjs/{lib/api → api}/routing.cjs +32 -32
  23. package/_cjs/{lib/api → api}/routing.cjs.map +1 -1
  24. package/_cjs/{lib/api → api}/setupRequest.cjs +2 -2
  25. package/_cjs/{lib/api → api}/setupRequest.cjs.map +1 -1
  26. package/_cjs/{lib/api → api}/util.cjs +0 -0
  27. package/_cjs/{lib/api → api}/util.cjs.map +1 -1
  28. package/_cjs/{lib/api → api}/writeDocs.cjs +5 -5
  29. package/_cjs/{lib/api → api}/writeDocs.cjs.map +1 -1
  30. package/_cjs/{lib/errorReporter.cjs → errorReporter.cjs} +1 -1
  31. package/_cjs/{lib/errorReporter.cjs.map → errorReporter.cjs.map} +1 -1
  32. package/_cjs/errors.cjs +21 -22
  33. package/_cjs/errors.cjs.map +1 -1
  34. package/_cjs/{lib/ext → ext}/Array.cjs +1 -1
  35. package/_cjs/{lib/ext → ext}/Array.cjs.map +1 -1
  36. package/_cjs/{lib/filter → filter}/types/errors.cjs +0 -0
  37. package/_cjs/{lib/filter → filter}/types/errors.cjs.map +0 -0
  38. package/_cjs/{lib/filter → filter}/types/fields.cjs +0 -0
  39. package/_cjs/{lib/filter → filter}/types/fields.cjs.map +0 -0
  40. package/_cjs/{lib/filter → filter}/types/index.cjs +0 -0
  41. package/_cjs/{lib/filter → filter}/types/index.cjs.map +1 -1
  42. package/_cjs/{lib/filter → filter}/types/path/common.cjs +0 -0
  43. package/_cjs/{lib/filter → filter}/types/path/common.cjs.map +0 -0
  44. package/_cjs/{lib/filter → filter}/types/path/eager.cjs +0 -0
  45. package/_cjs/{lib/filter → filter}/types/path/eager.cjs.map +0 -0
  46. package/_cjs/{lib/filter → filter}/types/path/index.cjs +0 -0
  47. package/_cjs/filter/types/path/index.cjs.map +1 -0
  48. package/_cjs/{lib/filter → filter}/types/utils.cjs +0 -0
  49. package/_cjs/{lib/filter → filter}/types/utils.cjs.map +0 -0
  50. package/_cjs/{lib/filter → filter}/types/validator.cjs +0 -0
  51. package/_cjs/{lib/filter → filter}/types/validator.cjs.map +0 -0
  52. package/_cjs/{lib/filter.cjs → filter.cjs} +0 -0
  53. package/_cjs/{lib/filter.cjs.map → filter.cjs.map} +1 -1
  54. package/_cjs/{lib/instrument.cjs → instrument.cjs} +1 -1
  55. package/_cjs/{lib/instrument.cjs.map → instrument.cjs.map} +1 -1
  56. package/_cjs/{lib/rateLimit.cjs → rateLimit.cjs} +1 -1
  57. package/_cjs/{lib/rateLimit.cjs.map → rateLimit.cjs.map} +1 -1
  58. package/_cjs/services/Emailer/Sendgrid.cjs +1 -1
  59. package/_cjs/services/Emailer/fake.cjs +1 -1
  60. package/_cjs/services/Repository.cjs +1 -1
  61. package/_cjs/services/Store/Cosmos.cjs +2 -2
  62. package/_cjs/services/Store/Cosmos.test.cjs +2 -2
  63. package/_cjs/services/Store/Disk.cjs +2 -2
  64. package/_cjs/services/Store/Memory.cjs +1 -1
  65. package/_cjs/services/Store/Redis.cjs +1 -1
  66. package/_cjs/services/Store/codeFilter.test.cjs +2 -2
  67. package/_cjs/services/Store/index.cjs +1 -1
  68. package/_cjs/services/Store/service.cjs +1 -1
  69. package/_cjs/services/Store/utils.cjs +1 -1
  70. package/_cjs/services/simpledb/cosmosdb.cjs +98 -0
  71. package/_cjs/services/simpledb/cosmosdb.cjs.map +1 -0
  72. package/_cjs/services/simpledb/diskdb.cjs +118 -0
  73. package/_cjs/services/simpledb/diskdb.cjs.map +1 -0
  74. package/_cjs/services/simpledb/fileutil.cjs +36 -0
  75. package/_cjs/services/simpledb/fileutil.cjs.map +1 -0
  76. package/_cjs/{vendor/Cache/Cache/_internal/CacheState.cjs → services/simpledb/index.cjs} +31 -24
  77. package/_cjs/services/simpledb/index.cjs.map +1 -0
  78. package/_cjs/services/simpledb/memdb.cjs +74 -0
  79. package/_cjs/services/simpledb/memdb.cjs.map +1 -0
  80. package/_cjs/services/simpledb/mongodb.cjs +86 -0
  81. package/_cjs/services/simpledb/mongodb.cjs.map +1 -0
  82. package/_cjs/services/simpledb/redisdb.cjs +120 -0
  83. package/_cjs/services/simpledb/redisdb.cjs.map +1 -0
  84. package/_cjs/services/simpledb/shared.cjs +80 -0
  85. package/_cjs/services/simpledb/shared.cjs.map +1 -0
  86. package/_cjs/services/simpledb/simpledb.cjs +77 -0
  87. package/_cjs/services/simpledb/simpledb.cjs.map +1 -0
  88. package/_src/{lib/RequestContext.ts → RequestContext.ts} +0 -0
  89. package/_src/_global.ext.ts +5 -5
  90. package/_src/api/app.ts.bak +125 -0
  91. package/_src/{lib/api → api}/authorization.jwt.ts +1 -1
  92. package/_src/api/codec.ts +27 -0
  93. package/_src/{lib/api → api}/defaultErrorHandler.ts +1 -1
  94. package/_src/api/errors.ts.bak +20 -0
  95. package/_src/api/express/makeJsonSchema.ts +49 -0
  96. package/_src/api/express/makeOpenApiSpecs.ts +60 -0
  97. package/_src/api/express/routing.ts.bak +460 -0
  98. package/_src/api/express/schema/jwt.ts +38 -0
  99. package/_src/api/express/schema/requestHandler.ts +360 -0
  100. package/_src/api/express/schema/routing.ts +202 -0
  101. package/_src/{lib/api → api}/reportError.ts +3 -3
  102. package/_src/{lib/api → api}/routing.ts +7 -12
  103. package/_src/{lib/api → api}/setupRequest.ts +0 -0
  104. package/_src/{lib/api → api}/util.ts +0 -0
  105. package/_src/{lib/api → api}/writeDocs.ts +4 -5
  106. package/_src/{lib/errorReporter.ts → errorReporter.ts} +1 -1
  107. package/_src/errors.ts +12 -3
  108. package/_src/{lib/ext → ext}/Array.ts +1 -1
  109. package/_src/{lib/filter → filter}/types/errors.ts +0 -0
  110. package/_src/{lib/filter → filter}/types/fields.ts +0 -0
  111. package/_src/{lib/filter → filter}/types/index.ts +0 -0
  112. package/_src/{lib/filter → filter}/types/path/common.ts +0 -0
  113. package/_src/{lib/filter → filter}/types/path/eager.ts +0 -0
  114. package/_src/{lib/filter → filter}/types/path/index.ts +0 -0
  115. package/_src/{lib/filter → filter}/types/utils.ts +0 -0
  116. package/_src/{lib/filter → filter}/types/validator.ts +0 -0
  117. package/_src/{lib/filter.ts → filter.ts} +1 -1
  118. package/_src/{lib/instrument.ts → instrument.ts} +0 -0
  119. package/_src/{lib/rateLimit.ts → rateLimit.ts} +0 -0
  120. package/_src/services/Emailer/service.ts +1 -1
  121. package/_src/services/Repository.ts +1 -1
  122. package/_src/services/Store/Cosmos.test.ts +1 -1
  123. package/_src/services/Store/Disk.ts +1 -1
  124. package/_src/services/Store/codeFilter.test.ts +1 -1
  125. package/_src/services/simpledb/cosmosdb.ts +134 -0
  126. package/_src/services/simpledb/diskdb.ts +158 -0
  127. package/_src/services/simpledb/fileutil.ts +28 -0
  128. package/_src/services/simpledb/index.ts +6 -0
  129. package/_src/services/simpledb/memdb.ts +79 -0
  130. package/_src/services/simpledb/mongodb.ts +99 -0
  131. package/_src/services/simpledb/redisdb.ts +182 -0
  132. package/_src/services/simpledb/shared.ts +117 -0
  133. package/_src/services/simpledb/simpledb.ts +117 -0
  134. package/dist/{lib/RequestContext.d.ts → RequestContext.d.ts} +1 -1
  135. package/dist/RequestContext.d.ts.map +1 -0
  136. package/dist/RequestContext.js +52 -0
  137. package/dist/_global.ext.d.ts +5 -5
  138. package/dist/_global.ext.d.ts.map +1 -1
  139. package/dist/{lib/api → api}/authorization.jwt.d.ts +1 -1
  140. package/dist/api/authorization.jwt.d.ts.map +1 -0
  141. package/dist/{lib/api → api}/authorization.jwt.js +2 -2
  142. package/dist/api/codec.d.ts +7 -0
  143. package/dist/api/codec.d.ts.map +1 -0
  144. package/dist/api/codec.js +19 -0
  145. package/dist/{lib/api → api}/defaultErrorHandler.d.ts +1 -1
  146. package/dist/api/defaultErrorHandler.d.ts.map +1 -0
  147. package/dist/{lib/api → api}/defaultErrorHandler.js +2 -2
  148. package/dist/api/express/makeJsonSchema.d.ts +30 -0
  149. package/dist/api/express/makeJsonSchema.d.ts.map +1 -0
  150. package/dist/api/express/makeJsonSchema.js +40 -0
  151. package/dist/api/express/makeOpenApiSpecs.d.ts +55 -0
  152. package/dist/api/express/makeOpenApiSpecs.d.ts.map +1 -0
  153. package/dist/api/express/makeOpenApiSpecs.js +56 -0
  154. package/dist/api/express/schema/jwt.d.ts +5 -0
  155. package/dist/api/express/schema/jwt.d.ts.map +1 -0
  156. package/dist/api/express/schema/jwt.js +32 -0
  157. package/dist/api/express/schema/requestHandler.d.ts +71 -0
  158. package/dist/api/express/schema/requestHandler.d.ts.map +1 -0
  159. package/dist/api/express/schema/requestHandler.js +140 -0
  160. package/dist/api/express/schema/routing.d.ts +45 -0
  161. package/dist/api/express/schema/routing.d.ts.map +1 -0
  162. package/dist/api/express/schema/routing.js +95 -0
  163. package/dist/{lib/api → api}/reportError.d.ts +4 -4
  164. package/dist/api/reportError.d.ts.map +1 -0
  165. package/dist/{lib/api → api}/reportError.js +6 -6
  166. package/dist/{lib/api → api}/routing.d.ts +7 -7
  167. package/dist/api/routing.d.ts.map +1 -0
  168. package/dist/api/routing.js +249 -0
  169. package/dist/{lib/api → api}/setupRequest.d.ts +2 -2
  170. package/dist/api/setupRequest.d.ts.map +1 -0
  171. package/dist/{lib/api → api}/setupRequest.js +3 -3
  172. package/dist/{lib/api → api}/util.d.ts +0 -0
  173. package/dist/api/util.d.ts.map +1 -0
  174. package/dist/api/util.js +14 -0
  175. package/dist/{lib/api → api}/writeDocs.d.ts +1 -1
  176. package/dist/api/writeDocs.d.ts.map +1 -0
  177. package/dist/api/writeDocs.js +23 -0
  178. package/dist/{lib/errorReporter.d.ts → errorReporter.d.ts} +1 -1
  179. package/dist/errorReporter.d.ts.map +1 -0
  180. package/dist/errorReporter.js +45 -0
  181. package/dist/errors.d.ts +11 -2
  182. package/dist/errors.d.ts.map +1 -1
  183. package/dist/errors.js +17 -3
  184. package/dist/{lib/ext → ext}/Array.d.ts +3 -3
  185. package/dist/ext/Array.d.ts.map +1 -0
  186. package/dist/{lib/ext → ext}/Array.js +2 -2
  187. package/dist/{lib/filter → filter}/types/errors.d.ts +0 -0
  188. package/dist/filter/types/errors.d.ts.map +1 -0
  189. package/dist/{lib/filter → filter}/types/errors.js +1 -1
  190. package/dist/{lib/filter → filter}/types/fields.d.ts +0 -0
  191. package/dist/filter/types/fields.d.ts.map +1 -0
  192. package/dist/{lib/filter → filter}/types/fields.js +1 -1
  193. package/dist/{lib/filter → filter}/types/index.d.ts +0 -0
  194. package/dist/filter/types/index.d.ts.map +1 -0
  195. package/dist/{lib/filter → filter}/types/index.js +1 -1
  196. package/dist/{lib/filter → filter}/types/path/common.d.ts +0 -0
  197. package/dist/filter/types/path/common.d.ts.map +1 -0
  198. package/dist/{lib/filter → filter}/types/path/common.js +1 -1
  199. package/dist/{lib/filter → filter}/types/path/eager.d.ts +0 -0
  200. package/dist/filter/types/path/eager.d.ts.map +1 -0
  201. package/dist/{lib/filter → filter}/types/path/eager.js +1 -1
  202. package/dist/{lib/filter → filter}/types/path/index.d.ts +0 -0
  203. package/dist/filter/types/path/index.d.ts.map +1 -0
  204. package/dist/{lib/filter → filter}/types/path/index.js +1 -1
  205. package/dist/{lib/filter → filter}/types/utils.d.ts +0 -0
  206. package/dist/filter/types/utils.d.ts.map +1 -0
  207. package/dist/{lib/filter → filter}/types/utils.js +1 -1
  208. package/dist/{lib/filter → filter}/types/validator.d.ts +0 -0
  209. package/dist/filter/types/validator.d.ts.map +1 -0
  210. package/dist/{lib/filter → filter}/types/validator.js +1 -1
  211. package/dist/{lib/filter.d.ts → filter.d.ts} +9 -9
  212. package/dist/filter.d.ts.map +1 -0
  213. package/dist/filter.js +171 -0
  214. package/dist/{lib/instrument.d.ts → instrument.d.ts} +1 -1
  215. package/dist/instrument.d.ts.map +1 -0
  216. package/dist/{lib/instrument.js → instrument.js} +2 -2
  217. package/dist/{lib/rateLimit.d.ts → rateLimit.d.ts} +5 -5
  218. package/dist/rateLimit.d.ts.map +1 -0
  219. package/dist/{lib/rateLimit.js → rateLimit.js} +2 -2
  220. package/dist/services/Emailer/Sendgrid.js +1 -1
  221. package/dist/services/Emailer/fake.js +1 -1
  222. package/dist/services/Emailer/service.d.ts +1 -1
  223. package/dist/services/Emailer/service.d.ts.map +1 -1
  224. package/dist/services/Repository.d.ts +1 -1
  225. package/dist/services/Repository.d.ts.map +1 -1
  226. package/dist/services/Repository.js +1 -1
  227. package/dist/services/Store/Cosmos.js +2 -2
  228. package/dist/services/Store/Disk.js +3 -3
  229. package/dist/services/Store/Memory.js +1 -1
  230. package/dist/services/Store/Redis.js +1 -1
  231. package/dist/services/Store/index.js +1 -1
  232. package/dist/services/Store/service.js +1 -1
  233. package/dist/services/Store/utils.js +1 -1
  234. package/dist/services/simpledb/cosmosdb.d.ts +13 -0
  235. package/dist/services/simpledb/cosmosdb.d.ts.map +1 -0
  236. package/dist/services/simpledb/cosmosdb.js +88 -0
  237. package/dist/services/simpledb/diskdb.d.ts +12 -0
  238. package/dist/services/simpledb/diskdb.d.ts.map +1 -0
  239. package/dist/services/simpledb/diskdb.js +96 -0
  240. package/dist/services/simpledb/fileutil.d.ts +7 -0
  241. package/dist/services/simpledb/fileutil.d.ts.map +1 -0
  242. package/dist/services/simpledb/fileutil.js +25 -0
  243. package/dist/services/simpledb/index.d.ts +7 -0
  244. package/dist/services/simpledb/index.d.ts.map +1 -0
  245. package/dist/services/simpledb/index.js +7 -0
  246. package/dist/services/simpledb/memdb.d.ts +12 -0
  247. package/dist/services/simpledb/memdb.d.ts.map +1 -0
  248. package/dist/services/simpledb/memdb.js +55 -0
  249. package/dist/services/simpledb/mongodb.d.ts +13 -0
  250. package/dist/services/simpledb/mongodb.d.ts.map +1 -0
  251. package/dist/services/simpledb/mongodb.js +55 -0
  252. package/dist/services/simpledb/redisdb.d.ts +25 -0
  253. package/dist/services/simpledb/redisdb.d.ts.map +1 -0
  254. package/dist/services/simpledb/redisdb.js +105 -0
  255. package/dist/services/simpledb/shared.d.ts +63 -0
  256. package/dist/services/simpledb/shared.d.ts.map +1 -0
  257. package/dist/services/simpledb/shared.js +65 -0
  258. package/dist/services/simpledb/simpledb.d.ts +23 -0
  259. package/dist/services/simpledb/simpledb.d.ts.map +1 -0
  260. package/dist/services/simpledb/simpledb.js +56 -0
  261. package/package.json +216 -328
  262. package/_cjs/ext.cjs +0 -4
  263. package/_cjs/ext.cjs.map +0 -1
  264. package/_cjs/lib/fileUtil.cjs +0 -36
  265. package/_cjs/lib/fileUtil.cjs.map +0 -1
  266. package/_cjs/lib/filter/types/path/index.cjs.map +0 -1
  267. package/_cjs/services/CUPS/service.cjs +0 -15
  268. package/_cjs/services/CUPS/service.cjs.map +0 -1
  269. package/_cjs/services/CUPS.cjs +0 -113
  270. package/_cjs/services/CUPS.cjs.map +0 -1
  271. package/_cjs/services/Cache.cjs +0 -39
  272. package/_cjs/services/Cache.cjs.map +0 -1
  273. package/_cjs/services/ServiceBus.cjs +0 -69
  274. package/_cjs/services/ServiceBus.cjs.map +0 -1
  275. package/_cjs/services/memQueue.cjs.map +0 -1
  276. package/_cjs/vendor/Cache/Cache/_internal/AtomicBoolean.cjs +0 -14
  277. package/_cjs/vendor/Cache/Cache/_internal/AtomicBoolean.cjs.map +0 -1
  278. package/_cjs/vendor/Cache/Cache/_internal/AtomicNumber.cjs +0 -29
  279. package/_cjs/vendor/Cache/Cache/_internal/AtomicNumber.cjs.map +0 -1
  280. package/_cjs/vendor/Cache/Cache/_internal/AtomicReference.cjs +0 -32
  281. package/_cjs/vendor/Cache/Cache/_internal/AtomicReference.cjs.map +0 -1
  282. package/_cjs/vendor/Cache/Cache/_internal/CacheInternal.cjs +0 -266
  283. package/_cjs/vendor/Cache/Cache/_internal/CacheInternal.cjs.map +0 -1
  284. package/_cjs/vendor/Cache/Cache/_internal/CacheState.cjs.map +0 -1
  285. package/_cjs/vendor/Cache/Cache/_internal/KeySet.cjs +0 -67
  286. package/_cjs/vendor/Cache/Cache/_internal/KeySet.cjs.map +0 -1
  287. package/_cjs/vendor/Cache/Cache/_internal/MapKey.cjs +0 -44
  288. package/_cjs/vendor/Cache/Cache/_internal/MapKey.cjs.map +0 -1
  289. package/_cjs/vendor/Cache/Cache/_internal/MapValue.cjs +0 -33
  290. package/_cjs/vendor/Cache/Cache/_internal/MapValue.cjs.map +0 -1
  291. package/_cjs/vendor/Cache/Cache/definition.cjs +0 -13
  292. package/_cjs/vendor/Cache/Cache/definition.cjs.map +0 -1
  293. package/_cjs/vendor/Cache/Cache/operations/make.cjs +0 -20
  294. package/_cjs/vendor/Cache/Cache/operations/make.cjs.map +0 -1
  295. package/_cjs/vendor/Cache/Cache/operations/makeWith.cjs.map +0 -1
  296. package/_cjs/vendor/Cache/Cache/operations.cjs +0 -28
  297. package/_cjs/vendor/Cache/Cache/operations.cjs.map +0 -1
  298. package/_cjs/vendor/Cache/Cache.cjs +0 -28
  299. package/_cjs/vendor/Cache/Cache.cjs.map +0 -1
  300. package/_cjs/vendor/Cache/CacheStats/definition.cjs +0 -13
  301. package/_cjs/vendor/Cache/CacheStats/definition.cjs.map +0 -1
  302. package/_cjs/vendor/Cache/CacheStats.cjs +0 -17
  303. package/_cjs/vendor/Cache/CacheStats.cjs.map +0 -1
  304. package/_cjs/vendor/Cache/EntryStats/definition.cjs +0 -11
  305. package/_cjs/vendor/Cache/EntryStats/definition.cjs.map +0 -1
  306. package/_cjs/vendor/Cache/EntryStats.cjs +0 -17
  307. package/_cjs/vendor/Cache/EntryStats.cjs.map +0 -1
  308. package/_cjs/vendor/Cache/Lookup/definition.cjs +0 -6
  309. package/_cjs/vendor/Cache/Lookup/definition.cjs.map +0 -1
  310. package/_cjs/vendor/Cache/Lookup.cjs +0 -17
  311. package/_cjs/vendor/Cache/Lookup.cjs.map +0 -1
  312. package/_cjs/vendor/Cache/index.cjs +0 -17
  313. package/_cjs/vendor/Cache/index.cjs.map +0 -1
  314. package/_src/ext.ts +0 -1
  315. package/_src/lib/fileUtil.ts +0 -56
  316. package/_src/services/CUPS/service.ts +0 -16
  317. package/_src/services/CUPS.ts +0 -105
  318. package/_src/services/Cache.ts +0 -45
  319. package/_src/services/ServiceBus.ts +0 -111
  320. package/_src/services/memQueue.ts +0 -30
  321. package/_src/vendor/Cache/Cache/_internal/AtomicBoolean.ts +0 -7
  322. package/_src/vendor/Cache/Cache/_internal/AtomicNumber.ts +0 -28
  323. package/_src/vendor/Cache/Cache/_internal/AtomicReference.ts +0 -30
  324. package/_src/vendor/Cache/Cache/_internal/CacheInternal.ts +0 -293
  325. package/_src/vendor/Cache/Cache/_internal/CacheState.ts +0 -56
  326. package/_src/vendor/Cache/Cache/_internal/KeySet.ts +0 -58
  327. package/_src/vendor/Cache/Cache/_internal/MapKey.ts +0 -43
  328. package/_src/vendor/Cache/Cache/_internal/MapValue.ts +0 -39
  329. package/_src/vendor/Cache/Cache/definition.ts +0 -112
  330. package/_src/vendor/Cache/Cache/operations/make.ts +0 -17
  331. package/_src/vendor/Cache/Cache/operations/makeWith.ts +0 -32
  332. package/_src/vendor/Cache/Cache/operations.ts +0 -4
  333. package/_src/vendor/Cache/Cache.ts +0 -4
  334. package/_src/vendor/Cache/CacheStats/definition.ts +0 -23
  335. package/_src/vendor/Cache/CacheStats.ts +0 -3
  336. package/_src/vendor/Cache/EntryStats/definition.ts +0 -19
  337. package/_src/vendor/Cache/EntryStats.ts +0 -3
  338. package/_src/vendor/Cache/Lookup/definition.ts +0 -15
  339. package/_src/vendor/Cache/Lookup.ts +0 -3
  340. package/_src/vendor/Cache/global.ts.bak +0 -23
  341. package/_src/vendor/Cache/index.ts +0 -4
  342. package/dist/ext.d.ts +0 -2
  343. package/dist/ext.d.ts.map +0 -1
  344. package/dist/ext.js +0 -2
  345. package/dist/lib/RequestContext.d.ts.map +0 -1
  346. package/dist/lib/RequestContext.js +0 -52
  347. package/dist/lib/api/authorization.jwt.d.ts.map +0 -1
  348. package/dist/lib/api/defaultErrorHandler.d.ts.map +0 -1
  349. package/dist/lib/api/reportError.d.ts.map +0 -1
  350. package/dist/lib/api/routing.d.ts.map +0 -1
  351. package/dist/lib/api/routing.js +0 -248
  352. package/dist/lib/api/setupRequest.d.ts.map +0 -1
  353. package/dist/lib/api/util.d.ts.map +0 -1
  354. package/dist/lib/api/util.js +0 -14
  355. package/dist/lib/api/writeDocs.d.ts.map +0 -1
  356. package/dist/lib/api/writeDocs.js +0 -23
  357. package/dist/lib/errorReporter.d.ts.map +0 -1
  358. package/dist/lib/errorReporter.js +0 -45
  359. package/dist/lib/ext/Array.d.ts.map +0 -1
  360. package/dist/lib/fileUtil.d.ts +0 -22
  361. package/dist/lib/fileUtil.d.ts.map +0 -1
  362. package/dist/lib/fileUtil.js +0 -23
  363. package/dist/lib/filter/types/errors.d.ts.map +0 -1
  364. package/dist/lib/filter/types/fields.d.ts.map +0 -1
  365. package/dist/lib/filter/types/index.d.ts.map +0 -1
  366. package/dist/lib/filter/types/path/common.d.ts.map +0 -1
  367. package/dist/lib/filter/types/path/eager.d.ts.map +0 -1
  368. package/dist/lib/filter/types/path/index.d.ts.map +0 -1
  369. package/dist/lib/filter/types/utils.d.ts.map +0 -1
  370. package/dist/lib/filter/types/validator.d.ts.map +0 -1
  371. package/dist/lib/filter.d.ts.map +0 -1
  372. package/dist/lib/filter.js +0 -171
  373. package/dist/lib/instrument.d.ts.map +0 -1
  374. package/dist/lib/rateLimit.d.ts.map +0 -1
  375. package/dist/services/CUPS/service.d.ts +0 -19
  376. package/dist/services/CUPS/service.d.ts.map +0 -1
  377. package/dist/services/CUPS/service.js +0 -5
  378. package/dist/services/CUPS.d.ts +0 -10
  379. package/dist/services/CUPS.d.ts.map +0 -1
  380. package/dist/services/CUPS.js +0 -89
  381. package/dist/services/Cache.d.ts +0 -28
  382. package/dist/services/Cache.d.ts.map +0 -1
  383. package/dist/services/Cache.js +0 -28
  384. package/dist/services/ServiceBus.d.ts +0 -26
  385. package/dist/services/ServiceBus.d.ts.map +0 -1
  386. package/dist/services/ServiceBus.js +0 -53
  387. package/dist/services/memQueue.d.ts +0 -18
  388. package/dist/services/memQueue.d.ts.map +0 -1
  389. package/dist/services/memQueue.js +0 -24
  390. package/dist/vendor/Cache/Cache/_internal/AtomicBoolean.d.ts +0 -5
  391. package/dist/vendor/Cache/Cache/_internal/AtomicBoolean.d.ts.map +0 -1
  392. package/dist/vendor/Cache/Cache/_internal/AtomicBoolean.js +0 -7
  393. package/dist/vendor/Cache/Cache/_internal/AtomicNumber.d.ts +0 -8
  394. package/dist/vendor/Cache/Cache/_internal/AtomicNumber.d.ts.map +0 -1
  395. package/dist/vendor/Cache/Cache/_internal/AtomicNumber.js +0 -22
  396. package/dist/vendor/Cache/Cache/_internal/AtomicReference.d.ts +0 -10
  397. package/dist/vendor/Cache/Cache/_internal/AtomicReference.d.ts.map +0 -1
  398. package/dist/vendor/Cache/Cache/_internal/AtomicReference.js +0 -25
  399. package/dist/vendor/Cache/Cache/_internal/CacheInternal.d.ts +0 -51
  400. package/dist/vendor/Cache/Cache/_internal/CacheInternal.d.ts.map +0 -1
  401. package/dist/vendor/Cache/Cache/_internal/CacheInternal.js +0 -253
  402. package/dist/vendor/Cache/Cache/_internal/CacheState.d.ts +0 -33
  403. package/dist/vendor/Cache/Cache/_internal/CacheState.d.ts.map +0 -1
  404. package/dist/vendor/Cache/Cache/_internal/CacheState.js +0 -21
  405. package/dist/vendor/Cache/Cache/_internal/KeySet.d.ts +0 -20
  406. package/dist/vendor/Cache/Cache/_internal/KeySet.d.ts.map +0 -1
  407. package/dist/vendor/Cache/Cache/_internal/KeySet.js +0 -61
  408. package/dist/vendor/Cache/Cache/_internal/MapKey.d.ts +0 -24
  409. package/dist/vendor/Cache/Cache/_internal/MapKey.d.ts.map +0 -1
  410. package/dist/vendor/Cache/Cache/_internal/MapKey.js +0 -37
  411. package/dist/vendor/Cache/Cache/_internal/MapValue.d.ts +0 -32
  412. package/dist/vendor/Cache/Cache/_internal/MapValue.d.ts.map +0 -1
  413. package/dist/vendor/Cache/Cache/_internal/MapValue.js +0 -24
  414. package/dist/vendor/Cache/Cache/definition.d.ts +0 -100
  415. package/dist/vendor/Cache/Cache/definition.d.ts.map +0 -1
  416. package/dist/vendor/Cache/Cache/definition.js +0 -5
  417. package/dist/vendor/Cache/Cache/operations/make.d.ts +0 -12
  418. package/dist/vendor/Cache/Cache/operations/make.d.ts.map +0 -1
  419. package/dist/vendor/Cache/Cache/operations/make.js +0 -12
  420. package/dist/vendor/Cache/Cache/operations/makeWith.d.ts +0 -14
  421. package/dist/vendor/Cache/Cache/operations/makeWith.d.ts.map +0 -1
  422. package/dist/vendor/Cache/Cache/operations/makeWith.js +0 -15
  423. package/dist/vendor/Cache/Cache/operations.d.ts +0 -3
  424. package/dist/vendor/Cache/Cache/operations.d.ts.map +0 -1
  425. package/dist/vendor/Cache/Cache/operations.js +0 -4
  426. package/dist/vendor/Cache/Cache.d.ts +0 -3
  427. package/dist/vendor/Cache/Cache.d.ts.map +0 -1
  428. package/dist/vendor/Cache/Cache.js +0 -4
  429. package/dist/vendor/Cache/CacheStats/definition.d.ts +0 -19
  430. package/dist/vendor/Cache/CacheStats/definition.d.ts.map +0 -1
  431. package/dist/vendor/Cache/CacheStats/definition.js +0 -6
  432. package/dist/vendor/Cache/CacheStats.d.ts +0 -2
  433. package/dist/vendor/Cache/CacheStats.d.ts.map +0 -1
  434. package/dist/vendor/Cache/CacheStats.js +0 -3
  435. package/dist/vendor/Cache/EntryStats/definition.d.ts +0 -17
  436. package/dist/vendor/Cache/EntryStats/definition.d.ts.map +0 -1
  437. package/dist/vendor/Cache/EntryStats/definition.js +0 -4
  438. package/dist/vendor/Cache/EntryStats.d.ts +0 -2
  439. package/dist/vendor/Cache/EntryStats.d.ts.map +0 -1
  440. package/dist/vendor/Cache/EntryStats.js +0 -3
  441. package/dist/vendor/Cache/Lookup/definition.d.ts +0 -17
  442. package/dist/vendor/Cache/Lookup/definition.d.ts.map +0 -1
  443. package/dist/vendor/Cache/Lookup/definition.js +0 -2
  444. package/dist/vendor/Cache/Lookup.d.ts +0 -2
  445. package/dist/vendor/Cache/Lookup.d.ts.map +0 -1
  446. package/dist/vendor/Cache/Lookup.js +0 -3
  447. package/dist/vendor/Cache/index.d.ts +0 -5
  448. package/dist/vendor/Cache/index.d.ts.map +0 -1
  449. package/dist/vendor/Cache/index.js +0 -5
@@ -0,0 +1,182 @@
1
+ /* eslint-disable @typescript-eslint/no-explicit-any */
2
+
3
+ import { flow, pipe } from "@effect-app/core/Function"
4
+ import * as MO from "@effect-app/schema"
5
+ import type { Lock } from "redlock"
6
+
7
+ import * as RED from "@effect-app/infra-adapters/redis-client"
8
+ import type { CachedRecord, DBRecord, Index } from "./shared.js"
9
+ import { ConnectionException, CouldNotAquireDbLockException, getIndexName, getRecordName } from "./shared.js"
10
+ import * as simpledb from "./simpledb.js"
11
+
12
+ const ttl = 10 * 1000
13
+
14
+ export function createContext<TKey extends string, EA, A extends DBRecord<TKey>>() {
15
+ return <REncode, RDecode, EDecode>(
16
+ type: string,
17
+ encode: (record: A) => Effect<REncode, never, EA>,
18
+ decode: (d: EA) => Effect<RDecode, EDecode, A>,
19
+ schemaVersion: string,
20
+ makeIndexKey: (r: A) => Index
21
+ ) => {
22
+ const getData = flow(encode, _ => _.map(JSON.stringify))
23
+ return {
24
+ find: simpledb.find(find, decode, type),
25
+ findByIndex: getIdx,
26
+ save: simpledb.store(find, store, lockRedisRecord, type)
27
+ }
28
+
29
+ function find(id: string) {
30
+ return RED.hmgetAll(getKey(id)).flatMapOpt(v =>
31
+ pipe(
32
+ RedisSerializedDBRecord.Parser,
33
+ MO.condemnFail
34
+ )(v)
35
+ .map(({ data, version }) => ({
36
+ data: JSON.parse(data) as EA,
37
+ version
38
+ }))
39
+ .mapError(e => new ConnectionException(new Error(e.toString())))
40
+ ).orDie
41
+ }
42
+ function store(record: A, currentVersion: Opt<string>) {
43
+ const version = currentVersion
44
+ .map(cv => (parseInt(cv) + 1).toString())
45
+ .getOrElse(() => "1")
46
+ return currentVersion.match(
47
+ () =>
48
+ lockIndex(record).zipRight(
49
+ getIndex(record)
50
+ .zipRightOpt(
51
+ Effect.fail(() => new Error("Combination already exists, abort"))
52
+ )
53
+ .zipRight(getData(record))
54
+ // TODO: instead use MULTI & EXEC to make it in one command?
55
+ .flatMap(data =>
56
+ hmSetRec(getKey(record.id), {
57
+ version,
58
+ timestamp: new Date(),
59
+ data
60
+ })
61
+ )
62
+ .zipRight(setIndex(record))
63
+ .orDie.map(() => ({ version, data: record } as CachedRecord<A>))
64
+ ).scoped,
65
+ () =>
66
+ getData(record)
67
+ .flatMap(data =>
68
+ hmSetRec(getKey(record.id), {
69
+ version,
70
+ timestamp: new Date(),
71
+ data
72
+ })
73
+ )
74
+ .orDie.map(() => ({ version, data: record } as CachedRecord<A>))
75
+ )
76
+ }
77
+
78
+ function getIndex(record: A) {
79
+ const index = makeIndexKey(record)
80
+ return getIdx(index)
81
+ }
82
+
83
+ function setIndex(record: A) {
84
+ const index = makeIndexKey(record)
85
+ return setIdx(index, record)
86
+ }
87
+
88
+ function lockIndex(record: A) {
89
+ const index = makeIndexKey(record)
90
+ return lockRedisIdx(index)
91
+ }
92
+
93
+ function getIdx(index: Index) {
94
+ return RED.hget(getIdxKey(index), index.key).map(_ => _.map(i => i as TKey))
95
+ }
96
+
97
+ function setIdx(index: Index, r: A) {
98
+ return RED.hset(getIdxKey(index), index.key, r.id)
99
+ }
100
+
101
+ function lockRedisIdx(index: Index) {
102
+ const lockKey = getIdxLockKey(index)
103
+ // acquire
104
+ return RED.lock
105
+ .flatMap(lock => Effect.tryPromise(() => lock.lock(lockKey, ttl) as unknown as Promise<Lock>))
106
+ .mapBoth(
107
+ err => new CouldNotAquireDbLockException(type, lockKey, err as Error),
108
+ // release
109
+ lock => ({
110
+ release: Effect.tryPromise(() => lock.unlock() as unknown as Promise<void>)
111
+ .orDie
112
+ })
113
+ ).acquireRelease(
114
+ l => l.release
115
+ )
116
+ }
117
+
118
+ function lockRedisRecord(id: string) {
119
+ // acquire
120
+ return RED.lock
121
+ .flatMap(lock =>
122
+ Effect.tryPromise(
123
+ () => lock.lock(getLockKey(id), ttl) as unknown as Promise<Lock>
124
+ )
125
+ )
126
+ .mapBoth(
127
+ err => new CouldNotAquireDbLockException(type, id, err as Error),
128
+ // release
129
+ lock => ({
130
+ // TODO
131
+ release: Effect.tryPromise(() => lock.unlock() as unknown as Promise<void>)
132
+ .orDie
133
+ })
134
+ ).acquireRelease(
135
+ l => l.release
136
+ )
137
+ }
138
+
139
+ function getKey(id: string) {
140
+ return `v${schemaVersion}.${getRecordName(type, id)}`
141
+ }
142
+
143
+ function getLockKey(id: string) {
144
+ return `v${schemaVersion}.locks.${getRecordName(type, id)}`
145
+ }
146
+
147
+ function getIdxKey(index: Index) {
148
+ return `v${schemaVersion}.${getIndexName(type, index.doc)}`
149
+ }
150
+ function getIdxLockKey(index: Index) {
151
+ return `v${schemaVersion}.locks.${getIndexName(type, index.doc)}_${index.key}`
152
+ }
153
+ }
154
+
155
+ function hmSetRec(key: string, val: RedisSerializedDBRecord) {
156
+ const enc = RedisSerializedDBRecord.Encoder(val)
157
+ return RED.client.flatMap(
158
+ client =>
159
+ Effect.async<never, ConnectionException, void>(res => {
160
+ client.hmset(
161
+ key,
162
+ "version",
163
+ enc.version,
164
+ "timestamp",
165
+ enc.timestamp,
166
+ "data",
167
+ enc.data,
168
+ err =>
169
+ err
170
+ ? res(Effect.fail(new ConnectionException(err)))
171
+ : res(Effect(void 0))
172
+ )
173
+ }).uninterruptible
174
+ )
175
+ }
176
+ }
177
+
178
+ export class RedisSerializedDBRecord extends MO.Model<RedisSerializedDBRecord>()({
179
+ version: MO.prop(MO.string),
180
+ timestamp: MO.prop(MO.date),
181
+ data: MO.prop(MO.string)
182
+ }) {}
@@ -0,0 +1,117 @@
1
+ import * as MO from "@effect-app/schema"
2
+ import type { SchemaAny } from "@effect-app/schema"
3
+
4
+ class BaseError {
5
+ constructor(public message: string) {}
6
+ }
7
+ export class CouldNotAquireDbLockException extends BaseError {
8
+ readonly _errorTag = "CouldNotAquireDbLockException"
9
+ constructor(readonly type: string, readonly id: string, readonly error: Error) {
10
+ super(`Couldn't lock db record ${type}: ${id}`)
11
+ }
12
+ }
13
+
14
+ export class OptimisticLockException extends Error {
15
+ readonly _errorTag = "OptimisticLockException"
16
+ constructor(readonly type: string, readonly id: string) {
17
+ super(`Existing ${type} ${id} record changed`)
18
+ }
19
+ }
20
+
21
+ export class ConnectionException extends Error {
22
+ readonly _errorTag = "ConnectionException"
23
+ constructor(readonly error: Error) {
24
+ super("A connection error ocurred")
25
+ }
26
+ }
27
+
28
+ export interface DBRecord<TKey extends string> {
29
+ id: TKey
30
+ }
31
+
32
+ export class SerializedDBRecord extends MO.Model<SerializedDBRecord>()({
33
+ version: MO.prop(MO.string),
34
+ timestamp: MO.prop(MO.date),
35
+ data: MO.prop(MO.string)
36
+ }) {}
37
+
38
+ // unknown -> string -> SDB?
39
+ export function makeSerialisedDBRecord(s: SchemaAny) {
40
+ return MO.props({
41
+ version: MO.prop(MO.number),
42
+ timestamp: MO.prop(MO.date),
43
+ data: MO.prop(s)
44
+ })
45
+ }
46
+
47
+ export interface CachedRecord<T> {
48
+ version: string
49
+ data: T
50
+ }
51
+
52
+ export interface Index {
53
+ doc: string
54
+ key: string
55
+ }
56
+
57
+ export function getIndexName(type: string, id: string) {
58
+ return `${type}-idx_${id}`
59
+ }
60
+
61
+ export function getRecordName(type: string, id: string) {
62
+ return `${type}-r_${id}`
63
+ }
64
+
65
+ export function makeMap<TKey, T>() {
66
+ const map = new Map<TKey, T>()
67
+ return {
68
+ find: (k: TKey) => Effect(() => Opt.fromNullable(map.get(k))),
69
+ [Symbol.iterator]: () => map[Symbol.iterator](),
70
+ set: (k: TKey, v: T) =>
71
+ Effect(() => {
72
+ map.set(k, v)
73
+ })
74
+ } as EffectMap<TKey, T>
75
+ }
76
+
77
+ export interface EffectMap<TKey, T> {
78
+ [Symbol.iterator](): IterableIterator<[TKey, T]>
79
+ find: (k: TKey) => Effect<never, never, Opt<T>>
80
+ set: (k: TKey, v: T) => Effect<never, never, void>
81
+ }
82
+
83
+ // export function encodeOnlyWhenStrictMatch<A, E>(
84
+ // encode: MO.HasEncoder<A, E>["encode_"],
85
+ // v: A
86
+ // ) {
87
+ // const e1 = Sync.run(encode(v, "strict"))
88
+ // const e2 = Sync.run(encode(v, "classic"))
89
+ // try {
90
+ // assert.deepStrictEqual(e1, e2)
91
+ // } catch (err) {
92
+ // throw new Error(
93
+ // // eslint-disable-next-line @typescript-eslint/restrict-plus-operands
94
+ // "The strict encoding of these objects does not match the classic encoding of these objects. This means that there is a chance of a data-loss, and is probably a programming error\n" +
95
+ // err
96
+ // )
97
+ // }
98
+ // return e1
99
+ // }
100
+
101
+ // export function decodeOnlyWhenStrictMatch<A, E>(
102
+ // decode: MO.HasDecoder<A, E>["decode_"],
103
+ // u: unknown
104
+ // ) {
105
+ // return pipe(
106
+ // decode(u, "strict"),
107
+ // Sync.tap((v) =>
108
+ // pipe(
109
+ // decode(u),
110
+ // Sync.tap((v2) => {
111
+ // assert.deepStrictEqual(v, v2)
112
+ // return Sync.succeed(v2)
113
+ // })
114
+ // )
115
+ // )
116
+ // )
117
+ // }
@@ -0,0 +1,117 @@
1
+ import type { CachedRecord, DBRecord, EffectMap } from "./shared.js"
2
+ import { makeMap, OptimisticLockException } from "./shared.js"
3
+
4
+ export type Version = string
5
+ export class InvalidStateError {
6
+ readonly _tag = "InvalidStateError"
7
+ constructor(readonly message: string, readonly details?: unknown) {}
8
+ }
9
+
10
+ export function makeLiveRecordCache() {
11
+ const m = new Map<string, EffectMap<string, unknown>>()
12
+ return {
13
+ get: <T>(type: string) =>
14
+ Effect(() => {
15
+ const ex = m.get(type)
16
+ if (!ex) {
17
+ const nm = makeMap<string, unknown>()
18
+ m.set(type, nm)
19
+ return nm as EffectMap<string, CachedRecord<T>>
20
+ }
21
+ return ex as EffectMap<string, CachedRecord<T>>
22
+ })
23
+ }
24
+ }
25
+
26
+ export interface RecordCache extends ReturnType<typeof makeLiveRecordCache> {}
27
+
28
+ // module tag
29
+ export const RecordCache = Tag<RecordCache>()
30
+
31
+ export const LiveRecordCache = Effect(makeLiveRecordCache()).toLayer(RecordCache)
32
+
33
+ const getM = <T>(type: string) =>
34
+ <R, E, A>(eff: (m: EffectMap<string, CachedRecord<T>>) => Effect<R, E, A>) =>
35
+ Effect.gen(function*($) {
36
+ const { get } = yield* $(RecordCache.access)
37
+ return yield* $(get<T>(type).flatMap(eff))
38
+ })
39
+
40
+ export function find<R, RDecode, EDecode, E, EA, A>(
41
+ tryRead: (id: string) => Effect<R, E, Opt<CachedRecord<EA>>>,
42
+ decode: (d: EA) => Effect<RDecode, EDecode, A>,
43
+ type: string
44
+ ) {
45
+ const getCache = getM<A>(type)
46
+ const read = (id: string) =>
47
+ tryRead(id)
48
+ .flatMapOpt(({ data, version }) =>
49
+ decode(data).mapBoth(
50
+ err => new InvalidStateError("DB serialisation Issue", err),
51
+ data => ({ data, version })
52
+ )
53
+ )
54
+ .tapOpt(r => getCache(c => c.set(id, r)))
55
+ .mapOpt(r => r.data)
56
+
57
+ return (id: string) =>
58
+ getCache(c =>
59
+ c
60
+ .find(id)
61
+ .mapOpt(existing => existing.data)
62
+ .orElse(() => read(id))
63
+ )
64
+ }
65
+
66
+ export function storeDirectly<R, E, TKey extends string, A extends DBRecord<TKey>>(
67
+ save: (r: A, version: Opt<Version>) => Effect<R, E, CachedRecord<A>>,
68
+ type: string
69
+ ) {
70
+ const getCache = getM<A>(type)
71
+ return (record: A) =>
72
+ getCache(c =>
73
+ c
74
+ .find(record.id)
75
+ .mapOpt(x => x.version)
76
+ .flatMap(cv => save(record, cv))
77
+ .tap(r => c.set(record.id, r))
78
+ .map(r => r.data)
79
+ )
80
+ }
81
+
82
+ export function store<R, E, R2, E2, TKey extends string, EA, A extends DBRecord<TKey>>(
83
+ tryRead: (id: string) => Effect<R, E, Opt<CachedRecord<EA>>>,
84
+ save: (r: A, version: Opt<Version>) => Effect<R, E, CachedRecord<A>>,
85
+ lock: (id: string) => Effect<R2 | Scope, E2, unknown>,
86
+ type: string
87
+ ) {
88
+ const getCache = getM<A>(type)
89
+ return (record: A) =>
90
+ getCache(c =>
91
+ c
92
+ .find(record.id)
93
+ .mapOpt(x => x.version)
94
+ .flatMap(_ => _.match(() => save(record, Opt.none), confirmVersionAndSave(record)))
95
+ .tap(r => c.set(record.id, r))
96
+ .map(r => r.data)
97
+ )
98
+
99
+ function confirmVersionAndSave(record: A) {
100
+ return (cv: Version) =>
101
+ lock(record.id).zipRight(
102
+ tryRead(record.id)
103
+ .flatMap(_ =>
104
+ _.match(
105
+ () => Effect.fail(new InvalidStateError("record is gone")),
106
+ Effect.succeed
107
+ )
108
+ )
109
+ .tap(({ version }) =>
110
+ version !== cv
111
+ ? Effect.fail(new OptimisticLockException(type, record.id))
112
+ : Effect.unit
113
+ )
114
+ .zipRight(save(record, Opt(cv)))
115
+ ).scoped
116
+ }
117
+ }
@@ -45,7 +45,7 @@ export declare class RequestContext extends RequestContext_base {
45
45
  export type RequestContextConstructor = typeof RequestContext;
46
46
  /**
47
47
  * @tsplus static RequestContext.Ops Tag
48
- * @tsplus location "@effect-app/infra/lib/RequestContext"
48
+ * @tsplus location "@effect-app/infra/RequestContext"
49
49
  */
50
50
  export declare const tag: import("@fp-ts/data/Context").Tag<RequestContext>;
51
51
  export interface RequestContextParent {
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RequestContext.d.ts","sourceRoot":"","sources":["../_src/RequestContext.ts"],"names":[],"mappings":";AAAA,eAAO,MAAM,SAAS;;CAAW,CAAA;AACjC,MAAM,MAAM,SAAS,GAAG,mBAAmB,CAAC,OAAO,SAAS,CAAC,CAAA;;;;;;;;;;AAE7D,qBAAa,oBAAqB,SAAQ,yBAWxC;CAAG;AACL,oCAAoC;AACpC,MAAM,MAAM,+BAA+B,GAAG,OAAO,oBAAoB,CAAA;AAEzE,wBAAgB,aAAa,kDAE5B;;;;;;;;;;;;AAED;;;GAGG;AACH,qBAAa,cAAe,SAAQ,mBAUlC;IACA,MAAM,CAAC,OAAO,CACZ,IAAI,EAAE,IAAI,EACV,MAAM,EAAE,cAAc,EACtB,OAAO,EAAE,oBAAoB,CAAC,gBAAgB;IAShD,MAAM,CAAC,YAAY,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,cAAc;;;;;;CASrD;AAED,oCAAoC;AACpC,MAAM,MAAM,yBAAyB,GAAG,OAAO,cAAc,CAAA;;;;;AAK7D,eAAO,MAAM,GAAG,mDAAwB,CAAA;AAGxC,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,SAAS,EAAE,IAAI,CAAA;IACxB,QAAQ,CAAC,EAAE,EAAE,SAAS,CAAA;IACtB,QAAQ,CAAC,MAAM,EAAE,IAAI,GAAG,IAAI,CAAA;IAC5B,QAAQ,CAAC,IAAI,EAAE,gBAAgB,CAAA;CAChC;AACD,yBAAiB,oBAAoB,CAAC;IACpC;;OAEG;IACH,UAAiB,OAAO;QACtB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;QAC1B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;QACnB,QAAQ,CAAC,MAAM,EAAE,IAAI,GAAG,IAAI,CAAA;QAC5B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;KACtB;IACM,MAAM,OAAO,EAAE,UAAsB,CAAA;IAC5C;;OAEG;IACH,UAAiB,cAAc;KAAG;IAClC;;OAEG;IACH,UAAiB,UAAU;QAAG,CAAC,EAAE,cAAc,CAAA;KAAE;IACjD,UAAiB,gBACf,SAAQ,uBAAuB,CAAC,OAAO,oBAAoB,CAAC;KAAG;IACjE,UAAiB,KAAM,SAAQ,gBAAgB,CAAC,OAAO,oBAAoB,CAAC;KAAG;CAChF;AACD,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,SAAS,EAAE,IAAI,CAAA;IACxB,QAAQ,CAAC,EAAE,EAAE,SAAS,CAAA;IACtB,QAAQ,CAAC,MAAM,EAAE,IAAI,GAAG,IAAI,CAAA;IAC5B,QAAQ,CAAC,IAAI,EAAE,gBAAgB,CAAA;IAC/B,QAAQ,CAAC,MAAM,CAAC,EAAE,oBAAoB,GAAG,SAAS,CAAA;IAClD,QAAQ,CAAC,MAAM,EAAE,SAAS,CAAA;CAC3B;AACD,yBAAiB,cAAc,CAAC;IAC9B;;OAEG;IACH,UAAiB,OAAO;QACtB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;QAC1B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;QACnB,QAAQ,CAAC,MAAM,EAAE,IAAI,GAAG,IAAI,CAAA;QAC5B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;QACrB,QAAQ,CAAC,MAAM,CAAC,EAAE,oBAAoB,CAAC,OAAO,GAAG,SAAS,CAAA;QAC1D,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;KACxB;IACM,MAAM,OAAO,EAAE,UAAsB,CAAA;IAC5C;;OAEG;IACH,UAAiB,cAAc;KAAG;IAClC;;OAEG;IACH,UAAiB,UAAU;QAAG,CAAC,EAAE,cAAc,CAAA;KAAE;IACjD,UAAiB,gBACf,SAAQ,uBAAuB,CAAC,OAAO,cAAc,CAAC;KAAG;IAC3D,UAAiB,KAAM,SAAQ,gBAAgB,CAAC,OAAO,cAAc,CAAC;KAAG;CAC1E"}
@@ -0,0 +1,52 @@
1
+ import * as tsplus_module_1 from "@effect-app/prelude/schema";
2
+ import * as tsplus_module_2 from "@fp-ts/data/Context";
3
+ export const RequestId = tsplus_module_1.StringId;
4
+ export class RequestContextParent extends tsplus_module_1.MNModel()({
5
+ _tag: tsplus_module_1.prop(tsplus_module_1.literal("RequestContext")),
6
+ id: tsplus_module_1.prop(RequestId),
7
+ name: tsplus_module_1.prop(tsplus_module_1.ReasonableString),
8
+ locale: tsplus_module_1.prop(tsplus_module_1.literal("en", "de")),
9
+ createdAt: tsplus_module_1.defaultProp(tsplus_module_1.date)
10
+ }) {
11
+ }
12
+ export function makeRequestId() {
13
+ return RequestId.make();
14
+ }
15
+ /**
16
+ * @tsplus type RequestContext
17
+ * @tsplus companion RequestContext.Ops
18
+ */
19
+ export class RequestContext extends tsplus_module_1.MNModel()({
20
+ ...RequestContextParent.omit("id"),
21
+ id: tsplus_module_1.defaultProp(RequestId, makeRequestId),
22
+ rootId: tsplus_module_1.prop(RequestId),
23
+ parent: tsplus_module_1.optProp(RequestContextParent)
24
+ }) {
25
+ static inherit(parent, newSelf) {
26
+ return new RequestContext({
27
+ ...newSelf,
28
+ rootId: parent.rootId,
29
+ parent
30
+ });
31
+ }
32
+ static toMonitoring(self) {
33
+ return {
34
+ operationName: self.name,
35
+ locale: self.locale,
36
+ ...(self.parent
37
+ ? { parentOperationName: self.parent.name, parentLocale: self.parent.locale }
38
+ : {})
39
+ };
40
+ }
41
+ }
42
+ /**
43
+ * @tsplus static RequestContext.Ops Tag
44
+ */
45
+ export const tag = tsplus_module_2.Tag();
46
+ (function (RequestContextParent) {
47
+ RequestContextParent.Encoded = { $: {} };
48
+ })(RequestContextParent || (RequestContextParent = {}));
49
+ (function (RequestContext) {
50
+ RequestContext.Encoded = { $: {} };
51
+ })(RequestContext || (RequestContext = {}));
52
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUmVxdWVzdENvbnRleHQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9fc3JjL1JlcXVlc3RDb250ZXh0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsTUFBTSxDQUFDLE1BQU0sU0FBUyxtQkFBRyxRQUFRLENBQUE7QUFHakMsTUFBTSxPQUFPLG9CQUFxQixTQUFRLGdCQUFBLE9BQU8sRUFLOUMsQ0FBQztJQUNGLElBQUksRUFBRSxnQkFBQSxJQUFJLENBQUMsZ0JBQUEsT0FBTyxDQUFDLGdCQUFnQixDQUFDLENBQUM7SUFDckMsRUFBRSxFQUFFLGdCQUFBLElBQUksQ0FBQyxTQUFTLENBQUM7SUFDbkIsSUFBSSxFQUFFLGdCQUFBLElBQUksaUJBQUMsZ0JBQWdCLENBQUM7SUFDNUIsTUFBTSxFQUFFLGdCQUFBLElBQUksQ0FBQyxnQkFBQSxPQUFPLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ2pDLFNBQVMsRUFBRSxnQkFBQSxXQUFXLGlCQUFDLElBQUksQ0FBQztDQUM3QixDQUFDO0NBQUc7QUFJTCxNQUFNLFVBQVUsYUFBYTtJQUMzQixPQUFPLFNBQVMsQ0FBQyxJQUFJLEVBQUUsQ0FBQTtBQUN6QixDQUFDO0FBRUQ7OztHQUdHO0FBQ0gsTUFBTSxPQUFPLGNBQWUsU0FBUSxnQkFBQSxPQUFPLEVBS3hDLENBQUM7SUFDRixHQUFHLG9CQUFvQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUM7SUFDbEMsRUFBRSxFQUFFLGdCQUFBLFdBQVcsQ0FBQyxTQUFTLEVBQUUsYUFBYSxDQUFDO0lBQ3pDLE1BQU0sRUFBRSxnQkFBQSxJQUFJLENBQUMsU0FBUyxDQUFDO0lBQ3ZCLE1BQU0sRUFBRSxnQkFBQSxPQUFPLENBQUMsb0JBQW9CLENBQUM7Q0FDdEMsQ0FBQztJQUNBLE1BQU0sQ0FBQyxPQUFPLENBRVosTUFBc0IsRUFDdEIsT0FBOEM7UUFFOUMsT0FBTyxJQUFJLGNBQWMsQ0FBQztZQUN4QixHQUFHLE9BQU87WUFDVixNQUFNLEVBQUUsTUFBTSxDQUFDLE1BQU07WUFDckIsTUFBTTtTQUNQLENBQUMsQ0FBQTtJQUNKLENBQUM7SUFFRCxNQUFNLENBQUMsWUFBWSxDQUFhLElBQW9CO1FBQ2xELE9BQU87WUFDTCxhQUFhLEVBQUUsSUFBSSxDQUFDLElBQUk7WUFDeEIsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNO1lBQ25CLEdBQUcsQ0FBQyxJQUFJLENBQUMsTUFBTTtnQkFDYixDQUFDLENBQUMsRUFBRSxtQkFBbUIsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxZQUFZLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUU7Z0JBQzdFLENBQUMsQ0FBQyxFQUFFLENBQUM7U0FDUixDQUFBO0lBQ0gsQ0FBQztDQUNGO0FBS0Q7O0dBRUc7QUFDSCxNQUFNLENBQUMsTUFBTSxHQUFHLEdBQUcsZ0JBQUEsR0FBRyxFQUFrQixDQUFBO0FBU3hDLFdBQWlCLG9CQUFvQjtJQVV0Qiw0QkFBTyxHQUFlLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFBO0FBWTlDLENBQUMsRUF0QmdCLG9CQUFvQixLQUFwQixvQkFBb0IsUUFzQnBDO0FBU0QsV0FBaUIsY0FBYztJQVloQixzQkFBTyxHQUFlLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFBO0FBWTlDLENBQUMsRUF4QmdCLGNBQWMsS0FBZCxjQUFjLFFBd0I5QiJ9
@@ -13,22 +13,22 @@ import type {} from "@effect-app/infra/test.arbs";
13
13
  /**
14
14
  * @tsplus global
15
15
  */
16
- import type {} from "@effect-app/infra/ext";
16
+ import type {} from "@effect-app/infra/ext/Array";
17
17
  /**
18
18
  * @tsplus global
19
19
  */
20
- import type {} from "@effect-app/infra/lib/instrument";
20
+ import type {} from "@effect-app/infra/instrument";
21
21
  /**
22
22
  * @tsplus global
23
23
  */
24
- import type {} from "@effect-app/infra/lib/rateLimit";
24
+ import type {} from "@effect-app/infra/rateLimit";
25
25
  /**
26
26
  * @tsplus global
27
27
  */
28
- import type {} from "@effect-app/infra/lib/api/setupRequest";
28
+ import type {} from "@effect-app/infra/api/setupRequest";
29
29
  /**
30
30
  * @tsplus global
31
31
  */
32
- import {} from "@effect-app/infra/lib/api/reportError";
32
+ import {} from "@effect-app/infra/api/reportError";
33
33
  export {};
34
34
  //# sourceMappingURL=_global.ext.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"_global.ext.d.ts","sourceRoot":"","sources":["../_src/_global.ext.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,EAAE,MAAM,yCAAyC,CAAA;AAC7D;;GAEG;AACH,OAAO,KAAK,EAAE,MAAM,6CAA6C,CAAA;AACjE;;GAEG;AACH,OAAO,KAAK,EAAE,MAAM,6BAA6B,CAAA;AACjD;;GAEG;AACH,OAAO,KAAK,EAAE,MAAM,uBAAuB,CAAA;AAC3C;;GAEG;AACH,OAAO,KAAK,EAAE,MAAM,kCAAkC,CAAA;AACtD;;GAEG;AACH,OAAO,KAAK,EAAE,MAAM,iCAAiC,CAAA;AAErD;;GAEG;AACH,OAAO,KAAK,EAAE,MAAM,wCAAwC,CAAA;AAE5D;;GAEG;AACH,OAAO,EAAE,MAAM,uCAAuC,CAAA"}
1
+ {"version":3,"file":"_global.ext.d.ts","sourceRoot":"","sources":["../_src/_global.ext.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,EAAE,MAAM,yCAAyC,CAAA;AAC7D;;GAEG;AACH,OAAO,KAAK,EAAE,MAAM,6CAA6C,CAAA;AACjE;;GAEG;AACH,OAAO,KAAK,EAAE,MAAM,6BAA6B,CAAA;AACjD;;GAEG;AACH,OAAO,KAAK,EAAE,MAAM,6BAA6B,CAAA;AACjD;;GAEG;AACH,OAAO,KAAK,EAAE,MAAM,8BAA8B,CAAA;AAClD;;GAEG;AACH,OAAO,KAAK,EAAE,MAAM,6BAA6B,CAAA;AAEjD;;GAEG;AACH,OAAO,KAAK,EAAE,MAAM,oCAAoC,CAAA;AAExD;;GAEG;AACH,OAAO,EAAE,MAAM,mCAAmC,CAAA"}
@@ -1,4 +1,4 @@
1
- import * as Ex from "@effect-app/infra-adapters/express/index";
1
+ import * as Ex from "@effect-app/infra-adapters/express";
2
2
  export declare const checkJwt: (audience: string, issuer: string) => {
3
3
  (req: import("express").Request<import("express-serve-static-core").ParamsDictionary, any, any, import("qs").ParsedQs, Record<string, any>>, res: import("express").Response<any, Record<string, any>>, next: import("express").NextFunction): Promise<any>;
4
4
  unless: typeof import("express-unless").unless;
@@ -0,0 +1 @@
1
+ {"version":3,"file":"authorization.jwt.d.ts","sourceRoot":"","sources":["../../_src/api/authorization.jwt.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,oCAAoC,CAAA;AAQxD,eAAO,MAAM,QAAQ,aAAc,MAAM,UAAU,MAAM;;;CAgBrD,CAAA;AAUJ,eAAO,MAAM,MAAM,iGAA2B,CAAA"}
@@ -1,5 +1,5 @@
1
1
  // import { configM, UserSVC } from "@/services.js"
2
- import * as Ex from "@effect-app/infra-adapters/express/index";
2
+ import * as Ex from "@effect-app/infra-adapters/express";
3
3
  import { expressjwt } from "express-jwt";
4
4
  import jwtAuthz from "express-jwt-authz";
5
5
  import jwksRsa from "jwks-rsa";
@@ -29,4 +29,4 @@ const demandScopes = jwtAuthz([]);
29
29
  // : Ex.use(Ex.classic(checkJwt)) > Ex.use(Ex.classic(demandScopes)) // TODO
30
30
  // )
31
31
  export const scopes = Ex.classic(demandScopes);
32
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aG9yaXphdGlvbi5qd3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9fc3JjL2xpYi9hcGkvYXV0aG9yaXphdGlvbi5qd3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsbURBQW1EO0FBQ25ELE9BQU8sS0FBSyxFQUFFLE1BQU0sMENBQTBDLENBQUE7QUFDOUQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGFBQWEsQ0FBQTtBQUN4QyxPQUFPLFFBQVEsTUFBTSxtQkFBbUIsQ0FBQTtBQUN4QyxPQUFPLE9BQU8sTUFBTSxVQUFVLENBQUE7QUFFOUIsMkNBQTJDO0FBQzNDLGtEQUFrRDtBQUNsRCw2QkFBNkI7QUFDN0IsTUFBTSxDQUFDLE1BQU0sUUFBUSxHQUFHLENBQUMsUUFBZ0IsRUFBRSxNQUFjLEVBQUUsRUFBRSxDQUMzRCxVQUFVLENBQUM7SUFDVCxvQ0FBb0M7SUFDcEMscUNBQXFDO0lBQ3JDLGtEQUFrRDtJQUNsRCxNQUFNLEVBQUUsT0FBTyxDQUFDLGdCQUFnQixDQUFDO1FBQy9CLEtBQUssRUFBRSxJQUFJO1FBQ1gsU0FBUyxFQUFFLElBQUk7UUFDZixxQkFBcUIsRUFBRSxDQUFDO1FBQ3hCLE9BQU8sRUFBRSxHQUFHLE1BQU0sd0JBQXdCO0tBQzNDLENBQStCO0lBRWhDLHdDQUF3QztJQUN4QyxRQUFRO0lBQ1IsTUFBTSxFQUFFLENBQUMsTUFBTSxHQUFHLEdBQUcsQ0FBQztJQUN0QixVQUFVLEVBQUUsQ0FBQyxPQUFPLENBQUM7Q0FDdEIsQ0FBQyxDQUFBO0FBRUosTUFBTSxZQUFZLEdBQUcsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFBO0FBRWpDLCtCQUErQjtBQUMvQixhQUFhO0FBQ2Isd0JBQXdCO0FBQ3hCLHNCQUFzQjtBQUN0QixrRkFBa0Y7QUFDbEYsSUFBSTtBQUNKLE1BQU0sQ0FBQyxNQUFNLE1BQU0sR0FBRyxFQUFFLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxDQUFBIn0=
32
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aG9yaXphdGlvbi5qd3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9fc3JjL2FwaS9hdXRob3JpemF0aW9uLmp3dC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxtREFBbUQ7QUFDbkQsT0FBTyxLQUFLLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQTtBQUN4RCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sYUFBYSxDQUFBO0FBQ3hDLE9BQU8sUUFBUSxNQUFNLG1CQUFtQixDQUFBO0FBQ3hDLE9BQU8sT0FBTyxNQUFNLFVBQVUsQ0FBQTtBQUU5QiwyQ0FBMkM7QUFDM0Msa0RBQWtEO0FBQ2xELDZCQUE2QjtBQUM3QixNQUFNLENBQUMsTUFBTSxRQUFRLEdBQUcsQ0FBQyxRQUFnQixFQUFFLE1BQWMsRUFBRSxFQUFFLENBQzNELFVBQVUsQ0FBQztJQUNULG9DQUFvQztJQUNwQyxxQ0FBcUM7SUFDckMsa0RBQWtEO0lBQ2xELE1BQU0sRUFBRSxPQUFPLENBQUMsZ0JBQWdCLENBQUM7UUFDL0IsS0FBSyxFQUFFLElBQUk7UUFDWCxTQUFTLEVBQUUsSUFBSTtRQUNmLHFCQUFxQixFQUFFLENBQUM7UUFDeEIsT0FBTyxFQUFFLEdBQUcsTUFBTSx3QkFBd0I7S0FDM0MsQ0FBK0I7SUFFaEMsd0NBQXdDO0lBQ3hDLFFBQVE7SUFDUixNQUFNLEVBQUUsQ0FBQyxNQUFNLEdBQUcsR0FBRyxDQUFDO0lBQ3RCLFVBQVUsRUFBRSxDQUFDLE9BQU8sQ0FBQztDQUN0QixDQUFDLENBQUE7QUFFSixNQUFNLFlBQVksR0FBRyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUE7QUFFakMsK0JBQStCO0FBQy9CLGFBQWE7QUFDYix3QkFBd0I7QUFDeEIsc0JBQXNCO0FBQ3RCLGtGQUFrRjtBQUNsRixJQUFJO0FBQ0osTUFBTSxDQUFDLE1BQU0sTUFBTSxHQUFHLEVBQUUsQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLENBQUEifQ==
@@ -0,0 +1,7 @@
1
+ import { Effect } from "@effect/io/Effect";
2
+ import * as MO from "@effect-app/schema";
3
+ import type { ParserEnv } from "@effect-app/schema/custom/Parser";
4
+ export declare function makeCodec<ParsedShape extends {
5
+ id: Id;
6
+ }, ConstructorInput, Encoded, Api, Id>(self: MO.Schema<unknown, ParsedShape, ConstructorInput, Encoded, Api>): readonly [(e: Encoded, env?: ParserEnv) => import("@effect/io/Effect").Effect<never, never, ParsedShape>, (u: ParsedShape) => import("@effect/io/Effect").Effect<never, never, Encoded>, (a: readonly ParsedShape[]) => import("@effect/io/Effect").Effect<never, never, Map<ParsedShape["id"], Encoded>>];
7
+ //# sourceMappingURL=codec.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codec.d.ts","sourceRoot":"","sources":["../../_src/api/codec.ts"],"names":[],"mappings":";AAAA,OAAO,KAAK,EAAE,MAAM,oBAAoB,CAAA;AAExC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kCAAkC,CAAA;AAEjE,wBAAgB,SAAS,CACvB,WAAW,SAAS;IAAE,EAAE,EAAE,EAAE,CAAA;CAAE,EAC9B,gBAAgB,EAChB,OAAO,EACP,GAAG,EACH,EAAE,EACF,IAAI,EAAE,EAAE,CAAC,MAAM,CAAC,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,OAAO,EAAE,GAAG,CAAC,iBAGlD,OAAO,QAAQ,SAAS,wEAGxB,WAAW,kLAG/B"}
@@ -0,0 +1,19 @@
1
+ import * as tracer_1 from "@effect/io/Debug";
2
+ const fileName_1 = "_src/api/codec.ts";
3
+ import * as tsplus_module_1 from "@effect/io/Effect";
4
+ import * as tsplus_module_2 from "@effect-app/core/fluent/_ext/awesome/_files/Iterable";
5
+ import * as MO from "@effect-app/schema";
6
+ import { Encoder, Parser } from "@effect-app/schema";
7
+ export function makeCodec(self) {
8
+ const parse = MO.condemnDie(Parser.for(self));
9
+ // TODO: strict
10
+ const decode = (e, env) => parse(e, env);
11
+ const enc = Encoder.for(self);
12
+ const encode = (u) => tracer_1.withCallTrace(fileName_1 + ":17:38")(tsplus_module_1.sync(() => enc(u)));
13
+ const encodeToMap = toMap(encode);
14
+ return [decode, encode, encodeToMap];
15
+ }
16
+ function toMap(encode) {
17
+ return (a) => tracer_1.withCallTrace(fileName_1 + ":26:8")(tsplus_module_1.map(_ => new Map(_)))(tsplus_module_2.ext_collectAll(a.map(task => tracer_1.withCallTrace(fileName_1 + ":24:26")(tsplus_module_1.tuple(tracer_1.withCallTrace(fileName_1 + ":24:32")(tsplus_module_1.sync(() => task.id)), encode(task))))));
18
+ }
19
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29kZWMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9fc3JjL2FwaS9jb2RlYy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsT0FBTyxLQUFLLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQTtBQUN4QyxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLG9CQUFvQixDQUFBO0FBR3BELE1BQU0sVUFBVSxTQUFTLENBTXZCLElBQXFFO0lBQ3JFLE1BQU0sS0FBSyxHQUFHLEVBQUUsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFBO0lBQzdDLGVBQWU7SUFDZixNQUFNLE1BQU0sR0FBRyxDQUFDLENBQVUsRUFBRSxHQUFlLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUE7SUFDN0QsTUFBTSxHQUFHLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQTtJQUU3QixNQUFNLE1BQU0sR0FBRyxDQUFDLENBQWMsRUFBRSxFQUFFLCtDQUFDLHFCQUFPLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFBLENBQUE7SUFDdkQsTUFBTSxXQUFXLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFBO0lBQ2pDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsTUFBTSxFQUFFLFdBQVcsQ0FBVSxDQUFBO0FBQy9DLENBQUM7QUFFRCxTQUFTLEtBQUssQ0FBOEIsTUFBeUM7SUFDbkYsT0FBTyxDQUFDLENBQW1CLEVBQUUsRUFBRSxDQUM3QixpRUFFTyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUZ0QiwrQkFBQSxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLCtDQUFDLG9FQUFhLDJCQUFPLElBQUksQ0FBQyxFQUFhLENBQUMsR0FBRSxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQSxDQUFDLENBQ3RELENBQ1EsQ0FBQTtBQUMzQixDQUFDIn0=
@@ -1,6 +1,6 @@
1
1
  import { Effect } from "@effect/io/Effect";
2
2
  import type express from "express";
3
- import type { InvalidStateError, NotFoundError, NotLoggedInError, OptimisticConcurrencyException, UnauthorizedError, ValidationError } from "../../errors.js";
3
+ import type { InvalidStateError, NotFoundError, NotLoggedInError, OptimisticConcurrencyException, UnauthorizedError, ValidationError } from "../errors.js";
4
4
  import type { RequestContext } from "../RequestContext.js";
5
5
  export declare function defaultBasicErrorHandler<R>(_req: express.Request, res: express.Response, _requestContext: RequestContext, r2: Effect<R, ValidationError, void>): import("@effect/io/Effect").Effect<RequestContext | R, never, void>;
6
6
  export declare function defaultErrorHandler<R>(req: express.Request, res: express.Response, _: RequestContext, r2: Effect<R, SupportedErrors, void>): import("@effect/io/Effect").Effect<RequestContext | R, never, void>;
@@ -0,0 +1 @@
1
+ {"version":3,"file":"defaultErrorHandler.d.ts","sourceRoot":"","sources":["../../_src/api/defaultErrorHandler.ts"],"names":[],"mappings":";AAAA,OAAO,KAAK,OAAO,MAAM,SAAS,CAAA;AAClC,OAAO,KAAK,EACV,iBAAiB,EACjB,aAAa,EACb,gBAAgB,EAChB,8BAA8B,EAC9B,iBAAiB,EACjB,eAAe,EAChB,MAAM,cAAc,CAAA;AACrB,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AAG1D,wBAAgB,wBAAwB,CAAC,CAAC,EACxC,IAAI,EAAE,OAAO,CAAC,OAAO,EACrB,GAAG,EAAE,OAAO,CAAC,QAAQ,EACrB,eAAe,EAAE,cAAc,EAC/B,EAAE,EAAE,MAAM,CAAC,CAAC,EAAE,eAAe,EAAE,IAAI,CAAC,uEAgBrC;AAKD,wBAAgB,mBAAmB,CAAC,CAAC,EACnC,GAAG,EAAE,OAAO,CAAC,OAAO,EACpB,GAAG,EAAE,OAAO,CAAC,QAAQ,EACrB,CAAC,EAAE,cAAc,EACjB,EAAE,EAAE,MAAM,CAAC,CAAC,EAAE,eAAe,EAAE,IAAI,CAAC,uEA0CrC;AAED,MAAM,MAAM,eAAe,GACvB,eAAe,GACf,aAAa,GACb,gBAAgB,GAChB,iBAAiB,GACjB,iBAAiB,GACjB,8BAA8B,CAAA"}
@@ -1,5 +1,5 @@
1
1
  import * as tracer_1 from "@effect/io/Debug";
2
- const fileName_1 = "packages/infra/_src/lib/api/defaultErrorHandler.ts";
2
+ const fileName_1 = "_src/api/defaultErrorHandler.ts";
3
3
  import * as tsplus_module_1 from "@effect/io/Effect";
4
4
  import * as tsplus_module_2 from "@effect/io/Cause";
5
5
  import * as tsplus_module_3 from "@effect-app/core/Effect";
@@ -34,4 +34,4 @@ export function defaultErrorHandler(req, res, _, r2) {
34
34
  // final catch all; expecting never so that unhandled known errors will show up
35
35
  );
36
36
  }
37
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVmYXVsdEVycm9ySGFuZGxlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL19zcmMvbGliL2FwaS9kZWZhdWx0RXJyb3JIYW5kbGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQVVBLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQTtBQUVsRCxNQUFNLFVBQVUsd0JBQXdCLENBQ3RDLElBQXFCLEVBQ3JCLEdBQXFCLEVBQ3JCLGVBQStCLEVBQy9CLEVBQW9DO0lBRXBDLE9BQU8sc0VBT0ssQ0FBQyxHQUFVLEVBQUUsRUFBRSxDQUN2Qiw0RkFBQSxrRUFHTyxHQUFHLEVBQUUsQ0FBQyxHQUFjLGlEQUgzQix5QkFDRSxnR0FBZ0csR0FBRyxHQUFHLENBQ3ZHLEVBQzJCLENBQ04sR0FabkIsc0VBRUssaUJBQWlCLEVBQUUsR0FBRyxDQUFDLEVBQUUsOENBQ2pDLHFCQUFPLEdBQUcsRUFBRTtRQUNWLEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQTtJQUNsQyxDQUFDLENBQUMsQ0FBQSxHQUxDLDJFQUNVLEtBQUssQ0FBQyxFQUFFLENBQUMsMEJBQUEsS0FBSyxDQUFZLENBQUMsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLHFCQUFZLEdBRDNFLEVBQUUsQ0FDMEUsQ0FJNUU7SUFDTCwrRUFBK0U7S0FPOUUsQ0FBQTtBQUNMLENBQUM7QUFFRCxNQUFNLDZCQUE2Qiw2QkFDakMsMkJBQXFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxnQ0FBZ0MsQ0FBQyxFQURsRCxzQkFBZSxDQUNtQyxDQUFBO0FBRXhGLE1BQU0sVUFBVSxtQkFBbUIsQ0FDakMsR0FBb0IsRUFDcEIsR0FBcUIsRUFDckIsQ0FBaUIsRUFDakIsRUFBb0M7SUFFcEMsTUFBTSxFQUFFLEdBQUcsQ0FDVCxHQUFHLENBQUMsTUFBTSxLQUFLLE9BQU87UUFDcEIsQ0FBQyxDQUFDLG9FQUFTLDZCQUE2QixHQUF0QyxFQUFFLENBQXFDO1FBQ3pDLENBQUMsQ0FBQyxFQUFFLENBQ1AsQ0FBQTtJQUNELE9BQU8sc0VBNEJLLENBQUMsR0FBVSxFQUFFLEVBQUUsQ0FDdkIsNEZBQUEsa0VBR08sR0FBRyxFQUFFLENBQUMsR0FBYyxpREFIM0IseUJBQ0UsZ0dBQWdHLEdBQUcsR0FBRyxDQUN2RyxFQUMyQixDQUNOLEdBakNuQixzRUFzQkssZ0NBQWdDLEVBQUUsR0FBRyxDQUFDLEVBQUUsOENBQ2hELHFCQUFPLEdBQUcsRUFBRTtRQUNWLDRJQUE0STtRQUM1SSxHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQTtJQUMzQixDQUFDLENBQUMsQ0FBQSxHQTFCQyxzRUFrQkssbUJBQW1CLEVBQUUsR0FBRyxDQUFDLEVBQUUsOENBQ25DLHFCQUFPLEdBQUcsRUFBRTtRQUNWLEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFBO0lBQzNCLENBQUMsQ0FBQyxDQUFBLEdBckJDLHNFQWNLLG1CQUFtQixFQUFFLEdBQUcsQ0FBQyxFQUFFLDhDQUNuQyxxQkFBTyxHQUFHLEVBQUU7UUFDVixHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQTtJQUMzQixDQUFDLENBQUMsQ0FBQSxHQWpCQyxzRUFVSyxrQkFBa0IsRUFBRSxHQUFHLENBQUMsRUFBRSw4Q0FDbEMscUJBQU8sR0FBRyxFQUFFO1FBQ1YsR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUE7SUFDM0IsQ0FBQyxDQUFDLENBQUEsR0FiQyxzRUFNSyxlQUFlLEVBQUUsR0FBRyxDQUFDLEVBQUUsOENBQy9CLHFCQUFPLEdBQUcsRUFBRTtRQUNWLEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFBO0lBQzNCLENBQUMsQ0FBQyxDQUFBLEdBVEMsc0VBRUssaUJBQWlCLEVBQUUsR0FBRyxDQUFDLEVBQUUsOENBQ2pDLHFCQUFPLEdBQUcsRUFBRTtRQUNWLEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQTtJQUNsQyxDQUFDLENBQUMsQ0FBQSxHQUxDLDJFQUNVLEtBQUssQ0FBQyxFQUFFLENBQUMsMEJBQUEsS0FBSyxDQUFZLENBQUMsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLHFCQUFZLEdBRDNFLEVBQUUsQ0FDMEUsQ0FJNUUsQ0FJQSxDQUlBLENBSUEsQ0FJQSxDQUtBO0lBQ0wsK0VBQStFO0tBTzlFLENBQUE7QUFDTCxDQUFDIn0=
37
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVmYXVsdEVycm9ySGFuZGxlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL19zcmMvYXBpL2RlZmF1bHRFcnJvckhhbmRsZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBVUEsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGtCQUFrQixDQUFBO0FBRWxELE1BQU0sVUFBVSx3QkFBd0IsQ0FDdEMsSUFBcUIsRUFDckIsR0FBcUIsRUFDckIsZUFBK0IsRUFDL0IsRUFBb0M7SUFFcEMsT0FBTyxzRUFPSyxDQUFDLEdBQVUsRUFBRSxFQUFFLENBQ3ZCLDRGQUFBLGtFQUdPLEdBQUcsRUFBRSxDQUFDLEdBQWMsaURBSDNCLHlCQUNFLGdHQUFnRyxHQUFHLEdBQUcsQ0FDdkcsRUFDMkIsQ0FDTixHQVpuQixzRUFFSyxpQkFBaUIsRUFBRSxHQUFHLENBQUMsRUFBRSw4Q0FDakMscUJBQU8sR0FBRyxFQUFFO1FBQ1YsR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFBO0lBQ2xDLENBQUMsQ0FBQyxDQUFBLEdBTEMsMkVBQ1UsS0FBSyxDQUFDLEVBQUUsQ0FBQywwQkFBQSxLQUFLLENBQVksQ0FBQyxDQUFDLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMscUJBQVksR0FEM0UsRUFBRSxDQUMwRSxDQUk1RTtJQUNMLCtFQUErRTtLQU85RSxDQUFBO0FBQ0wsQ0FBQztBQUVELE1BQU0sNkJBQTZCLDZCQUNqQywyQkFBcUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLGdDQUFnQyxDQUFDLEVBRGxELHNCQUFlLENBQ21DLENBQUE7QUFFeEYsTUFBTSxVQUFVLG1CQUFtQixDQUNqQyxHQUFvQixFQUNwQixHQUFxQixFQUNyQixDQUFpQixFQUNqQixFQUFvQztJQUVwQyxNQUFNLEVBQUUsR0FBRyxDQUNULEdBQUcsQ0FBQyxNQUFNLEtBQUssT0FBTztRQUNwQixDQUFDLENBQUMsb0VBQVMsNkJBQTZCLEdBQXRDLEVBQUUsQ0FBcUM7UUFDekMsQ0FBQyxDQUFDLEVBQUUsQ0FDUCxDQUFBO0lBQ0QsT0FBTyxzRUE0QkssQ0FBQyxHQUFVLEVBQUUsRUFBRSxDQUN2Qiw0RkFBQSxrRUFHTyxHQUFHLEVBQUUsQ0FBQyxHQUFjLGlEQUgzQix5QkFDRSxnR0FBZ0csR0FBRyxHQUFHLENBQ3ZHLEVBQzJCLENBQ04sR0FqQ25CLHNFQXNCSyxnQ0FBZ0MsRUFBRSxHQUFHLENBQUMsRUFBRSw4Q0FDaEQscUJBQU8sR0FBRyxFQUFFO1FBQ1YsNElBQTRJO1FBQzVJLEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFBO0lBQzNCLENBQUMsQ0FBQyxDQUFBLEdBMUJDLHNFQWtCSyxtQkFBbUIsRUFBRSxHQUFHLENBQUMsRUFBRSw4Q0FDbkMscUJBQU8sR0FBRyxFQUFFO1FBQ1YsR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUE7SUFDM0IsQ0FBQyxDQUFDLENBQUEsR0FyQkMsc0VBY0ssbUJBQW1CLEVBQUUsR0FBRyxDQUFDLEVBQUUsOENBQ25DLHFCQUFPLEdBQUcsRUFBRTtRQUNWLEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFBO0lBQzNCLENBQUMsQ0FBQyxDQUFBLEdBakJDLHNFQVVLLGtCQUFrQixFQUFFLEdBQUcsQ0FBQyxFQUFFLDhDQUNsQyxxQkFBTyxHQUFHLEVBQUU7UUFDVixHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQTtJQUMzQixDQUFDLENBQUMsQ0FBQSxHQWJDLHNFQU1LLGVBQWUsRUFBRSxHQUFHLENBQUMsRUFBRSw4Q0FDL0IscUJBQU8sR0FBRyxFQUFFO1FBQ1YsR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUE7SUFDM0IsQ0FBQyxDQUFDLENBQUEsR0FUQyxzRUFFSyxpQkFBaUIsRUFBRSxHQUFHLENBQUMsRUFBRSw4Q0FDakMscUJBQU8sR0FBRyxFQUFFO1FBQ1YsR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFBO0lBQ2xDLENBQUMsQ0FBQyxDQUFBLEdBTEMsMkVBQ1UsS0FBSyxDQUFDLEVBQUUsQ0FBQywwQkFBQSxLQUFLLENBQVksQ0FBQyxDQUFDLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMscUJBQVksR0FEM0UsRUFBRSxDQUMwRSxDQUk1RSxDQUlBLENBSUEsQ0FJQSxDQUlBLENBS0E7SUFDTCwrRUFBK0U7S0FPOUUsQ0FBQTtBQUNMLENBQUMifQ==
@@ -0,0 +1,30 @@
1
+ import { Chunk } from "@fp-ts/data/Chunk";
2
+ import * as RS from "./schema/routing.js";
3
+ type Methods = "GET" | "PUT" | "POST" | "PATCH" | "DELETE";
4
+ /**
5
+ * Work in progress JSONSchema generator.
6
+ */
7
+ export declare function makeJsonSchema(r: Iterable<RS.RouteDescriptorAny>): import("@effect/io/Effect").Effect<never, never, Record<string, Record<Methods, {
8
+ [x: string]: {
9
+ responses: any;
10
+ tags: readonly string[] | undefined;
11
+ description: string | undefined;
12
+ summary: string | undefined;
13
+ operationId: string | undefined;
14
+ parameters: {
15
+ name: string;
16
+ in: import("@effect-app/infra-adapters/Openapi/atlas-plutus").ParameterLocation;
17
+ required: boolean;
18
+ schema: import("@effect-app/infra-adapters/Openapi/atlas-plutus").SubSchema | undefined;
19
+ }[];
20
+ requestBody: {
21
+ content: {
22
+ "application/json": {
23
+ schema: import("@effect-app/infra-adapters/Openapi/atlas-plutus").JSONSchema;
24
+ };
25
+ };
26
+ } | undefined;
27
+ };
28
+ }>>>;
29
+ export {};
30
+ //# sourceMappingURL=makeJsonSchema.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"makeJsonSchema.d.ts","sourceRoot":"","sources":["../../../_src/api/express/makeJsonSchema.ts"],"names":[],"mappings":";AAEA,OAAO,KAAK,EAAE,MAAM,qBAAqB,CAAA;AAEzC,KAAK,OAAO,GAAG,KAAK,GAAG,KAAK,GAAG,MAAM,GAAG,OAAO,GAAG,QAAQ,CAAA;AAM1D;;GAEG;AACH,wBAAgB,cAAc,CAAC,CAAC,EAAE,QAAQ,CAAC,EAAE,CAAC,kBAAkB,CAAC;;;;;;;;;;;;;;;;;;;;;KA4BhE"}