@effect-app/infra 4.0.0-beta.7 → 4.0.0-beta.71

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 (143) hide show
  1. package/CHANGELOG.md +455 -0
  2. package/dist/CUPS.d.ts +3 -3
  3. package/dist/CUPS.d.ts.map +1 -1
  4. package/dist/CUPS.js +3 -3
  5. package/dist/Emailer/Sendgrid.js +1 -1
  6. package/dist/Emailer/service.d.ts +3 -3
  7. package/dist/Emailer/service.d.ts.map +1 -1
  8. package/dist/Emailer/service.js +3 -3
  9. package/dist/MainFiberSet.d.ts +2 -2
  10. package/dist/MainFiberSet.d.ts.map +1 -1
  11. package/dist/MainFiberSet.js +3 -3
  12. package/dist/Model/Repository/internal/internal.d.ts +3 -3
  13. package/dist/Model/Repository/internal/internal.d.ts.map +1 -1
  14. package/dist/Model/Repository/internal/internal.js +11 -7
  15. package/dist/Model/Repository/makeRepo.d.ts +2 -2
  16. package/dist/Model/Repository/makeRepo.d.ts.map +1 -1
  17. package/dist/Model/Repository/makeRepo.js +1 -1
  18. package/dist/Model/Repository/validation.d.ts +4 -4
  19. package/dist/Model/query/dsl.d.ts +9 -9
  20. package/dist/Operations.d.ts +2 -2
  21. package/dist/Operations.d.ts.map +1 -1
  22. package/dist/Operations.js +3 -3
  23. package/dist/OperationsRepo.d.ts +2 -2
  24. package/dist/OperationsRepo.d.ts.map +1 -1
  25. package/dist/OperationsRepo.js +3 -3
  26. package/dist/QueueMaker/SQLQueue.d.ts +3 -5
  27. package/dist/QueueMaker/SQLQueue.d.ts.map +1 -1
  28. package/dist/QueueMaker/SQLQueue.js +9 -7
  29. package/dist/QueueMaker/memQueue.d.ts.map +1 -1
  30. package/dist/QueueMaker/memQueue.js +10 -9
  31. package/dist/QueueMaker/sbqueue.d.ts.map +1 -1
  32. package/dist/QueueMaker/sbqueue.js +11 -9
  33. package/dist/RequestContext.d.ts +10 -10
  34. package/dist/RequestContext.d.ts.map +1 -1
  35. package/dist/RequestContext.js +4 -4
  36. package/dist/RequestFiberSet.d.ts +2 -2
  37. package/dist/RequestFiberSet.d.ts.map +1 -1
  38. package/dist/RequestFiberSet.js +5 -5
  39. package/dist/Store/ContextMapContainer.d.ts +3 -3
  40. package/dist/Store/ContextMapContainer.d.ts.map +1 -1
  41. package/dist/Store/ContextMapContainer.js +3 -3
  42. package/dist/Store/Cosmos.js +1 -1
  43. package/dist/Store/Disk.d.ts.map +1 -1
  44. package/dist/Store/Disk.js +3 -4
  45. package/dist/Store/Memory.d.ts +2 -2
  46. package/dist/Store/Memory.d.ts.map +1 -1
  47. package/dist/Store/Memory.js +4 -4
  48. package/dist/Store/service.d.ts +3 -3
  49. package/dist/Store/service.d.ts.map +1 -1
  50. package/dist/Store/service.js +4 -4
  51. package/dist/adapters/SQL/Model.d.ts +2 -5
  52. package/dist/adapters/SQL/Model.d.ts.map +1 -1
  53. package/dist/adapters/SQL/Model.js +21 -13
  54. package/dist/adapters/ServiceBus.d.ts +6 -6
  55. package/dist/adapters/ServiceBus.d.ts.map +1 -1
  56. package/dist/adapters/ServiceBus.js +9 -9
  57. package/dist/adapters/cosmos-client.d.ts +2 -2
  58. package/dist/adapters/cosmos-client.d.ts.map +1 -1
  59. package/dist/adapters/cosmos-client.js +3 -3
  60. package/dist/adapters/logger.d.ts.map +1 -1
  61. package/dist/adapters/memQueue.d.ts +2 -2
  62. package/dist/adapters/memQueue.d.ts.map +1 -1
  63. package/dist/adapters/memQueue.js +3 -3
  64. package/dist/adapters/mongo-client.d.ts +2 -2
  65. package/dist/adapters/mongo-client.d.ts.map +1 -1
  66. package/dist/adapters/mongo-client.js +3 -3
  67. package/dist/adapters/redis-client.d.ts +3 -3
  68. package/dist/adapters/redis-client.d.ts.map +1 -1
  69. package/dist/adapters/redis-client.js +3 -3
  70. package/dist/api/ContextProvider.d.ts +6 -6
  71. package/dist/api/ContextProvider.d.ts.map +1 -1
  72. package/dist/api/ContextProvider.js +6 -6
  73. package/dist/api/internal/auth.d.ts +1 -1
  74. package/dist/api/internal/events.d.ts.map +1 -1
  75. package/dist/api/internal/events.js +7 -5
  76. package/dist/api/layerUtils.d.ts +5 -5
  77. package/dist/api/layerUtils.d.ts.map +1 -1
  78. package/dist/api/layerUtils.js +5 -5
  79. package/dist/api/routing/middleware/RouterMiddleware.d.ts +3 -3
  80. package/dist/api/routing/middleware/RouterMiddleware.d.ts.map +1 -1
  81. package/dist/api/routing/schema/jwt.d.ts +1 -1
  82. package/dist/api/routing/schema/jwt.d.ts.map +1 -1
  83. package/dist/api/routing/schema/jwt.js +1 -1
  84. package/dist/api/routing.d.ts.map +1 -1
  85. package/dist/api/routing.js +1 -1
  86. package/dist/errorReporter.d.ts +1 -1
  87. package/dist/errorReporter.d.ts.map +1 -1
  88. package/dist/errorReporter.js +1 -1
  89. package/dist/fileUtil.js +1 -1
  90. package/dist/logger.d.ts.map +1 -1
  91. package/dist/rateLimit.js +1 -1
  92. package/examples/query.ts +29 -25
  93. package/package.json +16 -16
  94. package/src/CUPS.ts +2 -2
  95. package/src/Emailer/Sendgrid.ts +1 -1
  96. package/src/Emailer/service.ts +2 -2
  97. package/src/MainFiberSet.ts +2 -2
  98. package/src/Model/Repository/internal/internal.ts +11 -8
  99. package/src/Model/Repository/makeRepo.ts +2 -2
  100. package/src/Operations.ts +2 -2
  101. package/src/OperationsRepo.ts +2 -2
  102. package/src/QueueMaker/SQLQueue.ts +10 -10
  103. package/src/QueueMaker/memQueue.ts +41 -42
  104. package/src/QueueMaker/sbqueue.ts +65 -62
  105. package/src/RequestContext.ts +3 -3
  106. package/src/RequestFiberSet.ts +4 -4
  107. package/src/Store/ContextMapContainer.ts +2 -2
  108. package/src/Store/Cosmos.ts +10 -10
  109. package/src/Store/Disk.ts +2 -3
  110. package/src/Store/Memory.ts +4 -6
  111. package/src/Store/service.ts +3 -3
  112. package/src/adapters/SQL/Model.ts +76 -71
  113. package/src/adapters/ServiceBus.ts +8 -8
  114. package/src/adapters/cosmos-client.ts +2 -2
  115. package/src/adapters/memQueue.ts +2 -2
  116. package/src/adapters/mongo-client.ts +2 -2
  117. package/src/adapters/redis-client.ts +2 -2
  118. package/src/api/ContextProvider.ts +11 -11
  119. package/src/api/internal/events.ts +5 -4
  120. package/src/api/layerUtils.ts +8 -8
  121. package/src/api/routing/middleware/RouterMiddleware.ts +4 -4
  122. package/src/api/routing/schema/jwt.ts +2 -3
  123. package/src/api/routing.ts +4 -3
  124. package/src/errorReporter.ts +1 -1
  125. package/src/fileUtil.ts +1 -1
  126. package/src/rateLimit.ts +2 -2
  127. package/test/contextProvider.test.ts +5 -5
  128. package/test/controller.test.ts +9 -7
  129. package/test/dist/contextProvider.test.d.ts.map +1 -1
  130. package/test/dist/controller.test.d.ts.map +1 -1
  131. package/test/dist/fixtures.d.ts +17 -8
  132. package/test/dist/fixtures.d.ts.map +1 -1
  133. package/test/dist/fixtures.js +11 -9
  134. package/test/dist/query.test.d.ts.map +1 -1
  135. package/test/dist/rawQuery.test.d.ts.map +1 -1
  136. package/test/dist/requires.test.d.ts.map +1 -1
  137. package/test/dist/rpc-multi-middleware.test.d.ts.map +1 -1
  138. package/test/fixtures.ts +10 -8
  139. package/test/query.test.ts +157 -11
  140. package/test/rawQuery.test.ts +19 -17
  141. package/test/requires.test.ts +6 -5
  142. package/test/rpc-multi-middleware.test.ts +73 -4
  143. package/tsconfig.json +0 -1
