effect-mongodb 0.1.2 → 0.1.4

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 (85) hide show
  1. package/README.md +25 -19
  2. package/dist/cjs/AggregationCursor.js +18 -8
  3. package/dist/cjs/AggregationCursor.js.map +1 -1
  4. package/dist/cjs/Collection.js +40 -29
  5. package/dist/cjs/Collection.js.map +1 -1
  6. package/dist/cjs/Db.js +9 -3
  7. package/dist/cjs/Db.js.map +1 -1
  8. package/dist/cjs/DocumentAggregationCursor.js +18 -8
  9. package/dist/cjs/DocumentAggregationCursor.js.map +1 -1
  10. package/dist/cjs/DocumentCollection.js +36 -24
  11. package/dist/cjs/DocumentCollection.js.map +1 -1
  12. package/dist/cjs/DocumentFindCursor.js +24 -14
  13. package/dist/cjs/DocumentFindCursor.js.map +1 -1
  14. package/dist/cjs/FindCursor.js +25 -18
  15. package/dist/cjs/FindCursor.js.map +1 -1
  16. package/dist/cjs/ListCollectionsCursor.js +18 -8
  17. package/dist/cjs/ListCollectionsCursor.js.map +1 -1
  18. package/dist/cjs/MongoClient.js +8 -2
  19. package/dist/cjs/MongoClient.js.map +1 -1
  20. package/dist/cjs/MongoError.js +7 -18
  21. package/dist/cjs/MongoError.js.map +1 -1
  22. package/dist/cjs/internal/mongo-error.js +27 -0
  23. package/dist/cjs/internal/mongo-error.js.map +1 -0
  24. package/dist/cjs/internal/schema.js +2 -2
  25. package/dist/cjs/internal/schema.js.map +1 -1
  26. package/dist/cjs/internal/version.js +1 -1
  27. package/dist/dts/AggregationCursor.d.ts +5 -5
  28. package/dist/dts/AggregationCursor.d.ts.map +1 -1
  29. package/dist/dts/Collection.d.ts +17 -18
  30. package/dist/dts/Collection.d.ts.map +1 -1
  31. package/dist/dts/Db.d.ts.map +1 -1
  32. package/dist/dts/DocumentAggregationCursor.d.ts +5 -5
  33. package/dist/dts/DocumentAggregationCursor.d.ts.map +1 -1
  34. package/dist/dts/DocumentCollection.d.ts +7 -7
  35. package/dist/dts/DocumentCollection.d.ts.map +1 -1
  36. package/dist/dts/DocumentFindCursor.d.ts +5 -5
  37. package/dist/dts/DocumentFindCursor.d.ts.map +1 -1
  38. package/dist/dts/FindCursor.d.ts +5 -5
  39. package/dist/dts/FindCursor.d.ts.map +1 -1
  40. package/dist/dts/ListCollectionsCursor.d.ts +5 -5
  41. package/dist/dts/ListCollectionsCursor.d.ts.map +1 -1
  42. package/dist/dts/MongoClient.d.ts.map +1 -1
  43. package/dist/dts/MongoError.d.ts +32 -12
  44. package/dist/dts/MongoError.d.ts.map +1 -1
  45. package/dist/dts/internal/mongo-error.d.ts +5 -0
  46. package/dist/dts/internal/mongo-error.d.ts.map +1 -0
  47. package/dist/esm/AggregationCursor.js +16 -6
  48. package/dist/esm/AggregationCursor.js.map +1 -1
  49. package/dist/esm/Collection.js +38 -27
  50. package/dist/esm/Collection.js.map +1 -1
  51. package/dist/esm/Db.js +9 -3
  52. package/dist/esm/Db.js.map +1 -1
  53. package/dist/esm/DocumentAggregationCursor.js +16 -6
  54. package/dist/esm/DocumentAggregationCursor.js.map +1 -1
  55. package/dist/esm/DocumentCollection.js +34 -22
  56. package/dist/esm/DocumentCollection.js.map +1 -1
  57. package/dist/esm/DocumentFindCursor.js +22 -12
  58. package/dist/esm/DocumentFindCursor.js.map +1 -1
  59. package/dist/esm/FindCursor.js +23 -16
  60. package/dist/esm/FindCursor.js.map +1 -1
  61. package/dist/esm/ListCollectionsCursor.js +16 -6
  62. package/dist/esm/ListCollectionsCursor.js.map +1 -1
  63. package/dist/esm/MongoClient.js +8 -2
  64. package/dist/esm/MongoClient.js.map +1 -1
  65. package/dist/esm/MongoError.js +3 -17
  66. package/dist/esm/MongoError.js.map +1 -1
  67. package/dist/esm/internal/mongo-error.js +18 -0
  68. package/dist/esm/internal/mongo-error.js.map +1 -0
  69. package/dist/esm/internal/schema.js +2 -2
  70. package/dist/esm/internal/schema.js.map +1 -1
  71. package/dist/esm/internal/version.js +1 -1
  72. package/package.json +1 -1
  73. package/src/AggregationCursor.ts +31 -6
  74. package/src/Collection.ts +80 -50
  75. package/src/Db.ts +7 -3
  76. package/src/DocumentAggregationCursor.ts +27 -5
  77. package/src/DocumentCollection.ts +52 -27
  78. package/src/DocumentFindCursor.ts +34 -11
  79. package/src/FindCursor.ts +36 -13
  80. package/src/ListCollectionsCursor.ts +31 -7
  81. package/src/MongoClient.ts +6 -2
  82. package/src/MongoError.ts +24 -32
  83. package/src/internal/mongo-error.ts +34 -0
  84. package/src/internal/schema.ts +2 -2
  85. package/src/internal/version.ts +1 -1
