@effect-app/infra 0.7.0 → 0.8.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 (284) hide show
  1. package/CHANGELOG.md +13 -0
  2. package/_cjs/errors.cjs +21 -22
  3. package/_cjs/errors.cjs.map +1 -1
  4. package/_cjs/lib/api/authorization.jwt.cjs +1 -1
  5. package/_cjs/{vendor/Cache/Cache/operations/makeWith.cjs → lib/api/codec.cjs} +16 -13
  6. package/_cjs/lib/api/codec.cjs.map +1 -0
  7. package/_cjs/{services/memQueue.cjs → lib/api/express/makeJsonSchema.cjs} +42 -22
  8. package/_cjs/lib/api/express/makeJsonSchema.cjs.map +1 -0
  9. package/_cjs/lib/api/express/makeOpenApiSpecs.cjs +66 -0
  10. package/_cjs/lib/api/express/makeOpenApiSpecs.cjs.map +1 -0
  11. package/_cjs/lib/api/express/schema/jwt.cjs +43 -0
  12. package/_cjs/lib/api/express/schema/jwt.cjs.map +1 -0
  13. package/_cjs/lib/api/express/schema/requestHandler.cjs +166 -0
  14. package/_cjs/lib/api/express/schema/requestHandler.cjs.map +1 -0
  15. package/_cjs/lib/api/express/schema/routing.cjs +121 -0
  16. package/_cjs/lib/api/express/schema/routing.cjs.map +1 -0
  17. package/_cjs/lib/api/routing.cjs +28 -28
  18. package/_cjs/lib/api/routing.cjs.map +1 -1
  19. package/_cjs/lib/api/writeDocs.cjs +4 -4
  20. package/_cjs/lib/api/writeDocs.cjs.map +1 -1
  21. package/_cjs/services/Store/Disk.cjs +1 -1
  22. package/_cjs/services/simpledb/cosmosdb.cjs +98 -0
  23. package/_cjs/services/simpledb/cosmosdb.cjs.map +1 -0
  24. package/_cjs/services/simpledb/diskdb.cjs +118 -0
  25. package/_cjs/services/simpledb/diskdb.cjs.map +1 -0
  26. package/_cjs/services/simpledb/fileutil.cjs +36 -0
  27. package/_cjs/services/simpledb/fileutil.cjs.map +1 -0
  28. package/_cjs/{vendor/Cache/Cache/_internal/CacheState.cjs → services/simpledb/index.cjs} +31 -24
  29. package/_cjs/services/simpledb/index.cjs.map +1 -0
  30. package/_cjs/services/simpledb/memdb.cjs +74 -0
  31. package/_cjs/services/simpledb/memdb.cjs.map +1 -0
  32. package/_cjs/services/simpledb/mongodb.cjs +86 -0
  33. package/_cjs/services/simpledb/mongodb.cjs.map +1 -0
  34. package/_cjs/services/simpledb/redisdb.cjs +120 -0
  35. package/_cjs/services/simpledb/redisdb.cjs.map +1 -0
  36. package/_cjs/services/simpledb/shared.cjs +80 -0
  37. package/_cjs/services/simpledb/shared.cjs.map +1 -0
  38. package/_cjs/services/simpledb/simpledb.cjs +77 -0
  39. package/_cjs/services/simpledb/simpledb.cjs.map +1 -0
  40. package/_src/_global.ext.ts +1 -1
  41. package/_src/errors.ts +12 -3
  42. package/_src/lib/api/app.ts.bak +125 -0
  43. package/_src/lib/api/authorization.jwt.ts +1 -1
  44. package/_src/lib/api/codec.ts +27 -0
  45. package/_src/lib/api/errors.ts.bak +20 -0
  46. package/_src/lib/api/express/makeJsonSchema.ts +49 -0
  47. package/_src/lib/api/express/makeOpenApiSpecs.ts +60 -0
  48. package/_src/lib/api/express/routing.ts.bak +460 -0
  49. package/_src/lib/api/express/schema/jwt.ts +38 -0
  50. package/_src/lib/api/express/schema/requestHandler.ts +360 -0
  51. package/_src/lib/api/express/schema/routing.ts +202 -0
  52. package/_src/lib/api/routing.ts +5 -10
  53. package/_src/lib/api/writeDocs.ts +4 -5
  54. package/_src/services/Store/Disk.ts +1 -1
  55. package/_src/services/simpledb/cosmosdb.ts +134 -0
  56. package/_src/services/simpledb/diskdb.ts +158 -0
  57. package/_src/services/simpledb/fileutil.ts +28 -0
  58. package/_src/services/simpledb/index.ts +6 -0
  59. package/_src/services/simpledb/memdb.ts +79 -0
  60. package/_src/services/simpledb/mongodb.ts +99 -0
  61. package/_src/services/simpledb/redisdb.ts +182 -0
  62. package/_src/services/simpledb/shared.ts +117 -0
  63. package/_src/services/simpledb/simpledb.ts +117 -0
  64. package/dist/_global.ext.d.ts +1 -1
  65. package/dist/_global.ext.d.ts.map +1 -1
  66. package/dist/errors.d.ts +11 -2
  67. package/dist/errors.d.ts.map +1 -1
  68. package/dist/errors.js +17 -3
  69. package/dist/lib/api/authorization.jwt.d.ts +1 -1
  70. package/dist/lib/api/authorization.jwt.d.ts.map +1 -1
  71. package/dist/lib/api/authorization.jwt.js +2 -2
  72. package/dist/lib/api/codec.d.ts +7 -0
  73. package/dist/lib/api/codec.d.ts.map +1 -0
  74. package/dist/lib/api/codec.js +19 -0
  75. package/dist/lib/api/express/makeJsonSchema.d.ts +30 -0
  76. package/dist/lib/api/express/makeJsonSchema.d.ts.map +1 -0
  77. package/dist/lib/api/express/makeJsonSchema.js +40 -0
  78. package/dist/lib/api/express/makeOpenApiSpecs.d.ts +55 -0
  79. package/dist/lib/api/express/makeOpenApiSpecs.d.ts.map +1 -0
  80. package/dist/lib/api/express/makeOpenApiSpecs.js +56 -0
  81. package/dist/lib/api/express/schema/jwt.d.ts +5 -0
  82. package/dist/lib/api/express/schema/jwt.d.ts.map +1 -0
  83. package/dist/lib/api/express/schema/jwt.js +32 -0
  84. package/dist/lib/api/express/schema/requestHandler.d.ts +71 -0
  85. package/dist/lib/api/express/schema/requestHandler.d.ts.map +1 -0
  86. package/dist/lib/api/express/schema/requestHandler.js +140 -0
  87. package/dist/lib/api/express/schema/routing.d.ts +45 -0
  88. package/dist/lib/api/express/schema/routing.d.ts.map +1 -0
  89. package/dist/lib/api/express/schema/routing.js +95 -0
  90. package/dist/lib/api/routing.d.ts +4 -4
  91. package/dist/lib/api/routing.d.ts.map +1 -1
  92. package/dist/lib/api/routing.js +29 -28
  93. package/dist/lib/api/writeDocs.d.ts +1 -1
  94. package/dist/lib/api/writeDocs.d.ts.map +1 -1
  95. package/dist/lib/api/writeDocs.js +5 -5
  96. package/dist/services/Store/Disk.js +2 -2
  97. package/dist/services/simpledb/cosmosdb.d.ts +13 -0
  98. package/dist/services/simpledb/cosmosdb.d.ts.map +1 -0
  99. package/dist/services/simpledb/cosmosdb.js +88 -0
  100. package/dist/services/simpledb/diskdb.d.ts +12 -0
  101. package/dist/services/simpledb/diskdb.d.ts.map +1 -0
  102. package/dist/services/simpledb/diskdb.js +96 -0
  103. package/dist/services/simpledb/fileutil.d.ts +7 -0
  104. package/dist/services/simpledb/fileutil.d.ts.map +1 -0
  105. package/dist/services/simpledb/fileutil.js +25 -0
  106. package/dist/services/simpledb/index.d.ts +7 -0
  107. package/dist/services/simpledb/index.d.ts.map +1 -0
  108. package/dist/services/simpledb/index.js +7 -0
  109. package/dist/services/simpledb/memdb.d.ts +12 -0
  110. package/dist/services/simpledb/memdb.d.ts.map +1 -0
  111. package/dist/services/simpledb/memdb.js +55 -0
  112. package/dist/services/simpledb/mongodb.d.ts +13 -0
  113. package/dist/services/simpledb/mongodb.d.ts.map +1 -0
  114. package/dist/services/simpledb/mongodb.js +55 -0
  115. package/dist/services/simpledb/redisdb.d.ts +25 -0
  116. package/dist/services/simpledb/redisdb.d.ts.map +1 -0
  117. package/dist/services/simpledb/redisdb.js +105 -0
  118. package/dist/services/simpledb/shared.d.ts +63 -0
  119. package/dist/services/simpledb/shared.d.ts.map +1 -0
  120. package/dist/services/simpledb/shared.js +65 -0
  121. package/dist/services/simpledb/simpledb.d.ts +23 -0
  122. package/dist/services/simpledb/simpledb.d.ts.map +1 -0
  123. package/dist/services/simpledb/simpledb.js +56 -0
  124. package/package.json +126 -238
  125. package/_cjs/ext.cjs +0 -4
  126. package/_cjs/ext.cjs.map +0 -1
  127. package/_cjs/lib/fileUtil.cjs +0 -36
  128. package/_cjs/lib/fileUtil.cjs.map +0 -1
  129. package/_cjs/services/CUPS/service.cjs +0 -15
  130. package/_cjs/services/CUPS/service.cjs.map +0 -1
  131. package/_cjs/services/CUPS.cjs +0 -113
  132. package/_cjs/services/CUPS.cjs.map +0 -1
  133. package/_cjs/services/Cache.cjs +0 -39
  134. package/_cjs/services/Cache.cjs.map +0 -1
  135. package/_cjs/services/ServiceBus.cjs +0 -69
  136. package/_cjs/services/ServiceBus.cjs.map +0 -1
  137. package/_cjs/services/memQueue.cjs.map +0 -1
  138. package/_cjs/vendor/Cache/Cache/_internal/AtomicBoolean.cjs +0 -14
  139. package/_cjs/vendor/Cache/Cache/_internal/AtomicBoolean.cjs.map +0 -1
  140. package/_cjs/vendor/Cache/Cache/_internal/AtomicNumber.cjs +0 -29
  141. package/_cjs/vendor/Cache/Cache/_internal/AtomicNumber.cjs.map +0 -1
  142. package/_cjs/vendor/Cache/Cache/_internal/AtomicReference.cjs +0 -32
  143. package/_cjs/vendor/Cache/Cache/_internal/AtomicReference.cjs.map +0 -1
  144. package/_cjs/vendor/Cache/Cache/_internal/CacheInternal.cjs +0 -266
  145. package/_cjs/vendor/Cache/Cache/_internal/CacheInternal.cjs.map +0 -1
  146. package/_cjs/vendor/Cache/Cache/_internal/CacheState.cjs.map +0 -1
  147. package/_cjs/vendor/Cache/Cache/_internal/KeySet.cjs +0 -67
  148. package/_cjs/vendor/Cache/Cache/_internal/KeySet.cjs.map +0 -1
  149. package/_cjs/vendor/Cache/Cache/_internal/MapKey.cjs +0 -44
  150. package/_cjs/vendor/Cache/Cache/_internal/MapKey.cjs.map +0 -1
  151. package/_cjs/vendor/Cache/Cache/_internal/MapValue.cjs +0 -33
  152. package/_cjs/vendor/Cache/Cache/_internal/MapValue.cjs.map +0 -1
  153. package/_cjs/vendor/Cache/Cache/definition.cjs +0 -13
  154. package/_cjs/vendor/Cache/Cache/definition.cjs.map +0 -1
  155. package/_cjs/vendor/Cache/Cache/operations/make.cjs +0 -20
  156. package/_cjs/vendor/Cache/Cache/operations/make.cjs.map +0 -1
  157. package/_cjs/vendor/Cache/Cache/operations/makeWith.cjs.map +0 -1
  158. package/_cjs/vendor/Cache/Cache/operations.cjs +0 -28
  159. package/_cjs/vendor/Cache/Cache/operations.cjs.map +0 -1
  160. package/_cjs/vendor/Cache/Cache.cjs +0 -28
  161. package/_cjs/vendor/Cache/Cache.cjs.map +0 -1
  162. package/_cjs/vendor/Cache/CacheStats/definition.cjs +0 -13
  163. package/_cjs/vendor/Cache/CacheStats/definition.cjs.map +0 -1
  164. package/_cjs/vendor/Cache/CacheStats.cjs +0 -17
  165. package/_cjs/vendor/Cache/CacheStats.cjs.map +0 -1
  166. package/_cjs/vendor/Cache/EntryStats/definition.cjs +0 -11
  167. package/_cjs/vendor/Cache/EntryStats/definition.cjs.map +0 -1
  168. package/_cjs/vendor/Cache/EntryStats.cjs +0 -17
  169. package/_cjs/vendor/Cache/EntryStats.cjs.map +0 -1
  170. package/_cjs/vendor/Cache/Lookup/definition.cjs +0 -6
  171. package/_cjs/vendor/Cache/Lookup/definition.cjs.map +0 -1
  172. package/_cjs/vendor/Cache/Lookup.cjs +0 -17
  173. package/_cjs/vendor/Cache/Lookup.cjs.map +0 -1
  174. package/_cjs/vendor/Cache/index.cjs +0 -17
  175. package/_cjs/vendor/Cache/index.cjs.map +0 -1
  176. package/_src/ext.ts +0 -1
  177. package/_src/lib/fileUtil.ts +0 -56
  178. package/_src/services/CUPS/service.ts +0 -16
  179. package/_src/services/CUPS.ts +0 -105
  180. package/_src/services/Cache.ts +0 -45
  181. package/_src/services/ServiceBus.ts +0 -111
  182. package/_src/services/memQueue.ts +0 -30
  183. package/_src/vendor/Cache/Cache/_internal/AtomicBoolean.ts +0 -7
  184. package/_src/vendor/Cache/Cache/_internal/AtomicNumber.ts +0 -28
  185. package/_src/vendor/Cache/Cache/_internal/AtomicReference.ts +0 -30
  186. package/_src/vendor/Cache/Cache/_internal/CacheInternal.ts +0 -293
  187. package/_src/vendor/Cache/Cache/_internal/CacheState.ts +0 -56
  188. package/_src/vendor/Cache/Cache/_internal/KeySet.ts +0 -58
  189. package/_src/vendor/Cache/Cache/_internal/MapKey.ts +0 -43
  190. package/_src/vendor/Cache/Cache/_internal/MapValue.ts +0 -39
  191. package/_src/vendor/Cache/Cache/definition.ts +0 -112
  192. package/_src/vendor/Cache/Cache/operations/make.ts +0 -17
  193. package/_src/vendor/Cache/Cache/operations/makeWith.ts +0 -32
  194. package/_src/vendor/Cache/Cache/operations.ts +0 -4
  195. package/_src/vendor/Cache/Cache.ts +0 -4
  196. package/_src/vendor/Cache/CacheStats/definition.ts +0 -23
  197. package/_src/vendor/Cache/CacheStats.ts +0 -3
  198. package/_src/vendor/Cache/EntryStats/definition.ts +0 -19
  199. package/_src/vendor/Cache/EntryStats.ts +0 -3
  200. package/_src/vendor/Cache/Lookup/definition.ts +0 -15
  201. package/_src/vendor/Cache/Lookup.ts +0 -3
  202. package/_src/vendor/Cache/global.ts.bak +0 -23
  203. package/_src/vendor/Cache/index.ts +0 -4
  204. package/dist/ext.d.ts +0 -2
  205. package/dist/ext.d.ts.map +0 -1
  206. package/dist/ext.js +0 -2
  207. package/dist/lib/fileUtil.d.ts +0 -22
  208. package/dist/lib/fileUtil.d.ts.map +0 -1
  209. package/dist/lib/fileUtil.js +0 -23
  210. package/dist/services/CUPS/service.d.ts +0 -19
  211. package/dist/services/CUPS/service.d.ts.map +0 -1
  212. package/dist/services/CUPS/service.js +0 -5
  213. package/dist/services/CUPS.d.ts +0 -10
  214. package/dist/services/CUPS.d.ts.map +0 -1
  215. package/dist/services/CUPS.js +0 -89
  216. package/dist/services/Cache.d.ts +0 -28
  217. package/dist/services/Cache.d.ts.map +0 -1
  218. package/dist/services/Cache.js +0 -28
  219. package/dist/services/ServiceBus.d.ts +0 -26
  220. package/dist/services/ServiceBus.d.ts.map +0 -1
  221. package/dist/services/ServiceBus.js +0 -53
  222. package/dist/services/memQueue.d.ts +0 -18
  223. package/dist/services/memQueue.d.ts.map +0 -1
  224. package/dist/services/memQueue.js +0 -24
  225. package/dist/vendor/Cache/Cache/_internal/AtomicBoolean.d.ts +0 -5
  226. package/dist/vendor/Cache/Cache/_internal/AtomicBoolean.d.ts.map +0 -1
  227. package/dist/vendor/Cache/Cache/_internal/AtomicBoolean.js +0 -7
  228. package/dist/vendor/Cache/Cache/_internal/AtomicNumber.d.ts +0 -8
  229. package/dist/vendor/Cache/Cache/_internal/AtomicNumber.d.ts.map +0 -1
  230. package/dist/vendor/Cache/Cache/_internal/AtomicNumber.js +0 -22
  231. package/dist/vendor/Cache/Cache/_internal/AtomicReference.d.ts +0 -10
  232. package/dist/vendor/Cache/Cache/_internal/AtomicReference.d.ts.map +0 -1
  233. package/dist/vendor/Cache/Cache/_internal/AtomicReference.js +0 -25
  234. package/dist/vendor/Cache/Cache/_internal/CacheInternal.d.ts +0 -51
  235. package/dist/vendor/Cache/Cache/_internal/CacheInternal.d.ts.map +0 -1
  236. package/dist/vendor/Cache/Cache/_internal/CacheInternal.js +0 -253
  237. package/dist/vendor/Cache/Cache/_internal/CacheState.d.ts +0 -33
  238. package/dist/vendor/Cache/Cache/_internal/CacheState.d.ts.map +0 -1
  239. package/dist/vendor/Cache/Cache/_internal/CacheState.js +0 -21
  240. package/dist/vendor/Cache/Cache/_internal/KeySet.d.ts +0 -20
  241. package/dist/vendor/Cache/Cache/_internal/KeySet.d.ts.map +0 -1
  242. package/dist/vendor/Cache/Cache/_internal/KeySet.js +0 -61
  243. package/dist/vendor/Cache/Cache/_internal/MapKey.d.ts +0 -24
  244. package/dist/vendor/Cache/Cache/_internal/MapKey.d.ts.map +0 -1
  245. package/dist/vendor/Cache/Cache/_internal/MapKey.js +0 -37
  246. package/dist/vendor/Cache/Cache/_internal/MapValue.d.ts +0 -32
  247. package/dist/vendor/Cache/Cache/_internal/MapValue.d.ts.map +0 -1
  248. package/dist/vendor/Cache/Cache/_internal/MapValue.js +0 -24
  249. package/dist/vendor/Cache/Cache/definition.d.ts +0 -100
  250. package/dist/vendor/Cache/Cache/definition.d.ts.map +0 -1
  251. package/dist/vendor/Cache/Cache/definition.js +0 -5
  252. package/dist/vendor/Cache/Cache/operations/make.d.ts +0 -12
  253. package/dist/vendor/Cache/Cache/operations/make.d.ts.map +0 -1
  254. package/dist/vendor/Cache/Cache/operations/make.js +0 -12
  255. package/dist/vendor/Cache/Cache/operations/makeWith.d.ts +0 -14
  256. package/dist/vendor/Cache/Cache/operations/makeWith.d.ts.map +0 -1
  257. package/dist/vendor/Cache/Cache/operations/makeWith.js +0 -15
  258. package/dist/vendor/Cache/Cache/operations.d.ts +0 -3
  259. package/dist/vendor/Cache/Cache/operations.d.ts.map +0 -1
  260. package/dist/vendor/Cache/Cache/operations.js +0 -4
  261. package/dist/vendor/Cache/Cache.d.ts +0 -3
  262. package/dist/vendor/Cache/Cache.d.ts.map +0 -1
  263. package/dist/vendor/Cache/Cache.js +0 -4
  264. package/dist/vendor/Cache/CacheStats/definition.d.ts +0 -19
  265. package/dist/vendor/Cache/CacheStats/definition.d.ts.map +0 -1
  266. package/dist/vendor/Cache/CacheStats/definition.js +0 -6
  267. package/dist/vendor/Cache/CacheStats.d.ts +0 -2
  268. package/dist/vendor/Cache/CacheStats.d.ts.map +0 -1
  269. package/dist/vendor/Cache/CacheStats.js +0 -3
  270. package/dist/vendor/Cache/EntryStats/definition.d.ts +0 -17
  271. package/dist/vendor/Cache/EntryStats/definition.d.ts.map +0 -1
  272. package/dist/vendor/Cache/EntryStats/definition.js +0 -4
  273. package/dist/vendor/Cache/EntryStats.d.ts +0 -2
  274. package/dist/vendor/Cache/EntryStats.d.ts.map +0 -1
  275. package/dist/vendor/Cache/EntryStats.js +0 -3
  276. package/dist/vendor/Cache/Lookup/definition.d.ts +0 -17
  277. package/dist/vendor/Cache/Lookup/definition.d.ts.map +0 -1
  278. package/dist/vendor/Cache/Lookup/definition.js +0 -2
  279. package/dist/vendor/Cache/Lookup.d.ts +0 -2
  280. package/dist/vendor/Cache/Lookup.d.ts.map +0 -1
  281. package/dist/vendor/Cache/Lookup.js +0 -3
  282. package/dist/vendor/Cache/index.d.ts +0 -5
  283. package/dist/vendor/Cache/index.d.ts.map +0 -1
  284. package/dist/vendor/Cache/index.js +0 -5
