@effect-app/infra 3.9.0 → 4.0.0-beta.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 (231) hide show
  1. package/CHANGELOG.md +22 -0
  2. package/_check.sh +3 -0
  3. package/dist/CUPS.d.ts +22 -12
  4. package/dist/CUPS.d.ts.map +1 -1
  5. package/dist/CUPS.js +28 -29
  6. package/dist/Emailer/Sendgrid.js +13 -12
  7. package/dist/Emailer/service.d.ts +3 -13
  8. package/dist/Emailer/service.d.ts.map +1 -1
  9. package/dist/Emailer/service.js +3 -3
  10. package/dist/MainFiberSet.d.ts +18 -41
  11. package/dist/MainFiberSet.d.ts.map +1 -1
  12. package/dist/MainFiberSet.js +10 -10
  13. package/dist/Model/Repository/ext.d.ts.map +1 -1
  14. package/dist/Model/Repository/ext.js +13 -10
  15. package/dist/Model/Repository/internal/internal.d.ts +5 -5
  16. package/dist/Model/Repository/internal/internal.d.ts.map +1 -1
  17. package/dist/Model/Repository/internal/internal.js +52 -42
  18. package/dist/Model/Repository/legacy.d.ts +9 -9
  19. package/dist/Model/Repository/legacy.d.ts.map +1 -1
  20. package/dist/Model/Repository/makeRepo.d.ts +4 -4
  21. package/dist/Model/Repository/makeRepo.d.ts.map +1 -1
  22. package/dist/Model/Repository/makeRepo.js +1 -1
  23. package/dist/Model/Repository/service.d.ts +11 -11
  24. package/dist/Model/Repository/service.d.ts.map +1 -1
  25. package/dist/Model/Repository/validation.d.ts +17 -47
  26. package/dist/Model/Repository/validation.d.ts.map +1 -1
  27. package/dist/Model/Repository/validation.js +2 -2
  28. package/dist/Model/query/dsl.d.ts +22 -22
  29. package/dist/Model/query/dsl.d.ts.map +1 -1
  30. package/dist/Model/query/dsl.js +1 -1
  31. package/dist/Model/query/new-kid-interpreter.d.ts +1 -1
  32. package/dist/Model/query/new-kid-interpreter.js +7 -7
  33. package/dist/Operations.d.ts +22 -63
  34. package/dist/Operations.d.ts.map +1 -1
  35. package/dist/Operations.js +14 -14
  36. package/dist/OperationsRepo.d.ts +23 -7
  37. package/dist/OperationsRepo.d.ts.map +1 -1
  38. package/dist/OperationsRepo.js +4 -5
  39. package/dist/QueueMaker/SQLQueue.d.ts +6 -8
  40. package/dist/QueueMaker/SQLQueue.d.ts.map +1 -1
  41. package/dist/QueueMaker/SQLQueue.js +20 -24
  42. package/dist/QueueMaker/errors.js +1 -1
  43. package/dist/QueueMaker/memQueue.d.ts +2 -5
  44. package/dist/QueueMaker/memQueue.d.ts.map +1 -1
  45. package/dist/QueueMaker/memQueue.js +22 -26
  46. package/dist/QueueMaker/sbqueue.d.ts +2 -5
  47. package/dist/QueueMaker/sbqueue.d.ts.map +1 -1
  48. package/dist/QueueMaker/sbqueue.js +24 -28
  49. package/dist/RequestContext.d.ts +28 -41
  50. package/dist/RequestContext.d.ts.map +1 -1
  51. package/dist/RequestContext.js +4 -4
  52. package/dist/RequestFiberSet.d.ts +23 -50
  53. package/dist/RequestFiberSet.d.ts.map +1 -1
  54. package/dist/RequestFiberSet.js +14 -14
  55. package/dist/Store/ContextMapContainer.d.ts +4 -4
  56. package/dist/Store/ContextMapContainer.d.ts.map +1 -1
  57. package/dist/Store/ContextMapContainer.js +5 -5
  58. package/dist/Store/Cosmos.d.ts.map +1 -1
  59. package/dist/Store/Cosmos.js +21 -28
  60. package/dist/Store/Disk.d.ts.map +1 -1
  61. package/dist/Store/Disk.js +12 -16
  62. package/dist/Store/Memory.d.ts +2 -2
  63. package/dist/Store/Memory.d.ts.map +1 -1
  64. package/dist/Store/Memory.js +25 -33
  65. package/dist/Store/index.js +2 -2
  66. package/dist/Store/service.d.ts +9 -34
  67. package/dist/Store/service.d.ts.map +1 -1
  68. package/dist/Store/service.js +4 -4
  69. package/dist/Store/utils.d.ts.map +1 -1
  70. package/dist/Store/utils.js +10 -2
  71. package/dist/adapters/SQL/Model.d.ts +106 -162
  72. package/dist/adapters/SQL/Model.d.ts.map +1 -1
  73. package/dist/adapters/SQL/Model.js +92 -130
  74. package/dist/adapters/ServiceBus.d.ts +13 -44
  75. package/dist/adapters/ServiceBus.d.ts.map +1 -1
  76. package/dist/adapters/ServiceBus.js +13 -15
  77. package/dist/adapters/cosmos-client.d.ts +7 -3
  78. package/dist/adapters/cosmos-client.d.ts.map +1 -1
  79. package/dist/adapters/cosmos-client.js +5 -4
  80. package/dist/adapters/logger.d.ts +1 -1
  81. package/dist/adapters/logger.d.ts.map +1 -1
  82. package/dist/adapters/memQueue.d.ts +8 -21
  83. package/dist/adapters/memQueue.d.ts.map +1 -1
  84. package/dist/adapters/memQueue.js +4 -4
  85. package/dist/adapters/mongo-client.d.ts +6 -6
  86. package/dist/adapters/mongo-client.d.ts.map +1 -1
  87. package/dist/adapters/mongo-client.js +5 -4
  88. package/dist/adapters/redis-client.d.ts +14 -4
  89. package/dist/adapters/redis-client.d.ts.map +1 -1
  90. package/dist/adapters/redis-client.js +19 -18
  91. package/dist/api/ContextProvider.d.ts +10 -15
  92. package/dist/api/ContextProvider.d.ts.map +1 -1
  93. package/dist/api/ContextProvider.js +8 -8
  94. package/dist/api/codec.d.ts +1 -1
  95. package/dist/api/codec.d.ts.map +1 -1
  96. package/dist/api/codec.js +1 -1
  97. package/dist/api/internal/RequestContextMiddleware.d.ts +1 -1
  98. package/dist/api/internal/RequestContextMiddleware.d.ts.map +1 -1
  99. package/dist/api/internal/auth.d.ts +3 -3
  100. package/dist/api/internal/auth.d.ts.map +1 -1
  101. package/dist/api/internal/auth.js +8 -8
  102. package/dist/api/internal/events.d.ts +2 -2
  103. package/dist/api/internal/events.d.ts.map +1 -1
  104. package/dist/api/internal/events.js +9 -9
  105. package/dist/api/internal/health.d.ts +1 -1
  106. package/dist/api/internal/health.d.ts.map +1 -1
  107. package/dist/api/internal/health.js +2 -2
  108. package/dist/api/layerUtils.d.ts +14 -14
  109. package/dist/api/layerUtils.d.ts.map +1 -1
  110. package/dist/api/layerUtils.js +5 -5
  111. package/dist/api/middlewares.d.ts +0 -75
  112. package/dist/api/middlewares.d.ts.map +1 -1
  113. package/dist/api/middlewares.js +6 -51
  114. package/dist/api/reportError.js +4 -4
  115. package/dist/api/routing/middleware/RouterMiddleware.d.ts +4 -4
  116. package/dist/api/routing/middleware/RouterMiddleware.d.ts.map +1 -1
  117. package/dist/api/routing/middleware/middleware.d.ts +6 -7
  118. package/dist/api/routing/middleware/middleware.d.ts.map +1 -1
  119. package/dist/api/routing/middleware/middleware.js +9 -13
  120. package/dist/api/routing/schema/jwt.d.ts +1 -1
  121. package/dist/api/routing/schema/jwt.d.ts.map +1 -1
  122. package/dist/api/routing/schema/jwt.js +5 -4
  123. package/dist/api/routing/utils.d.ts +2 -2
  124. package/dist/api/routing/utils.d.ts.map +1 -1
  125. package/dist/api/routing/utils.js +10 -8
  126. package/dist/api/routing.d.ts +39 -37
  127. package/dist/api/routing.d.ts.map +1 -1
  128. package/dist/api/routing.js +17 -21
  129. package/dist/api/setupRequest.d.ts +4 -6
  130. package/dist/api/setupRequest.d.ts.map +1 -1
  131. package/dist/api/setupRequest.js +10 -9
  132. package/dist/arbs.d.ts +3 -3
  133. package/dist/arbs.d.ts.map +1 -1
  134. package/dist/arbs.js +2 -2
  135. package/dist/errorReporter.d.ts +1 -1
  136. package/dist/errorReporter.d.ts.map +1 -1
  137. package/dist/errorReporter.js +12 -12
  138. package/dist/fileUtil.d.ts +6 -6
  139. package/dist/fileUtil.d.ts.map +1 -1
  140. package/dist/logger/jsonLogger.d.ts.map +1 -1
  141. package/dist/logger/jsonLogger.js +19 -18
  142. package/dist/logger/logFmtLogger.d.ts.map +1 -1
  143. package/dist/logger/logFmtLogger.js +11 -13
  144. package/dist/logger/shared.d.ts +2 -2
  145. package/dist/logger/shared.d.ts.map +1 -1
  146. package/dist/logger/shared.js +7 -9
  147. package/dist/logger.d.ts +1 -1
  148. package/dist/logger.d.ts.map +1 -1
  149. package/dist/rateLimit.d.ts +2 -2
  150. package/dist/rateLimit.d.ts.map +1 -1
  151. package/dist/rateLimit.js +5 -5
  152. package/dist/test.d.ts +2 -2
  153. package/dist/test.d.ts.map +1 -1
  154. package/dist/test.js +6 -24
  155. package/package.json +24 -27
  156. package/src/CUPS.ts +15 -14
  157. package/src/Emailer/Sendgrid.ts +15 -13
  158. package/src/Emailer/service.ts +3 -3
  159. package/src/MainFiberSet.ts +16 -12
  160. package/src/Model/Repository/ext.ts +18 -16
  161. package/src/Model/Repository/internal/internal.ts +80 -69
  162. package/src/Model/Repository/legacy.ts +9 -9
  163. package/src/Model/Repository/makeRepo.ts +5 -5
  164. package/src/Model/Repository/service.ts +12 -12
  165. package/src/Model/Repository/validation.ts +1 -1
  166. package/src/Model/query/dsl.ts +13 -13
  167. package/src/Model/query/new-kid-interpreter.ts +8 -8
  168. package/src/Operations.ts +17 -14
  169. package/src/OperationsRepo.ts +3 -4
  170. package/src/QueueMaker/SQLQueue.ts +86 -89
  171. package/src/QueueMaker/errors.ts +1 -1
  172. package/src/QueueMaker/memQueue.ts +90 -91
  173. package/src/QueueMaker/sbqueue.ts +90 -92
  174. package/src/RequestContext.ts +3 -3
  175. package/src/RequestFiberSet.ts +17 -15
  176. package/src/Store/ContextMapContainer.ts +4 -4
  177. package/src/Store/Cosmos.ts +20 -27
  178. package/src/Store/Disk.ts +13 -17
  179. package/src/Store/Memory.ts +28 -34
  180. package/src/Store/index.ts +1 -1
  181. package/src/Store/service.ts +4 -4
  182. package/src/Store/utils.ts +9 -5
  183. package/src/adapters/SQL/Model.ts +255 -268
  184. package/src/adapters/ServiceBus.ts +17 -20
  185. package/src/adapters/cosmos-client.ts +5 -5
  186. package/src/adapters/memQueue.ts +3 -3
  187. package/src/adapters/mongo-client.ts +5 -5
  188. package/src/adapters/redis-client.ts +25 -19
  189. package/src/api/ContextProvider.ts +24 -34
  190. package/src/api/codec.ts +1 -1
  191. package/src/api/internal/auth.ts +11 -13
  192. package/src/api/internal/events.ts +11 -11
  193. package/src/api/internal/health.ts +1 -1
  194. package/src/api/layerUtils.ts +20 -20
  195. package/src/api/middlewares.ts +0 -97
  196. package/src/api/reportError.ts +3 -3
  197. package/src/api/routing/middleware/RouterMiddleware.ts +5 -6
  198. package/src/api/routing/middleware/middleware.ts +13 -25
  199. package/src/api/routing/schema/jwt.ts +9 -7
  200. package/src/api/routing/utils.ts +12 -10
  201. package/src/api/routing.ts +77 -79
  202. package/src/api/setupRequest.ts +9 -8
  203. package/src/arbs.ts +3 -3
  204. package/src/errorReporter.ts +12 -12
  205. package/src/logger/jsonLogger.ts +18 -17
  206. package/src/logger/logFmtLogger.ts +10 -12
  207. package/src/logger/shared.ts +6 -8
  208. package/src/rateLimit.ts +7 -7
  209. package/src/test.ts +7 -29
  210. package/test/contextProvider.test.ts +77 -70
  211. package/test/controller.test.ts +51 -39
  212. package/test/dist/contextProvider.test.d.ts.map +1 -1
  213. package/test/dist/controller.test.d.ts.map +1 -1
  214. package/test/dist/fixtures.d.ts +33 -81
  215. package/test/dist/fixtures.d.ts.map +1 -1
  216. package/test/dist/fixtures.js +9 -8
  217. package/test/dist/query.test.d.ts.map +1 -1
  218. package/test/dist/rawQuery.test.d.ts.map +1 -1
  219. package/test/dist/requires.test.d.ts.map +1 -1
  220. package/test/dist/rpc-multi-middleware.test.d.ts.map +1 -1
  221. package/test/fixtures.ts +9 -7
  222. package/test/query.test.ts +49 -41
  223. package/test/rawQuery.test.ts +44 -40
  224. package/test/requires.test.ts +40 -31
  225. package/test/rpc-multi-middleware.test.ts +13 -14
  226. package/test/validateSample.test.ts +2 -2
  227. package/tsconfig.json +1 -25
  228. package/dist/api/internal/middlewares.d.ts +0 -15
  229. package/dist/api/internal/middlewares.d.ts.map +0 -1
  230. package/dist/api/internal/middlewares.js +0 -168
  231. package/src/api/internal/middlewares.ts +0 -279
