effect-mongodb 0.4.0 → 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 +32 -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 +31 -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 +19 -1
- package/dist/dts/Collection.d.ts.map +1 -1
- package/dist/dts/DocumentCollection.d.ts +19 -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 +31 -20
- 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 +30 -20
- 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 +103 -22
- package/src/Db.ts +2 -2
- package/src/DocumentAggregationCursor.ts +4 -4
- package/src/DocumentCollection.ts +97 -23
- 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 @@
|
|
|
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
|
@@ -24,6 +24,7 @@ import type {
|
|
|
24
24
|
DropIndexesOptions,
|
|
25
25
|
EstimatedDocumentCountOptions,
|
|
26
26
|
FindOneAndReplaceOptions,
|
|
27
|
+
FindOneAndUpdateOptions,
|
|
27
28
|
FindOptions as MongoFindOptions,
|
|
28
29
|
IndexDescription,
|
|
29
30
|
IndexSpecification,
|
|
@@ -43,7 +44,7 @@ import type { AnyBulkWriteOperation as AnyBulkWriteOperation_ } from "./internal
|
|
|
43
44
|
import { encodeBulkWriteOperation } from "./internal/bulk-write-operation.js"
|
|
44
45
|
import type { Filter as Filter_ } from "./internal/filter.js"
|
|
45
46
|
import type { ModifyResult } from "./internal/modify-result.js"
|
|
46
|
-
import {
|
|
47
|
+
import { mongoOperation } from "./internal/mongo-operation.js"
|
|
47
48
|
import * as SchemaExt from "./internal/schema.js"
|
|
48
49
|
import * as MongoError from "./MongoError.js"
|
|
49
50
|
|
|
@@ -118,7 +119,7 @@ export const findOne: {
|
|
|
118
119
|
const value = yield* Effect.promise(() => collection.collection.findOne(filter, options))
|
|
119
120
|
return yield* SchemaExt.decodeNullableDocument(collection.schema, value)
|
|
120
121
|
}).pipe(
|
|
121
|
-
|
|
122
|
+
mongoOperation(errorSource(collection, "findOne"))
|
|
122
123
|
)
|
|
123
124
|
)
|
|
124
125
|
|
|
@@ -139,7 +140,7 @@ export const insertOne: {
|
|
|
139
140
|
F.pipe(
|
|
140
141
|
collection.encode(doc),
|
|
141
142
|
Effect.flatMap((doc) => Effect.promise(() => collection.collection.insertOne(doc, options))),
|
|
142
|
-
|
|
143
|
+
mongoOperation(errorSource(collection, "insertOne"))
|
|
143
144
|
))
|
|
144
145
|
|
|
145
146
|
export const insertMany: {
|
|
@@ -160,7 +161,7 @@ export const insertMany: {
|
|
|
160
161
|
docs,
|
|
161
162
|
Effect.forEach((doc) => collection.encode(doc)),
|
|
162
163
|
Effect.flatMap((docs) => Effect.promise(() => collection.collection.insertMany(docs, options))),
|
|
163
|
-
|
|
164
|
+
mongoOperation(errorSource(collection, "insertMany"))
|
|
164
165
|
)
|
|
165
166
|
})
|
|
166
167
|
|
|
@@ -181,7 +182,7 @@ export const deleteOne: {
|
|
|
181
182
|
options?: DeleteOptions
|
|
182
183
|
): Effect.Effect<DeleteResult, MongoError.MongoError, R> =>
|
|
183
184
|
Effect.promise(() => collection.collection.deleteOne(filter, options)).pipe(
|
|
184
|
-
|
|
185
|
+
mongoOperation(errorSource(collection, "deleteOne"))
|
|
185
186
|
)
|
|
186
187
|
)
|
|
187
188
|
|
|
@@ -202,7 +203,7 @@ export const deleteMany: {
|
|
|
202
203
|
options?: DeleteOptions
|
|
203
204
|
): Effect.Effect<DeleteResult, MongoError.MongoError, R> =>
|
|
204
205
|
Effect.promise(() => collection.collection.deleteMany(filter, options)).pipe(
|
|
205
|
-
|
|
206
|
+
mongoOperation(errorSource(collection, "deleteMany"))
|
|
206
207
|
)
|
|
207
208
|
)
|
|
208
209
|
|
|
@@ -234,7 +235,7 @@ export const updateOne: {
|
|
|
234
235
|
Array.isArray(update) ? [...update] : update as UpdateFilter<Document>,
|
|
235
236
|
options
|
|
236
237
|
)
|
|
237
|
-
).pipe(
|
|
238
|
+
).pipe(mongoOperation(errorSource(collection, "updateOne")))
|
|
238
239
|
)
|
|
239
240
|
|
|
240
241
|
export const updateMany: {
|
|
@@ -265,7 +266,7 @@ export const updateMany: {
|
|
|
265
266
|
Array.isArray(update) ? [...update] : update as UpdateFilter<Document>,
|
|
266
267
|
options
|
|
267
268
|
)
|
|
268
|
-
).pipe(
|
|
269
|
+
).pipe(mongoOperation(errorSource(collection, "updateMany")))
|
|
269
270
|
)
|
|
270
271
|
|
|
271
272
|
export const replaceOne: {
|
|
@@ -299,7 +300,7 @@ export const replaceOne: {
|
|
|
299
300
|
Effect.flatMap((replacement) =>
|
|
300
301
|
Effect.promise(() => collection.collection.replaceOne(filter, replacement, options))
|
|
301
302
|
),
|
|
302
|
-
|
|
303
|
+
mongoOperation(errorSource(collection, "replaceOne"))
|
|
303
304
|
)
|
|
304
305
|
)
|
|
305
306
|
|
|
@@ -370,9 +371,89 @@ export const findOneAndReplace: {
|
|
|
370
371
|
return yield* SchemaExt.decodeNullableDocument(collection.schema, value)
|
|
371
372
|
})
|
|
372
373
|
),
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
374
|
+
mongoOperation(errorSource(collection, "findOneAndReplace"))
|
|
375
|
+
)
|
|
376
|
+
)
|
|
377
|
+
|
|
378
|
+
export const findOneAndUpdate: {
|
|
379
|
+
<I extends Document>(
|
|
380
|
+
filter: Filter<I>,
|
|
381
|
+
update: UpdateFilter<I> | ReadonlyArray<Document>,
|
|
382
|
+
options: FindOneAndUpdateOptions & { includeResultMetadata: true }
|
|
383
|
+
): <A extends Document, I2 extends I, R>(
|
|
384
|
+
collection: Collection<A, I2, R>
|
|
385
|
+
) => Effect.Effect<ModifyResult<A>, MongoError.MongoError | ParseResult.ParseError, R>
|
|
386
|
+
<I extends Document>(
|
|
387
|
+
filter: Filter<I>,
|
|
388
|
+
update: UpdateFilter<I> | ReadonlyArray<Document>,
|
|
389
|
+
options: FindOneAndUpdateOptions & { includeResultMetadata: false }
|
|
390
|
+
): <A extends Document, I2 extends I, R>(
|
|
391
|
+
collection: Collection<A, I2, R>
|
|
392
|
+
) => Effect.Effect<O.Option<A>, MongoError.MongoError | ParseResult.ParseError, R>
|
|
393
|
+
<I extends Document>(
|
|
394
|
+
filter: Filter<I>,
|
|
395
|
+
update: UpdateFilter<I> | ReadonlyArray<Document>,
|
|
396
|
+
options: FindOneAndUpdateOptions
|
|
397
|
+
): <A extends Document, I2 extends I, R>(
|
|
398
|
+
collection: Collection<A, I2, R>
|
|
399
|
+
) => Effect.Effect<O.Option<A>, MongoError.MongoError | ParseResult.ParseError, R>
|
|
400
|
+
<I extends Document>(filter: Filter<I>, update: UpdateFilter<I> | ReadonlyArray<Document>): <
|
|
401
|
+
A extends Document,
|
|
402
|
+
I2 extends I,
|
|
403
|
+
R
|
|
404
|
+
>(
|
|
405
|
+
collection: Collection<A, I2, R>
|
|
406
|
+
) => Effect.Effect<O.Option<A>, MongoError.MongoError | ParseResult.ParseError, R>
|
|
407
|
+
<A extends Document, I extends Document, R>(
|
|
408
|
+
collection: Collection<A, I, R>,
|
|
409
|
+
filter: Filter<I>,
|
|
410
|
+
update: UpdateFilter<I> | ReadonlyArray<Document>,
|
|
411
|
+
options: FindOneAndUpdateOptions & { includeResultMetadata: true }
|
|
412
|
+
): Effect.Effect<ModifyResult<A>, MongoError.MongoError | ParseResult.ParseError, R>
|
|
413
|
+
<A extends Document, I extends Document, R>(
|
|
414
|
+
collection: Collection<A, I, R>,
|
|
415
|
+
filter: Filter<I>,
|
|
416
|
+
update: UpdateFilter<I> | ReadonlyArray<Document>,
|
|
417
|
+
options: FindOneAndUpdateOptions & { includeResultMetadata: false }
|
|
418
|
+
): Effect.Effect<O.Option<A>, MongoError.MongoError | ParseResult.ParseError, R>
|
|
419
|
+
<A extends Document, I extends Document, R>(
|
|
420
|
+
collection: Collection<A, I, R>,
|
|
421
|
+
filter: Filter<I>,
|
|
422
|
+
update: UpdateFilter<I> | ReadonlyArray<Document>,
|
|
423
|
+
options: FindOneAndUpdateOptions
|
|
424
|
+
): Effect.Effect<O.Option<A>, MongoError.MongoError | ParseResult.ParseError, R>
|
|
425
|
+
<A extends Document, I extends Document, R>(
|
|
426
|
+
collection: Collection<A, I, R>,
|
|
427
|
+
filter: Filter<I>,
|
|
428
|
+
update: UpdateFilter<I> | ReadonlyArray<Document>
|
|
429
|
+
): Effect.Effect<O.Option<A>, MongoError.MongoError | ParseResult.ParseError, R>
|
|
430
|
+
} = F.dual(
|
|
431
|
+
(args) => isCollection(args[0]),
|
|
432
|
+
<A extends Document, I extends Document, R>(
|
|
433
|
+
collection: Collection<A, I, R>,
|
|
434
|
+
filter: Filter<I>,
|
|
435
|
+
update: UpdateFilter<I> | ReadonlyArray<Document>,
|
|
436
|
+
options?: FindOneAndUpdateOptions
|
|
437
|
+
): Effect.Effect<O.Option<A> | ModifyResult<A>, MongoError.MongoError | ParseResult.ParseError, R> =>
|
|
438
|
+
F.pipe(
|
|
439
|
+
Effect.promise(() =>
|
|
440
|
+
collection.collection.findOneAndUpdate(
|
|
441
|
+
filter,
|
|
442
|
+
Array.isArray(update) ? [...update] : update as UpdateFilter<Document>,
|
|
443
|
+
options ?? {}
|
|
444
|
+
)
|
|
445
|
+
),
|
|
446
|
+
Effect.flatMap((value) =>
|
|
447
|
+
Effect.gen(function*() {
|
|
448
|
+
if (options?.includeResultMetadata && !!value) {
|
|
449
|
+
const result = value as unknown as MongoModifyResult<I>
|
|
450
|
+
const maybeValue = yield* SchemaExt.decodeNullableDocument(collection.schema, result.value)
|
|
451
|
+
return { ...result, value: maybeValue }
|
|
452
|
+
}
|
|
453
|
+
return yield* SchemaExt.decodeNullableDocument(collection.schema, value)
|
|
454
|
+
})
|
|
455
|
+
),
|
|
456
|
+
mongoOperation(errorSource(collection, "findOneAndUpdate"))
|
|
376
457
|
)
|
|
377
458
|
)
|
|
378
459
|
|
|
@@ -397,7 +478,7 @@ export const rename: {
|
|
|
397
478
|
Effect.map((newCollection) =>
|
|
398
479
|
new CollectionImpl<A, I, R>({ collection: newCollection, schema: collection.schema })
|
|
399
480
|
),
|
|
400
|
-
|
|
481
|
+
mongoOperation(errorSource(collection, "rename"))
|
|
401
482
|
)
|
|
402
483
|
)
|
|
403
484
|
|
|
@@ -417,7 +498,7 @@ export const drop: {
|
|
|
417
498
|
): Effect.Effect<boolean, MongoError.MongoError, R> =>
|
|
418
499
|
F.pipe(
|
|
419
500
|
Effect.promise(() => collection.collection.drop(options)),
|
|
420
|
-
|
|
501
|
+
mongoOperation(errorSource(collection, "drop"))
|
|
421
502
|
)
|
|
422
503
|
)
|
|
423
504
|
|
|
@@ -442,7 +523,7 @@ export const createIndexes: {
|
|
|
442
523
|
): Effect.Effect<Array<string>, MongoError.MongoError, R> =>
|
|
443
524
|
F.pipe(
|
|
444
525
|
Effect.promise(() => collection.collection.createIndexes([...indexSpecs], options)),
|
|
445
|
-
|
|
526
|
+
mongoOperation(errorSource(collection, "createIndexes"))
|
|
446
527
|
)
|
|
447
528
|
)
|
|
448
529
|
|
|
@@ -464,7 +545,7 @@ export const createIndex: {
|
|
|
464
545
|
): Effect.Effect<string, MongoError.MongoError, R> =>
|
|
465
546
|
F.pipe(
|
|
466
547
|
Effect.promise(() => collection.collection.createIndex(indexSpec, options)),
|
|
467
|
-
|
|
548
|
+
mongoOperation(errorSource(collection, "createIndex"))
|
|
468
549
|
)
|
|
469
550
|
)
|
|
470
551
|
|
|
@@ -486,7 +567,7 @@ export const dropIndex: {
|
|
|
486
567
|
): Effect.Effect<Document, MongoError.MongoError, R> =>
|
|
487
568
|
F.pipe(
|
|
488
569
|
Effect.promise(() => collection.collection.dropIndex(indexName, options)),
|
|
489
|
-
|
|
570
|
+
mongoOperation(errorSource(collection, "dropIndex"))
|
|
490
571
|
)
|
|
491
572
|
)
|
|
492
573
|
|
|
@@ -506,7 +587,7 @@ export const dropIndexes: {
|
|
|
506
587
|
): Effect.Effect<boolean, MongoError.MongoError, R> =>
|
|
507
588
|
F.pipe(
|
|
508
589
|
Effect.promise(() => collection.collection.dropIndexes(options)),
|
|
509
|
-
|
|
590
|
+
mongoOperation(errorSource(collection, "dropIndexes"))
|
|
510
591
|
)
|
|
511
592
|
)
|
|
512
593
|
|
|
@@ -554,7 +635,7 @@ export const estimatedDocumentCount: {
|
|
|
554
635
|
): Effect.Effect<number, MongoError.MongoError, R> =>
|
|
555
636
|
F.pipe(
|
|
556
637
|
Effect.promise(() => collection.collection.estimatedDocumentCount(options)),
|
|
557
|
-
|
|
638
|
+
mongoOperation(errorSource(collection, "estimatedDocumentCount"))
|
|
558
639
|
)
|
|
559
640
|
)
|
|
560
641
|
|
|
@@ -576,7 +657,7 @@ export const countDocuments: {
|
|
|
576
657
|
): Effect.Effect<number, MongoError.MongoError, R> =>
|
|
577
658
|
F.pipe(
|
|
578
659
|
Effect.promise(() => collection.collection.countDocuments(filter, options)),
|
|
579
|
-
|
|
660
|
+
mongoOperation(errorSource(collection, "countDocuments"))
|
|
580
661
|
)
|
|
581
662
|
)
|
|
582
663
|
|
|
@@ -603,7 +684,7 @@ export const bulkWrite: {
|
|
|
603
684
|
operations,
|
|
604
685
|
Effect.forEach((op) => encodeBulkWriteOperation(collection.schema, op)),
|
|
605
686
|
Effect.flatMap((operations) => Effect.promise(() => collection.collection.bulkWrite(operations, options))),
|
|
606
|
-
|
|
687
|
+
mongoOperation(errorSource(collection, "bulkWrite"))
|
|
607
688
|
)
|
|
608
689
|
)
|
|
609
690
|
|
|
@@ -614,7 +695,7 @@ const errorSource = <A extends Document, I extends Document = A, R = never>(
|
|
|
614
695
|
functionName: string
|
|
615
696
|
) =>
|
|
616
697
|
new MongoError.CollectionErrorSource({
|
|
617
|
-
module:
|
|
698
|
+
module: "Collection",
|
|
618
699
|
functionName,
|
|
619
700
|
db: collection.collection.dbName,
|
|
620
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"
|