effect-mongodb 0.4.1 → 0.5.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 (67) hide show
  1. package/README.md +19 -0
  2. package/dist/cjs/AggregationCursor.js +4 -4
  3. package/dist/cjs/AggregationCursor.js.map +1 -1
  4. package/dist/cjs/Collection.js +21 -21
  5. package/dist/cjs/Collection.js.map +1 -1
  6. package/dist/cjs/Db.js +2 -2
  7. package/dist/cjs/Db.js.map +1 -1
  8. package/dist/cjs/DocumentAggregationCursor.js +4 -4
  9. package/dist/cjs/DocumentAggregationCursor.js.map +1 -1
  10. package/dist/cjs/DocumentCollection.js +21 -21
  11. package/dist/cjs/DocumentCollection.js.map +1 -1
  12. package/dist/cjs/DocumentFindCursor.js +4 -4
  13. package/dist/cjs/DocumentFindCursor.js.map +1 -1
  14. package/dist/cjs/FindCursor.js +6 -6
  15. package/dist/cjs/FindCursor.js.map +1 -1
  16. package/dist/cjs/ListCollectionsCursor.js +4 -4
  17. package/dist/cjs/ListCollectionsCursor.js.map +1 -1
  18. package/dist/cjs/MongoClient.js +3 -3
  19. package/dist/cjs/MongoClient.js.map +1 -1
  20. package/dist/cjs/internal/mongo-operation.js +18 -0
  21. package/dist/cjs/internal/mongo-operation.js.map +1 -0
  22. package/dist/cjs/internal/tracing.js +49 -0
  23. package/dist/cjs/internal/tracing.js.map +1 -0
  24. package/dist/cjs/internal/version.js +1 -1
  25. package/dist/dts/Collection.d.ts.map +1 -1
  26. package/dist/dts/DocumentCollection.d.ts.map +1 -1
  27. package/dist/dts/MongoClient.d.ts.map +1 -1
  28. package/dist/dts/internal/mongo-operation.d.ts +6 -0
  29. package/dist/dts/internal/mongo-operation.d.ts.map +1 -0
  30. package/dist/dts/internal/tracing.d.ts +6 -0
  31. package/dist/dts/internal/tracing.d.ts.map +1 -0
  32. package/dist/esm/AggregationCursor.js +4 -4
  33. package/dist/esm/AggregationCursor.js.map +1 -1
  34. package/dist/esm/Collection.js +21 -21
  35. package/dist/esm/Collection.js.map +1 -1
  36. package/dist/esm/Db.js +2 -2
  37. package/dist/esm/Db.js.map +1 -1
  38. package/dist/esm/DocumentAggregationCursor.js +4 -4
  39. package/dist/esm/DocumentAggregationCursor.js.map +1 -1
  40. package/dist/esm/DocumentCollection.js +21 -21
  41. package/dist/esm/DocumentCollection.js.map +1 -1
  42. package/dist/esm/DocumentFindCursor.js +4 -4
  43. package/dist/esm/DocumentFindCursor.js.map +1 -1
  44. package/dist/esm/FindCursor.js +6 -6
  45. package/dist/esm/FindCursor.js.map +1 -1
  46. package/dist/esm/ListCollectionsCursor.js +4 -4
  47. package/dist/esm/ListCollectionsCursor.js.map +1 -1
  48. package/dist/esm/MongoClient.js +3 -3
  49. package/dist/esm/MongoClient.js.map +1 -1
  50. package/dist/esm/internal/mongo-operation.js +8 -0
  51. package/dist/esm/internal/mongo-operation.js.map +1 -0
  52. package/dist/esm/internal/tracing.js +39 -0
  53. package/dist/esm/internal/tracing.js.map +1 -0
  54. package/dist/esm/internal/version.js +1 -1
  55. package/package.json +1 -1
  56. package/src/AggregationCursor.ts +4 -4
  57. package/src/Collection.ts +21 -25
  58. package/src/Db.ts +2 -2
  59. package/src/DocumentAggregationCursor.ts +4 -4
  60. package/src/DocumentCollection.ts +22 -26
  61. package/src/DocumentFindCursor.ts +4 -4
  62. package/src/FindCursor.ts +6 -6
  63. package/src/ListCollectionsCursor.ts +4 -4
  64. package/src/MongoClient.ts +3 -5
  65. package/src/internal/mongo-operation.ts +22 -0
  66. package/src/internal/tracing.ts +47 -0
  67. package/src/internal/version.ts +1 -1