package/src/MongoError.ts CHANGED
@@ -2,39 +2,31 @@
2
2
  * @since 0.0.1
3
3
  */
4
4
  import * as Data from "effect/Data"
5
- import * as Effect from "effect/Effect"
6
- import * as F from "effect/Function"
7
- import * as Match from "effect/Match"
8
- import * as Stream from "effect/Stream"
9
- import { MongoError as MongoError_ } from "mongodb"
5
+ import type { MongoError as MongoError_ } from "mongodb"
10
6
 
11
- export class MongoError extends Data.TaggedError("MongoError")<{
12
- message: string
13
- innerError: MongoError_
7
+ export class ClientErrorSource extends Data.TaggedClass("ClientErrorSource")<{
8
+ module: string
9
+ functionName: string
10
+ hosts: Array<string>
14
11
  }> {}
15
12
 
16
- export const mongoErrorDie: {
17
- <A>(message: string): (error: unknown) => Effect.Effect<A, MongoError>
18
- <A>(error: unknown, message: string): Effect.Effect<A, MongoError>
19
- } = F.dual(2, <A>(error: unknown, message: string): Effect.Effect<A, MongoError> =>
20
- F.pipe(
21
- Match.value(error),
22
- Match.when(Match.instanceOf(MongoError_), (innerError) => Effect.fail(new MongoError({ message, innerError }))),
23
- Match.orElse((cause) =>
24
- Effect.die(
25
- new Error(message, {
26
- cause
27
- })
28
- )
29
- )
30
- ))
13
+ export class DbErrorSource extends Data.TaggedClass("DbErrorSource")<{
14
+ module: string
15
+ functionName: string
16
+ db: string
17
+ }> {}
18
+
19
+ export class CollectionErrorSource extends Data.TaggedClass("CollectionErrorSource")<{
20
+ module: string
21
+ functionName: string
22
+ db: string
23
+ collection: string
24
+ }> {}
31
25
 
32
- export const mongoErrorStream: {
33
- <A>(message: string): (error: unknown) => Stream.Stream<A, MongoError>
34
- <A>(error: unknown, message: string): Stream.Stream<A, MongoError>
35
- } = F.dual(2, <A>(error: unknown, message: string): Stream.Stream<A, MongoError> =>
36
- F.pipe(
37
- Match.value(error),
38
- Match.when(Match.instanceOf(MongoError_), (innerError) => Stream.fail(new MongoError({ message, innerError }))),
39
- Match.orElse((cause) => Stream.die(new Error(message, { cause })))
40
- ))
26
+ export type ErrorSource = ClientErrorSource | DbErrorSource | CollectionErrorSource
27
+
28
+ export class MongoError extends Data.TaggedError("MongoError")<{
29
+ message: string
30
+ cause: MongoError_
31
+ source?: ErrorSource
32
+ }> {}
@@ -0,0 +1,34 @@
1
+ import * as Effect from "effect/Effect"
2
+ import * as F from "effect/Function"
3
+ import * as Match from "effect/Match"
4
+ import { MongoError as MongoError_ } from "mongodb"
5
+ import type { ErrorSource } from "../MongoError.js"
6
+ import { MongoError } from "../MongoError.js"
7
+
8
+ export const mongoErrorOrDie =
9
+ (source: ErrorSource, message?: string) => (error: unknown): Effect.Effect<never, MongoError> =>
10
+ F.pipe(
11
+ Match.value(error),
12
+ Match.when(Match.instanceOf(MongoError_), F.flow(makeMongoError(source, message), Effect.fail)),
13
+ Match.orElse(F.flow(makeError(source, message), Effect.die))
14
+ )
15
+
16
+ const makeMongoError = (source: ErrorSource, message: string | undefined) => (cause: MongoError_) =>
17
+ new MongoError({ message: messageFrom(source, message), cause, source })
18
+
19
+ const makeError = (source: ErrorSource, message: string | undefined) => (cause: unknown) =>
20
+ new Error(messageFrom(source, message), { cause })
21
+
22
+ const messageFrom = (source: ErrorSource, message?: string) =>
23
+ message ? `${messageFromSource(source)} - ${message}` : messageFromSource(source)
24
+
25
+ const messageFromSource = (source: ErrorSource) =>
26
+ F.pipe(
27
+ Match.value(source),
28
+ Match.tag("ClientErrorSource", (s) => `${baseMessage(s)} - hosts ${s.hosts.join(", ")}`),
29
+ Match.tag("DbErrorSource", (s) => `${baseMessage(s)} - ${s.db}`),
30
+ Match.tag("CollectionErrorSource", (s) => `${baseMessage(s)} - ${s.db}.${s.collection}`),
31
+ Match.exhaustive
32
+ )
33
+
34
+ const baseMessage = (s: { module: string; functionName: string }) => `Error in ${s.module}.${s.functionName}`
@@ -5,8 +5,8 @@ import type { Document } from "mongodb"
5
5
 
6
6
  // TODO: there is probably a Schema to do this decode or using typeclass package for traverse
7
7
  export const decodeNullableDocument = <A, I, R>(schema: Schema.Schema<A, I, R>, value: Document | null) =>
8
- Effect.gen(function*(_) {
8
+ Effect.gen(function*() {
9
9
  if (value === null) return O.none()
10
- const decoded = yield* _(Schema.decodeUnknown(schema)(value))
10
+ const decoded = yield* Schema.decodeUnknown(schema)(value)
11
11
  return O.some(decoded)
12
12
  })
@@ -1,4 +1,4 @@
1
- let moduleVersion = "0.1.2"
1
+ let moduleVersion = "0.1.4"
2
2
 
3
3
  export const getCurrentVersion = () => moduleVersion
4
4