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.
- package/README.md +19 -0
- package/dist/cjs/AggregationCursor.js +4 -4
- package/dist/cjs/AggregationCursor.js.map +1 -1
- package/dist/cjs/Collection.js +21 -21
- package/dist/cjs/Collection.js.map +1 -1
- package/dist/cjs/Db.js +2 -2
- package/dist/cjs/Db.js.map +1 -1
- package/dist/cjs/DocumentAggregationCursor.js +4 -4
- package/dist/cjs/DocumentAggregationCursor.js.map +1 -1
- package/dist/cjs/DocumentCollection.js +21 -21
- package/dist/cjs/DocumentCollection.js.map +1 -1
- package/dist/cjs/DocumentFindCursor.js +4 -4
- package/dist/cjs/DocumentFindCursor.js.map +1 -1
- package/dist/cjs/FindCursor.js +6 -6
- package/dist/cjs/FindCursor.js.map +1 -1
- package/dist/cjs/ListCollectionsCursor.js +4 -4
- package/dist/cjs/ListCollectionsCursor.js.map +1 -1
- package/dist/cjs/MongoClient.js +3 -3
- package/dist/cjs/MongoClient.js.map +1 -1
- package/dist/cjs/internal/mongo-operation.js +18 -0
- package/dist/cjs/internal/mongo-operation.js.map +1 -0
- package/dist/cjs/internal/tracing.js +49 -0
- package/dist/cjs/internal/tracing.js.map +1 -0
- package/dist/cjs/internal/version.js +1 -1
- package/dist/dts/Collection.d.ts.map +1 -1
- package/dist/dts/DocumentCollection.d.ts.map +1 -1
- package/dist/dts/MongoClient.d.ts.map +1 -1
- package/dist/dts/internal/mongo-operation.d.ts +6 -0
- package/dist/dts/internal/mongo-operation.d.ts.map +1 -0
- package/dist/dts/internal/tracing.d.ts +6 -0
- package/dist/dts/internal/tracing.d.ts.map +1 -0
- package/dist/esm/AggregationCursor.js +4 -4
- package/dist/esm/AggregationCursor.js.map +1 -1
- package/dist/esm/Collection.js +21 -21
- package/dist/esm/Collection.js.map +1 -1
- package/dist/esm/Db.js +2 -2
- package/dist/esm/Db.js.map +1 -1
- package/dist/esm/DocumentAggregationCursor.js +4 -4
- package/dist/esm/DocumentAggregationCursor.js.map +1 -1
- package/dist/esm/DocumentCollection.js +21 -21
- package/dist/esm/DocumentCollection.js.map +1 -1
- package/dist/esm/DocumentFindCursor.js +4 -4
- package/dist/esm/DocumentFindCursor.js.map +1 -1
- package/dist/esm/FindCursor.js +6 -6
- package/dist/esm/FindCursor.js.map +1 -1
- package/dist/esm/ListCollectionsCursor.js +4 -4
- package/dist/esm/ListCollectionsCursor.js.map +1 -1
- package/dist/esm/MongoClient.js +3 -3
- package/dist/esm/MongoClient.js.map +1 -1
- package/dist/esm/internal/mongo-operation.js +8 -0
- package/dist/esm/internal/mongo-operation.js.map +1 -0
- package/dist/esm/internal/tracing.js +39 -0
- package/dist/esm/internal/tracing.js.map +1 -0
- package/dist/esm/internal/version.js +1 -1
- package/package.json +1 -1
- package/src/AggregationCursor.ts +4 -4
- package/src/Collection.ts +21 -25
- package/src/Db.ts +2 -2
- package/src/DocumentAggregationCursor.ts +4 -4
- package/src/DocumentCollection.ts +22 -26
- package/src/DocumentFindCursor.ts +4 -4
- package/src/FindCursor.ts +6 -6
- package/src/ListCollectionsCursor.ts +4 -4
- package/src/MongoClient.ts +3 -5
- package/src/internal/mongo-operation.ts +22 -0
- package/src/internal/tracing.ts +47 -0
- package/src/internal/version.ts +1 -1
package/src/MongoClient.ts
CHANGED
|
@@ -8,7 +8,7 @@ import type * as Scope from "effect/Scope"
|
|
|
8
8
|
import type { DbOptions, MongoClientOptions } from "mongodb"
|
|
9
9
|
import { MongoClient as MongoClient_ } from "mongodb"
|
|
10
10
|
import * as Db from "./Db.js"
|
|
11
|
-
import {
|
|
11
|
+
import { mongoOperation } from "./internal/mongo-operation.js"
|
|
12
12
|
import * as MongoError from "./MongoError.js"
|
|
13
13
|
|
|
14
14
|
export class MongoClient extends Data.TaggedClass("MongoClient")<{ client: MongoClient_ }> {}
|
|
@@ -19,7 +19,7 @@ export const connect = (
|
|
|
19
19
|
): Effect.Effect<MongoClient, MongoError.MongoError> =>
|
|
20
20
|
Effect.promise(() => MongoClient_.connect(url, options)).pipe(
|
|
21
21
|
Effect.map((client) => new MongoClient({ client })),
|
|
22
|
-
|
|
22
|
+
mongoOperation(errorSource(hostsFromUrl(url), "connect"))
|
|
23
23
|
)
|
|
24
24
|
|
|
25
25
|
export const close: {
|
|
@@ -29,9 +29,7 @@ export const close: {
|
|
|
29
29
|
(args) => isMongoClient(args[0]),
|
|
30
30
|
({ client }: MongoClient, force?: boolean): Effect.Effect<void, MongoError.MongoError> =>
|
|
31
31
|
Effect.promise(() => client.close(force)).pipe(
|
|
32
|
-
|
|
33
|
-
mongoErrorOrDie(errorSource(client.options.hosts.map((x) => x.host ?? UNKNOWN_HOST), "close"))
|
|
34
|
-
)
|
|
32
|
+
mongoOperation(errorSource(client.options.hosts.map((x) => x.host ?? UNKNOWN_HOST), "close"))
|
|
35
33
|
)
|
|
36
34
|
)
|
|
37
35
|
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import * as Effect from "effect/Effect"
|
|
2
|
+
import * as F from "effect/Function"
|
|
3
|
+
import * as Stream from "effect/Stream"
|
|
4
|
+
import type { ErrorSource, MongoError } from "../MongoError.js"
|
|
5
|
+
import { mongoErrorOrDie } from "./mongo-error.js"
|
|
6
|
+
import { withSpan, withSpanStream } from "./tracing.js"
|
|
7
|
+
|
|
8
|
+
export const mongoOperation =
|
|
9
|
+
(source: ErrorSource) => <A, E, R>(self: Effect.Effect<A, E, R>): Effect.Effect<A, E | MongoError, R> =>
|
|
10
|
+
F.pipe(
|
|
11
|
+
self,
|
|
12
|
+
Effect.catchAllDefect(mongoErrorOrDie(source)),
|
|
13
|
+
withSpan(source)
|
|
14
|
+
)
|
|
15
|
+
|
|
16
|
+
export const mongoStreamOperation =
|
|
17
|
+
(source: ErrorSource) => <A, E, R>(self: Stream.Stream<A, E, R>): Stream.Stream<A, MongoError, R> =>
|
|
18
|
+
F.pipe(
|
|
19
|
+
self,
|
|
20
|
+
Stream.catchAll(mongoErrorOrDie(source)),
|
|
21
|
+
withSpanStream(source)
|
|
22
|
+
)
|
|
@@ -0,0 +1,47 @@
|
|
|
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
|
+
import type * as Tracer from "effect/Tracer"
|
|
6
|
+
import type { ErrorSource } from "../MongoError.js"
|
|
7
|
+
|
|
8
|
+
export const withSpan = (source: ErrorSource) => <A, E, R>(self: Effect.Effect<A, E, R>): Effect.Effect<A, E, R> =>
|
|
9
|
+
Effect.withSpan(self, spanName(source), spanOptions(source))
|
|
10
|
+
|
|
11
|
+
export const withSpanStream =
|
|
12
|
+
(source: ErrorSource) => <A, E, R>(self: Stream.Stream<A, E, R>): Stream.Stream<A, E, R> =>
|
|
13
|
+
Stream.withSpan(self, spanName(source), spanOptions(source))
|
|
14
|
+
|
|
15
|
+
const spanName = (source: ErrorSource) => `mongodb.${source.module}.${source.functionName}`
|
|
16
|
+
|
|
17
|
+
const spanOptions = (source: ErrorSource): Tracer.SpanOptions => ({
|
|
18
|
+
kind: "client",
|
|
19
|
+
captureStackTrace: false,
|
|
20
|
+
attributes: {
|
|
21
|
+
"db.system.name": "mongodb",
|
|
22
|
+
"db.operation.name": source.functionName,
|
|
23
|
+
...sourceAttributes(source)
|
|
24
|
+
}
|
|
25
|
+
})
|
|
26
|
+
|
|
27
|
+
const sourceAttributes = (source: ErrorSource): Record<string, unknown> =>
|
|
28
|
+
F.pipe(
|
|
29
|
+
Match.value(source),
|
|
30
|
+
Match.tag("ClientErrorSource", (s) => serverAttributes(s.hosts)),
|
|
31
|
+
Match.tag("DbErrorSource", (s) => ({ "db.namespace": s.db })),
|
|
32
|
+
Match.tag("CollectionErrorSource", (s) => ({ "db.namespace": s.db, "db.collection.name": s.collection })),
|
|
33
|
+
Match.exhaustive
|
|
34
|
+
)
|
|
35
|
+
|
|
36
|
+
const serverAttributes = (hosts: Array<string>): Record<string, unknown> => {
|
|
37
|
+
if (hosts.length !== 1) return {}
|
|
38
|
+
const [address, port] = splitHost(hosts[0])
|
|
39
|
+
return port === undefined ? { "server.address": address } : { "server.address": address, "server.port": port }
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
const splitHost = (host: string): [address: string, port: number | undefined] => {
|
|
43
|
+
const separator = host.lastIndexOf(":")
|
|
44
|
+
if (separator === -1) return [host, undefined]
|
|
45
|
+
const port = Number(host.slice(separator + 1))
|
|
46
|
+
return Number.isInteger(port) ? [host.slice(0, separator), port] : [host, undefined]
|
|
47
|
+
}
|
package/src/internal/version.ts
CHANGED