@@ -0,0 +1,8 @@
1
+ import * as Effect from "effect/Effect";
2
+ import * as F from "effect/Function";
3
+ import * as Stream from "effect/Stream";
4
+ import { mongoErrorOrDie } from "./mongo-error.js";
5
+ import { withSpan, withSpanStream } from "./tracing.js";
6
+ export const mongoOperation = source => self => F.pipe(self, Effect.catchAllDefect(mongoErrorOrDie(source)), withSpan(source));
7
+ export const mongoStreamOperation = source => self => F.pipe(self, Stream.catchAll(mongoErrorOrDie(source)), withSpanStream(source));
8
+ //# sourceMappingURL=mongo-operation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mongo-operation.js","names":["Effect","F","Stream","mongoErrorOrDie","withSpan","withSpanStream","mongoOperation","source","self","pipe","catchAllDefect","mongoStreamOperation","catchAll"],"sources":["../../../src/internal/mongo-operation.ts"],"sourcesContent":[null],"mappings":"AAAA,OAAO,KAAKA,MAAM,MAAM,eAAe;AACvC,OAAO,KAAKC,CAAC,MAAM,iBAAiB;AACpC,OAAO,KAAKC,MAAM,MAAM,eAAe;AAEvC,SAASC,eAAe,QAAQ,kBAAkB;AAClD,SAASC,QAAQ,EAAEC,cAAc,QAAQ,cAAc;AAEvD,OAAO,MAAMC,cAAc,GACxBC,MAAmB,IAAeC,IAA4B,IAC7DP,CAAC,CAACQ,IAAI,CACJD,IAAI,EACJR,MAAM,CAACU,cAAc,CAACP,eAAe,CAACI,MAAM,CAAC,CAAC,EAC9CH,QAAQ,CAACG,MAAM,CAAC,CACjB;AAEL,OAAO,MAAMI,oBAAoB,GAC9BJ,MAAmB,IAAeC,IAA4B,IAC7DP,CAAC,CAACQ,IAAI,CACJD,IAAI,EACJN,MAAM,CAACU,QAAQ,CAACT,eAAe,CAACI,MAAM,CAAC,CAAC,EACxCF,cAAc,CAACE,MAAM,CAAC,CACvB","ignoreList":[]}
@@ -0,0 +1,39 @@
1
+ import * as Effect from "effect/Effect";
2
+ import * as F from "effect/Function";
3
+ import * as Match from "effect/Match";
4
+ import * as Stream from "effect/Stream";
5
+ export const withSpan = source => self => Effect.withSpan(self, spanName(source), spanOptions(source));
6
+ export const withSpanStream = source => self => Stream.withSpan(self, spanName(source), spanOptions(source));
7
+ const spanName = source => `mongodb.${source.module}.${source.functionName}`;
8
+ const spanOptions = source => ({
9
+ kind: "client",
10
+ captureStackTrace: false,
11
+ attributes: {
12
+ "db.system.name": "mongodb",
13
+ "db.operation.name": source.functionName,
14
+ ...sourceAttributes(source)
15
+ }
16
+ });
17
+ const sourceAttributes = source => F.pipe(Match.value(source), Match.tag("ClientErrorSource", s => serverAttributes(s.hosts)), Match.tag("DbErrorSource", s => ({
18
+ "db.namespace": s.db
19
+ })), Match.tag("CollectionErrorSource", s => ({
20
+ "db.namespace": s.db,
21
+ "db.collection.name": s.collection
22
+ })), Match.exhaustive);
23
+ const serverAttributes = hosts => {
24
+ if (hosts.length !== 1) return {};
25
+ const [address, port] = splitHost(hosts[0]);
26
+ return port === undefined ? {
27
+ "server.address": address
28
+ } : {
29
+ "server.address": address,
30
+ "server.port": port
31
+ };
32
+ };
33
+ const splitHost = host => {
34
+ const separator = host.lastIndexOf(":");
35
+ if (separator === -1) return [host, undefined];
36
+ const port = Number(host.slice(separator + 1));
37
+ return Number.isInteger(port) ? [host.slice(0, separator), port] : [host, undefined];
38
+ };
39
+ //# sourceMappingURL=tracing.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tracing.js","names":["Effect","F","Match","Stream","withSpan","source","self","spanName","spanOptions","withSpanStream","module","functionName","kind","captureStackTrace","attributes","sourceAttributes","pipe","value","tag","s","serverAttributes","hosts","db","collection","exhaustive","length","address","port","splitHost","undefined","host","separator","lastIndexOf","Number","slice","isInteger"],"sources":["../../../src/internal/tracing.ts"],"sourcesContent":[null],"mappings":"AAAA,OAAO,KAAKA,MAAM,MAAM,eAAe;AACvC,OAAO,KAAKC,CAAC,MAAM,iBAAiB;AACpC,OAAO,KAAKC,KAAK,MAAM,cAAc;AACrC,OAAO,KAAKC,MAAM,MAAM,eAAe;AAIvC,OAAO,MAAMC,QAAQ,GAAIC,MAAmB,IAAeC,IAA4B,IACrFN,MAAM,CAACI,QAAQ,CAACE,IAAI,EAAEC,QAAQ,CAACF,MAAM,CAAC,EAAEG,WAAW,CAACH,MAAM,CAAC,CAAC;AAE9D,OAAO,MAAMI,cAAc,GACxBJ,MAAmB,IAAeC,IAA4B,IAC7DH,MAAM,CAACC,QAAQ,CAACE,IAAI,EAAEC,QAAQ,CAACF,MAAM,CAAC,EAAEG,WAAW,CAACH,MAAM,CAAC,CAAC;AAEhE,MAAME,QAAQ,GAAIF,MAAmB,IAAK,WAAWA,MAAM,CAACK,MAAM,IAAIL,MAAM,CAACM,YAAY,EAAE;AAE3F,MAAMH,WAAW,GAAIH,MAAmB,KAA0B;EAChEO,IAAI,EAAE,QAAQ;EACdC,iBAAiB,EAAE,KAAK;EACxBC,UAAU,EAAE;IACV,gBAAgB,EAAE,SAAS;IAC3B,mBAAmB,EAAET,MAAM,CAACM,YAAY;IACxC,GAAGI,gBAAgB,CAACV,MAAM;;CAE7B,CAAC;AAEF,MAAMU,gBAAgB,GAAIV,MAAmB,IAC3CJ,CAAC,CAACe,IAAI,CACJd,KAAK,CAACe,KAAK,CAACZ,MAAM,CAAC,EACnBH,KAAK,CAACgB,GAAG,CAAC,mBAAmB,EAAGC,CAAC,IAAKC,gBAAgB,CAACD,CAAC,CAACE,KAAK,CAAC,CAAC,EAChEnB,KAAK,CAACgB,GAAG,CAAC,eAAe,EAAGC,CAAC,KAAM;EAAE,cAAc,EAAEA,CAAC,CAACG;AAAE,CAAE,CAAC,CAAC,EAC7DpB,KAAK,CAACgB,GAAG,CAAC,uBAAuB,EAAGC,CAAC,KAAM;EAAE,cAAc,EAAEA,CAAC,CAACG,EAAE;EAAE,oBAAoB,EAAEH,CAAC,CAACI;AAAU,CAAE,CAAC,CAAC,EACzGrB,KAAK,CAACsB,UAAU,CACjB;AAEH,MAAMJ,gBAAgB,GAAIC,KAAoB,IAA6B;EACzE,IAAIA,KAAK,CAACI,MAAM,KAAK,CAAC,EAAE,OAAO,EAAE;EACjC,MAAM,CAACC,OAAO,EAAEC,IAAI,CAAC,GAAGC,SAAS,CAACP,KAAK,CAAC,CAAC,CAAC,CAAC;EAC3C,OAAOM,IAAI,KAAKE,SAAS,GAAG;IAAE,gBAAgB,EAAEH;EAAO,CAAE,GAAG;IAAE,gBAAgB,EAAEA,OAAO;IAAE,aAAa,EAAEC;EAAI,CAAE;AAChH,CAAC;AAED,MAAMC,SAAS,GAAIE,IAAY,IAAiD;EAC9E,MAAMC,SAAS,GAAGD,IAAI,CAACE,WAAW,CAAC,GAAG,CAAC;EACvC,IAAID,SAAS,KAAK,CAAC,CAAC,EAAE,OAAO,CAACD,IAAI,EAAED,SAAS,CAAC;EAC9C,MAAMF,IAAI,GAAGM,MAAM,CAACH,IAAI,CAACI,KAAK,CAACH,SAAS,GAAG,CAAC,CAAC,CAAC;EAC9C,OAAOE,MAAM,CAACE,SAAS,CAACR,IAAI,CAAC,GAAG,CAACG,IAAI,CAACI,KAAK,CAAC,CAAC,EAAEH,SAAS,CAAC,EAAEJ,IAAI,CAAC,GAAG,CAACG,IAAI,EAAED,SAAS,CAAC;AACtF,CAAC","ignoreList":[]}
@@ -1,4 +1,4 @@
1
- let moduleVersion = "0.4.1";
1
+ let moduleVersion = "0.5.0";
2
2
  export const getCurrentVersion = () => moduleVersion;
