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.
- package/README.md +25 -19
- package/dist/cjs/AggregationCursor.js +18 -8
- package/dist/cjs/AggregationCursor.js.map +1 -1
- package/dist/cjs/Collection.js +40 -29
- package/dist/cjs/Collection.js.map +1 -1
- package/dist/cjs/Db.js +9 -3
- package/dist/cjs/Db.js.map +1 -1
- package/dist/cjs/DocumentAggregationCursor.js +18 -8
- package/dist/cjs/DocumentAggregationCursor.js.map +1 -1
- package/dist/cjs/DocumentCollection.js +36 -24
- package/dist/cjs/DocumentCollection.js.map +1 -1
- package/dist/cjs/DocumentFindCursor.js +24 -14
- package/dist/cjs/DocumentFindCursor.js.map +1 -1
- package/dist/cjs/FindCursor.js +25 -18
- package/dist/cjs/FindCursor.js.map +1 -1
- package/dist/cjs/ListCollectionsCursor.js +18 -8
- package/dist/cjs/ListCollectionsCursor.js.map +1 -1
- package/dist/cjs/MongoClient.js +8 -2
- package/dist/cjs/MongoClient.js.map +1 -1
- package/dist/cjs/MongoError.js +7 -18
- package/dist/cjs/MongoError.js.map +1 -1
- package/dist/cjs/internal/mongo-error.js +27 -0
- package/dist/cjs/internal/mongo-error.js.map +1 -0
- package/dist/cjs/internal/schema.js +2 -2
- package/dist/cjs/internal/schema.js.map +1 -1
- package/dist/cjs/internal/version.js +1 -1
- package/dist/dts/AggregationCursor.d.ts +5 -5
- package/dist/dts/AggregationCursor.d.ts.map +1 -1
- package/dist/dts/Collection.d.ts +17 -18
- package/dist/dts/Collection.d.ts.map +1 -1
- package/dist/dts/Db.d.ts.map +1 -1
- package/dist/dts/DocumentAggregationCursor.d.ts +5 -5
- package/dist/dts/DocumentAggregationCursor.d.ts.map +1 -1
- package/dist/dts/DocumentCollection.d.ts +7 -7
- package/dist/dts/DocumentCollection.d.ts.map +1 -1
- package/dist/dts/DocumentFindCursor.d.ts +5 -5
- package/dist/dts/DocumentFindCursor.d.ts.map +1 -1
- package/dist/dts/FindCursor.d.ts +5 -5
- package/dist/dts/FindCursor.d.ts.map +1 -1
- package/dist/dts/ListCollectionsCursor.d.ts +5 -5
- package/dist/dts/ListCollectionsCursor.d.ts.map +1 -1
- package/dist/dts/MongoClient.d.ts.map +1 -1
- package/dist/dts/MongoError.d.ts +32 -12
- package/dist/dts/MongoError.d.ts.map +1 -1
- package/dist/dts/internal/mongo-error.d.ts +5 -0
- package/dist/dts/internal/mongo-error.d.ts.map +1 -0
- package/dist/esm/AggregationCursor.js +16 -6
- package/dist/esm/AggregationCursor.js.map +1 -1
- package/dist/esm/Collection.js +38 -27
- package/dist/esm/Collection.js.map +1 -1
- package/dist/esm/Db.js +9 -3
- package/dist/esm/Db.js.map +1 -1
- package/dist/esm/DocumentAggregationCursor.js +16 -6
- package/dist/esm/DocumentAggregationCursor.js.map +1 -1
- package/dist/esm/DocumentCollection.js +34 -22
- package/dist/esm/DocumentCollection.js.map +1 -1
- package/dist/esm/DocumentFindCursor.js +22 -12
- package/dist/esm/DocumentFindCursor.js.map +1 -1
- package/dist/esm/FindCursor.js +23 -16
- package/dist/esm/FindCursor.js.map +1 -1
- package/dist/esm/ListCollectionsCursor.js +16 -6
- package/dist/esm/ListCollectionsCursor.js.map +1 -1
- package/dist/esm/MongoClient.js +8 -2
- package/dist/esm/MongoClient.js.map +1 -1
- package/dist/esm/MongoError.js +3 -17
- package/dist/esm/MongoError.js.map +1 -1
- package/dist/esm/internal/mongo-error.js +18 -0
- package/dist/esm/internal/mongo-error.js.map +1 -0
- package/dist/esm/internal/schema.js +2 -2
- package/dist/esm/internal/schema.js.map +1 -1
- package/dist/esm/internal/version.js +1 -1
- package/package.json +1 -1
- package/src/AggregationCursor.ts +31 -6
- package/src/Collection.ts +80 -50
- package/src/Db.ts +7 -3
- package/src/DocumentAggregationCursor.ts +27 -5
- package/src/DocumentCollection.ts +52 -27
- package/src/DocumentFindCursor.ts +34 -11
- package/src/FindCursor.ts +36 -13
- package/src/ListCollectionsCursor.ts +31 -7
- package/src/MongoClient.ts +6 -2
- package/src/MongoError.ts +24 -32
- package/src/internal/mongo-error.ts +34 -0
- package/src/internal/schema.ts +2 -2
- 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
|
|
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
|
|
12
|
-
|
|
13
|
-
|
|
7
|
+
export class ClientErrorSource extends Data.TaggedClass("ClientErrorSource")<{
|
|
8
|
+
module: string
|
|
9
|
+
functionName: string
|
|
10
|
+
hosts: Array<string>
|
|
14
11
|
}> {}
|
|
15
12
|
|
|
16
|
-
export
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
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
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
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}`
|
package/src/internal/schema.ts
CHANGED
|
@@ -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*
|
|
10
|
+
const decoded = yield* Schema.decodeUnknown(schema)(value)
|
|
11
11
|
return O.some(decoded)
|
|
12
12
|
})
|
package/src/internal/version.ts
CHANGED