effect-mongodb 0.0.2 → 0.0.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.
Files changed (96) hide show
  1. package/AggregationCursor/package.json +6 -0
  2. package/DocumentAggregationCursor/package.json +6 -0
  3. package/ListCollectionsCursor/package.json +6 -0
  4. package/README.md +8 -3
  5. package/dist/cjs/AggregationCursor.js +34 -0
  6. package/dist/cjs/AggregationCursor.js.map +1 -0
  7. package/dist/cjs/Collection.js +41 -4
  8. package/dist/cjs/Collection.js.map +1 -1
  9. package/dist/cjs/Db.js +7 -1
  10. package/dist/cjs/Db.js.map +1 -1
  11. package/dist/cjs/DocumentAggregationCursor.js +27 -0
  12. package/dist/cjs/DocumentAggregationCursor.js.map +1 -0
  13. package/dist/cjs/DocumentCollection.js +30 -3
  14. package/dist/cjs/DocumentCollection.js.map +1 -1
  15. package/dist/cjs/DocumentFindCursor.js +4 -0
  16. package/dist/cjs/DocumentFindCursor.js.map +1 -1
  17. package/dist/cjs/FindCursor.js +6 -4
  18. package/dist/cjs/FindCursor.js.map +1 -1
  19. package/dist/cjs/ListCollectionsCursor.js +27 -0
  20. package/dist/cjs/ListCollectionsCursor.js.map +1 -0
  21. package/dist/cjs/MongoClient.js.map +1 -1
  22. package/dist/cjs/index.js +7 -1
  23. package/dist/cjs/internal/filter.js +6 -0
  24. package/dist/cjs/internal/filter.js.map +1 -0
  25. package/dist/cjs/internal/modify-result.js +6 -0
  26. package/dist/cjs/internal/modify-result.js.map +1 -0
  27. package/dist/cjs/internal/schema.js +19 -0
  28. package/dist/cjs/internal/schema.js.map +1 -0
  29. package/dist/cjs/internal/version.js +1 -1
  30. package/dist/dts/AggregationCursor.d.ts +18 -0
  31. package/dist/dts/AggregationCursor.d.ts.map +1 -0
  32. package/dist/dts/Collection.d.ts +72 -14
  33. package/dist/dts/Collection.d.ts.map +1 -1
  34. package/dist/dts/Db.d.ts +28 -3
  35. package/dist/dts/Db.d.ts.map +1 -1
  36. package/dist/dts/DocumentAggregationCursor.d.ts +15 -0
  37. package/dist/dts/DocumentAggregationCursor.d.ts.map +1 -0
  38. package/dist/dts/DocumentCollection.d.ts +64 -7
  39. package/dist/dts/DocumentCollection.d.ts.map +1 -1
  40. package/dist/dts/DocumentFindCursor.d.ts +4 -7
  41. package/dist/dts/DocumentFindCursor.d.ts.map +1 -1
  42. package/dist/dts/FindCursor.d.ts +16 -18
  43. package/dist/dts/FindCursor.d.ts.map +1 -1
  44. package/dist/dts/ListCollectionsCursor.d.ts +20 -0
  45. package/dist/dts/ListCollectionsCursor.d.ts.map +1 -0
  46. package/dist/dts/MongoClient.d.ts +1 -1
  47. package/dist/dts/MongoClient.d.ts.map +1 -1
  48. package/dist/dts/index.d.ts +12 -0
  49. package/dist/dts/index.d.ts.map +1 -1
  50. package/dist/dts/internal/filter.d.ts +8 -0
  51. package/dist/dts/internal/filter.d.ts.map +1 -0
  52. package/dist/dts/internal/modify-result.d.ts +6 -0
  53. package/dist/dts/internal/modify-result.d.ts.map +1 -0
  54. package/dist/dts/internal/schema.d.ts +6 -0
  55. package/dist/dts/internal/schema.d.ts.map +1 -0
  56. package/dist/esm/AggregationCursor.js +22 -0
  57. package/dist/esm/AggregationCursor.js.map +1 -0
  58. package/dist/esm/Collection.js +39 -3
  59. package/dist/esm/Collection.js.map +1 -1
  60. package/dist/esm/Db.js +6 -0
  61. package/dist/esm/Db.js.map +1 -1
  62. package/dist/esm/DocumentAggregationCursor.js +15 -0
  63. package/dist/esm/DocumentAggregationCursor.js.map +1 -0
  64. package/dist/esm/DocumentCollection.js +28 -2
  65. package/dist/esm/DocumentCollection.js.map +1 -1
  66. package/dist/esm/DocumentFindCursor.js +3 -0
  67. package/dist/esm/DocumentFindCursor.js.map +1 -1
  68. package/dist/esm/FindCursor.js +5 -4
  69. package/dist/esm/FindCursor.js.map +1 -1
  70. package/dist/esm/ListCollectionsCursor.js +15 -0
  71. package/dist/esm/ListCollectionsCursor.js.map +1 -0
  72. package/dist/esm/MongoClient.js.map +1 -1
  73. package/dist/esm/index.js +12 -0
  74. package/dist/esm/index.js.map +1 -1
  75. package/dist/esm/internal/filter.js +2 -0
  76. package/dist/esm/internal/filter.js.map +1 -0
  77. package/dist/esm/internal/modify-result.js +2 -0
  78. package/dist/esm/internal/modify-result.js.map +1 -0
  79. package/dist/esm/internal/schema.js +10 -0
  80. package/dist/esm/internal/schema.js.map +1 -0
  81. package/dist/esm/internal/version.js +1 -1
  82. package/package.json +26 -3
  83. package/src/AggregationCursor.ts +37 -0
  84. package/src/Collection.ts +390 -24
  85. package/src/Db.ts +47 -3
  86. package/src/DocumentAggregationCursor.ts +30 -0
  87. package/src/DocumentCollection.ts +342 -5
  88. package/src/DocumentFindCursor.ts +5 -5
  89. package/src/FindCursor.ts +31 -27
  90. package/src/ListCollectionsCursor.ts +45 -0
  91. package/src/MongoClient.ts +5 -2
  92. package/src/index.ts +15 -0
  93. package/src/internal/filter.ts +9 -0
  94. package/src/internal/modify-result.ts +6 -0
  95. package/src/internal/schema.ts +12 -0
  96. package/src/internal/version.ts +1 -1