3
3
  export const setCurrentVersion = version => {
4
4
  moduleVersion = version;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "effect-mongodb",
3
- "version": "0.4.1",
3
+ "version": "0.5.0",
4
4
  "description": "A MongoDB toolkit for Effect",
5
5
  "license": "MIT",
6
6
  "repository": {
@@ -10,7 +10,7 @@ import { pipeArguments } from "effect/Pipeable"
10
10
  import * as Schema from "effect/Schema"
11
11
  import * as Stream from "effect/Stream"
12
12
  import type { AggregationCursor as MongoAggregationCursor } from "mongodb"
13
- import { mongoErrorOrDie } from "./internal/mongo-error.js"
13
+ import { mongoOperation, mongoStreamOperation } from "./internal/mongo-operation.js"
14
14
  import * as MongoError from "./MongoError.js"
15
15
 
16
16
  interface AggregationCursorFields<A, I = A, R = never> {
@@ -37,7 +37,7 @@ export const toArray = <A, I, R>(
37
37
  ): Effect.Effect<Array<A>, MongoError.MongoError | ParseResult.ParseError, R> => {
38
38
  const decode = Schema.decodeUnknown(cursor.schema)
39
39
  return Effect.promise(() => cursor.cursor.toArray()).pipe(
40
- Effect.catchAllDefect(mongoErrorOrDie(errorSource(cursor, "toArray"))),
40
+ mongoOperation(errorSource(cursor, "toArray")),
41
41
  Effect.flatMap(Effect.forEach((x) => decode(x)))
42
42
  )
43
43
  }
@@ -48,14 +48,14 @@ export const toStream = <A, I, R>(
48
48
  const decode = Schema.decodeUnknown(cursor.schema)
49
49
  return F.pipe(
50
50
  Stream.fromAsyncIterable(cursor.cursor, F.identity),
51
- Stream.catchAll(mongoErrorOrDie(errorSource(cursor, "toStream"))),
51
+ mongoStreamOperation(errorSource(cursor, "toStream")),
52
52
  Stream.mapEffect((x) => decode(x))
53
53
  )
54
54
  }
55
55
 
56
56
  const errorSource = <A, I, R>(cursor: AggregationCursor<A, I, R>, functionName: string) =>
57
57
  new MongoError.CollectionErrorSource({
58
- module: AggregationCursorImpl.name,
58
+ module: "AggregationCursor",
59
59
  functionName,
60
60
  db: cursor.cursor.namespace.db,
61
61
  collection: cursor.cursor.namespace.collection ?? "NO_COLLECTION_NAME"
package/src/Collection.ts CHANGED
@@ -44,7 +44,7 @@ import type { AnyBulkWriteOperation as AnyBulkWriteOperation_ } from "./internal
44
44
  import { encodeBulkWriteOperation } from "./internal/bulk-write-operation.js"
45
45
  import type { Filter as Filter_ } from "./internal/filter.js"
46
46
  import type { ModifyResult } from "./internal/modify-result.js"
47
- import { mongoErrorOrDie } from "./internal/mongo-error.js"
47
+ import { mongoOperation } from "./internal/mongo-operation.js"
48
48
  import * as SchemaExt from "./internal/schema.js"
49
49
  import * as MongoError from "./MongoError.js"
50
50
 
@@ -119,7 +119,7 @@ export const findOne: {
119
119
  const value = yield* Effect.promise(() => collection.collection.findOne(filter, options))
120
120
  return yield* SchemaExt.decodeNullableDocument(collection.schema, value)
121
121
  }).pipe(
122
- Effect.catchAllDefect(mongoErrorOrDie(errorSource(collection, "findOne")))
122
+ mongoOperation(errorSource(collection, "findOne"))
123
123
  )
124
124
  )
125
125
 
@@ -140,7 +140,7 @@ export const insertOne: {
140
140
  F.pipe(
141
141
  collection.encode(doc),
142
142
  Effect.flatMap((doc) => Effect.promise(() => collection.collection.insertOne(doc, options))),
143
- Effect.catchAllDefect(mongoErrorOrDie(errorSource(collection, "insertOne")))
143
+ mongoOperation(errorSource(collection, "insertOne"))
144
144
  ))
145
145
 
146
146
  export const insertMany: {
@@ -161,7 +161,7 @@ export const insertMany: {
161
161
  docs,
162
162
  Effect.forEach((doc) => collection.encode(doc)),
163
163
  Effect.flatMap((docs) => Effect.promise(() => collection.collection.insertMany(docs, options))),
164
- Effect.catchAllDefect(mongoErrorOrDie(errorSource(collection, "insertMany")))
164
+ mongoOperation(errorSource(collection, "insertMany"))
165
165
  )
166
166
  })
167
167
 
@@ -182,7 +182,7 @@ export const deleteOne: {
182
182
  options?: DeleteOptions
183
183
  ): Effect.Effect<DeleteResult, MongoError.MongoError, R> =>
184
184
  Effect.promise(() => collection.collection.deleteOne(filter, options)).pipe(
185
- Effect.catchAllDefect(mongoErrorOrDie(errorSource(collection, "deleteOne")))
185
+ mongoOperation(errorSource(collection, "deleteOne"))
186
186
  )
187
187
  )
188
188
 
@@ -203,7 +203,7 @@ export const deleteMany: {
203
203
  options?: DeleteOptions
204
204
  ): Effect.Effect<DeleteResult, MongoError.MongoError, R> =>
205
205
  Effect.promise(() => collection.collection.deleteMany(filter, options)).pipe(
206
- Effect.catchAllDefect(mongoErrorOrDie(errorSource(collection, "deleteMany")))
206
+ mongoOperation(errorSource(collection, "deleteMany"))
207
207
  )
208
208
  )
