effect-mongodb 0.3.3 → 0.4.1
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/dist/cjs/Collection.js +14 -1
- package/dist/cjs/Collection.js.map +1 -1
- package/dist/cjs/DocumentCollection.js +12 -1
- package/dist/cjs/DocumentCollection.js.map +1 -1
- package/dist/cjs/MongoClient.js +12 -2
- package/dist/cjs/MongoClient.js.map +1 -1
- package/dist/cjs/internal/bulk-write-operation.js +26 -0
- package/dist/cjs/internal/bulk-write-operation.js.map +1 -0
- package/dist/cjs/internal/version.js +1 -1
- package/dist/dts/Collection.d.ts +25 -1
- package/dist/dts/Collection.d.ts.map +1 -1
- package/dist/dts/DocumentCollection.d.ts +23 -1
- package/dist/dts/DocumentCollection.d.ts.map +1 -1
- package/dist/dts/MongoClient.d.ts.map +1 -1
- package/dist/dts/internal/bulk-write-operation.d.ts +31 -0
- package/dist/dts/internal/bulk-write-operation.d.ts.map +1 -0
- package/dist/esm/Collection.js +13 -0
- package/dist/esm/Collection.js.map +1 -1
- package/dist/esm/DocumentCollection.js +11 -0
- package/dist/esm/DocumentCollection.js.map +1 -1
- package/dist/esm/MongoClient.js +12 -2
- package/dist/esm/MongoClient.js.map +1 -1
- package/dist/esm/internal/bulk-write-operation.js +17 -0
- package/dist/esm/internal/bulk-write-operation.js.map +1 -0
- package/dist/esm/internal/version.js +1 -1
- package/package.json +1 -1
- package/src/Collection.ts +116 -0
- package/src/DocumentCollection.ts +102 -0
- package/src/MongoClient.ts +17 -2
- package/src/internal/bulk-write-operation.ts +95 -0
- package/src/internal/version.ts +1 -1
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
import * as Effect from "effect/Effect"
|
|
2
|
+
import * as F from "effect/Function"
|
|
3
|
+
import * as Match from "effect/Match"
|
|
4
|
+
import * as Schema from "effect/Schema"
|
|
5
|
+
import type {
|
|
6
|
+
AnyBulkWriteOperation as MongoAnyBulkWriteOperation,
|
|
7
|
+
DeleteManyModel as MongoDeleteManyModel,
|
|
8
|
+
DeleteOneModel as MongoDeleteOneModel,
|
|
9
|
+
Document,
|
|
10
|
+
InsertOneModel as MongoInsertOneModel,
|
|
11
|
+
ReplaceOneModel as MongoReplaceOneModel,
|
|
12
|
+
UpdateManyModel as MongoUpdateManyModel,
|
|
13
|
+
UpdateOneModel as MongoUpdateOneModel
|
|
14
|
+
} from "mongodb"
|
|
15
|
+
import type { Filter } from "./filter.js"
|
|
16
|
+
|
|
17
|
+
type InsertOneModel<A extends Document> = {
|
|
18
|
+
readonly insertOne: {
|
|
19
|
+
document: A
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
type ReplaceOneModel<A extends Document, I extends Document> = {
|
|
23
|
+
readonly replaceOne: Omit<MongoReplaceOneModel, "replacement" | "filter"> & {
|
|
24
|
+
filter: Filter<I>
|
|
25
|
+
replacement: A
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
type UpdateOneModel<I extends Document> = { readonly updateOne: MongoUpdateOneModel<I> }
|
|
29
|
+
type UpdateManyModel<I extends Document> = { readonly updateMany: MongoUpdateManyModel<I> }
|
|
30
|
+
type DeleteOneModel<I extends Document> = { readonly deleteOne: MongoDeleteOneModel<I> }
|
|
31
|
+
type DeleteManyModel<I extends Document> = { readonly deleteMany: MongoDeleteManyModel<I> }
|
|
32
|
+
|
|
33
|
+
export type AnyBulkWriteOperation<A extends Document, I extends Document> =
|
|
34
|
+
| InsertOneModel<A>
|
|
35
|
+
| ReplaceOneModel<A, I>
|
|
36
|
+
| UpdateOneModel<I>
|
|
37
|
+
| UpdateManyModel<I>
|
|
38
|
+
| DeleteOneModel<I>
|
|
39
|
+
| DeleteManyModel<I>
|
|
40
|
+
|
|
41
|
+
export const encodeBulkWriteOperation = <A extends Document, I extends Document, R>(
|
|
42
|
+
schema: Schema.Schema<A, I, R>,
|
|
43
|
+
operation: AnyBulkWriteOperation<A, I>
|
|
44
|
+
) =>
|
|
45
|
+
F.pipe(
|
|
46
|
+
Match.value(operation),
|
|
47
|
+
Match.when(
|
|
48
|
+
(op): op is InsertOneModel<A> => "insertOne" in op,
|
|
49
|
+
(op) => encodeInsertOne(schema, op)
|
|
50
|
+
),
|
|
51
|
+
Match.when(
|
|
52
|
+
(op): op is ReplaceOneModel<A, I> => "replaceOne" in op,
|
|
53
|
+
(op) => encodeReplaceOne(schema, op)
|
|
54
|
+
),
|
|
55
|
+
Match.when(
|
|
56
|
+
(op): op is UpdateOneModel<I> => "updateOne" in op,
|
|
57
|
+
(op) => Effect.succeed(op)
|
|
58
|
+
),
|
|
59
|
+
Match.when(
|
|
60
|
+
(op): op is UpdateManyModel<I> => "updateMany" in op,
|
|
61
|
+
(op) => Effect.succeed(op)
|
|
62
|
+
),
|
|
63
|
+
Match.when(
|
|
64
|
+
(op): op is DeleteOneModel<I> => "deleteOne" in op,
|
|
65
|
+
(op) => Effect.succeed(op)
|
|
66
|
+
),
|
|
67
|
+
Match.when(
|
|
68
|
+
(op): op is DeleteManyModel<I> => "deleteMany" in op,
|
|
69
|
+
(op) => Effect.succeed(op)
|
|
70
|
+
),
|
|
71
|
+
Match.exhaustive,
|
|
72
|
+
Effect.map((x) => x as MongoAnyBulkWriteOperation<Document>)
|
|
73
|
+
)
|
|
74
|
+
|
|
75
|
+
const encodeInsertOne = <A extends Document, I extends Document, R>(
|
|
76
|
+
schema: Schema.Schema<A, I, R>,
|
|
77
|
+
operation: InsertOneModel<A>
|
|
78
|
+
) =>
|
|
79
|
+
F.pipe(
|
|
80
|
+
operation.insertOne.document,
|
|
81
|
+
Schema.encode(schema),
|
|
82
|
+
Effect.map((document) => ({ insertOne: { document } as MongoInsertOneModel<I> }))
|
|
83
|
+
)
|
|
84
|
+
|
|
85
|
+
const encodeReplaceOne = <A extends Document, I extends Document, R>(
|
|
86
|
+
schema: Schema.Schema<A, I, R>,
|
|
87
|
+
operation: ReplaceOneModel<A, I>
|
|
88
|
+
) =>
|
|
89
|
+
F.pipe(
|
|
90
|
+
operation.replaceOne.replacement,
|
|
91
|
+
Schema.encode(schema),
|
|
92
|
+
Effect.map((replacement) => ({
|
|
93
|
+
replaceOne: { ...operation.replaceOne, replacement }
|
|
94
|
+
}))
|
|
95
|
+
)
|
package/src/internal/version.ts
CHANGED