@@ -0,0 +1,45 @@
1
+ /**
2
+ * @since 0.0.1
3
+ */
4
+ import * as Data from "effect/Data"
5
+ import * as Effect from "effect/Effect"
6
+ import * as F from "effect/Function"
7
+ import * as Stream from "effect/Stream"
8
+ import type {
9
+ CollectionInfo as MongoCollectionInfo,
10
+ ListCollectionsCursor as MongoListCollectionsCursor
11
+ } from "mongodb"
12
+ import * as MongoError from "./MongoError.js"
13
+
14
+ export type NameOnlyCollectionInfo = Pick<MongoCollectionInfo, "name" | "type">
15
+ export type FullCollectionInfo = MongoCollectionInfo
16
+
17
+ type DefaultCollectionInfo = NameOnlyCollectionInfo | FullCollectionInfo
18
+
19
+ export class ListCollectionsCursor<
20
+ T extends DefaultCollectionInfo = DefaultCollectionInfo
21
+ > extends Data.TaggedClass("ListCollectionsCursor")<{
22
+ cursor: MongoListCollectionsCursor<T>
23
+ }> {}
24
+
25
+ export type NameOnlyListCollectionsCursor = ListCollectionsCursor<
26
+ Pick<MongoCollectionInfo, "name" | "type">
27
+ >
28
+
29
+ export type FullListCollectionsCursor = ListCollectionsCursor<MongoCollectionInfo>
30
+
31
+ export const toArray = <T extends DefaultCollectionInfo>(
32
+ cursor: ListCollectionsCursor<T>
33
+ ): Effect.Effect<ReadonlyArray<T>, MongoError.MongoError> =>
34
+ F.pipe(
35
+ Effect.tryPromise({ try: () => cursor.cursor.toArray(), catch: F.identity }),
36
+ Effect.catchAll(MongoError.mongoErrorDie<ReadonlyArray<T>>(`${cursor._tag}.toArray error`))
37
+ )
38
+
39
+ export const toStream = <T extends DefaultCollectionInfo>(
40
+ cursor: ListCollectionsCursor<T>
41
+ ): Stream.Stream<T, MongoError.MongoError> =>
42
+ F.pipe(
43
+ Stream.fromAsyncIterable(cursor.cursor, F.identity),
44
+ Stream.catchAll(MongoError.mongoErrorStream<T>(`${cursor._tag}.toStream error`))
45
+ )
@@ -12,7 +12,10 @@ import * as Context from "effect/Context"
12
12
 
