@effect-app/infra 2.0.1 → 2.1.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 (124) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/_cjs/api/internal/RequestContextMiddleware.cjs +2 -3
  3. package/_cjs/api/internal/RequestContextMiddleware.cjs.map +1 -1
  4. package/_cjs/api/internal/events.cjs +2 -2
  5. package/_cjs/api/internal/events.cjs.map +1 -1
  6. package/_cjs/api/setupRequest.cjs +1 -1
  7. package/_cjs/api/setupRequest.cjs.map +1 -1
  8. package/_cjs/fileUtil.cjs +48 -0
  9. package/_cjs/fileUtil.cjs.map +1 -0
  10. package/_cjs/logger/shared.cjs +2 -2
  11. package/_cjs/logger/shared.cjs.map +1 -1
  12. package/_cjs/services/CUPS.cjs +118 -0
  13. package/_cjs/services/CUPS.cjs.map +1 -0
  14. package/_cjs/services/QueueMaker/SQLQueue.cjs +1 -1
  15. package/_cjs/services/QueueMaker/SQLQueue.cjs.map +1 -1
  16. package/_cjs/services/QueueMaker/memQueue.cjs +1 -1
  17. package/_cjs/services/QueueMaker/memQueue.cjs.map +1 -1
  18. package/_cjs/services/QueueMaker/sbqueue.cjs +1 -1
  19. package/_cjs/services/QueueMaker/sbqueue.cjs.map +1 -1
  20. package/_cjs/services/Store/Cosmos.cjs +1 -1
  21. package/_cjs/services/Store/Cosmos.cjs.map +1 -1
  22. package/_cjs/services/Store/Disk.cjs +1 -1
  23. package/_cjs/services/adapters/SQL/Model.cjs +500 -0
  24. package/_cjs/services/adapters/SQL/Model.cjs.map +1 -0
  25. package/_cjs/services/adapters/SQL.cjs +11 -0
  26. package/_cjs/services/adapters/SQL.cjs.map +1 -0
  27. package/_cjs/services/adapters/ServiceBus.cjs +76 -0
  28. package/_cjs/services/adapters/ServiceBus.cjs.map +1 -0
  29. package/_cjs/services/adapters/cosmos-client.cjs +18 -0
  30. package/_cjs/services/adapters/cosmos-client.cjs.map +1 -0
  31. package/_cjs/services/adapters/index.cjs +6 -0
  32. package/_cjs/services/adapters/index.cjs.map +1 -0
  33. package/_cjs/services/adapters/logger.cjs +9 -0
  34. package/_cjs/services/adapters/logger.cjs.map +1 -0
  35. package/_cjs/services/adapters/memQueue.cjs +31 -0
  36. package/_cjs/services/adapters/memQueue.cjs.map +1 -0
  37. package/_cjs/services/adapters/mongo-client.cjs +20 -0
  38. package/_cjs/services/adapters/mongo-client.cjs.map +1 -0
  39. package/_cjs/services/adapters/redis-client.cjs +83 -0
  40. package/_cjs/services/adapters/redis-client.cjs.map +1 -0
  41. package/dist/api/internal/RequestContextMiddleware.d.ts.map +1 -1
  42. package/dist/api/internal/RequestContextMiddleware.js +3 -4
  43. package/dist/api/internal/events.d.ts.map +1 -1
  44. package/dist/api/internal/events.js +3 -3
  45. package/dist/api/setupRequest.d.ts +1 -2
  46. package/dist/api/setupRequest.d.ts.map +1 -1
  47. package/dist/api/setupRequest.js +3 -3
  48. package/dist/fileUtil.d.ts +23 -0
  49. package/dist/fileUtil.d.ts.map +1 -0
  50. package/dist/fileUtil.js +41 -0
  51. package/dist/logger/shared.d.ts.map +1 -1
  52. package/dist/logger/shared.js +2 -2
  53. package/dist/services/CUPS.d.ts +26 -0
  54. package/dist/services/CUPS.d.ts.map +1 -0
  55. package/dist/services/CUPS.js +111 -0
  56. package/dist/services/QueueMaker/SQLQueue.d.ts.map +1 -1
  57. package/dist/services/QueueMaker/SQLQueue.js +2 -2
  58. package/dist/services/QueueMaker/memQueue.d.ts +1 -1
  59. package/dist/services/QueueMaker/memQueue.d.ts.map +1 -1
  60. package/dist/services/QueueMaker/memQueue.js +2 -2
  61. package/dist/services/QueueMaker/sbqueue.d.ts +3 -3
  62. package/dist/services/QueueMaker/sbqueue.d.ts.map +1 -1
  63. package/dist/services/QueueMaker/sbqueue.js +2 -2
  64. package/dist/services/Store/Cosmos.d.ts.map +1 -1
  65. package/dist/services/Store/Cosmos.js +2 -2
  66. package/dist/services/Store/Disk.js +2 -2
  67. package/dist/services/adapters/SQL/Model.d.ts +538 -0
  68. package/dist/services/adapters/SQL/Model.d.ts.map +1 -0
  69. package/dist/services/adapters/SQL/Model.js +508 -0
  70. package/dist/services/adapters/SQL.d.ts +2 -0
  71. package/dist/services/adapters/SQL.d.ts.map +1 -0
  72. package/dist/services/adapters/SQL.js +2 -0
  73. package/dist/services/adapters/ServiceBus.d.ts +50 -0
  74. package/dist/services/adapters/ServiceBus.d.ts.map +1 -0
  75. package/dist/services/adapters/ServiceBus.js +73 -0
  76. package/dist/services/adapters/cosmos-client.d.ts +10 -0
  77. package/dist/services/adapters/cosmos-client.d.ts.map +1 -0
  78. package/dist/services/adapters/cosmos-client.js +8 -0
  79. package/dist/services/adapters/index.d.ts +2 -0
  80. package/dist/services/adapters/index.d.ts.map +1 -0
  81. package/dist/services/adapters/index.js +2 -0
  82. package/dist/services/adapters/logger.d.ts +8 -0
  83. package/dist/services/adapters/logger.d.ts.map +1 -0
  84. package/dist/services/adapters/logger.js +3 -0
  85. package/dist/services/adapters/memQueue.d.ts +34 -0
  86. package/dist/services/adapters/memQueue.d.ts.map +1 -0
  87. package/dist/services/adapters/memQueue.js +24 -0
  88. package/dist/services/adapters/mongo-client.d.ts +10 -0
  89. package/dist/services/adapters/mongo-client.d.ts.map +1 -0
  90. package/dist/services/adapters/mongo-client.js +12 -0
  91. package/dist/services/adapters/redis-client.d.ts +29 -0
  92. package/dist/services/adapters/redis-client.d.ts.map +1 -0
  93. package/dist/services/adapters/redis-client.js +93 -0
  94. package/package.json +128 -12
  95. package/src/api/internal/RequestContextMiddleware.ts +2 -3
  96. package/src/api/internal/events.ts +2 -2
  97. package/src/api/setupRequest.ts +2 -3
  98. package/src/fileUtil.ts +85 -0
  99. package/src/logger/shared.ts +2 -3
  100. package/src/services/CUPS.ts +151 -0
  101. package/src/services/QueueMaker/SQLQueue.ts +1 -1
  102. package/src/services/QueueMaker/memQueue.ts +1 -1
  103. package/src/services/QueueMaker/sbqueue.ts +7 -7
  104. package/src/services/Store/Cosmos.ts +1 -1
  105. package/src/services/Store/Disk.ts +1 -1
  106. package/src/services/adapters/SQL/Model.ts +939 -0
  107. package/src/services/adapters/SQL.ts +1 -0
  108. package/src/services/adapters/ServiceBus.ts +140 -0
  109. package/src/services/adapters/cosmos-client.ts +16 -0
  110. package/src/services/adapters/index.ts +0 -0
  111. package/src/services/adapters/logger.ts +3 -0
  112. package/src/services/adapters/memQueue.ts +26 -0
  113. package/src/services/adapters/mongo-client.ts +23 -0
  114. package/src/services/adapters/redis-client.ts +123 -0
  115. package/tsconfig.src.json +0 -3
  116. package/src/services/Store/Redis.ts.bak +0 -88
  117. package/src/services/simpledb/cosmosdb.ts.bak +0 -149
  118. package/src/services/simpledb/diskdb.ts.bak +0 -165
  119. package/src/services/simpledb/index.ts.bak +0 -6
  120. package/src/services/simpledb/memdb.ts.bak +0 -78
  121. package/src/services/simpledb/mongodb.ts.bak +0 -107
  122. package/src/services/simpledb/redisdb.ts.bak +0 -202
  123. package/src/services/simpledb/shared.ts.bak +0 -117
  124. package/src/services/simpledb/simpledb.ts.bak +0 -121