209
209
 
@@ -235,7 +235,7 @@ export const updateOne: {
235
235
  Array.isArray(update) ? [...update] : update as UpdateFilter<Document>,
236
236
  options
237
237
  )
238
- ).pipe(Effect.catchAllDefect(mongoErrorOrDie(errorSource(collection, "updateOne"))))
238
+ ).pipe(mongoOperation(errorSource(collection, "updateOne")))
239
239
  )
240
240
 
241
241
  export const updateMany: {
@@ -266,7 +266,7 @@ export const updateMany: {
266
266
  Array.isArray(update) ? [...update] : update as UpdateFilter<Document>,
267
267
  options
268
268
  )
269
- ).pipe(Effect.catchAllDefect(mongoErrorOrDie(errorSource(collection, "updateMany"))))
269
+ ).pipe(mongoOperation(errorSource(collection, "updateMany")))
270
270
  )
271
271
 
272
272
  export const replaceOne: {
@@ -300,7 +300,7 @@ export const replaceOne: {
300
300
  Effect.flatMap((replacement) =>
301
301
  Effect.promise(() => collection.collection.replaceOne(filter, replacement, options))
302
302
  ),
303
- Effect.catchAllDefect(mongoErrorOrDie(errorSource(collection, "replaceOne")))
303
+ mongoOperation(errorSource(collection, "replaceOne"))
304
304
  )
305
305
  )
306
306
 
@@ -371,9 +371,7 @@ export const findOneAndReplace: {
371
371
  return yield* SchemaExt.decodeNullableDocument(collection.schema, value)
372
372
  })
373
373
  ),
374
- Effect.catchAllDefect(
375
- mongoErrorOrDie(errorSource(collection, "findOneAndReplace"))
376
- )
374
+ mongoOperation(errorSource(collection, "findOneAndReplace"))
377
375
  )
378
376
  )
379
377
 
@@ -455,9 +453,7 @@ export const findOneAndUpdate: {
455
453
  return yield* SchemaExt.decodeNullableDocument(collection.schema, value)
456
454
  })
457
455
  ),
458
- Effect.catchAllDefect(
459
- mongoErrorOrDie(errorSource(collection, "findOneAndUpdate"))
460
- )
456
+ mongoOperation(errorSource(collection, "findOneAndUpdate"))
461
457
  )
462
458
  )
463
459
 
@@ -482,7 +478,7 @@ export const rename: {
482
478
  Effect.map((newCollection) =>
483
479
  new CollectionImpl<A, I, R>({ collection: newCollection, schema: collection.schema })
484
480
  ),
485
- Effect.catchAllDefect(mongoErrorOrDie(errorSource(collection, "rename")))
481
+ mongoOperation(errorSource(collection, "rename"))
486
482
  )
487
483
  )
488
484
 
@@ -502,7 +498,7 @@ export const drop: {
502
498
  ): Effect.Effect<boolean, MongoError.MongoError, R> =>
503
499
  F.pipe(
504
500
  Effect.promise(() => collection.collection.drop(options)),
505
- Effect.catchAllDefect(mongoErrorOrDie(errorSource(collection, "drop")))
501
+ mongoOperation(errorSource(collection, "drop"))
506
502
  )
507
503
  )
508
504
 
@@ -527,7 +523,7 @@ export const createIndexes: {
527
523
  ): Effect.Effect<Array<string>, MongoError.MongoError, R> =>
528
524
  F.pipe(
529
525
  Effect.promise(() => collection.collection.createIndexes([...indexSpecs], options)),
530
- Effect.catchAllDefect(mongoErrorOrDie(errorSource(collection, "createIndexes")))
526
+ mongoOperation(errorSource(collection, "createIndexes"))
531
527
  )
532
528
  )
533
529
 
@@ -549,7 +545,7 @@ export const createIndex: {
549
545
  ): Effect.Effect<string, MongoError.MongoError, R> =>
550
546
  F.pipe(
551
547
  Effect.promise(() => collection.collection.createIndex(indexSpec, options)),
552
- Effect.catchAllDefect(mongoErrorOrDie(errorSource(collection, "createIndex")))
548
+ mongoOperation(errorSource(collection, "createIndex"))
553
549
  )
554
550
  )
555
551
 
@@ -571,7 +567,7 @@ export const dropIndex: {
571
567
  ): Effect.Effect<Document, MongoError.MongoError, R> =>