13
13
  export type MongoClient = MongoClient_
14
14
 
15
- export const connect = (url: string, options?: MongoClientOptions) =>
15
+ export const connect = (
16
+ url: string,
17
+ options?: MongoClientOptions
18
+ ): Effect.Effect<MongoClient, MongoError.MongoError> =>
16
19
  Effect.promise(() => MongoClient_.connect(url, options)).pipe(
17
20
  Effect.catchAll(MongoError.mongoErrorDie<MongoClient_>("connect error"))
18
21
  )
@@ -22,7 +25,7 @@ export const db: {
22
25
  (client: MongoClient, dbName?: string, options?: DbOptions): Db
23
26
  } = F.dual(
24
27
  (args) => isMongoClient(args[0]),
25
- (client: MongoClient, dbName?: string, options?: DbOptions) => client.db(dbName, options)
28
+ (client: MongoClient, dbName?: string, options?: DbOptions): Db => client.db(dbName, options)
26
29
  )
27
30
 
28
31
  const isMongoClient = (x: unknown) => x instanceof MongoClient_
package/src/index.ts CHANGED
@@ -1,3 +1,8 @@
1
+ /**
2
+ * @since 0.0.1
3
+ */
4
+ export * as AggregationCursor from "./AggregationCursor.js"
5
+
1
6
  /**
2
7
  * @since 0.0.1
3
8
  */
@@ -8,6 +13,11 @@ export * as Collection from "./Collection.js"
8
13
  */
9
14
  export * as Db from "./Db.js"
10
15
 
16
+ /**
17
+ * @since 0.0.1
18
+ */
19
+ export * as DocumentAggregationCursor from "./DocumentAggregationCursor.js"
20
+
11
21
  /**
12
22
  * @since 0.0.1
13
23
  */
@@ -23,6 +33,11 @@ export * as DocumentFindCursor from "./DocumentFindCursor.js"
23
33
  */
24
34
  export * as FindCursor from "./FindCursor.js"
25
35
 
36
+ /**
37
+ * @since 0.0.1
38
+ */
39
+ export * as ListCollectionsCursor from "./ListCollectionsCursor.js"
40
+
26
41
  /**
27
42
  * @since 0.0.1
28
43
  */
@@ -0,0 +1,9 @@
1
+ import type { Condition, RootFilterOperators as MongoRootFilterOperators, WithId } from "mongodb"
2
+
3
+ export type RootFilterOperators<TSchema> = Omit<MongoRootFilterOperators<TSchema>, "$where"> & { $where?: string }
4
+
5
+ export type Filter<TSchema> =
6
+ & {
7
+ [P in keyof WithId<TSchema>]?: Condition<WithId<TSchema>[P]>
8
+ }
9
+ & RootFilterOperators<WithId<TSchema>>
@@ -0,0 +1,6 @@
1
+ import type * as O from "effect/Option"
2
+ import type { ModifyResult as MongoModifyResult } from "mongodb"
3
+
4
+ export type ModifyResult<TSchema> = Omit<MongoModifyResult<TSchema>, "value"> & {
5
+ value: O.Option<TSchema>
6
+ }
@@ -0,0 +1,12 @@
1
+ import * as Effect from "effect/Effect"
2
+ import * as O from "effect/Option"
3
+ import * as Schema from "effect/Schema"
4
+ import type { Document } from "mongodb"
5
+
6
+ // TODO: there is probably a Schema to do this decode or using typeclass package for traverse
7
+ export const decodeNullableDocument = <A, I, R>(schema: Schema.Schema<A, I, R>, value: Document | null) =>
8
+ Effect.gen(function*(_) {
9
+ if (value === null) return O.none()
10
+ const decoded = yield* _(Schema.decodeUnknown(schema)(value))
11
+ return O.some(decoded)
12
+ })
@@ -1,4 +1,4 @@
1
- let moduleVersion = "0.0.2"
1
+ let moduleVersion = "0.0.4"
2
2
 
3
3
  export const getCurrentVersion = () => moduleVersion
4
4