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
|
@@ -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":[]}
|
package/package.json
CHANGED
package/src/AggregationCursor.ts
CHANGED
|
@@ -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 {
|
|
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
|
-
|
|
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
|
-
|
|
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:
|
|
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 {
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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(
|
|
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(
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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:
|
|
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 {
|
|
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
|
-
|
|
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 {
|
|
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
|
-
|
|
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
|
-
|
|
43
|
+
mongoStreamOperation(errorSource(cursor, "toStream"))
|
|
44
44
|
)
|
|
45
45
|
|
|
46
46
|
const errorSource = (cursor: DocumentAggregationCursor, functionName: string) =>
|
|
47
47
|
new MongoError.CollectionErrorSource({
|
|
48
|
-
module:
|
|
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 {
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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.
|
|
657
|
-
|
|
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:
|
|
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 {
|
|
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
|
-
|
|
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
|
-
|
|
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:
|
|
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 {
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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:
|
|
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 {
|
|
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
|
-
|
|
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
|
-
|
|
60
|
+
mongoStreamOperation(errorSource(cursor, "toStream"))
|
|
61
61
|
)
|
|
62
62
|
|
|
63
63
|
const errorSource = (cursor: ListCollectionsCursor, functionName: string) =>
|
|
64
64
|
new MongoError.CollectionErrorSource({
|
|
65
|
-
module:
|
|
65
|
+
module: "ListCollectionsCursor",
|
|
66
66
|
functionName,
|
|
67
67
|
db: cursor.cursor.namespace.db,
|
|
68
68
|
collection: cursor.cursor.namespace.collection ?? "NO_COLLECTION_NAME"
|