@@ -1,14 +1,14 @@
1
1
  import { NodeHttpServer } from "@effect/platform-node"
2
2
  import { expect, expectTypeOf, it } from "@effect/vitest"
3
- import { Console, Effect, Layer, Result } from "effect"
4
- import { S } from "effect-app"
3
+ import { Console, Effect, Layer, Ref, Result } from "effect"
4
+ import { Context, S } from "effect-app"
5
5
  import { NotLoggedInError } from "effect-app/client"
6
6
  import { HttpRouter } from "effect-app/http"
7
7
  import { DefaultGenericMiddlewares } from "effect-app/middleware"
8
8
  import { MiddlewareMaker } from "effect-app/rpc"
9
9
  import { middlewareGroup } from "effect-app/rpc/MiddlewareMaker"
10
10
  import { FetchHttpClient } from "effect/unstable/http"
11
- import { RpcClient, RpcGroup, RpcSerialization, RpcServer, RpcTest } from "effect/unstable/rpc"
11
+ import { Rpc, RpcClient, RpcGroup, RpcSerialization, RpcServer, RpcTest } from "effect/unstable/rpc"
12
12
  import { createServer } from "http"
13
13
  import { DefaultGenericMiddlewaresLive } from "../src/api/routing.js"
14
14
  import { AllowAnonymous, AllowAnonymousLive, RequestContextMap, RequireRoles, RequireRolesLive, Some, SomeElseMiddleware, SomeElseMiddlewareLive, SomeMiddleware, SomeMiddlewareLive, SomeService, Test, TestLive, UserProfile } from "./fixtures.js"