572
568
  F.pipe(
573
569
  Effect.promise(() => collection.collection.dropIndex(indexName, options)),
574
- Effect.catchAllDefect(mongoErrorOrDie(errorSource(collection, "dropIndex")))
570
+ mongoOperation(errorSource(collection, "dropIndex"))
575
571
  )
576
572
  )
577
573
 
@@ -591,7 +587,7 @@ export const dropIndexes: {
591
587
  ): Effect.Effect<boolean, MongoError.MongoError, R> =>
592
588
  F.pipe(
593
589
  Effect.promise(() => collection.collection.dropIndexes(options)),
594
- Effect.catchAllDefect(mongoErrorOrDie(errorSource(collection, "dropIndexes")))
590
+ mongoOperation(errorSource(collection, "dropIndexes"))
595
591
  )
596
592
  )
597
593
 
@@ -639,7 +635,7 @@ export const estimatedDocumentCount: {
639
635
  ): Effect.Effect<number, MongoError.MongoError, R> =>
640
636
  F.pipe(
641
637
  Effect.promise(() => collection.collection.estimatedDocumentCount(options)),
642
- Effect.catchAllDefect(mongoErrorOrDie(errorSource(collection, "estimatedDocumentCount")))
638
+ mongoOperation(errorSource(collection, "estimatedDocumentCount"))
643
639
  )
644
640
  )
645
641
 
@@ -661,7 +657,7 @@ export const countDocuments: {
661
657
  ): Effect.Effect<number, MongoError.MongoError, R> =>
662
658
  F.pipe(
663
659
  Effect.promise(() => collection.collection.countDocuments(filter, options)),
664
- Effect.catchAllDefect(mongoErrorOrDie(errorSource(collection, "countDocuments")))
660
+ mongoOperation(errorSource(collection, "countDocuments"))
665
661
  )
666
662
  )
667
663
 
@@ -688,7 +684,7 @@ export const bulkWrite: {
688
684
  operations,
689
685
  Effect.forEach((op) => encodeBulkWriteOperation(collection.schema, op)),
690
686
  Effect.flatMap((operations) => Effect.promise(() => collection.collection.bulkWrite(operations, options))),
691
- Effect.catchAllDefect(mongoErrorOrDie(errorSource(collection, "bulkWrite")))
687
+ mongoOperation(errorSource(collection, "bulkWrite"))
692
688
  )
693
689
  )
694
690
 
@@ -699,7 +695,7 @@ const errorSource = <A extends Document, I extends Document = A, R = never>(
699
695
  functionName: string
700
696
  ) =>