@@ -7,18 +7,21 @@
7
7
  /**
8
8
  * @since 1.0.0
9
9
  */
10
- import * as RRX from "@effect/experimental/RequestResolver";
11
- import * as VariantSchema from "@effect/experimental/VariantSchema";
12
- import { SqlClient } from "@effect/sql/SqlClient";
13
- import * as SqlResolver from "@effect/sql/SqlResolver";
14
- import * as SqlSchema from "@effect/sql/SqlSchema";
10
+ import * as VariantSchema from "effect/unstable/schema/VariantSchema";
11
+ import { SqlClient } from "effect/unstable/sql/SqlClient";
12
+ import * as SqlResolver from "effect/unstable/sql/SqlResolver";
13
+ import * as SqlSchema from "effect/unstable/sql/SqlSchema";
15
14
  import crypto from "crypto"; // TODO
16
15
  import * as DateTime from "effect/DateTime";
17
16
  import * as Effect from "effect/Effect";
17
+ import { identity } from "effect/Function";
18
18
  import * as Option from "effect/Option";
19
- import * as ParseResult from "effect/ParseResult";
19
+ import * as Predicate from "effect/Predicate";
20
+ import * as RequestResolver from "effect/RequestResolver";
20
21
  import * as Schema from "effect/Schema";