@@ -109,7 +109,7 @@ export const RpcRealLayer = Layer
109
109
  Layer.provide(FetchHttpClient.layer)
110
110
  )
111
111
  )
112
- .pipe(Layer.provide(RpcSerialization.layerJson))
112
+ .pipe(Layer.provide(RpcSerialization.layerNdjson))
113
113
 
114
114
  it.live(
115
115
  "require login",
@@ -136,3 +136,72 @@ it.live(
136
136
  Effect.provide(RpcTestLayer)
137
137
  )
138
138
  )
139
+
140
+ // Per-request service isolation test
141
+
142
+ class PerRequestCounter extends Context.Service<PerRequestCounter>()(
143
+ "PerRequestCounter",
144
+ { make: Effect.sync(() => ({ a: 0 })) }
145
+ ) {
146
+ static Default = Layer.effect(this, this.make)
147
+ }
148
+
149
+ class GlobalCounter extends Context.Service<GlobalCounter, {
150
+ readonly ref: Ref.Ref<number>
151
+ }>()("GlobalCounter") {}
152
+
153
+ const CounterRpcs = RpcGroup.make(
154
+ Rpc.make("incrementA", {
155
+ success: S.Number
156
+ }),
157
+ Rpc.make("incrementB", {
158
+ success: S.Number
159
+ })
160
+ )
161
+
162
+ const counterImpl = CounterRpcs
163
+ .toLayer({
164
+ incrementA: Effect.fn(function*() {
165
+ const counter = yield* PerRequestCounter
166
+ counter.a++
167
+ const global = yield* GlobalCounter
168
+ yield* Ref.update(global.ref, (n) => n + 1)
169
+ return counter.a
170
+ }, Effect.provide(PerRequestCounter.Default)),
171
+ incrementB: Effect.fn(function*() {
172
+ const counter = yield* PerRequestCounter
173
+ counter.a++
174
+ const global = yield* GlobalCounter
175
+ yield* Ref.update(global.ref, (n) => n + 1)
176
+ return counter.a
177
+ }, Effect.provide(PerRequestCounter.Default))
178
+ })
179
+
180
+ const GlobalCounterLive = Layer.effect(
181
+ GlobalCounter,
182
+ Ref.make(0).pipe(Effect.map((ref) => ({ ref })))
183
+ )
184
+
185
+ const CounterTestLayer = counterImpl.pipe(Layer.provideMerge(GlobalCounterLive))
186
+
187
+ it.live(
188
+ "per-request service isolation with shared global counter",
189
+ Effect.fnUntraced(
190
+ function*() {
191
+ const client = yield* RpcTest.makeClient(CounterRpcs)
192
+ const global = yield* GlobalCounter
193
+
194
+ const r1 = yield* client.incrementA()
195
+ const r2 = yield* client.incrementB()
196
+
197
+ // per-request counter is fresh each time → both return 1
198
+ expect(r1).toBe(1)
199
+ expect(r2).toBe(1)
200
+
201
+ // global counter is shared across requests → accumulates to 2
202
+ const globalCount = yield* Ref.get(global.ref)
203
+ expect(globalCount).toBe(2)
204
+ },
205
+ Effect.provide(CounterTestLayer)
206
+ )
207
+ )
package/tsconfig.json CHANGED
@@ -32,7 +32,6 @@
32
32
  "outDir": "build/dist",
33
33
  "resolveJsonModule": true,
34
34
  "moduleResolution": "Node16",
35
- "downlevelIteration": true,
36
35
  "noErrorTruncation": true,
37
36
  "forceConsistentCasingInFileNames": true,
38
37
  "types": [