701
697
  new MongoError.CollectionErrorSource({
702
- module: CollectionImpl.name,
698
+ module: "Collection",
703
699
  functionName,
704
700
  db: collection.collection.dbName,
705
701
  collection: collection.collection.collectionName
package/src/Db.ts CHANGED
@@ -8,7 +8,7 @@ import type * as Schema from "effect/Schema"
8
8
  import type { Db as Db_, Document, DropCollectionOptions, ListCollectionsOptions } from "mongodb"
9
9
  import type * as Collection from "./Collection.js"
10
10
  import * as DocumentCollection from "./DocumentCollection.js"
11
- import { mongoErrorOrDie } from "./internal/mongo-error.js"
11
+ import { mongoOperation } from "./internal/mongo-operation.js"
12
12
  import * as ListCollectionsCursor from "./ListCollectionsCursor.js"
13
13
  import * as MongoError from "./MongoError.js"
14
14
 
@@ -82,7 +82,7 @@ export const dropCollection: {
82
82
  (db: Db, name: string, options?: DropCollectionOptions): Effect.Effect<boolean, MongoError.MongoError> =>
83
83
  F.pipe(
84
84
  Effect.promise(() => db.db.dropCollection(name, options)),
85
- Effect.catchAllDefect(mongoErrorOrDie(errorSource(db, "dropCollection")))
85
+ mongoOperation(errorSource(db, "dropCollection"))
86
86
  )
87
87
  )
88
88
 
@@ -8,7 +8,7 @@ import type { Pipeable } from "effect/Pipeable"
8
8
  import { pipeArguments } from "effect/Pipeable"
9
9
  import * as Stream from "effect/Stream"
10
10
  import type { AggregationCursor as MongoAggregationCursor, Document } from "mongodb"
11
- import { mongoErrorOrDie } from "./internal/mongo-error.js"
11
+ import { mongoOperation, mongoStreamOperation } from "./internal/mongo-operation.js"
12
12
  import * as MongoError from "./MongoError.js"
13
13
 
14
14
  type DocumentAggregationCursorFields = { cursor: MongoAggregationCursor<Document> }
@@ -32,7 +32,7 @@ export const toArray = (
32
32
  ): Effect.Effect<Array<Document>, MongoError.MongoError> =>
33
33
  F.pipe(
34
34
  Effect.promise(() => cursor.cursor.toArray()),
35
- Effect.catchAllDefect(mongoErrorOrDie(errorSource(cursor, "toArray")))
35
+ mongoOperation(errorSource(cursor, "toArray"))
36
36
  )
37
37
 
38
38
  export const toStream = (
@@ -40,12 +40,12 @@ export const toStream = (
40
40
  ): Stream.Stream<Document, MongoError.MongoError> =>
41
41
  F.pipe(
42
42
  Stream.fromAsyncIterable(cursor.cursor, F.identity),
43
- Stream.catchAll(mongoErrorOrDie(errorSource(cursor, "toStream")))
43
+ mongoStreamOperation(errorSource(cursor, "toStream"))
44
44
  )
45
45
 
46
46
  const errorSource = (cursor: DocumentAggregationCursor, functionName: string) =>
47
47
  new MongoError.CollectionErrorSource({
48
- module: DocumentAggregationCursorImpl.name,
48
+ module: "DocumentAggregationCursor",
49
49
  functionName,
50
50
  db: cursor.cursor.namespace.db,
51
51
  collection: cursor.cursor.namespace.collection ?? "NO_COLLECTION_NAME"
@@ -45,7 +45,7 @@ import * as Collection from "./Collection.js"
45
45
  import * as DocumentAggregationCursor from "./DocumentAggregationCursor.js"
46
46
  import * as DocumentFindCursor from "./DocumentFindCursor.js"
47
47
  import type { ModifyResult } from "./internal/modify-result.js"
48
- import { mongoErrorOrDie } from "./internal/mongo-error.js"
48
+ import { mongoOperation } from "./internal/mongo-operation.js"
49
49
  import * as MongoError from "./MongoError.js"
50
50
 
51
51
  type DocumentCollectionFields = {
@@ -104,7 +104,7 @@ export const findOne: {
104
104
  F.pipe(
105
105
  Effect.promise(() => collection.collection.findOne(filter, options)),
106
106
  Effect.map((value) => O.fromNullable(value)),
107
- Effect.catchAllDefect(mongoErrorOrDie(errorSource(collection, "findOne")))
107
+ mongoOperation(errorSource(collection, "findOne"))
108
108
  )
109
109
  )
110
110
 
@@ -128,7 +128,7 @@ export const insertOne: {
128
128
  ): Effect.Effect<InsertOneResult, MongoError.MongoError> =>
129
129
  F.pipe(
130
130
  Effect.promise(() => collection.collection.insertOne(doc, options)),
131
- Effect.catchAllDefect(mongoErrorOrDie(errorSource(collection, "insertOne")))
131
+ mongoOperation(errorSource(collection, "insertOne"))
132
132
  ))
133
133
 
134
134
  export const insertMany: {
@@ -150,7 +150,7 @@ export const insertMany: {
150
150
  ): Effect.Effect<InsertManyResult, MongoError.MongoError> =>
151
151
  F.pipe(
152
152
  Effect.promise(() => collection.collection.insertMany(docs, options)),
153
- Effect.catchAllDefect(mongoErrorOrDie(errorSource(collection, "insertMany")))
153
+ mongoOperation(errorSource(collection, "insertMany"))
154
154
  ))
155
155
 
156
156
  export const deleteOne: {
@@ -171,7 +171,7 @@ export const deleteOne: {
171
171
  ): Effect.Effect<DeleteResult, MongoError.MongoError> =>
172
172
  F.pipe(
173
173
  Effect.promise(() => collection.collection.deleteOne(filter, options)),
174
- Effect.catchAllDefect(mongoErrorOrDie(errorSource(collection, "deleteOne")))
174
+ mongoOperation(errorSource(collection, "deleteOne"))
175
175
  )
176
176
  )
177
177
 
@@ -193,7 +193,7 @@ export const deleteMany: {
193
193
  ): Effect.Effect<DeleteResult, MongoError.MongoError> =>
194
194
  F.pipe(
195
195
  Effect.promise(() => collection.collection.deleteMany(filter, options)),
196
- Effect.catchAllDefect(mongoErrorOrDie(errorSource(collection, "deleteMany")))
196
+ mongoOperation(errorSource(collection, "deleteMany"))
197
197
  )
198
198
  )
199
199
 
@@ -223,7 +223,7 @@ export const updateOne: {
223
223
  Effect.promise(() =>
224
224
  collection.collection.updateOne(filter, Array.isArray(update) ? [...update] : update, options)
225
225
  ),
226
- Effect.catchAllDefect(mongoErrorOrDie(errorSource(collection, "updateOne")))
226
+ mongoOperation(errorSource(collection, "updateOne"))
227
227
  )
228
228
  )
229
229
 
@@ -253,7 +253,7 @@ export const updateMany: {
253
253
  Effect.promise(() =>
254
254
  collection.collection.updateMany(filter, Array.isArray(update) ? [...update] : update, options)
255
255
  ),
256
- Effect.catchAllDefect(mongoErrorOrDie(errorSource(collection, "updateMany")))
256
+ mongoOperation(errorSource(collection, "updateMany"))
257
257
  )
258
258
  )
259
259
 
@@ -281,7 +281,7 @@ export const replaceOne: {
281
281
  ): Effect.Effect<UpdateResult | Document, MongoError.MongoError> =>
282
282
  F.pipe(
283
283
  Effect.promise(() => collection.collection.replaceOne(filter, replacement, options)),
284
- Effect.catchAllDefect(mongoErrorOrDie(errorSource(collection, "replaceOne")))
284
+ mongoOperation(errorSource(collection, "replaceOne"))
285
285
  )
286
286
  )
287
287
 
@@ -350,9 +350,7 @@ export const findOneAndReplace: {
350
350
  }
351
351
  return O.fromNullable(value)
352
352
  }),
353
- Effect.catchAllDefect(
354
- mongoErrorOrDie(errorSource(collection, "findOneAndReplace"))
355
- )
353
+ mongoOperation(errorSource(collection, "findOneAndReplace"))
356
354
  )
357
355
  )
358
356
 
@@ -427,9 +425,7 @@ export const findOneAndUpdate: {
427
425
  }
428
426
  return O.fromNullable(value)
429
427
  }),
430
- Effect.catchAllDefect(
431
- mongoErrorOrDie(errorSource(collection, "findOneAndUpdate"))
432
- )
428
+ mongoOperation(errorSource(collection, "findOneAndUpdate"))
433
429
  )
434
430
  )
435
431
 
@@ -452,7 +448,7 @@ export const rename: {
452
448
  F.pipe(
453
449
  Effect.promise(() => collection.collection.rename(newName, options)),
454
450
  Effect.map((collection) => new DocumentCollectionImpl({ collection })),
455
- Effect.catchAllDefect(mongoErrorOrDie(errorSource(collection, "rename")))
451
+ mongoOperation(errorSource(collection, "rename"))
456
452
  )
457
453
  )
458
454
 
@@ -467,7 +463,7 @@ export const drop: {
467
463
  ): Effect.Effect<boolean, MongoError.MongoError> =>
468
464
  F.pipe(
469
465
  Effect.promise(() => collection.collection.drop(options)),
470
- Effect.catchAllDefect(mongoErrorOrDie(errorSource(collection, "drop")))
466
+ mongoOperation(errorSource(collection, "drop"))
471
467
  )