@@ -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
+ }
@@ -13,7 +13,7 @@ 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/lib/ext/Array";
17
17
  /**
18
18
  * @tsplus global
19
19
  */
@@ -1 +1 @@
1
- {"version":3,"file":"_global.ext.d.ts","sourceRoot":"","sources":["../_src/_global.ext.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,EAAE,MAAM,yCAAyC,CAAA;AAC7D;;GAEG;AACH,OAAO,KAAK,EAAE,MAAM,6CAA6C,CAAA;AACjE;;GAEG;AACH,OAAO,KAAK,EAAE,MAAM,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,iCAAiC,CAAA;AACrD;;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"}
package/dist/errors.d.ts CHANGED
@@ -1,11 +1,20 @@
1
1
  import { Cause } from "@effect/io/Cause";
2
- import { NotLoggedInError } from "@effect-app/infra-adapters/errors";
3
2
  export declare class NotFoundError<T extends string = string> {
4
3
  readonly _tag = "NotFoundError";
5
4
  readonly message: string;
6
5
  constructor(type: T, id: string);
7
6
  }
8
- export { NotLoggedInError, UnauthorizedError, ValidationError } from "@effect-app/infra-adapters/errors";
7
+ export declare class ValidationError {
8
+ readonly errors: ReadonlyArray<unknown>;
9
+ readonly _tag = "ValidationError";
10
+ constructor(errors: ReadonlyArray<unknown>);
11
+ }
12
+ export declare class NotLoggedInError {
13
+ readonly _tag = "NotLoggedInError";
14
+ }
15
+ export declare class UnauthorizedError {
16
+ readonly _tag = "UnauthorizedError";
17
+ }
9
18
  /**
10
19
  * The user carries a valid Userprofile, but there is a problem with the login none the less.
11
20
  */
@@ -1 +1 @@
1
- {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../_src/errors.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,mCAAmC,CAAA;AAEpE,qBAAa,aAAa,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM;IAClD,SAAgB,IAAI,mBAAkB;IACtC,SAAgB,OAAO,EAAE,MAAM,CAAA;gBACnB,IAAI,EAAE,CAAC,EAAE,EAAE,EAAE,MAAM;CAGhC;AAED,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,mCAAmC,CAAA;AAExG;;GAEG;AACH,qBAAa,UAAW,SAAQ,gBAAgB;IAClC,QAAQ,CAAC,OAAO,EAAE,MAAM;gBAAf,OAAO,EAAE,MAAM;CAGrC;AAED,qBAAa,iBAAiB;aAEA,OAAO,EAAE,MAAM;IAD3C,SAAgB,IAAI,uBAAsB;gBACd,OAAO,EAAE,MAAM;CAC5C;AAED,qBAAa,cAAc,CAAC,CAAC,CAAE,SAAQ,KAAK;IAE9B,QAAQ,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC,CAAC;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM;IAD/D,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;gBACF,SAAS,EAAE,KAAK,CAAC,CAAC,CAAC,EAAW,IAAI,EAAE,MAAM;IAK/D,MAAM;;;;;CAQP;AAED,qBAAa,8BAA8B;IAG7B,QAAQ,CAAC,IAAI,EAAE,MAAM;IAAE,QAAQ,CAAC,EAAE,EAAE,MAAM;IAAE,QAAQ,CAAC,OAAO,CAAC;IAAU,QAAQ,CAAC,KAAK,CAAC;IAFlG,QAAQ,CAAC,IAAI,oCAAmC;IAChD,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;gBACH,IAAI,EAAE,MAAM,EAAW,EAAE,EAAE,MAAM,EAAW,OAAO,CAAC,oBAAQ,EAAW,KAAK,CAAC,oBAAQ;CAG3G"}
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../_src/errors.ts"],"names":[],"mappings":";AAAA,qBAAa,aAAa,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM;IAClD,SAAgB,IAAI,mBAAkB;IACtC,SAAgB,OAAO,EAAE,MAAM,CAAA;gBACnB,IAAI,EAAE,CAAC,EAAE,EAAE,EAAE,MAAM;CAGhC;AAED,qBAAa,eAAe;aAEE,MAAM,EAAE,aAAa,CAAC,OAAO,CAAC;IAD1D,SAAgB,IAAI,qBAAoB;gBACZ,MAAM,EAAE,aAAa,CAAC,OAAO,CAAC;CAC3D;AAED,qBAAa,gBAAgB;IAC3B,SAAgB,IAAI,sBAAqB;CAC1C;AAED,qBAAa,iBAAiB;IAC5B,SAAgB,IAAI,uBAAsB;CAC3C;AAED;;GAEG;AACH,qBAAa,UAAW,SAAQ,gBAAgB;IAClC,QAAQ,CAAC,OAAO,EAAE,MAAM;gBAAf,OAAO,EAAE,MAAM;CAGrC;AAED,qBAAa,iBAAiB;aAEA,OAAO,EAAE,MAAM;IAD3C,SAAgB,IAAI,uBAAsB;gBACd,OAAO,EAAE,MAAM;CAC5C;AAED,qBAAa,cAAc,CAAC,CAAC,CAAE,SAAQ,KAAK;IAE9B,QAAQ,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC,CAAC;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM;IAD/D,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;gBACF,SAAS,EAAE,KAAK,CAAC,CAAC,CAAC,EAAW,IAAI,EAAE,MAAM;IAK/D,MAAM;;;;;CAQP;AAED,qBAAa,8BAA8B;IAG7B,QAAQ,CAAC,IAAI,EAAE,MAAM;IAAE,QAAQ,CAAC,EAAE,EAAE,MAAM;IAAE,QAAQ,CAAC,OAAO,CAAC;IAAU,QAAQ,CAAC,KAAK,CAAC;IAFlG,QAAQ,CAAC,IAAI,oCAAmC;IAChD,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;gBACH,IAAI,EAAE,MAAM,EAAW,EAAE,EAAE,MAAM,EAAW,OAAO,CAAC,oBAAQ,EAAW,KAAK,CAAC,oBAAQ;CAG3G"}
package/dist/errors.js CHANGED
@@ -1,12 +1,26 @@
1
1
  import * as tsplus_module_1 from "@effect/io/Cause";
2
- import { NotLoggedInError } from "@effect-app/infra-adapters/errors";
3
2
  export class NotFoundError {
4
3
  constructor(type, id) {
5
4
  this._tag = "NotFoundError";
6
5
  this.message = `Didn't find ${type}#${id}`;
7
6
  }
8
7
  }
9
- export { NotLoggedInError, UnauthorizedError, ValidationError } from "@effect-app/infra-adapters/errors";
8
+ export class ValidationError {
9
+ constructor(errors) {
10
+ this.errors = errors;
11
+ this._tag = "ValidationError";
12
+ }
13
+ }
14
+ export class NotLoggedInError {
15
+ constructor() {
16
+ this._tag = "NotLoggedInError";
17
+ }
18
+ }
19
+ export class UnauthorizedError {
20
+ constructor() {
21
+ this._tag = "UnauthorizedError";
22
+ }
23
+ }
10
24
  /**
11
25
  * The user carries a valid Userprofile, but there is a problem with the login none the less.
12
26
  */
@@ -48,4 +62,4 @@ export class OptimisticConcurrencyException {
48
62
  this.message = `Existing ${type} ${id} record changed`;
49
63
  }
50
64
  }
51
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXJyb3JzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vX3NyYy9lcnJvcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLG1DQUFtQyxDQUFBO0FBRXBFLE1BQU0sT0FBTyxhQUFhO0lBR3hCLFlBQVksSUFBTyxFQUFFLEVBQVU7UUFGZixTQUFJLEdBQUcsZUFBZSxDQUFBO1FBR3BDLElBQUksQ0FBQyxPQUFPLEdBQUcsZUFBZSxJQUFJLElBQUksRUFBRSxFQUFFLENBQUE7SUFDNUMsQ0FBQztDQUNGO0FBRUQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLGlCQUFpQixFQUFFLGVBQWUsRUFBRSxNQUFNLG1DQUFtQyxDQUFBO0FBRXhHOztHQUVHO0FBQ0gsTUFBTSxPQUFPLFVBQVcsU0FBUSxnQkFBZ0I7SUFDOUMsWUFBcUIsT0FBZTtRQUNsQyxLQUFLLEVBQUUsQ0FBQTtRQURZLFlBQU8sR0FBUCxPQUFPLENBQVE7SUFFcEMsQ0FBQztDQUNGO0FBRUQsTUFBTSxPQUFPLGlCQUFpQjtJQUU1QixZQUE0QixPQUFlO1FBQWYsWUFBTyxHQUFQLE9BQU8sQ0FBUTtRQUQzQixTQUFJLEdBQUcsbUJBQW1CLENBQUE7SUFDSSxDQUFDO0NBQ2hEO0FBRUQsTUFBTSxPQUFPLGNBQWtCLFNBQVEsS0FBSztJQUUxQyxZQUFxQixTQUFtQixFQUFXLElBQVk7UUFDN0QsS0FBSyxDQUFDLGlCQUFpQixJQUFJLGtEQUFrRCxDQUFDLENBQUE7UUFEM0QsY0FBUyxHQUFULFNBQVMsQ0FBVTtRQUFXLFNBQUksR0FBSixJQUFJLENBQVE7UUFFN0QsSUFBSSxDQUFDLE1BQU0sR0FBRyx5QkFBQSxTQUFTLENBQVMsQ0FBQTtJQUNsQyxDQUFDO0lBRUQsTUFBTTtRQUNKLE9BQU87WUFDTCxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUk7WUFDZixPQUFPLEVBQUUsSUFBSSxDQUFDLE9BQU87WUFDckIsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNO1lBQ25CLDJEQUEyRDtTQUM1RCxDQUFBO0lBQ0gsQ0FBQztDQUNGO0FBRUQsTUFBTSxPQUFPLDhCQUE4QjtJQUd6QyxZQUFxQixJQUFZLEVBQVcsRUFBVSxFQUFXLE9BQWdCLEVBQVcsS0FBYztRQUFyRixTQUFJLEdBQUosSUFBSSxDQUFRO1FBQVcsT0FBRSxHQUFGLEVBQUUsQ0FBUTtRQUFXLFlBQU8sR0FBUCxPQUFPLENBQVM7UUFBVyxVQUFLLEdBQUwsS0FBSyxDQUFTO1FBRmpHLFNBQUksR0FBRyxnQ0FBZ0MsQ0FBQTtRQUc5QyxJQUFJLENBQUMsT0FBTyxHQUFHLFlBQVksSUFBSSxJQUFJLEVBQUUsaUJBQWlCLENBQUE7SUFDeEQsQ0FBQztDQUNGIn0=
65
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXJyb3JzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vX3NyYy9lcnJvcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE1BQU0sT0FBTyxhQUFhO0lBR3hCLFlBQVksSUFBTyxFQUFFLEVBQVU7UUFGZixTQUFJLEdBQUcsZUFBZSxDQUFBO1FBR3BDLElBQUksQ0FBQyxPQUFPLEdBQUcsZUFBZSxJQUFJLElBQUksRUFBRSxFQUFFLENBQUE7SUFDNUMsQ0FBQztDQUNGO0FBRUQsTUFBTSxPQUFPLGVBQWU7SUFFMUIsWUFBNEIsTUFBOEI7UUFBOUIsV0FBTSxHQUFOLE1BQU0sQ0FBd0I7UUFEMUMsU0FBSSxHQUFHLGlCQUFpQixDQUFBO0lBQ3FCLENBQUM7Q0FDL0Q7QUFFRCxNQUFNLE9BQU8sZ0JBQWdCO0lBQTdCO1FBQ2tCLFNBQUksR0FBRyxrQkFBa0IsQ0FBQTtJQUMzQyxDQUFDO0NBQUE7QUFFRCxNQUFNLE9BQU8saUJBQWlCO0lBQTlCO1FBQ2tCLFNBQUksR0FBRyxtQkFBbUIsQ0FBQTtJQUM1QyxDQUFDO0NBQUE7QUFFRDs7R0FFRztBQUNILE1BQU0sT0FBTyxVQUFXLFNBQVEsZ0JBQWdCO0lBQzlDLFlBQXFCLE9BQWU7UUFDbEMsS0FBSyxFQUFFLENBQUE7UUFEWSxZQUFPLEdBQVAsT0FBTyxDQUFRO0lBRXBDLENBQUM7Q0FDRjtBQUVELE1BQU0sT0FBTyxpQkFBaUI7SUFFNUIsWUFBNEIsT0FBZTtRQUFmLFlBQU8sR0FBUCxPQUFPLENBQVE7UUFEM0IsU0FBSSxHQUFHLG1CQUFtQixDQUFBO0lBQ0ksQ0FBQztDQUNoRDtBQUVELE1BQU0sT0FBTyxjQUFrQixTQUFRLEtBQUs7SUFFMUMsWUFBcUIsU0FBbUIsRUFBVyxJQUFZO1FBQzdELEtBQUssQ0FBQyxpQkFBaUIsSUFBSSxrREFBa0QsQ0FBQyxDQUFBO1FBRDNELGNBQVMsR0FBVCxTQUFTLENBQVU7UUFBVyxTQUFJLEdBQUosSUFBSSxDQUFRO1FBRTdELElBQUksQ0FBQyxNQUFNLEdBQUcseUJBQUEsU0FBUyxDQUFTLENBQUE7SUFDbEMsQ0FBQztJQUVELE1BQU07UUFDSixPQUFPO1lBQ0wsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJO1lBQ2YsT0FBTyxFQUFFLElBQUksQ0FBQyxPQUFPO1lBQ3JCLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTTtZQUNuQiwyREFBMkQ7U0FDNUQsQ0FBQTtJQUNILENBQUM7Q0FDRjtBQUVELE1BQU0sT0FBTyw4QkFBOEI7SUFHekMsWUFBcUIsSUFBWSxFQUFXLEVBQVUsRUFBVyxPQUFnQixFQUFXLEtBQWM7UUFBckYsU0FBSSxHQUFKLElBQUksQ0FBUTtRQUFXLE9BQUUsR0FBRixFQUFFLENBQVE7UUFBVyxZQUFPLEdBQVAsT0FBTyxDQUFTO1FBQVcsVUFBSyxHQUFMLEtBQUssQ0FBUztRQUZqRyxTQUFJLEdBQUcsZ0NBQWdDLENBQUE7UUFHOUMsSUFBSSxDQUFDLE9BQU8sR0FBRyxZQUFZLElBQUksSUFBSSxFQUFFLGlCQUFpQixDQUFBO0lBQ3hELENBQUM7Q0FDRiJ9
@@ -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;
@@ -1 +1 @@
1
- {"version":3,"file":"authorization.jwt.d.ts","sourceRoot":"","sources":["../../../_src/lib/api/authorization.jwt.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,0CAA0C,CAAA;AAQ9D,eAAO,MAAM,QAAQ,aAAc,MAAM,UAAU,MAAM;;;CAgBrD,CAAA;AAUJ,eAAO,MAAM,MAAM,iGAA2B,CAAA"}
1
+ {"version":3,"file":"authorization.jwt.d.ts","sourceRoot":"","sources":["../../../_src/lib/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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aG9yaXphdGlvbi5qd3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9fc3JjL2xpYi9hcGkvYXV0aG9yaXphdGlvbi5qd3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsbURBQW1EO0FBQ25ELE9BQU8sS0FBSyxFQUFFLE1BQU0sb0NBQW9DLENBQUE7QUFDeEQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGFBQWEsQ0FBQTtBQUN4QyxPQUFPLFFBQVEsTUFBTSxtQkFBbUIsQ0FBQTtBQUN4QyxPQUFPLE9BQU8sTUFBTSxVQUFVLENBQUE7QUFFOUIsMkNBQTJDO0FBQzNDLGtEQUFrRDtBQUNsRCw2QkFBNkI7QUFDN0IsTUFBTSxDQUFDLE1BQU0sUUFBUSxHQUFHLENBQUMsUUFBZ0IsRUFBRSxNQUFjLEVBQUUsRUFBRSxDQUMzRCxVQUFVLENBQUM7SUFDVCxvQ0FBb0M7SUFDcEMscUNBQXFDO0lBQ3JDLGtEQUFrRDtJQUNsRCxNQUFNLEVBQUUsT0FBTyxDQUFDLGdCQUFnQixDQUFDO1FBQy9CLEtBQUssRUFBRSxJQUFJO1FBQ1gsU0FBUyxFQUFFLElBQUk7UUFDZixxQkFBcUIsRUFBRSxDQUFDO1FBQ3hCLE9BQU8sRUFBRSxHQUFHLE1BQU0sd0JBQXdCO0tBQzNDLENBQStCO0lBRWhDLHdDQUF3QztJQUN4QyxRQUFRO0lBQ1IsTUFBTSxFQUFFLENBQUMsTUFBTSxHQUFHLEdBQUcsQ0FBQztJQUN0QixVQUFVLEVBQUUsQ0FBQyxPQUFPLENBQUM7Q0FDdEIsQ0FBQyxDQUFBO0FBRUosTUFBTSxZQUFZLEdBQUcsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFBO0FBRWpDLCtCQUErQjtBQUMvQixhQUFhO0FBQ2Isd0JBQXdCO0FBQ3hCLHNCQUFzQjtBQUN0QixrRkFBa0Y7QUFDbEYsSUFBSTtBQUNKLE1BQU0sQ0FBQyxNQUFNLE1BQU0sR0FBRyxFQUFFLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxDQUFBIn0=
@@ -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/lib/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 = "packages/infra/_src/lib/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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29kZWMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9fc3JjL2xpYi9hcGkvY29kZWMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLE9BQU8sS0FBSyxFQUFFLE1BQU0sb0JBQW9CLENBQUE7QUFDeEMsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQTtBQUdwRCxNQUFNLFVBQVUsU0FBUyxDQU12QixJQUFxRTtJQUNyRSxNQUFNLEtBQUssR0FBRyxFQUFFLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQTtJQUM3QyxlQUFlO0lBQ2YsTUFBTSxNQUFNLEdBQUcsQ0FBQyxDQUFVLEVBQUUsR0FBZSxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFBO0lBQzdELE1BQU0sR0FBRyxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUE7SUFFN0IsTUFBTSxNQUFNLEdBQUcsQ0FBQyxDQUFjLEVBQUUsRUFBRSwrQ0FBQyxxQkFBTyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQSxDQUFBO0lBQ3ZELE1BQU0sV0FBVyxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQTtJQUNqQyxPQUFPLENBQUMsTUFBTSxFQUFFLE1BQU0sRUFBRSxXQUFXLENBQVUsQ0FBQTtBQUMvQyxDQUFDO0FBRUQsU0FBUyxLQUFLLENBQThCLE1BQXlDO0lBQ25GLE9BQU8sQ0FBQyxDQUFtQixFQUFFLEVBQUUsQ0FDN0IsaUVBRU8sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FGdEIsK0JBQUEsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSwrQ0FBQyxvRUFBYSwyQkFBTyxJQUFJLENBQUMsRUFBYSxDQUFDLEdBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUEsQ0FBQyxDQUN0RCxDQUNRLENBQUE7QUFDM0IsQ0FBQyJ9
@@ -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/lib/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"}
@@ -0,0 +1,40 @@
1
+ import * as tracer_1 from "@effect/io/Debug";
2
+ const fileName_1 = "packages/infra/_src/lib/api/express/makeJsonSchema.ts";
3
+ import * as tsplus_module_1 from "@fp-ts/data/Chunk";
4
+ import * as tsplus_module_2 from "@effect-app/core/fluent/_ext/awesome/_files/Iterable";
5
+ import * as tsplus_module_3 from "@effect/io/Effect";
6
+ /* eslint-disable @typescript-eslint/no-explicit-any */
7
+ import * as RS from "./schema/routing.js";
8
+ const rx = /:(\w+)/g;
9
+ /**
10
+ * Work in progress JSONSchema generator.
11
+ */
12
+ export function makeJsonSchema(r) {
13
+ return tracer_1.withCallTrace(fileName_1 + ":17:6")(tsplus_module_3.map(e => {
14
+ const map = ({ method, path, responses, ...rest }) => ({
15
+ [method]: {
16
+ ...rest,
17
+ responses: responses.reduce((prev, cur) => {
18
+ prev[cur.statusCode] = cur.type;
19
+ return prev;
20
+ }, {})
21
+ }
22
+ });
23
+ return tsplus_module_1.reduce({}, (prev, e) => {
24
+ const path = e.path.split("?")[0].replace(rx, (_a, b) => `{${b}}`);
25
+ prev[path] = {
26
+ ...prev[path],
27
+ ...map(e)
28
+ };
29
+ return prev;
30
+ })(e);
31
+ }))(tsplus_module_2.ext_forEach(tsplus_module_1.fromIterable(r), RS.makeFromSchema));
32
+ }
33
+ class Response {
34
+ constructor(statusCode, type // string | JSONSchema | SubSchema
35
+ ) {
36
+ this.statusCode = statusCode;
37
+ this.type = type;
38
+ }
39
+ }
40
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFrZUpzb25TY2hlbWEuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9fc3JjL2xpYi9hcGkvZXhwcmVzcy9tYWtlSnNvblNjaGVtYS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLHVEQUF1RDtBQUV2RCxPQUFPLEtBQUssRUFBRSxNQUFNLHFCQUFxQixDQUFBO0FBSXpDLE1BQU0sRUFBRSxHQUFHLFNBQVMsQ0FBQTtBQUlwQjs7R0FFRztBQUNILE1BQU0sVUFBVSxjQUFjLENBQUMsQ0FBa0M7SUFDL0QsT0FBTyxpRUFFQSxDQUFDLENBQUMsRUFBRTtRQUNQLE1BQU0sR0FBRyxHQUFHLENBQUMsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxHQUFHLElBQUksRUFBZ0IsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUNuRSxDQUFDLE1BQU0sQ0FBQyxFQUFFO2dCQUNSLEdBQUcsSUFBSTtnQkFDUCxTQUFTLEVBQUcsU0FBd0IsQ0FBQyxNQUFNLENBQ3pDLENBQUMsSUFBSSxFQUFFLEdBQUcsRUFBRSxFQUFFO29CQUNaLElBQUksQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQTtvQkFDL0IsT0FBTyxJQUFJLENBQUE7Z0JBQ2IsQ0FBQyxFQUNELEVBQXNELENBQ3ZEO2FBQ0Y7U0FDRixDQUFDLENBQUE7UUFDRixPQUFPLHVCQUNMLEVBQTZELEVBQzdELENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQ1YsTUFBTSxJQUFJLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQTtZQUNsRSxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUc7Z0JBQ1gsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDO2dCQUNiLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBUTthQUNqQixDQUFBO1lBQ0QsT0FBTyxJQUFJLENBQUE7UUFDYixDQUFDLEVBVEksQ0FBQyxDQVVQLENBQUE7SUFDSCxDQUFDLEdBMUJJLDRCQUFBLDZCQUFtQixDQUFDLENBQUMsRUFDWCxFQUFFLENBQUMsY0FBYyxDQUFDLENBeUIvQixDQUFBO0FBQ04sQ0FBQztBQUVELE1BQU0sUUFBUTtJQUNaLFlBQ2tCLFVBQWtCLEVBQ2xCLElBQVMsQ0FBQyxrQ0FBa0M7O1FBRDVDLGVBQVUsR0FBVixVQUFVLENBQVE7UUFDbEIsU0FBSSxHQUFKLElBQUksQ0FBSztJQUN4QixDQUFDO0NBQ0wifQ==
@@ -0,0 +1,55 @@
1
+ import type * as Plutus from "@effect-app/infra-adapters/Openapi/atlas-plutus";
2
+ import type { RouteDescriptorAny } from "./schema/routing.js";
3
+ export declare function makeOpenApiSpecs(rdescs: Iterable<RouteDescriptorAny>, info: Plutus.Info): import("@effect/io/Effect").Effect<never, never, {
4
+ openapi: string;
5
+ info: {
6
+ title: string;
7
+ description: string | undefined;
8
+ termsOfService: string | undefined;
9
+ contact: {
10
+ name: string;
11
+ email: string;
12
+ url: string;
13
+ } | undefined;
14
+ license: {
15
+ name: string;
16
+ url: string;
17
+ } | undefined;
18
+ version: string;
19
+ };
20
+ tags: never[];
21
+ paths: Record<string, Record<"PATCH" | "GET" | "POST" | "PUT" | "DELETE", {
22
+ [x: string]: {
23
+ responses: any;
24
+ tags: readonly string[] | undefined;
25
+ description: string | undefined;
26
+ summary: string | undefined;
27
+ operationId: string | undefined;
28
+ parameters: {
29
+ name: string;
30
+ in: Plutus.ParameterLocation;
31
+ required: boolean;
32
+ schema: Plutus.SubSchema | undefined;
33
+ }[];
34
+ requestBody: {
35
+ content: {
36
+ "application/json": {
37
+ schema: Plutus.JSONSchema;
38
+ };
39
+ };
40
+ } | undefined;
41
+ };
42
+ }>>;
43
+ components: {
44
+ securitySchemes: {
45
+ bearerAuth: {
46
+ type: string;
47
+ scheme: string;
48
+ bearerFormat: string;
49
+ };
50
+ };
51
+ schemas: Record<string, any>;
52
+ parameters: Record<string, any>;
53
+ };
54
+ }>;
55
+ //# sourceMappingURL=makeOpenApiSpecs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"makeOpenApiSpecs.d.ts","sourceRoot":"","sources":["../../../../_src/lib/api/express/makeOpenApiSpecs.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,KAAK,MAAM,MAAM,iDAAiD,CAAA;AAI9E,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAA;AAE7D,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,QAAQ,CAAC,kBAAkB,CAAC,EACpC,IAAI,EAAE,MAAM,CAAC,IAAI;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkDlB"}
@@ -0,0 +1,56 @@
1
+ import * as tracer_1 from "@effect/io/Debug";
2
+ const fileName_1 = "packages/infra/_src/lib/api/express/makeOpenApiSpecs.ts";
3
+ import * as tsplus_module_1 from "@effect/io/Ref";
4
+ import * as tsplus_module_2 from "@effect/io/Effect";
5
+ import * as tsplus_module_3 from "@effect-app/core/Function";
6
+ import { References } from "@effect-app/infra-adapters/Openapi/atlas-plutus/Schema/index";
7
+ import { makeJsonSchema } from "./makeJsonSchema.js";
8
+ export function makeOpenApiSpecs(rdescs, info) {
9
+ return tracer_1.withCallTrace(fileName_1 + ":12:17")(tsplus_module_2.gen(function* ($) {
10
+ const ref = yield* $(tracer_1.withCallTrace(fileName_1 + ":13:30")(tsplus_module_1.make(new Map())));
11
+ const withRef = tracer_1.withCallTrace(fileName_1 + ":14:21")(tsplus_module_2.provideService(References)({ ref }));
12
+ const paths = yield* $(tsplus_module_3.pipe(makeJsonSchema(rdescs), withRef));
13
+ const refs = yield* $(tsplus_module_1.get(ref));
14
+ const parameterRefs = {}; // todos
15
+ const schemas = {};
16
+ const securitySchemes = {
17
+ bearerAuth: {
18
+ type: "http",
19
+ scheme: "bearer",
20
+ bearerFormat: "JWT"
21
+ }
22
+ }; // { basicAuth: { type: "http", scheme: "basic" } }
23
+ const components = { securitySchemes, schemas, parameters: parameterRefs };
24
+ for (const entry of refs.entries()) {
25
+ // eslint-disable-next-line prefer-destructuring
26
+ schemas[entry[0]] = entry[1];
27
+ }
28
+ return {
29
+ openapi: "3.0.0",
30
+ info: {
31
+ title: info.title,
32
+ description: info.description,
33
+ termsOfService: info.tos,
34
+ contact: info.contact
35
+ ? {
36
+ name: info.contact.name,
37
+ email: info.contact.email,
38
+ url: info.contact.url
39
+ }
40
+ : undefined,
41
+ license: info.license
42
+ ? {
43
+ name: info.license.name,
44
+ url: info.license.url
45
+ }
46
+ : undefined,
47
+ version: info.version
48
+ },
49
+ tags: [],
50
+ paths,
51
+ components
52
+ // test,
53
+ };
54
+ }));
55
+ }
56
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFrZU9wZW5BcGlTcGVjcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL19zcmMvbGliL2FwaS9leHByZXNzL21ha2VPcGVuQXBpU3BlY3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFHQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sOERBQThELENBQUE7QUFDekYsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHFCQUFxQixDQUFBO0FBR3BELE1BQU0sVUFBVSxnQkFBZ0IsQ0FDOUIsTUFBb0MsRUFDcEMsSUFBaUI7SUFFakIscURBQU8sb0JBQVcsUUFBUSxDQUFDLEVBQUMsQ0FBQztRQUMzQixNQUFNLEdBQUcsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLCtDQUFDLHFCQUE4QyxJQUFJLEdBQUcsRUFBRSxDQUFDLEVBQUMsQ0FBQTtRQUM5RSxNQUFNLE9BQU8saURBQUcsK0JBQXNCLFVBQVUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQSxDQUFBO1FBQzFELE1BQU0sS0FBSyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxnQkFBQSxJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUE7UUFDN0QsTUFBTSxJQUFJLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxxQkFBQyxHQUFHLEVBQUssQ0FBQTtRQUM5QixNQUFNLGFBQWEsR0FBd0IsRUFBRSxDQUFBLENBQUMsUUFBUTtRQUN0RCxNQUFNLE9BQU8sR0FBd0IsRUFBRSxDQUFBO1FBQ3ZDLE1BQU0sZUFBZSxHQUFHO1lBQ3RCLFVBQVUsRUFBRTtnQkFDVixJQUFJLEVBQUUsTUFBTTtnQkFDWixNQUFNLEVBQUUsUUFBUTtnQkFDaEIsWUFBWSxFQUFFLEtBQUs7YUFDcEI7U0FDRixDQUFBLENBQUMsbURBQW1EO1FBQ3JELE1BQU0sVUFBVSxHQUFHLEVBQUUsZUFBZSxFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUUsYUFBYSxFQUFFLENBQUE7UUFFMUUsS0FBSyxNQUFNLEtBQUssSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFLEVBQUU7WUFDbEMsZ0RBQWdEO1lBQ2hELE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUE7U0FDN0I7UUFFRCxPQUFPO1lBQ0wsT0FBTyxFQUFFLE9BQU87WUFDaEIsSUFBSSxFQUFFO2dCQUNKLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSztnQkFDakIsV0FBVyxFQUFFLElBQUksQ0FBQyxXQUFXO2dCQUM3QixjQUFjLEVBQUUsSUFBSSxDQUFDLEdBQUc7Z0JBQ3hCLE9BQU8sRUFBRSxJQUFJLENBQUMsT0FBTztvQkFDbkIsQ0FBQyxDQUFDO3dCQUNBLElBQUksRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUk7d0JBQ3ZCLEtBQUssRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUs7d0JBQ3pCLEdBQUcsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUc7cUJBQ3RCO29CQUNELENBQUMsQ0FBQyxTQUFTO2dCQUNiLE9BQU8sRUFBRSxJQUFJLENBQUMsT0FBTztvQkFDbkIsQ0FBQyxDQUFDO3dCQUNBLElBQUksRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUk7d0JBQ3ZCLEdBQUcsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUc7cUJBQ3RCO29CQUNELENBQUMsQ0FBQyxTQUFTO2dCQUNiLE9BQU8sRUFBRSxJQUFJLENBQUMsT0FBTzthQUN0QjtZQUNELElBQUksRUFBRSxFQUFFO1lBQ1IsS0FBSztZQUNMLFVBQVU7WUFDVixRQUFRO1NBQ1QsQ0FBQTtJQUNILENBQUMsQ0FBQyxFQUFBO0FBQ0osQ0FBQyJ9
@@ -0,0 +1,5 @@
1
+ import * as MO from "@effect-app/schema";
2
+ export declare const jwtIdentifier: MO.Annotation<{}>;
3
+ export declare const jwtFromString: MO.Schema<string, unknown, unknown, string, {}>;
4
+ export declare const jwt: MO.Schema<unknown, unknown, unknown, string, {}>;
5
+ //# sourceMappingURL=jwt.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jwt.d.ts","sourceRoot":"","sources":["../../../../../_src/lib/api/express/schema/jwt.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,MAAM,oBAAoB,CAAA;AAIxC,eAAO,MAAM,aAAa,mBAA0B,CAAA;AAEpD,eAAO,MAAM,aAAa,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,CAyBzE,CAAA;AAED,eAAO,MAAM,GAAG,kDAAkC,CAAA"}
@@ -0,0 +1,32 @@
1
+ /* eslint-disable @typescript-eslint/no-unsafe-assignment */
2
+ /* eslint-disable @typescript-eslint/no-explicit-any */
3
+ /* eslint-disable @typescript-eslint/ban-types */
4
+ import { pipe } from "@effect-app/core/Function";
5
+ import * as MO from "@effect-app/schema";
6
+ import { These as Th } from "@effect-app/schema";
7
+ import jwt_decode from "jwt-decode";
8
+ export const jwtIdentifier = MO.makeAnnotation();
9
+ export const jwtFromString = pipe(
10
+ // MO.identity((u): u is string => typeof u === "string"),
11
+ MO.identity((u) => {
12
+ throw new Error("Cannot id JWT: " + u);
13
+ }), MO.constructor(n => Th.succeed(n)),
14
+ // MO.arbitrary((_) => {
15
+ // throw new Error("Cannot arb JWT")
16
+ // }), // TODO
17
+ // MO.encoder((_) => {
18
+ // throw new Error("can't encode")
19
+ // }),
20
+ MO.parser((p) => {
21
+ try {
22
+ return Th.succeed(
23
+ // eslint-disable-next-line @typescript-eslint/ban-ts-comment
24
+ // @ts-expect-error
25
+ jwt_decode(p));
26
+ }
27
+ catch (err) {
28
+ return Th.fail(MO.leafE(MO.parseStringE(p))); // "not a JWT: " + err as anyw
29
+ }
30
+ }), MO.mapApi(() => ({})), MO.annotate(jwtIdentifier, {}));
31
+ export const jwt = MO.string[">>>"](jwtFromString);
32
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiand0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vX3NyYy9saWIvYXBpL2V4cHJlc3Mvc2NoZW1hL2p3dC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSw0REFBNEQ7QUFDNUQsdURBQXVEO0FBQ3ZELGlEQUFpRDtBQUNqRCxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sMkJBQTJCLENBQUE7QUFDaEQsT0FBTyxLQUFLLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQTtBQUN4QyxPQUFPLEVBQUUsS0FBSyxJQUFJLEVBQUUsRUFBRSxNQUFNLG9CQUFvQixDQUFBO0FBQ2hELE9BQU8sVUFBVSxNQUFNLFlBQVksQ0FBQTtBQUVuQyxNQUFNLENBQUMsTUFBTSxhQUFhLEdBQUcsRUFBRSxDQUFDLGNBQWMsRUFBTSxDQUFBO0FBRXBELE1BQU0sQ0FBQyxNQUFNLGFBQWEsR0FBb0QsSUFBSTtBQUNoRiwwREFBMEQ7QUFDMUQsRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBZSxFQUFFO0lBQzdCLE1BQU0sSUFBSSxLQUFLLENBQUMsaUJBQWlCLEdBQUcsQ0FBQyxDQUFDLENBQUE7QUFDeEMsQ0FBQyxDQUFDLEVBQ0YsRUFBRSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbEMsMEJBQTBCO0FBQzFCLHdDQUF3QztBQUN4QyxnQkFBZ0I7QUFDaEIsd0JBQXdCO0FBQ3hCLHNDQUFzQztBQUN0QyxRQUFRO0FBQ1IsRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQU0sRUFBRSxFQUFFO0lBQ25CLElBQUk7UUFDRixPQUFPLEVBQUUsQ0FBQyxPQUFPO1FBQ2YsNkRBQTZEO1FBQzdELG1CQUFtQjtRQUNuQixVQUFVLENBQUMsQ0FBQyxDQUFDLENBQ2QsQ0FBQTtLQUNGO0lBQUMsT0FBTyxHQUFHLEVBQUU7UUFDWixPQUFPLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQSxDQUFDLDhCQUE4QjtLQUM1RTtBQUNILENBQUMsQ0FBQyxFQUNGLEVBQUUsQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUNyQixFQUFFLENBQUMsUUFBUSxDQUFDLGFBQWEsRUFBRSxFQUFFLENBQUMsQ0FDL0IsQ0FBQTtBQUVELE1BQU0sQ0FBQyxNQUFNLEdBQUcsR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLGFBQWEsQ0FBQyxDQUFBIn0=