@@ -1,121 +0,0 @@
1
- import type { Scope } from "effect-app"
2
- import { Context, Effect, Option, Unify } from "effect-app"
3
- import type { CachedRecord, DBRecord, EffectMap } from "./shared.js"
4
- import { makeMap, OptimisticLockException } from "./shared.js"
5
-
6
- export type Version = string
7
- export class InvalidStateError {
8
- readonly _tag = "InvalidStateError"
9
- constructor(readonly message: string, readonly details?: unknown) {}
10
- }
11
-
12
- export function makeLiveRecordCache() {
13
- const m = new Map<string, EffectMap<string, unknown>>()
14
- return {
15
- get: <T>(type: string) =>
16
- Effect.sync(() => {
17
- const ex = m.get(type)
18
- if (!ex) {
19
- const nm = makeMap<string, unknown>()
20
- m.set(type, nm)
21
- return nm as EffectMap<string, CachedRecord<T>>
22
- }
23
- return ex as EffectMap<string, CachedRecord<T>>
24
- })
25
- }
26
- }
27
-
28
- export interface RecordCache extends ReturnType<typeof makeLiveRecordCache> {}
29
-
30
- // module tag
31
- export const RecordCache = Context.GenericTag<RecordCache>("@services/RecordCache")
32
-
33
- export const LiveRecordCache = Effect.sync(() => makeLiveRecordCache()).toLayer(RecordCache)
34
-
35
- const getM = <T>(type: string) => <R, E, A>(eff: (m: EffectMap<string, CachedRecord<T>>) => Effect<A, E, R>) =>
36
- Effect.gen(function*($) {
37
- const { get } = yield* $(RecordCache)
38
- return yield* $(get<T>(type).flatMap(eff))
39
- })
40
-
41
- export function find<R, RDecode, EDecode, E, EA, A>(
42
- tryRead: (id: string) => Effect<Option<CachedRecord<EA>>, E, R>,
43
- decode: (d: EA) => Effect<A, EDecode, RDecode>,
44
- type: string
45
- ) {
46
- const getCache = getM<A>(type)
47
- const read = (id: string) =>
48
- tryRead(id)
49
- .flatMapOpt(({ data, version }) =>
50
- decode(data).mapBoth({
51
- onFailure: (err) => new InvalidStateError("DB serialisation Issue", err),
52
- onSuccess: (data) => ({ data, version })
53
- })
54
- )
55
- .tapOpt((r) => getCache((c) => c.set(id, r)))
56
- .mapOpt((r) => r.data)
57
-
58
- return (id: string) =>
59
- getCache((c) =>
60
- c
61
- .find(id)
62
- .mapOpt((existing) => existing.data)
63
- .orElse(() => read(id))
64
- )
65
- }
66
-
67
- export function storeDirectly<R, E, TKey extends string, A extends DBRecord<TKey>>(
68
- save: (r: A, version: Option<Version>) => Effect<CachedRecord<A>, E, R>,
69
- type: string
70
- ) {
71
- const getCache = getM<A>(type)
72
- return (record: A) =>
73
- getCache((c) =>
74
- c
75
- .find(record.id)
76
- .mapOpt((x) => x.version)
77
- .flatMap((cv) => save(record, cv))
78
- .tap((r) => c.set(record.id, r))
79
- .map((r) => r.data)
80
- )
81
- }
82
-
83
- export function store<R, E, R2, E2, TKey extends string, EA, A extends DBRecord<TKey>>(
84
- tryRead: (id: string) => Effect<Option<CachedRecord<EA>>, E, R>,
85
- save: (r: A, version: Option<Version>) => Effect<CachedRecord<A>, E, R>,
86
- lock: (id: string) => Effect<unknown, E2, R2 | Scope>,
87
- type: string
88
- ) {
89
- const getCache = getM<A>(type)
90
- return (record: A) =>
91
- getCache((c) =>
92
- c
93
- .find(record.id)
94
- .mapOpt((x) => x.version)
95
- .flatMap((_) =>
96
- Unify.unify(_.match({ onNone: () => save(record, Option.none()), onSome: confirmVersionAndSave(record) }))
97
- )
98
- .tap((r) => c.set(record.id, r))
99
- .map((r) => r.data)
100
- )
101
-
102
- function confirmVersionAndSave(record: A) {
103
- return (cv: Version) =>
104
- lock(record.id)
105
- .zipRight(
106
- tryRead(record.id)
107
- .flatMap((_) =>
108
- _.match(
109
- { onNone: () => Effect.fail(new InvalidStateError("record is gone")), onSome: Effect.succeed }
110
- )
111
- )
112
- .tap(({ version }) =>
113
- version !== cv
114
- ? new OptimisticLockException(type, record.id)
115
- : Effect.unit
116
- )
117
- .zipRight(save(record, Option.some(cv)))
118
- )
119
- .scoped
120
- }
121
- }