472
468
  )
473
469
 
@@ -489,7 +485,7 @@ export const createIndexes: {
489
485
  ): Effect.Effect<Array<string>, MongoError.MongoError> =>
490
486
  F.pipe(
491
487
  Effect.promise(() => collection.collection.createIndexes([...indexSpecs], options)),
492
- Effect.catchAllDefect(mongoErrorOrDie(errorSource(collection, "createIndexes")))
488
+ mongoOperation(errorSource(collection, "createIndexes"))
493
489
  )
494
490
  )
495
491
 
@@ -512,7 +508,7 @@ export const createIndex: {
512
508
  ): Effect.Effect<string, MongoError.MongoError> =>
513
509
  F.pipe(
514
510
  Effect.promise(() => collection.collection.createIndex(indexSpec, options)),
515
- Effect.catchAllDefect(mongoErrorOrDie(errorSource(collection, "createIndex")))
511
+ mongoOperation(errorSource(collection, "createIndex"))
516
512
  )
517
513
  )
518
514
 
@@ -535,7 +531,7 @@ export const dropIndex: {
535
531
  ): Effect.Effect<Document, MongoError.MongoError> =>
536
532
  F.pipe(
537
533
  Effect.promise(() => collection.collection.dropIndex(indexName, options)),
538
- Effect.catchAllDefect(mongoErrorOrDie(errorSource(collection, "dropIndex")))
534
+ mongoOperation(errorSource(collection, "dropIndex"))
539
535
  )
540
536
  )
541
537
 
@@ -555,7 +551,7 @@ export const dropIndexes: {
555
551
  ): Effect.Effect<boolean, MongoError.MongoError> =>
556
552
  F.pipe(
557
553
  Effect.promise(() => collection.collection.dropIndexes(options)),
558
- Effect.catchAllDefect(mongoErrorOrDie(errorSource(collection, "dropIndexes")))
554
+ mongoOperation(errorSource(collection, "dropIndexes"))
559
555
  )
560
556
  )
561
557
 
@@ -596,7 +592,7 @@ export const estimatedDocumentCount: {
596
592
  ): Effect.Effect<number, MongoError.MongoError> =>
597
593
  F.pipe(
598
594
  Effect.promise(() => collection.collection.estimatedDocumentCount(options)),
599
- Effect.catchAllDefect(mongoErrorOrDie(errorSource(collection, "estimatedDocumentCount")))
595
+ mongoOperation(errorSource(collection, "estimatedDocumentCount"))
600
596
  )
601
597
  )
602
598
 
@@ -618,7 +614,7 @@ export const countDocuments: {
618
614
  ): Effect.Effect<number, MongoError.MongoError> =>
619
615
  F.pipe(
620
616
  Effect.promise(() => collection.collection.countDocuments(filter, options)),
621
- Effect.catchAllDefect(mongoErrorOrDie(errorSource(collection, "countDocuments")))
617
+ mongoOperation(errorSource(collection, "countDocuments"))
622
618
  )
623
619
  )
624
620
 
@@ -653,8 +649,8 @@ export const bulkWrite: {
653
649
  operations: ReadonlyArray<AnyBulkWriteOperation<Document>>,
654
650
  options?: BulkWriteOptions
655
651
  ): Effect.Effect<BulkWriteResult, MongoError.MongoError> =>
656
- Effect.tryPromise(() => collection.collection.bulkWrite(operations, options)).pipe(
657
- Effect.catchAll(mongoErrorOrDie(errorSource(collection, "bulkWrite")))
652
+ Effect.promise(() => collection.collection.bulkWrite(operations, options)).pipe(
653
+ mongoOperation(errorSource(collection, "bulkWrite"))
658
654
  )
659
655
  )
660
656
 
@@ -665,7 +661,7 @@ const errorSource = (
665
661
  functionName: string
666
662
  ) =>