21
- const { Class, Field, FieldExcept, FieldOnly, Struct, Union, extract, fieldEvolve, fieldFromKey } = VariantSchema.make({
22
+ import * as Getter from "effect/SchemaGetter";
23
+ import * as Transformation from "effect/SchemaTransformation";
24
+ const { Class, Field, FieldExcept, FieldOnly, Struct, Union, extract, fieldEvolve } = VariantSchema.make({
22
25
  variants: ["select", "insert", "update", "json", "jsonCreate", "jsonUpdate"],
23
26
  defaultVariant: "select"
24
27
  });
@@ -31,14 +34,14 @@ export {
31
34
  * @since 1.0.0
32
35
  * @category constructors
33
36
  * @example
34
- * import { Schema } from "effect/Schema"
35
- * import { Model } from "@effect/sql"
37
+ * import { Schema } from "effect"
38
+ * import { Model } from "effect/unstable/schema"
36
39
  *
37
40
  * export const GroupId = Schema.Number.pipe(Schema.brand("GroupId"))
38
41
  *
39
42
  * export class Group extends Model.Class<Group>("Group")({
40
43
  * id: Model.Generated(GroupId),
41
- * name: Schema.NonEmptyTrimmedString,
44
+ * name: Schema.String,
42
45
  * createdAt: Model.DateTimeInsertFromDate,
43
46
  * updatedAt: Model.DateTimeUpdateFromDate
44
47
  * }) {}
@@ -85,11 +88,6 @@ fieldEvolve,
85
88
  * @category fields
86
89
  */
87
90
  FieldExcept,
88
- /**
89
- * @since 1.0.0
90
- * @category fields
91
- */
92
- fieldFromKey,
93
91
  /**
94
92
  * @since 1.0.0
95
93
  * @category fields
@@ -154,6 +152,14 @@ export const Sensitive = (schema) => Field({
154
152
  insert: schema,
155
153
  update: schema
156
154
  });
155
+ /**
156
+ * @since 1.0.0
157
+ * @category optional
158
+ */
159
+ export const optionalOption = (schema) => Schema.optionalKey(Schema.NullOr(schema)).pipe(Schema.decodeTo(Schema.Option(Schema.toType(schema)), Transformation.transformOptional({
160
+ decode: (oe) => oe.pipe(Option.filter(Predicate.isNotNull), Option.some),
161
+ encode: Option.flatten
162
+ })));
157
163
  /**
158
164
  * Convert a field to one that is optional for all variants.
159
165
  *
@@ -167,17 +173,9 @@ export const FieldOption = fieldEvolve({
167
173
  select: Schema.OptionFromNullOr,
168
174
  insert: Schema.OptionFromNullOr,
169
175
  update: Schema.OptionFromNullOr,
170
- json: Schema.optionalWith({ as: "Option" }),
171
- jsonCreate: Schema.optionalWith({ as: "Option", nullable: true }),
172
- jsonUpdate: Schema.optionalWith({ as: "Option", nullable: true })
173
- });
174
- /**
175
- * @since 1.0.0
176
- * @category date & time
177
- */
178
- export const DateTimeFromDate = Schema.transform(Schema.ValidDateFromSelf, Schema.DateTimeUtcFromSelf, {
179
- decode: DateTime.unsafeFromDate,
180
- encode: DateTime.toDateUtc
176
+ json: optionalOption,
177
+ jsonCreate: optionalOption,
178
+ jsonUpdate: optionalOption
181
179
  });
182
180
  /**
183
181
  * A schema for a `DateTime.Utc` that is serialized as a date string in the
@@ -186,52 +184,37 @@ export const DateTimeFromDate = Schema.transform(Schema.ValidDateFromSelf, Schem
186
184
  * @since 1.0.0
187
185
  * @category date & time
188
186
  */
189
- export const Date = Schema.transformOrFail(Schema.String, Schema.DateTimeUtcFromSelf, {
190
- decode: (s, _, ast) => DateTime.make(s).pipe(Option.map(DateTime.removeTime), Option.match({
191
- onNone: () => ParseResult.fail(new ParseResult.Type(ast, s)),
192
- onSome: (dt) => ParseResult.succeed(dt)
193
- })),
194
- encode: (dt) => ParseResult.succeed(DateTime.formatIsoDate(dt))
195
- });
187
+ export const Date = Schema.String.pipe(Schema.decodeTo(Schema.DateTimeUtc, {
188
+ decode: Getter.dateTimeUtcFromInput().map(DateTime.removeTime),
189
+ encode: Getter.transform(DateTime.formatIsoDate)
190
+ }));
196
191
  /**
197
192
  * @since 1.0.0
198
193
  * @category date & time
199
194
  */
200
- export const DateWithNow = VariantSchema.Overrideable(Date, Schema.DateTimeUtcFromSelf, {
201
- generate: Option.match({
202
- onNone: () => Effect.map(DateTime.now, DateTime.removeTime),
203
- onSome: (dt) => Effect.succeed(DateTime.removeTime(dt))
204
- })
195
+ export const DateWithNow = VariantSchema.Overrideable(Date, {
196
+ defaultValue: Effect.map(DateTime.now, DateTime.removeTime)
205
197
  });
206
198
  /**
207
199
  * @since 1.0.0
208
200
  * @category date & time
209
201
  */
210
- export const DateTimeWithNow = VariantSchema.Overrideable(Schema.String, Schema.DateTimeUtcFromSelf, {
211
- generate: Option.match({
212
- onNone: () => Effect.map(DateTime.now, DateTime.formatIso),
213
- onSome: (dt) => Effect.succeed(DateTime.formatIso(dt))
214
- })
202
+ export const DateTimeWithNow = VariantSchema.Overrideable(Schema.DateTimeUtcFromString, {
203
+ defaultValue: DateTime.now
215
204
  });
216
205
  /**
217
206
  * @since 1.0.0
218
207
  * @category date & time
219
208
  */
220
- export const DateTimeFromDateWithNow = VariantSchema.Overrideable(Schema.DateFromSelf, Schema.DateTimeUtcFromSelf, {
221
- generate: Option.match({
222
- onNone: () => Effect.map(DateTime.now, DateTime.toDateUtc),
223
- onSome: (dt) => Effect.succeed(DateTime.toDateUtc(dt))
224
- })
209
+ export const DateTimeFromDateWithNow = VariantSchema.Overrideable(Schema.DateTimeUtcFromDate, {
210
+ defaultValue: DateTime.now
225
211
  });
226
212
  /**
227
213
  * @since 1.0.0
228
214
  * @category date & time
229
215
  */
230
- export const DateTimeFromNumberWithNow = VariantSchema.Overrideable(Schema.Number, Schema.DateTimeUtcFromSelf, {
231
- generate: Option.match({
232
- onNone: () => Effect.map(DateTime.now, DateTime.toEpochMillis),
233
- onSome: (dt) => Effect.succeed(DateTime.toEpochMillis(dt))
234
- })
216
+ export const DateTimeFromNumberWithNow = VariantSchema.Overrideable(Schema.DateTimeUtcFromMillis, {
217
+ defaultValue: DateTime.now
235
218
  });
236
219
  /**
237
220
  * A field that represents a date-time value that is inserted as the current
@@ -243,9 +226,9 @@ export const DateTimeFromNumberWithNow = VariantSchema.Overrideable(Schema.Numbe
243
226
  * @category date & time
244
227
  */
245
228
  export const DateTimeInsert = Field({
246
- select: Schema.DateTimeUtc,
229
+ select: Schema.DateTimeUtcFromString,
247
230
  insert: DateTimeWithNow,
248
- json: Schema.DateTimeUtc
231
+ json: Schema.DateTimeUtcFromString
249
232
  });
250
233
  /**
251
234
  * A field that represents a date-time value that is inserted as the current
@@ -257,9 +240,9 @@ export const DateTimeInsert = Field({
257
240
  * @category date & time
258
241
  */
259
242
  export const DateTimeInsertFromDate = Field({
260
- select: DateTimeFromDate,
243
+ select: Schema.DateTimeUtcFromDate,
261
244
  insert: DateTimeFromDateWithNow,
262
- json: Schema.DateTimeUtc
245
+ json: Schema.DateTimeUtcFromString
263
246
  });
264
247
  /**
265
248
  * A field that represents a date-time value that is inserted as the current
@@ -271,9 +254,9 @@ export const DateTimeInsertFromDate = Field({
271
254
  * @category date & time
272
255
  */
273
256
  export const DateTimeInsertFromNumber = Field({
274
- select: Schema.DateTimeUtcFromNumber,
257
+ select: Schema.DateTimeUtcFromMillis,
275
258
  insert: DateTimeFromNumberWithNow,
276
- json: Schema.DateTimeUtcFromNumber
259
+ json: Schema.DateTimeUtcFromMillis
277
260
  });
278
261
  /**
279
262
  * A field that represents a date-time value that is updated as the current
@@ -286,10 +269,10 @@ export const DateTimeInsertFromNumber = Field({
286
269
  * @category date & time
287
270
  */
288
271
  export const DateTimeUpdate = Field({
289
- select: Schema.DateTimeUtc,
272
+ select: Schema.DateTimeUtcFromString,
290
273
  insert: DateTimeWithNow,
291
274
  update: DateTimeWithNow,
292
- json: Schema.DateTimeUtc
275
+ json: Schema.DateTimeUtcFromString
293
276
  });
294
277
  /**
295
278
  * A field that represents a date-time value that is updated as the current
@@ -302,10 +285,10 @@ export const DateTimeUpdate = Field({
302
285
  * @category date & time
303
286
  */
304
287
  export const DateTimeUpdateFromDate = Field({
305
- select: DateTimeFromDate,
288
+ select: Schema.DateTimeUtcFromDate,
306
289
  insert: DateTimeFromDateWithNow,
307
290
  update: DateTimeFromDateWithNow,
308
- json: Schema.DateTimeUtc
291
+ json: Schema.DateTimeUtcFromString
309
292
  });
310
293
  /**
311
294
  * A field that represents a date-time value that is updated as the current
@@ -318,10 +301,10 @@ export const DateTimeUpdateFromDate = Field({
318
301
  * @category date & time
319
302
  */
320
303
  export const DateTimeUpdateFromNumber = Field({
321
- select: Schema.DateTimeUtcFromNumber,
304
+ select: Schema.DateTimeUtcFromMillis,
322
305
  insert: DateTimeFromNumberWithNow,
323
306
  update: DateTimeFromNumberWithNow,
324
- json: Schema.DateTimeUtcFromNumber
307
+ json: Schema.DateTimeUtcFromMillis
325
308
  });
326
309
  /**
327
310
  * A field that represents a JSON value stored as text in the database.
@@ -332,7 +315,7 @@ export const DateTimeUpdateFromNumber = Field({
332
315
  * @category json
333
316
  */
334
317
  export const JsonFromString = (schema) => {
335
- const parsed = Schema.parseJson(schema);
318
+ const parsed = Schema.fromJsonString(schema);
336
319
  return Field({
337
320
  select: parsed,
338
321
  insert: parsed,
@@ -353,9 +336,7 @@ export const makeRepository = (Model, options) => Effect.gen(function* () {
353
336
  const idSchema = Model.fields[options.idColumn];
354
337
  const idColumn = options.idColumn;
355
338
  const versionColumn = options.versionColumn;
356
- // TODO: insert version automatically...
357
- // I guess we should hide the versionColumn and insert it in the schema instead
358
- const insertSchema = SqlSchema.single({
339
+ const insertSchema = SqlSchema.findOne({
359
340
  Request: Model.insert,
360
341
  Result: Model,
361
342
  execute: (request) => sql.onDialectOrElse({
@@ -366,19 +347,17 @@ select * from ${sql(options.tableName)} where ${sql(idColumn)} = LAST_INSERT_ID(
366
347
  orElse: () => sql `insert into ${sql(options.tableName)} ${sql.insert(request).returning("*")}`
367
348
  })
368
349
  });
369
- const insert = (insert) => insertSchema(insert).pipe(Effect.orDie, Effect.withSpan(`${options.spanPrefix}.insert`, {
370
- captureStackTrace: false,
371
- attributes: { insert }
350
+ const insert = (insert) => insertSchema(insert).pipe(Effect.catchTag("NoSuchElementError", Effect.die), Effect.withSpan(`${options.spanPrefix}.insert`, {}, {
351
+ captureStackTrace: false
372
352
  }));
373
353
  const insertVoidSchema = SqlSchema.void({
374
354
  Request: Model.insert,
375
355
  execute: (request) => sql `insert into ${sql(options.tableName)} ${sql.insert(request)}`
376
356
  });
377
- const insertVoid = (insert) => insertVoidSchema(insert).pipe(Effect.orDie, Effect.withSpan(`${options.spanPrefix}.insertVoid`, {
378
- captureStackTrace: false,
379
- attributes: { insert }
357
+ const insertVoid = (insert) => insertVoidSchema(insert).pipe(Effect.withSpan(`${options.spanPrefix}.insertVoid`, {}, {
358
+ captureStackTrace: false
380
359
  }));
381
- const updateSchema = SqlSchema.single({
360
+ const updateSchema = SqlSchema.findOne({
382
361
  Request: Model.update,
383
362
  Result: Model,
384
363
  execute: versionColumn
@@ -397,9 +376,10 @@ select * from ${sql(options.tableName)} where ${sql(idColumn)} = ${request[idCol
397
376
  orElse: () => sql `update ${sql(options.tableName)} set ${sql.update(request, [idColumn])} where ${sql(idColumn)} = ${request[idColumn]} returning *`
398
377
  })
399
378
  });
400
- const update = (update) => updateSchema(update).pipe(Effect.orDie, Effect.withSpan(`${options.spanPrefix}.update`, {
401
- captureStackTrace: false,
402
- attributes: { update }
379
+ const update = (update) => updateSchema(update).pipe(Effect.catchTag("NoSuchElementError", Effect.die), Effect.withSpan(`${options.spanPrefix}.update`, {
380
+ attributes: { id: update[idColumn] }
381
+ }, {
382
+ captureStackTrace: false
403
383
  }));
404
384
  const updateVoidSchema = SqlSchema.void({
405
385
  Request: Model.update,
@@ -407,26 +387,27 @@ select * from ${sql(options.tableName)} where ${sql(idColumn)} = ${request[idCol
407
387
  ? (request) => sql `update ${sql(options.tableName)} set ${sql.update({ ...request, [versionColumn]: crypto.randomUUID() }, [idColumn])} where ${sql(idColumn)} = ${request[idColumn]} and ${sql(versionColumn)} = ${request[versionColumn]}`
408
388
  : (request) => sql `update ${sql(options.tableName)} set ${sql.update(request, [idColumn])} where ${sql(idColumn)} = ${request[idColumn]}`
409
389
  });
410
- const updateVoid = (update) => updateVoidSchema(update).pipe(Effect.orDie, Effect.withSpan(`${options.spanPrefix}.updateVoid`, {
411
- captureStackTrace: false,
412
- attributes: { update }
390
+ const updateVoid = (update) => updateVoidSchema(update).pipe(Effect.withSpan(`${options.spanPrefix}.updateVoid`, {
391
+ attributes: { id: update[idColumn] }
392
+ }, {
393
+ captureStackTrace: false
413
394
  }));
414
- const findByIdSchema = SqlSchema.findOne({
395
+ const findByIdSchema = SqlSchema.findOneOption({
415
396
  Request: idSchema,
416
397
  Result: Model,
417
398
  execute: (id) => sql `select * from ${sql(options.tableName)} where ${sql(idColumn)} = ${id}`
418
399
  });
419
- const findById = (id) => findByIdSchema(id).pipe(Effect.orDie, Effect.withSpan(`${options.spanPrefix}.findById`, {
420
- captureStackTrace: false,
421
- attributes: { id }
400
+ const findById = (id) => findByIdSchema(id).pipe(Effect.withSpan(`${options.spanPrefix}.findById`, { attributes: { id } }, {
401
+ captureStackTrace: false
422
402
  }));
423
403
  const deleteSchema = SqlSchema.void({
424
404
  Request: idSchema,
425
405
  execute: (id) => sql `delete from ${sql(options.tableName)} where ${sql(idColumn)} = ${id}`
426
406
  });
427
- const delete_ = (id) => deleteSchema(id).pipe(Effect.orDie, Effect.withSpan(`${options.spanPrefix}.delete`, {
428
- captureStackTrace: false,
407
+ const delete_ = (id) => deleteSchema(id).pipe(Effect.withSpan(`${options.spanPrefix}.delete`, {
429
408
  attributes: { id }
409
+ }, {
410
+ captureStackTrace: false
430
411
  }));
431
412
  return { insert, insertVoid, update, updateVoid, findById, delete: delete_ };
432
413
  });
@@ -440,69 +421,50 @@ export const makeDataLoaders = (Model, options) => Effect.gen(function* () {
440
421
  const sql = yield* SqlClient;
441
422
  const idSchema = Model.fields[options.idColumn];
442
423
  const idColumn = options.idColumn;
443
- const insertResolver = yield* SqlResolver.ordered(`${options.spanPrefix}/insert`, {
424
+ const setMaxBatchSize = options.maxBatchSize ? RequestResolver.batchN(options.maxBatchSize) : identity;
425
+ const insertResolver = SqlResolver.ordered({
444
426
  Request: Model.insert,
445
427
  Result: Model,
446
428
  execute: (request) => sql.onDialectOrElse({
447
429
  mysql: () => Effect.forEach(request, (request) => sql `insert into ${sql(options.tableName)} ${sql.insert(request)};
448
430
  select * from ${sql(options.tableName)} where ${sql(idColumn)} = LAST_INSERT_ID();`
449
431
  .unprepared
450
- .pipe(Effect.map(([, results]) => results)), { concurrency: 10 }),
432
+ .pipe(Effect.map(([, results]) => results[0])), { concurrency: 10 }),
451
433
  orElse: () => sql `insert into ${sql(options.tableName)} ${sql.insert(request).returning("*")}`
452
434
  })
453
- });
454
- const insertLoader = yield* RRX.dataLoader(insertResolver, {
455
- window: options.window,
456
- maxBatchSize: options.maxBatchSize
457
- });
458
- const insertExecute = insertResolver.makeExecute(insertLoader);
459
- const insert = (insert) => insertExecute(insert).pipe(Effect.orDie, Effect.withSpan(`${options.spanPrefix}.insert`, {
460
- captureStackTrace: false,
461
- attributes: { insert }
435
+ }).pipe(RequestResolver.setDelay(options.window), setMaxBatchSize, RequestResolver.withSpan(`${options.spanPrefix}.insertResolver`));
436
+ const insertExecute = SqlResolver.request(insertResolver);
437
+ const insert = (insert) => insertExecute(insert).pipe(Effect.catchTag("ResultLengthMismatch", Effect.die), Effect.withSpan(`${options.spanPrefix}.insert`, {}, {
438
+ captureStackTrace: false
462
439
  }));
463
- const insertVoidResolver = yield* SqlResolver.void(`${options.spanPrefix}/insertVoid`, {
440
+ const insertVoidResolver = SqlResolver.void({
464
441
  Request: Model.insert,
465
442
  execute: (request) => sql `insert into ${sql(options.tableName)} ${sql.insert(request)}`
466
- });
467
- const insertVoidLoader = yield* RRX.dataLoader(insertVoidResolver, {
468
- window: options.window,
469
- maxBatchSize: options.maxBatchSize
470
- });
471
- const insertVoidExecute = insertVoidResolver.makeExecute(insertVoidLoader);
472
- const insertVoid = (insert) => insertVoidExecute(insert).pipe(Effect.orDie, Effect.withSpan(`${options.spanPrefix}.insertVoid`, {
473
- captureStackTrace: false,
474
- attributes: { insert }
443
+ }).pipe(RequestResolver.setDelay(options.window), setMaxBatchSize, RequestResolver.withSpan(`${options.spanPrefix}.insertVoidResolver`));
444
+ const insertVoidExecute = SqlResolver.request(insertVoidResolver);
445
+ const insertVoid = (insert) => insertVoidExecute(insert).pipe(Effect.withSpan(`${options.spanPrefix}.insertVoid`, {}, {
446
+ captureStackTrace: false
475
447
  }));
476
- const findByIdResolver = yield* SqlResolver.findById(`${options.spanPrefix}/findById`, {
448
+ const findByIdResolver = SqlResolver.findById({
477
449
  Id: idSchema,
478
450
  Result: Model,
479
451
  ResultId(request) {
480
452
  return request[idColumn];
481
453
  },
482
454
  execute: (ids) => sql `select * from ${sql(options.tableName)} where ${sql.in(idColumn, ids)}`
483
- });
484
- const findByIdLoader = yield* RRX.dataLoader(findByIdResolver, {
485
- window: options.window,
486
- maxBatchSize: options.maxBatchSize
487
- });
488
- const findByIdExecute = findByIdResolver.makeExecute(findByIdLoader);
489
- const findById = (id) => findByIdExecute(id).pipe(Effect.orDie, Effect.withSpan(`${options.spanPrefix}.findById`, {
490
- captureStackTrace: false,
491
- attributes: { id }
455
+ }).pipe(RequestResolver.setDelay(options.window), setMaxBatchSize, RequestResolver.withSpan(`${options.spanPrefix}.findByIdResolver`));
456
+ const findByIdExecute = SqlResolver.request(findByIdResolver);
457
+ const findById = (id) => findByIdExecute(id).pipe(Effect.withSpan(`${options.spanPrefix}.findById`, { attributes: { id } }, {
458
+ captureStackTrace: false
492
459
  }));
493
- const deleteResolver = yield* SqlResolver.void(`${options.spanPrefix}/delete`, {
460
+ const deleteResolver = SqlResolver.void({
494
461
  Request: idSchema,
495
462
  execute: (ids) => sql `delete from ${sql(options.tableName)} where ${sql.in(idColumn, ids)}`
496
- });
497
- const deleteLoader = yield* RRX.dataLoader(deleteResolver, {
498
- window: options.window,
499
- maxBatchSize: options.maxBatchSize
500
- });
501
- const deleteExecute = deleteResolver.makeExecute(deleteLoader);
502
- const delete_ = (id) => deleteExecute(id).pipe(Effect.orDie, Effect.withSpan(`${options.spanPrefix}.delete`, {
503
- captureStackTrace: false,
504
- attributes: { id }
463
+ }).pipe(RequestResolver.setDelay(options.window), setMaxBatchSize, RequestResolver.withSpan(`${options.spanPrefix}.deleteResolver`));
464
+ const deleteExecute = SqlResolver.request(deleteResolver);
465
+ const delete_ = (id) => deleteExecute(id).pipe(Effect.withSpan(`${options.spanPrefix}.delete`, { attributes: { id } }, {
466
+ captureStackTrace: false
505
467
  }));
506
468
  return { insert, insertVoid, findById, delete: delete_ };
507
469
  });
508
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTW9kZWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYWRhcHRlcnMvU1FML01vZGVsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtEQUErRDtBQUMvRCw0REFBNEQ7QUFDNUQsNERBQTREO0FBQzVELHVEQUF1RDtBQUN2RCwwREFBMEQ7QUFDMUQsd0RBQXdEO0FBQ3hEOztHQUVHO0FBQ0gsT0FBTyxLQUFLLEdBQUcsTUFBTSxzQ0FBc0MsQ0FBQTtBQUMzRCxPQUFPLEtBQUssYUFBYSxNQUFNLG9DQUFvQyxDQUFBO0FBQ25FLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQTtBQUNqRCxPQUFPLEtBQUssV0FBVyxNQUFNLHlCQUF5QixDQUFBO0FBQ3RELE9BQU8sS0FBSyxTQUFTLE1BQU0sdUJBQXVCLENBQUE7QUFDbEQsT0FBTyxNQUFNLE1BQU0sUUFBUSxDQUFBLENBQUMsT0FBTztBQUVuQyxPQUFPLEtBQUssUUFBUSxNQUFNLGlCQUFpQixDQUFBO0FBRTNDLE9BQU8sS0FBSyxNQUFNLE1BQU0sZUFBZSxDQUFBO0FBQ3ZDLE9BQU8sS0FBSyxNQUFNLE1BQU0sZUFBZSxDQUFBO0FBQ3ZDLE9BQU8sS0FBSyxXQUFXLE1BQU0sb0JBQW9CLENBQUE7QUFDakQsT0FBTyxLQUFLLE1BQU0sTUFBTSxlQUFlLENBQUE7QUFHdkMsTUFBTSxFQUNKLEtBQUssRUFDTCxLQUFLLEVBQ0wsV0FBVyxFQUNYLFNBQVMsRUFDVCxNQUFNLEVBQ04sS0FBSyxFQUNMLE9BQU8sRUFDUCxXQUFXLEVBQ1gsWUFBWSxFQUNiLEdBQUcsYUFBYSxDQUFDLElBQUksQ0FBQztJQUNyQixRQUFRLEVBQUUsQ0FBQyxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFFLFlBQVksQ0FBQztJQUM1RSxjQUFjLEVBQUUsUUFBUTtDQUN6QixDQUFDLENBQUE7QUF3Q0YsT0FBTztBQUNMOzs7Ozs7Ozs7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
470
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTW9kZWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYWRhcHRlcnMvU1FML01vZGVsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtEQUErRDtBQUMvRCw0REFBNEQ7QUFDNUQsNERBQTREO0FBQzVELHVEQUF1RDtBQUN2RCwwREFBMEQ7QUFDMUQsd0RBQXdEO0FBQ3hEOztHQUVHO0FBQ0gsT0FBTyxLQUFLLGFBQWEsTUFBTSxzQ0FBc0MsQ0FBQTtBQUNyRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sK0JBQStCLENBQUE7QUFDekQsT0FBTyxLQUFLLFdBQVcsTUFBTSxpQ0FBaUMsQ0FBQTtBQUM5RCxPQUFPLEtBQUssU0FBUyxNQUFNLCtCQUErQixDQUFBO0FBQzFELE9BQU8sTUFBTSxNQUFNLFFBQVEsQ0FBQSxDQUFDLE9BQU87QUFFbkMsT0FBTyxLQUFLLFFBQVEsTUFBTSxpQkFBaUIsQ0FBQTtBQUUzQyxPQUFPLEtBQUssTUFBTSxNQUFNLGVBQWUsQ0FBQTtBQUN2QyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUE7QUFDMUMsT0FBTyxLQUFLLE1BQU0sTUFBTSxlQUFlLENBQUE7QUFDdkMsT0FBTyxLQUFLLFNBQVMsTUFBTSxrQkFBa0IsQ0FBQTtBQUM3QyxPQUFPLEtBQUssZUFBZSxNQUFNLHdCQUF3QixDQUFBO0FBQ3pELE9BQU8sS0FBSyxNQUFNLE1BQU0sZUFBZSxDQUFBO0FBQ3ZDLE9BQU8sS0FBSyxNQUFNLE1BQU0scUJBQXFCLENBQUE7QUFDN0MsT0FBTyxLQUFLLGNBQWMsTUFBTSw2QkFBNkIsQ0FBQTtBQUc3RCxNQUFNLEVBQ0osS0FBSyxFQUNMLEtBQUssRUFDTCxXQUFXLEVBQ1gsU0FBUyxFQUNULE1BQU0sRUFDTixLQUFLLEVBQ0wsT0FBTyxFQUNQLFdBQVcsRUFDWixHQUFHLGFBQWEsQ0FBQyxJQUFJLENBQUM7SUFDckIsUUFBUSxFQUFFLENBQUMsUUFBUSxFQUFFLFFB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
@@ -1,58 +1,27 @@
1
1
  import { type OperationOptionsBase, type ProcessErrorArgs, ServiceBusClient, type ServiceBusMessage, type ServiceBusMessageBatch, type ServiceBusReceivedMessage, type ServiceBusReceiver } from "@azure/service-bus";
2
- import { Context, Effect, Layer, type Scope } from "effect-app";
3
- declare function makeClient(url: string): Effect.Effect<ServiceBusClient, never, Scope.Scope>;
4
- declare const ServiceBusClientTag_base: Context.TagClass<ServiceBusClientTag, "@services/Client", ServiceBusClient>;
2
+ import { Effect, Layer, type Scope, ServiceMap } from "effect-app";
3
+ declare const ServiceBusClientTag_base: ServiceMap.OpaqueClass<ServiceBusClientTag, "@services/Client", ServiceBusClient> & {
4
+ readonly make: (url: string) => Effect.Effect<ServiceBusClient, never, Scope.Scope>;
5
+ };
5
6
  export declare class ServiceBusClientTag extends ServiceBusClientTag_base {
6
- static readonly make: typeof makeClient;
7
7
  static readonly layer: (url: string) => Layer.Layer<ServiceBusClientTag, never, never>;
8
8
  }
9
- declare const Sender_base: (abstract new (service: {
10
- name: string;
11
- sendMessages: (messages: ServiceBusMessage | ServiceBusMessage[] | ServiceBusMessageBatch, options?: Omit<OperationOptionsBase, "abortSignal">) => Effect.Effect<void, never, never>;
12
- }) => Readonly<{
13
- name: string;
14
- sendMessages: (messages: ServiceBusMessage | ServiceBusMessage[] | ServiceBusMessageBatch, options?: Omit<OperationOptionsBase, "abortSignal">) => Effect.Effect<void, never, never>;
15
- }> & Context.TagClassShape<"Sender", {
16
- name: string;
17
- sendMessages: (messages: ServiceBusMessage | ServiceBusMessage[] | ServiceBusMessageBatch, options?: Omit<OperationOptionsBase, "abortSignal">) => Effect.Effect<void, never, never>;
18
- }>) & {
19
- toLayer: <E, R>(eff: Effect.Effect<Omit<Sender, keyof Context.TagClassShape<any, any>>, E, R>) => Layer.Layer<Sender, E, R>;
20
- toLayerScoped: <E, R_1>(eff: Effect.Effect<Omit<Sender, keyof Context.TagClassShape<any, any>>, E, R_1>) => Layer.Layer<Sender, E, Exclude<R_1, Scope.Scope>>;
21
- of: (service: Omit<Sender, keyof Context.TagClassShape<any, any>>) => Sender;
22
- } & Context.Tag<Sender, Sender> & Context.ServiceUse<Sender, {
9
+ declare const Sender_base: ServiceMap.OpaqueClass<Sender, "Sender", {
23
10
  name: string;
24
11
  sendMessages: (messages: ServiceBusMessage | ServiceBusMessage[] | ServiceBusMessageBatch, options?: Omit<OperationOptionsBase, "abortSignal">) => Effect.Effect<void, never, never>;
25
- }>;
26
- export declare class Sender extends Sender_base {
27
- static readonly make: (name: string) => Effect.Effect<{
12
+ }> & {
13
+ readonly make: (name: string) => Effect.Effect<{
28
14
  name: string;
29
- sendMessages: (messages: ServiceBusMessage | ServiceBusMessageBatch | ServiceBusMessage[], options?: Omit<OperationOptionsBase, "abortSignal"> | undefined) => Effect.Effect<void, never, never>;
15
+ sendMessages: (messages: ServiceBusMessage | ServiceBusMessage[] | ServiceBusMessageBatch, options?: Omit<OperationOptionsBase, "abortSignal">) => Effect.Effect<void, never, never>;
30
16
  }, never, Scope.Scope | ServiceBusClientTag>;
17
+ };
18
+ export declare class Sender extends Sender_base {
31
19
  static readonly layer: (name: string) => Layer.Layer<Sender, never, ServiceBusClientTag>;
32
20
  }
33
- export declare const SenderTag: <Id>() => <Key extends string>(queueName: Key) => Context.TagClass<Id, `ServiceBus.Sender.${Key}`, Sender> & {
21
+ export declare const SenderTag: <Id>() => <Key extends string>(queueName: Key) => ServiceMap.Service<Id, Sender> & {
34
22
  layer: Layer.Layer<Id, never, ServiceBusClientTag>;
35
23
  };
36
- declare const Receiver_base: (abstract new (service: {
37
- name: string;
38
- make: (waitTillEmpty: Effect.Effect<void>) => Effect.Effect<ServiceBusReceiver, never, Scope.Scope>;
39
- makeSession: (sessionId: string, waitTillEmpty: Effect.Effect<void>) => Effect.Effect<ServiceBusReceiver, never, Scope.Scope>;
40
- subscribe<RMsg, RErr>(hndlr: MessageHandlers<RMsg, RErr>, sessionId?: string): Effect.Effect<void, never, Scope.Scope | RMsg | RErr>;
41
- }) => Readonly<{
42
- name: string;
43
- make: (waitTillEmpty: Effect.Effect<void>) => Effect.Effect<ServiceBusReceiver, never, Scope.Scope>;
44
- makeSession: (sessionId: string, waitTillEmpty: Effect.Effect<void>) => Effect.Effect<ServiceBusReceiver, never, Scope.Scope>;
45
- subscribe<RMsg, RErr>(hndlr: MessageHandlers<RMsg, RErr>, sessionId?: string): Effect.Effect<void, never, Scope.Scope | RMsg | RErr>;
46
- }> & Context.TagClassShape<"Receiver", {
47
- name: string;
48
- make: (waitTillEmpty: Effect.Effect<void>) => Effect.Effect<ServiceBusReceiver, never, Scope.Scope>;
49
- makeSession: (sessionId: string, waitTillEmpty: Effect.Effect<void>) => Effect.Effect<ServiceBusReceiver, never, Scope.Scope>;
50
- subscribe<RMsg, RErr>(hndlr: MessageHandlers<RMsg, RErr>, sessionId?: string): Effect.Effect<void, never, Scope.Scope | RMsg | RErr>;
51
- }>) & {
52
- toLayer: <E, R>(eff: Effect.Effect<Omit<Receiver, keyof Context.TagClassShape<any, any>>, E, R>) => Layer.Layer<Receiver, E, R>;
53
- toLayerScoped: <E, R_1>(eff: Effect.Effect<Omit<Receiver, keyof Context.TagClassShape<any, any>>, E, R_1>) => Layer.Layer<Receiver, E, Exclude<R_1, Scope.Scope>>;
54
- of: (service: Omit<Receiver, keyof Context.TagClassShape<any, any>>) => Receiver;
55
- } & Context.Tag<Receiver, Receiver> & Context.ServiceUse<Receiver, {
24
+ declare const Receiver_base: ServiceMap.OpaqueClass<Receiver, "Receiver", {
56
25
  name: string;
57
26
  make: (waitTillEmpty: Effect.Effect<void>) => Effect.Effect<ServiceBusReceiver, never, Scope.Scope>;
58
27
  makeSession: (sessionId: string, waitTillEmpty: Effect.Effect<void>) => Effect.Effect<ServiceBusReceiver, never, Scope.Scope>;
@@ -67,7 +36,7 @@ export declare class Receiver extends Receiver_base {
67
36
  }, never, ServiceBusClientTag>;
68
37
  static readonly layer: (name: string) => Layer.Layer<Receiver, never, ServiceBusClientTag>;
69
38
  }
70
- export declare const ReceiverTag: <Id>() => <Key extends string>(queueName: Key) => Context.TagClass<Id, `ServiceBus.Receiver.${Key}`, Receiver> & {
39
+ export declare const ReceiverTag: <Id>() => <Key extends string>(queueName: Key) => ServiceMap.Service<Id, Receiver> & {
71
40
  layer: Layer.Layer<Id, never, ServiceBusClientTag>;
72
41
  };
73
42
  export declare const SenderReceiver: (queue: string, queueDrain?: string) => Layer.Layer<Sender | Receiver, never, ServiceBusClientTag>;
@@ -1 +1 @@
1
- {"version":3,"file":"ServiceBus.d.ts","sourceRoot":"","sources":["../../src/adapters/ServiceBus.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ServiceBus.d.ts","sourceRoot":"","sources":["../../src/adapters/ServiceBus.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,oBAAoB,EAAE,KAAK,gBAAgB,EAAE,gBAAgB,EAAE,KAAK,iBAAiB,EAAE,KAAK,sBAAsB,EAAE,KAAK,yBAAyB,EAAE,KAAK,kBAAkB,EAAE,MAAM,oBAAoB,CAAA;AACrN,OAAO,EAAS,MAAM,EAAkB,KAAK,EAAE,KAAK,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;;;;AAkBzF,qBAAa,mBACX,SAAQ,wBAAoG;IAE5G,MAAM,CAAC,QAAQ,CAAC,KAAK,GAAI,KAAK,MAAM,oDAAiC;CACtE;;UA6BO,MAAM;kBACE,CACZ,QAAQ,EAAE,iBAAiB,GAAG,iBAAiB,EAAE,GAAG,sBAAsB,EAC1E,OAAO,CAAC,EAAE,IAAI,CAAC,oBAAoB,EAAE,aAAa,CAAC,KAChD,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,CAAC;;;cAJhC,MAAM;sBACE,CACZ,QAAQ,EAAE,iBAAiB,GAAG,iBAAiB,EAAE,GAAG,sBAAsB,EAC1E,OAAO,CAAC,EAAE,IAAI,CAAC,oBAAoB,EAAE,aAAa,CAAC,KAChD,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,CAAC;;;AALxC,qBAAa,MAAO,SAAQ,WAMQ;IAClC,MAAM,CAAC,QAAQ,CAAC,KAAK,GAAI,MAAM,MAAM,qDAAkC;CACxE;AAED,eAAO,MAAM,SAAS,GAAI,EAAE,QAAQ,GAAG,SAAS,MAAM,EAAE,WAAW,GAAG;;CASrE,CAAA;;UA+FO,MAAM;UACN,CAAC,aAAa,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,MAAM,CAAC,MAAM,CAAC,kBAAkB,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC;iBACtF,CACX,SAAS,EAAE,MAAM,EACjB,aAAa,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,KAC/B,MAAM,CAAC,MAAM,CAAC,kBAAkB,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC;cAChD,IAAI,EAAE,IAAI,SACX,eAAe,CAAC,IAAI,EAAE,IAAI,CAAC,cACtB,MAAM,GACjB,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,GAAG,IAAI,GAAG,IAAI,CAAC;;AAV1D,qBAAa,QAAS,SAAQ,aAWd;IACd,MAAM,CAAC,QAAQ,CAAC,IAAI,SAxGM,MAAM;;8BAyBD,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC;iCAEhB,MAAM,iBAAiB,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC;oBAOjC,IAAI,EAAE,IAAI;mCAsElB;IACnC,MAAM,CAAC,QAAQ,CAAC,KAAK,GAAI,MAAM,MAAM,uDAAqC;CAC3E;AAED,eAAO,MAAM,WAAW,GAAI,EAAE,QAAQ,GAAG,SAAS,MAAM,EAAE,WAAW,GAAG;;CASvE,CAAA;AAED,eAAO,MAAM,cAAc,GAAI,OAAO,MAAM,EAAE,aAAa,MAAM,+DACS,CAAA;AAE1E,MAAM,WAAW,eAAe,CAAC,IAAI,EAAE,IAAI;IACzC;;;;OAIG;IACH,cAAc,CAAC,OAAO,EAAE,yBAAyB,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,CAAA;IACpF;;;;OAIG;IACH,YAAY,CAAC,IAAI,EAAE,gBAAgB,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,CAAA;CACvE"}