667
663
  new MongoError.CollectionErrorSource({
668
- module: DocumentCollectionImpl.name,
664
+ module: "DocumentCollection",
669
665
  functionName,
670
666
  db: collection.collection.dbName,
671
667
  collection: collection.collection.collectionName
@@ -10,7 +10,7 @@ import type * as Schema from "effect/Schema"
10
10
  import * as Stream from "effect/Stream"
11
11
  import type { Document, Filter, FindCursor as MongoFindCursor, Sort, SortDirection } from "mongodb"
12
12
  import * as FindCursor from "./FindCursor.js"
13
- import { mongoErrorOrDie } from "./internal/mongo-error.js"
13
+ import { mongoOperation, mongoStreamOperation } from "./internal/mongo-operation.js"
14
14
  import * as MongoError from "./MongoError.js"
15
15
 
16
16
  type DocumentFindCursorFields = {
@@ -69,7 +69,7 @@ export const limit: {
69
69
  export const toArray = (cursor: DocumentFindCursor): Effect.Effect<Array<Document>, MongoError.MongoError> =>
70
70
  F.pipe(
71
71
  Effect.promise(() => cursor.cursor.toArray()),
72
- Effect.catchAllDefect(mongoErrorOrDie(errorSource(cursor, "toArray")))
72
+ mongoOperation(errorSource(cursor, "toArray"))
73
73
  )
74
74
 
75
75
  export const toStream = (
@@ -77,7 +77,7 @@ export const toStream = (
77
77
  ): Stream.Stream<Document, MongoError.MongoError> =>
78
78
  F.pipe(
79
79
  Stream.fromAsyncIterable(cursor.cursor, F.identity),
80
- Stream.catchAll(mongoErrorOrDie(errorSource(cursor, "toStream")))
80
+ mongoStreamOperation(errorSource(cursor, "toStream"))
81
81
  )
82
82
 
83
83
  export const typed: {
@@ -92,7 +92,7 @@ const isDocumentFindCursor = (x: unknown) => x instanceof DocumentFindCursorImpl
92
92
 
93
93
  const errorSource = (cursor: DocumentFindCursor, functionName: string) =>
94
94
  new MongoError.CollectionErrorSource({
95
- module: DocumentFindCursorImpl.name,
95
+ module: "DocumentFindCursor",
96
96
  functionName,
97
97
  db: cursor.cursor.namespace.db,
98
98
  collection: cursor.cursor.namespace.collection ?? "NO_COLLECTION_NAME"
package/src/FindCursor.ts CHANGED
@@ -13,7 +13,7 @@ import * as Stream from "effect/Stream"
13
13
  import * as Tuple from "effect/Tuple"
14
14
  import type { Document, FindCursor as FindCursor_, Sort, SortDirection } from "mongodb"
15
15
  import type { Filter as Filter_ } from "./internal/filter.js"
16
- import { mongoErrorOrDie } from "./internal/mongo-error.js"
16
+ import { mongoOperation, mongoStreamOperation } from "./internal/mongo-operation.js"
17
17
  import * as MongoError from "./MongoError.js"
18
18
 
19
19
  type FindCursorFields<A, I = A, R = never> = {
@@ -96,7 +96,7 @@ export const toArray = <A, I, R>(
96
96
  ): Effect.Effect<Array<A>, MongoError.MongoError | ParseResult.ParseError, R> => {
97
97
  const decode = Schema.decodeUnknown(cursor.schema)
98
98
  return Effect.promise(() => cursor.cursor.toArray()).pipe(
99
- Effect.catchAllDefect(mongoErrorOrDie(errorSource(cursor, "toArray"))),
99
+ mongoOperation(errorSource(cursor, "toArray")),
100
100
  Effect.flatMap(Effect.forEach((x) => decode(x)))
101
101
  )
102
102
  }
@@ -110,7 +110,7 @@ export const toArrayEither = <A, I, R>(
110
110
  > => {
111
111
  const decode = Schema.decodeUnknown(cursor.schema)
112
112
  return Effect.promise(() => cursor.cursor.toArray()).pipe(
113
- Effect.catchAllDefect(mongoErrorOrDie(errorSource(cursor, "toArrayEither"))),
113
+ mongoOperation(errorSource(cursor, "toArrayEither")),
114
114
  Effect.flatMap(Effect.forEach((x) =>
115
115
  F.pipe(
116
116
  decode(x),
@@ -127,7 +127,7 @@ export const toStream = <A, I, R>(
127
127
  const decode = Schema.decodeUnknown(cursor.schema)
128
128
  return F.pipe(
129
129
  Stream.fromAsyncIterable(cursor.cursor, F.identity),
130
- Stream.catchAll(mongoErrorOrDie(errorSource(cursor, "toStream"))),
130
+ mongoStreamOperation(errorSource(cursor, "toStream")),
131
131
  Stream.mapEffect((x) => decode(x))
132
132
  )
133
133
  }
@@ -138,7 +138,7 @@ export const toStreamEither = <A, I, R>(
138
138
  const decode = Schema.decodeUnknown(cursor.schema)
139
139
  return F.pipe(
140
140
  Stream.fromAsyncIterable(cursor.cursor, F.identity),
141
- Stream.catchAll(mongoErrorOrDie(errorSource(cursor, "toStreamEither"))),
141
+ mongoStreamOperation(errorSource(cursor, "toStreamEither")),
142
142
  Stream.mapEffect((x) =>
143
143
  F.pipe(
144
144
  // keep new line
@@ -154,7 +154,7 @@ const isFindCursor = (x: unknown): x is FindCursor<unknown> => x instanceof Find
154
154
 
155
155
  const errorSource = <A, I, R>(cursor: FindCursor<A, I, R>, functionName: string) =>
156
156
  new MongoError.CollectionErrorSource({
157
- module: FindCursorImpl.name,
157
+ module: "FindCursor",
158
158
  functionName,
159
159
  db: cursor.cursor.namespace.db,
160
160
  collection: cursor.cursor.namespace.collection ?? "NO_COLLECTION_NAME"
@@ -11,7 +11,7 @@ import type {
11
11
  CollectionInfo as MongoCollectionInfo,
12
12
  ListCollectionsCursor as MongoListCollectionsCursor
13
13
  } from "mongodb"
14
- import { mongoErrorOrDie } from "./internal/mongo-error.js"
14
+ import { mongoOperation, mongoStreamOperation } from "./internal/mongo-operation.js"
15
15
  import * as MongoError from "./MongoError.js"
16
16
 
17
17
  export type NameOnlyCollectionInfo = Pick<MongoCollectionInfo, "name" | "type">
@@ -49,7 +49,7 @@ export const toArray = <T extends DefaultCollectionInfo>(
49
49
  ): Effect.Effect<Array<T>, MongoError.MongoError> =>
50
50
  F.pipe(
51
51
  Effect.promise(() => cursor.cursor.toArray()),
52
- Effect.catchAllDefect(mongoErrorOrDie(errorSource(cursor, "toArray")))
52
+ mongoOperation(errorSource(cursor, "toArray"))
53
53
  )
54
54
 
55
55
  export const toStream = <T extends DefaultCollectionInfo>(
@@ -57,12 +57,12 @@ export const toStream = <T extends DefaultCollectionInfo>(
57
57
  ): Stream.Stream<T, MongoError.MongoError> =>
58
58
  F.pipe(
59
59
  Stream.fromAsyncIterable(cursor.cursor, F.identity),
60
- Stream.catchAll(mongoErrorOrDie(errorSource(cursor, "toStream")))
60
+ mongoStreamOperation(errorSource(cursor, "toStream"))
61
61
  )
62
62
 
63
63
  const errorSource = (cursor: ListCollectionsCursor, functionName: string) =>
64
64
  new MongoError.CollectionErrorSource({
65
- module: ListCollectionsCursorImpl.name,
65
+ module: "ListCollectionsCursor",
66
66
  functionName,
67
67
  db: cursor.cursor.namespace.db,
68
68
  collection: cursor.cursor.namespace.collection ?? "NO_COLLECTION_NAME"