effect-mongodb 0.1.2 → 0.1.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 (85) hide show
  1. package/README.md +25 -19
  2. package/dist/cjs/AggregationCursor.js +18 -8
  3. package/dist/cjs/AggregationCursor.js.map +1 -1
  4. package/dist/cjs/Collection.js +40 -29
  5. package/dist/cjs/Collection.js.map +1 -1
  6. package/dist/cjs/Db.js +9 -3
  7. package/dist/cjs/Db.js.map +1 -1
  8. package/dist/cjs/DocumentAggregationCursor.js +18 -8
  9. package/dist/cjs/DocumentAggregationCursor.js.map +1 -1
  10. package/dist/cjs/DocumentCollection.js +36 -24
  11. package/dist/cjs/DocumentCollection.js.map +1 -1
  12. package/dist/cjs/DocumentFindCursor.js +24 -14
  13. package/dist/cjs/DocumentFindCursor.js.map +1 -1
  14. package/dist/cjs/FindCursor.js +25 -18
  15. package/dist/cjs/FindCursor.js.map +1 -1
  16. package/dist/cjs/ListCollectionsCursor.js +18 -8
  17. package/dist/cjs/ListCollectionsCursor.js.map +1 -1
  18. package/dist/cjs/MongoClient.js +8 -2
  19. package/dist/cjs/MongoClient.js.map +1 -1
  20. package/dist/cjs/MongoError.js +7 -18
  21. package/dist/cjs/MongoError.js.map +1 -1
  22. package/dist/cjs/internal/mongo-error.js +27 -0
  23. package/dist/cjs/internal/mongo-error.js.map +1 -0
  24. package/dist/cjs/internal/schema.js +2 -2
  25. package/dist/cjs/internal/schema.js.map +1 -1
  26. package/dist/cjs/internal/version.js +1 -1
  27. package/dist/dts/AggregationCursor.d.ts +5 -5
  28. package/dist/dts/AggregationCursor.d.ts.map +1 -1
  29. package/dist/dts/Collection.d.ts +17 -18
  30. package/dist/dts/Collection.d.ts.map +1 -1
  31. package/dist/dts/Db.d.ts.map +1 -1
  32. package/dist/dts/DocumentAggregationCursor.d.ts +5 -5
  33. package/dist/dts/DocumentAggregationCursor.d.ts.map +1 -1
  34. package/dist/dts/DocumentCollection.d.ts +7 -7
  35. package/dist/dts/DocumentCollection.d.ts.map +1 -1
  36. package/dist/dts/DocumentFindCursor.d.ts +5 -5
  37. package/dist/dts/DocumentFindCursor.d.ts.map +1 -1
  38. package/dist/dts/FindCursor.d.ts +5 -5
  39. package/dist/dts/FindCursor.d.ts.map +1 -1
  40. package/dist/dts/ListCollectionsCursor.d.ts +5 -5
  41. package/dist/dts/ListCollectionsCursor.d.ts.map +1 -1
  42. package/dist/dts/MongoClient.d.ts.map +1 -1
  43. package/dist/dts/MongoError.d.ts +32 -12
  44. package/dist/dts/MongoError.d.ts.map +1 -1
  45. package/dist/dts/internal/mongo-error.d.ts +5 -0
  46. package/dist/dts/internal/mongo-error.d.ts.map +1 -0
  47. package/dist/esm/AggregationCursor.js +16 -6
  48. package/dist/esm/AggregationCursor.js.map +1 -1
  49. package/dist/esm/Collection.js +38 -27
  50. package/dist/esm/Collection.js.map +1 -1
  51. package/dist/esm/Db.js +9 -3
  52. package/dist/esm/Db.js.map +1 -1
  53. package/dist/esm/DocumentAggregationCursor.js +16 -6
  54. package/dist/esm/DocumentAggregationCursor.js.map +1 -1
  55. package/dist/esm/DocumentCollection.js +34 -22
  56. package/dist/esm/DocumentCollection.js.map +1 -1
  57. package/dist/esm/DocumentFindCursor.js +22 -12
  58. package/dist/esm/DocumentFindCursor.js.map +1 -1
  59. package/dist/esm/FindCursor.js +23 -16
  60. package/dist/esm/FindCursor.js.map +1 -1
  61. package/dist/esm/ListCollectionsCursor.js +16 -6
  62. package/dist/esm/ListCollectionsCursor.js.map +1 -1
  63. package/dist/esm/MongoClient.js +8 -2
  64. package/dist/esm/MongoClient.js.map +1 -1
  65. package/dist/esm/MongoError.js +3 -17
  66. package/dist/esm/MongoError.js.map +1 -1
  67. package/dist/esm/internal/mongo-error.js +18 -0
  68. package/dist/esm/internal/mongo-error.js.map +1 -0
  69. package/dist/esm/internal/schema.js +2 -2
  70. package/dist/esm/internal/schema.js.map +1 -1
  71. package/dist/esm/internal/version.js +1 -1
  72. package/package.json +1 -1
  73. package/src/AggregationCursor.ts +31 -6
  74. package/src/Collection.ts +80 -50
  75. package/src/Db.ts +7 -3
  76. package/src/DocumentAggregationCursor.ts +27 -5
  77. package/src/DocumentCollection.ts +52 -27
  78. package/src/DocumentFindCursor.ts +34 -11
  79. package/src/FindCursor.ts +36 -13
  80. package/src/ListCollectionsCursor.ts +31 -7
  81. package/src/MongoClient.ts +6 -2
  82. package/src/MongoError.ts +24 -32
  83. package/src/internal/mongo-error.ts +34 -0
  84. package/src/internal/schema.ts +2 -2
  85. package/src/internal/version.ts +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"FindCursor.js","names":["Data","Effect","F","Schema","Stream","Tuple","MongoError","FindCursor","TaggedClass","filter","dual","args","isFindCursor","cursor","schema","project","newSchema","value","sort","direction","limit","toArray","decode","decodeUnknown","tryPromise","try","catch","identity","pipe","catchAll","mongoErrorDie","flatMap","forEach","x","toArrayEither","mapError","error","make","either","toStream","fromAsyncIterable","mongoErrorStream","mapEffect","toStreamEither"],"sources":["../../src/FindCursor.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"FindCursor.js","names":["Data","Effect","F","pipeArguments","Schema","Stream","Tuple","mongoErrorOrDie","MongoError","FindCursorImpl","TaggedClass","pipe","arguments","filter","dual","args","isFindCursor","cursor","schema","project","newSchema","value","sort","direction","limit","toArray","decode","decodeUnknown","promise","catchAllDefect","errorSource","flatMap","forEach","x","toArrayEither","mapError","error","make","either","toStream","fromAsyncIterable","identity","catchAll","mapEffect","toStreamEither","functionName","CollectionErrorSource","module","name","db","namespace","collection"],"sources":["../../src/FindCursor.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
@@ -4,12 +4,22 @@
4
4
  import * as Data from "effect/Data";
5
5
  import * as Effect from "effect/Effect";
6
6
  import * as F from "effect/Function";
7
+ import { pipeArguments } from "effect/Pipeable";
7
8
  import * as Stream from "effect/Stream";
9
+ import { mongoErrorOrDie } from "./internal/mongo-error.js";
8
10
  import * as MongoError from "./MongoError.js";
9
- export class ListCollectionsCursor extends /*#__PURE__*/Data.TaggedClass("ListCollectionsCursor") {}
10
- export const toArray = cursor => F.pipe(Effect.tryPromise({
11
- try: () => cursor.cursor.toArray(),
12
- catch: F.identity
13
- }), Effect.catchAll(MongoError.mongoErrorDie(`${cursor._tag}.toArray error`)));
14
- export const toStream = cursor => F.pipe(Stream.fromAsyncIterable(cursor.cursor, F.identity), Stream.catchAll(MongoError.mongoErrorStream(`${cursor._tag}.toStream error`)));
11
+ /** @internal */
12
+ export class ListCollectionsCursorImpl extends /*#__PURE__*/Data.TaggedClass("ListCollectionsCursor") {
13
+ pipe() {
14
+ return pipeArguments(this, arguments);
15
+ }
16
+ }
17
+ export const toArray = cursor => F.pipe(Effect.promise(() => cursor.cursor.toArray()), Effect.catchAllDefect(mongoErrorOrDie(errorSource(cursor, "toArray"))));
18
+ export const toStream = cursor => F.pipe(Stream.fromAsyncIterable(cursor.cursor, F.identity), Stream.catchAll(mongoErrorOrDie(errorSource(cursor, "toStream"))));
19
+ const errorSource = (cursor, functionName) => new MongoError.CollectionErrorSource({
20
+ module: ListCollectionsCursorImpl.name,
21
+ functionName,
22
+ db: cursor.cursor.namespace.db,
23
+ collection: cursor.cursor.namespace.collection ?? "NO_COLLECTION_NAME"
24
+ });
15
25
  //# sourceMappingURL=ListCollectionsCursor.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ListCollectionsCursor.js","names":["Data","Effect","F","Stream","MongoError","ListCollectionsCursor","TaggedClass","toArray","cursor","pipe","tryPromise","try","catch","identity","catchAll","mongoErrorDie","_tag","toStream","fromAsyncIterable","mongoErrorStream"],"sources":["../../src/ListCollectionsCursor.ts"],"sourcesContent":[null],"mappings":"AAAA;;;AAGA,OAAO,KAAKA,IAAI,MAAM,aAAa;AACnC,OAAO,KAAKC,MAAM,MAAM,eAAe;AACvC,OAAO,KAAKC,CAAC,MAAM,iBAAiB;AACpC,OAAO,KAAKC,MAAM,MAAM,eAAe;AAKvC,OAAO,KAAKC,UAAU,MAAM,iBAAiB;AAO7C,OAAM,MAAOC,qBAEX,sBAAQL,IAAI,CAACM,WAAW,CAAC,uBAAuB,CAEhD;AAQF,OAAO,MAAMC,OAAO,GAClBC,MAAgC,IAEhCN,CAAC,CAACO,IAAI,CACJR,MAAM,CAACS,UAAU,CAAC;EAAEC,GAAG,EAAEA,CAAA,KAAMH,MAAM,CAACA,MAAM,CAACD,OAAO,EAAE;EAAEK,KAAK,EAAEV,CAAC,CAACW;AAAQ,CAAE,CAAC,EAC5EZ,MAAM,CAACa,QAAQ,CAACV,UAAU,CAACW,aAAa,CAAW,GAAGP,MAAM,CAACQ,IAAI,gBAAgB,CAAC,CAAC,CACpF;AAEH,OAAO,MAAMC,QAAQ,GACnBT,MAAgC,IAEhCN,CAAC,CAACO,IAAI,CACJN,MAAM,CAACe,iBAAiB,CAACV,MAAM,CAACA,MAAM,EAAEN,CAAC,CAACW,QAAQ,CAAC,EACnDV,MAAM,CAACW,QAAQ,CAACV,UAAU,CAACe,gBAAgB,CAAI,GAAGX,MAAM,CAACQ,IAAI,iBAAiB,CAAC,CAAC,CACjF","ignoreList":[]}
1
+ {"version":3,"file":"ListCollectionsCursor.js","names":["Data","Effect","F","pipeArguments","Stream","mongoErrorOrDie","MongoError","ListCollectionsCursorImpl","TaggedClass","pipe","arguments","toArray","cursor","promise","catchAllDefect","errorSource","toStream","fromAsyncIterable","identity","catchAll","functionName","CollectionErrorSource","module","name","db","namespace","collection"],"sources":["../../src/ListCollectionsCursor.ts"],"sourcesContent":[null],"mappings":"AAAA;;;AAGA,OAAO,KAAKA,IAAI,MAAM,aAAa;AACnC,OAAO,KAAKC,MAAM,MAAM,eAAe;AACvC,OAAO,KAAKC,CAAC,MAAM,iBAAiB;AAEpC,SAASC,aAAa,QAAQ,iBAAiB;AAC/C,OAAO,KAAKC,MAAM,MAAM,eAAe;AAKvC,SAASC,eAAe,QAAQ,2BAA2B;AAC3D,OAAO,KAAKC,UAAU,MAAM,iBAAiB;AAiB7C;AACA,OAAM,MAAOC,yBAEX,sBAAQP,IAAI,CAACQ,WAAW,CAAC,uBAAuB,CAAiC;EACjFC,IAAIA,CAAA;IACF,OAAON,aAAa,CAAC,IAAI,EAAEO,SAAS,CAAC;EACvC;;AASF,OAAO,MAAMC,OAAO,GAClBC,MAAgC,IAEhCV,CAAC,CAACO,IAAI,CACJR,MAAM,CAACY,OAAO,CAAC,MAAMD,MAAM,CAACA,MAAM,CAACD,OAAO,EAAE,CAAC,EAC7CV,MAAM,CAACa,cAAc,CAACT,eAAe,CAACU,WAAW,CAACH,MAAM,EAAE,SAAS,CAAC,CAAC,CAAC,CACvE;AAEH,OAAO,MAAMI,QAAQ,GACnBJ,MAAgC,IAEhCV,CAAC,CAACO,IAAI,CACJL,MAAM,CAACa,iBAAiB,CAACL,MAAM,CAACA,MAAM,EAAEV,CAAC,CAACgB,QAAQ,CAAC,EACnDd,MAAM,CAACe,QAAQ,CAACd,eAAe,CAACU,WAAW,CAACH,MAAM,EAAE,UAAU,CAAC,CAAC,CAAC,CAClE;AAEH,MAAMG,WAAW,GAAGA,CAACH,MAA6B,EAAEQ,YAAoB,KACtE,IAAId,UAAU,CAACe,qBAAqB,CAAC;EACnCC,MAAM,EAAEf,yBAAyB,CAACgB,IAAI;EACtCH,YAAY;EACZI,EAAE,EAAEZ,MAAM,CAACA,MAAM,CAACa,SAAS,CAACD,EAAE;EAC9BE,UAAU,EAAEd,MAAM,CAACA,MAAM,CAACa,SAAS,CAACC,UAAU,IAAI;CACnD,CAAC","ignoreList":[]}
@@ -4,10 +4,16 @@
4
4
  import * as Effect from "effect/Effect";
5
5
  import * as F from "effect/Function";
6
6
  import { MongoClient as MongoClient_ } from "mongodb";
7
+ import { mongoErrorOrDie } from "./internal/mongo-error.js";
7
8
  import * as MongoError from "./MongoError.js";
8
- export const connect = (url, options) => Effect.promise(() => MongoClient_.connect(url, options)).pipe(Effect.catchAll(MongoError.mongoErrorDie("connect error")));
9
- export const close = /*#__PURE__*/F.dual(args => isMongoClient(args[0]), (client, force) => Effect.promise(() => client.close(force)).pipe(Effect.catchAll(MongoError.mongoErrorDie("close error"))));
9
+ export const connect = (url, options) => Effect.promise(() => MongoClient_.connect(url, options)).pipe(Effect.catchAllDefect(mongoErrorOrDie(errorSource([new URL(url).host], "connect"))));
10
+ export const close = /*#__PURE__*/F.dual(args => isMongoClient(args[0]), (client, force) => Effect.promise(() => client.close(force)).pipe(Effect.catchAllDefect(mongoErrorOrDie(errorSource(client.options.hosts.map(x => x.host ?? "NO_HOST"), "close")))));
10
11
  export const connectScoped = (url, options) => Effect.acquireRelease(connect(url, options), client => close(client, options?.forceClose).pipe(Effect.orDie));
11
12
  export const db = /*#__PURE__*/F.dual(args => isMongoClient(args[0]), (client, dbName, options) => client.db(dbName, options));
12
13
  const isMongoClient = x => x instanceof MongoClient_;
14
+ const errorSource = (hosts, functionName) => new MongoError.ClientErrorSource({
15
+ module: "MongoClient",
16
+ functionName,
17
+ hosts
18
+ });
13
19
  //# sourceMappingURL=MongoClient.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"MongoClient.js","names":["Effect","F","MongoClient","MongoClient_","MongoError","connect","url","options","promise","pipe","catchAll","mongoErrorDie","close","dual","args","isMongoClient","client","force","connectScoped","acquireRelease","forceClose","orDie","db","dbName","x"],"sources":["../../src/MongoClient.ts"],"sourcesContent":[null],"mappings":"AAAA;;;AAGA,OAAO,KAAKA,MAAM,MAAM,eAAe;AACvC,OAAO,KAAKC,CAAC,MAAM,iBAAiB;AAGpC,SAASC,WAAW,IAAIC,YAAY,QAAQ,SAAS;AACrD,OAAO,KAAKC,UAAU,MAAM,iBAAiB;AAI7C,OAAO,MAAMC,OAAO,GAAGA,CACrBC,GAAW,EACXC,OAA4B,KAE5BP,MAAM,CAACQ,OAAO,CAAC,MAAML,YAAY,CAACE,OAAO,CAACC,GAAG,EAAEC,OAAO,CAAC,CAAC,CAACE,IAAI,CAC3DT,MAAM,CAACU,QAAQ,CAACN,UAAU,CAACO,aAAa,CAAe,eAAe,CAAC,CAAC,CACzE;AAEH,OAAO,MAAMC,KAAK,gBAGdX,CAAC,CAACY,IAAI,CACPC,IAAI,IAAKC,aAAa,CAACD,IAAI,CAAC,CAAC,CAAC,CAAC,EAChC,CAACE,MAAmB,EAAEC,KAAe,KACnCjB,MAAM,CAACQ,OAAO,CAAC,MAAMQ,MAAM,CAACJ,KAAK,CAACK,KAAK,CAAC,CAAC,CAACR,IAAI,CAC5CT,MAAM,CAACU,QAAQ,CAACN,UAAU,CAACO,aAAa,CAAO,aAAa,CAAC,CAAC,CAC/D,CACJ;AAED,OAAO,MAAMO,aAAa,GAAGA,CAC3BZ,GAAW,EACXC,OAAuD,KAEvDP,MAAM,CAACmB,cAAc,CACnBd,OAAO,CAACC,GAAG,EAAEC,OAAO,CAAC,EACpBS,MAAM,IAAKJ,KAAK,CAACI,MAAM,EAAET,OAAO,EAAEa,UAAU,CAAC,CAACX,IAAI,CAACT,MAAM,CAACqB,KAAK,CAAC,CAClE;AAEH,OAAO,MAAMC,EAAE,gBAGXrB,CAAC,CAACY,IAAI,CACPC,IAAI,IAAKC,aAAa,CAACD,IAAI,CAAC,CAAC,CAAC,CAAC,EAChC,CAACE,MAAmB,EAAEO,MAAe,EAAEhB,OAAmB,KAASS,MAAM,CAACM,EAAE,CAACC,MAAM,EAAEhB,OAAO,CAAC,CAC9F;AAED,MAAMQ,aAAa,GAAIS,CAAU,IAAKA,CAAC,YAAYrB,YAAY","ignoreList":[]}
1
+ {"version":3,"file":"MongoClient.js","names":["Effect","F","MongoClient","MongoClient_","mongoErrorOrDie","MongoError","connect","url","options","promise","pipe","catchAllDefect","errorSource","URL","host","close","dual","args","isMongoClient","client","force","hosts","map","x","connectScoped","acquireRelease","forceClose","orDie","db","dbName","functionName","ClientErrorSource","module"],"sources":["../../src/MongoClient.ts"],"sourcesContent":[null],"mappings":"AAAA;;;AAGA,OAAO,KAAKA,MAAM,MAAM,eAAe;AACvC,OAAO,KAAKC,CAAC,MAAM,iBAAiB;AAGpC,SAASC,WAAW,IAAIC,YAAY,QAAQ,SAAS;AACrD,SAASC,eAAe,QAAQ,2BAA2B;AAC3D,OAAO,KAAKC,UAAU,MAAM,iBAAiB;AAI7C,OAAO,MAAMC,OAAO,GAAGA,CACrBC,GAAW,EACXC,OAA4B,KAE5BR,MAAM,CAACS,OAAO,CAAC,MAAMN,YAAY,CAACG,OAAO,CAACC,GAAG,EAAEC,OAAO,CAAC,CAAC,CAACE,IAAI,CAC3DV,MAAM,CAACW,cAAc,CAACP,eAAe,CAACQ,WAAW,CAAC,CAAC,IAAIC,GAAG,CAACN,GAAG,CAAC,CAACO,IAAI,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC,CACpF;AAEH,OAAO,MAAMC,KAAK,gBAGdd,CAAC,CAACe,IAAI,CACPC,IAAI,IAAKC,aAAa,CAACD,IAAI,CAAC,CAAC,CAAC,CAAC,EAChC,CAACE,MAAmB,EAAEC,KAAe,KACnCpB,MAAM,CAACS,OAAO,CAAC,MAAMU,MAAM,CAACJ,KAAK,CAACK,KAAK,CAAC,CAAC,CAACV,IAAI,CAC5CV,MAAM,CAACW,cAAc,CAACP,eAAe,CAACQ,WAAW,CAACO,MAAM,CAACX,OAAO,CAACa,KAAK,CAACC,GAAG,CAAEC,CAAC,IAAKA,CAAC,CAACT,IAAI,IAAI,SAAS,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,CACnH,CACJ;AAED,OAAO,MAAMU,aAAa,GAAGA,CAC3BjB,GAAW,EACXC,OAAuD,KAEvDR,MAAM,CAACyB,cAAc,CACnBnB,OAAO,CAACC,GAAG,EAAEC,OAAO,CAAC,EACpBW,MAAM,IAAKJ,KAAK,CAACI,MAAM,EAAEX,OAAO,EAAEkB,UAAU,CAAC,CAAChB,IAAI,CAACV,MAAM,CAAC2B,KAAK,CAAC,CAClE;AAEH,OAAO,MAAMC,EAAE,gBAGX3B,CAAC,CAACe,IAAI,CACPC,IAAI,IAAKC,aAAa,CAACD,IAAI,CAAC,CAAC,CAAC,CAAC,EAChC,CAACE,MAAmB,EAAEU,MAAe,EAAErB,OAAmB,KAASW,MAAM,CAACS,EAAE,CAACC,MAAM,EAAErB,OAAO,CAAC,CAC9F;AAED,MAAMU,aAAa,GAAIK,CAAU,IAAKA,CAAC,YAAYpB,YAAY;AAE/D,MAAMS,WAAW,GAAGA,CAACS,KAAoB,EAAES,YAAoB,KAC7D,IAAIzB,UAAU,CAAC0B,iBAAiB,CAAC;EAAEC,MAAM,EAAE,aAAa;EAAEF,YAAY;EAAET;AAAK,CAAE,CAAC","ignoreList":[]}
@@ -2,22 +2,8 @@
2
2
  * @since 0.0.1
3
3
  */
4
4
  import * as Data from "effect/Data";
5
- import * as Effect from "effect/Effect";
6
- import * as F from "effect/Function";
7
- import * as Match from "effect/Match";
8
- import * as Stream from "effect/Stream";
9
- import { MongoError as MongoError_ } from "mongodb";
5
+ export class ClientErrorSource extends /*#__PURE__*/Data.TaggedClass("ClientErrorSource") {}
6
+ export class DbErrorSource extends /*#__PURE__*/Data.TaggedClass("DbErrorSource") {}
7
+ export class CollectionErrorSource extends /*#__PURE__*/Data.TaggedClass("CollectionErrorSource") {}
10
8
  export class MongoError extends /*#__PURE__*/Data.TaggedError("MongoError") {}
11
- export const mongoErrorDie = /*#__PURE__*/F.dual(2, (error, message) => F.pipe(Match.value(error), Match.when(Match.instanceOf(MongoError_), innerError => Effect.fail(new MongoError({
12
- message,
13
- innerError
14
- }))), Match.orElse(cause => Effect.die(new Error(message, {
15
- cause
16
- })))));
17
- export const mongoErrorStream = /*#__PURE__*/F.dual(2, (error, message) => F.pipe(Match.value(error), Match.when(Match.instanceOf(MongoError_), innerError => Stream.fail(new MongoError({
18
- message,
19
- innerError
20
- }))), Match.orElse(cause => Stream.die(new Error(message, {
21
- cause
22
- })))));
23
9
  //# sourceMappingURL=MongoError.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"MongoError.js","names":["Data","Effect","F","Match","Stream","MongoError","MongoError_","TaggedError","mongoErrorDie","dual","error","message","pipe","value","when","instanceOf","innerError","fail","orElse","cause","die","Error","mongoErrorStream"],"sources":["../../src/MongoError.ts"],"sourcesContent":[null],"mappings":"AAAA;;;AAGA,OAAO,KAAKA,IAAI,MAAM,aAAa;AACnC,OAAO,KAAKC,MAAM,MAAM,eAAe;AACvC,OAAO,KAAKC,CAAC,MAAM,iBAAiB;AACpC,OAAO,KAAKC,KAAK,MAAM,cAAc;AACrC,OAAO,KAAKC,MAAM,MAAM,eAAe;AACvC,SAASC,UAAU,IAAIC,WAAW,QAAQ,SAAS;AAEnD,OAAM,MAAOD,UAAW,sBAAQL,IAAI,CAACO,WAAW,CAAC,YAAY,CAG3D;AAEF,OAAO,MAAMC,aAAa,gBAGtBN,CAAC,CAACO,IAAI,CAAC,CAAC,EAAE,CAAIC,KAAc,EAAEC,OAAe,KAC/CT,CAAC,CAACU,IAAI,CACJT,KAAK,CAACU,KAAK,CAACH,KAAK,CAAC,EAClBP,KAAK,CAACW,IAAI,CAACX,KAAK,CAACY,UAAU,CAACT,WAAW,CAAC,EAAGU,UAAU,IAAKf,MAAM,CAACgB,IAAI,CAAC,IAAIZ,UAAU,CAAC;EAAEM,OAAO;EAAEK;AAAU,CAAE,CAAC,CAAC,CAAC,EAC/Gb,KAAK,CAACe,MAAM,CAAEC,KAAK,IACjBlB,MAAM,CAACmB,GAAG,CACR,IAAIC,KAAK,CAACV,OAAO,EAAE;EACjBQ;CACD,CAAC,CACH,CACF,CACF,CAAC;AAEJ,OAAO,MAAMG,gBAAgB,gBAGzBpB,CAAC,CAACO,IAAI,CAAC,CAAC,EAAE,CAAIC,KAAc,EAAEC,OAAe,KAC/CT,CAAC,CAACU,IAAI,CACJT,KAAK,CAACU,KAAK,CAACH,KAAK,CAAC,EAClBP,KAAK,CAACW,IAAI,CAACX,KAAK,CAACY,UAAU,CAACT,WAAW,CAAC,EAAGU,UAAU,IAAKZ,MAAM,CAACa,IAAI,CAAC,IAAIZ,UAAU,CAAC;EAAEM,OAAO;EAAEK;AAAU,CAAE,CAAC,CAAC,CAAC,EAC/Gb,KAAK,CAACe,MAAM,CAAEC,KAAK,IAAKf,MAAM,CAACgB,GAAG,CAAC,IAAIC,KAAK,CAACV,OAAO,EAAE;EAAEQ;AAAK,CAAE,CAAC,CAAC,CAAC,CACnE,CAAC","ignoreList":[]}
1
+ {"version":3,"file":"MongoError.js","names":["Data","ClientErrorSource","TaggedClass","DbErrorSource","CollectionErrorSource","MongoError","TaggedError"],"sources":["../../src/MongoError.ts"],"sourcesContent":[null],"mappings":"AAAA;;;AAGA,OAAO,KAAKA,IAAI,MAAM,aAAa;AAGnC,OAAM,MAAOC,iBAAkB,sBAAQD,IAAI,CAACE,WAAW,CAAC,mBAAmB,CAIzE;AAEF,OAAM,MAAOC,aAAc,sBAAQH,IAAI,CAACE,WAAW,CAAC,eAAe,CAIjE;AAEF,OAAM,MAAOE,qBAAsB,sBAAQJ,IAAI,CAACE,WAAW,CAAC,uBAAuB,CAKjF;AAIF,OAAM,MAAOG,UAAW,sBAAQL,IAAI,CAACM,WAAW,CAAC,YAAY,CAI3D","ignoreList":[]}
@@ -0,0 +1,18 @@
1
+ import * as Effect from "effect/Effect";
2
+ import * as F from "effect/Function";
3
+ import * as Match from "effect/Match";
4
+ import { MongoError as MongoError_ } from "mongodb";
5
+ import { MongoError } from "../MongoError.js";
6
+ export const mongoErrorOrDie = (source, message) => error => F.pipe(Match.value(error), Match.when(Match.instanceOf(MongoError_), F.flow(makeMongoError(source, message), Effect.fail)), Match.orElse(F.flow(makeError(source, message), Effect.die)));
7
+ const makeMongoError = (source, message) => cause => new MongoError({
8
+ message: messageFrom(source, message),
9
+ cause,
10
+ source
11
+ });
12
+ const makeError = (source, message) => cause => new Error(messageFrom(source, message), {
13
+ cause
14
+ });
15
+ const messageFrom = (source, message) => message ? `${messageFromSource(source)} - ${message}` : messageFromSource(source);
16
+ const messageFromSource = source => F.pipe(Match.value(source), Match.tag("ClientErrorSource", s => `${baseMessage(s)} - hosts ${s.hosts.join(", ")}`), Match.tag("DbErrorSource", s => `${baseMessage(s)} - ${s.db}`), Match.tag("CollectionErrorSource", s => `${baseMessage(s)} - ${s.db}.${s.collection}`), Match.exhaustive);
17
+ const baseMessage = s => `Error in ${s.module}.${s.functionName}`;
18
+ //# sourceMappingURL=mongo-error.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mongo-error.js","names":["Effect","F","Match","MongoError","MongoError_","mongoErrorOrDie","source","message","error","pipe","value","when","instanceOf","flow","makeMongoError","fail","orElse","makeError","die","cause","messageFrom","Error","messageFromSource","tag","s","baseMessage","hosts","join","db","collection","exhaustive","module","functionName"],"sources":["../../../src/internal/mongo-error.ts"],"sourcesContent":[null],"mappings":"AAAA,OAAO,KAAKA,MAAM,MAAM,eAAe;AACvC,OAAO,KAAKC,CAAC,MAAM,iBAAiB;AACpC,OAAO,KAAKC,KAAK,MAAM,cAAc;AACrC,SAASC,UAAU,IAAIC,WAAW,QAAQ,SAAS;AAEnD,SAASD,UAAU,QAAQ,kBAAkB;AAE7C,OAAO,MAAME,eAAe,GAC1BA,CAACC,MAAmB,EAAEC,OAAgB,KAAMC,KAAc,IACxDP,CAAC,CAACQ,IAAI,CACJP,KAAK,CAACQ,KAAK,CAACF,KAAK,CAAC,EAClBN,KAAK,CAACS,IAAI,CAACT,KAAK,CAACU,UAAU,CAACR,WAAW,CAAC,EAAEH,CAAC,CAACY,IAAI,CAACC,cAAc,CAACR,MAAM,EAAEC,OAAO,CAAC,EAAEP,MAAM,CAACe,IAAI,CAAC,CAAC,EAC/Fb,KAAK,CAACc,MAAM,CAACf,CAAC,CAACY,IAAI,CAACI,SAAS,CAACX,MAAM,EAAEC,OAAO,CAAC,EAAEP,MAAM,CAACkB,GAAG,CAAC,CAAC,CAC7D;AAEL,MAAMJ,cAAc,GAAGA,CAACR,MAAmB,EAAEC,OAA2B,KAAMY,KAAkB,IAC9F,IAAIhB,UAAU,CAAC;EAAEI,OAAO,EAAEa,WAAW,CAACd,MAAM,EAAEC,OAAO,CAAC;EAAEY,KAAK;EAAEb;AAAM,CAAE,CAAC;AAE1E,MAAMW,SAAS,GAAGA,CAACX,MAAmB,EAAEC,OAA2B,KAAMY,KAAc,IACrF,IAAIE,KAAK,CAACD,WAAW,CAACd,MAAM,EAAEC,OAAO,CAAC,EAAE;EAAEY;AAAK,CAAE,CAAC;AAEpD,MAAMC,WAAW,GAAGA,CAACd,MAAmB,EAAEC,OAAgB,KACxDA,OAAO,GAAG,GAAGe,iBAAiB,CAAChB,MAAM,CAAC,MAAMC,OAAO,EAAE,GAAGe,iBAAiB,CAAChB,MAAM,CAAC;AAEnF,MAAMgB,iBAAiB,GAAIhB,MAAmB,IAC5CL,CAAC,CAACQ,IAAI,CACJP,KAAK,CAACQ,KAAK,CAACJ,MAAM,CAAC,EACnBJ,KAAK,CAACqB,GAAG,CAAC,mBAAmB,EAAGC,CAAC,IAAK,GAAGC,WAAW,CAACD,CAAC,CAAC,YAAYA,CAAC,CAACE,KAAK,CAACC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,EACxFzB,KAAK,CAACqB,GAAG,CAAC,eAAe,EAAGC,CAAC,IAAK,GAAGC,WAAW,CAACD,CAAC,CAAC,MAAMA,CAAC,CAACI,EAAE,EAAE,CAAC,EAChE1B,KAAK,CAACqB,GAAG,CAAC,uBAAuB,EAAGC,CAAC,IAAK,GAAGC,WAAW,CAACD,CAAC,CAAC,MAAMA,CAAC,CAACI,EAAE,IAAIJ,CAAC,CAACK,UAAU,EAAE,CAAC,EACxF3B,KAAK,CAAC4B,UAAU,CACjB;AAEH,MAAML,WAAW,GAAID,CAA2C,IAAK,YAAYA,CAAC,CAACO,MAAM,IAAIP,CAAC,CAACQ,YAAY,EAAE","ignoreList":[]}
@@ -2,9 +2,9 @@ import * as Effect from "effect/Effect";
2
2
  import * as O from "effect/Option";
3
3
  import * as Schema from "effect/Schema";
4
4
  // TODO: there is probably a Schema to do this decode or using typeclass package for traverse
5
- export const decodeNullableDocument = (schema, value) => Effect.gen(function* (_) {
5
+ export const decodeNullableDocument = (schema, value) => Effect.gen(function* () {
6
6
  if (value === null) return O.none();
7
- const decoded = yield* _(Schema.decodeUnknown(schema)(value));
7
+ const decoded = yield* Schema.decodeUnknown(schema)(value);
8
8
  return O.some(decoded);
9
9
  });
10
10
  //# sourceMappingURL=schema.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"schema.js","names":["Effect","O","Schema","decodeNullableDocument","schema","value","gen","_","none","decoded","decodeUnknown","some"],"sources":["../../../src/internal/schema.ts"],"sourcesContent":[null],"mappings":"AAAA,OAAO,KAAKA,MAAM,MAAM,eAAe;AACvC,OAAO,KAAKC,CAAC,MAAM,eAAe;AAClC,OAAO,KAAKC,MAAM,MAAM,eAAe;AAGvC;AACA,OAAO,MAAMC,sBAAsB,GAAGA,CAAUC,MAA8B,EAAEC,KAAsB,KACpGL,MAAM,CAACM,GAAG,CAAC,WAAUC,CAAC;EACpB,IAAIF,KAAK,KAAK,IAAI,EAAE,OAAOJ,CAAC,CAACO,IAAI,EAAE;EACnC,MAAMC,OAAO,GAAG,OAAOF,CAAC,CAACL,MAAM,CAACQ,aAAa,CAACN,MAAM,CAAC,CAACC,KAAK,CAAC,CAAC;EAC7D,OAAOJ,CAAC,CAACU,IAAI,CAACF,OAAO,CAAC;AACxB,CAAC,CAAC","ignoreList":[]}
1
+ {"version":3,"file":"schema.js","names":["Effect","O","Schema","decodeNullableDocument","schema","value","gen","none","decoded","decodeUnknown","some"],"sources":["../../../src/internal/schema.ts"],"sourcesContent":[null],"mappings":"AAAA,OAAO,KAAKA,MAAM,MAAM,eAAe;AACvC,OAAO,KAAKC,CAAC,MAAM,eAAe;AAClC,OAAO,KAAKC,MAAM,MAAM,eAAe;AAGvC;AACA,OAAO,MAAMC,sBAAsB,GAAGA,CAAUC,MAA8B,EAAEC,KAAsB,KACpGL,MAAM,CAACM,GAAG,CAAC,aAAS;EAClB,IAAID,KAAK,KAAK,IAAI,EAAE,OAAOJ,CAAC,CAACM,IAAI,EAAE;EACnC,MAAMC,OAAO,GAAG,OAAON,MAAM,CAACO,aAAa,CAACL,MAAM,CAAC,CAACC,KAAK,CAAC;EAC1D,OAAOJ,CAAC,CAACS,IAAI,CAACF,OAAO,CAAC;AACxB,CAAC,CAAC","ignoreList":[]}
@@ -1,4 +1,4 @@
1
- let moduleVersion = "0.1.2";
1
+ let moduleVersion = "0.1.4";
2
2
  export const getCurrentVersion = () => moduleVersion;
3
3
  export const setCurrentVersion = version => {
4
4
  moduleVersion = version;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "effect-mongodb",
3
- "version": "0.1.2",
3
+ "version": "0.1.4",
4
4
  "description": "A MongoDB toolkit for Effect",
5
5
  "license": "MIT",
6
6
  "repository": {
@@ -5,22 +5,39 @@ import * as Data from "effect/Data"
5
5
  import * as Effect from "effect/Effect"
6
6
  import * as F from "effect/Function"
7
7
  import type * as ParseResult from "effect/ParseResult"
8
+ import type { Pipeable } from "effect/Pipeable"
9
+ import { pipeArguments } from "effect/Pipeable"
8
10
  import * as Schema from "effect/Schema"
9
11
  import * as Stream from "effect/Stream"
10
12
  import type { AggregationCursor as MongoAggregationCursor } from "mongodb"
13
+ import { mongoErrorOrDie } from "./internal/mongo-error.js"
11
14
  import * as MongoError from "./MongoError.js"
12
15
 
13
- export class AggregationCursor<A, I = A, R = never> extends Data.TaggedClass("AggregationCursor")<
14
- { cursor: MongoAggregationCursor<unknown>; schema: Schema.Schema<A, I, R> }
15
- > {
16
+ interface AggregationCursorFields<A, I = A, R = never> {
17
+ cursor: MongoAggregationCursor<unknown>
18
+ schema: Schema.Schema<A, I, R>
19
+ }
20
+
21
+ export interface AggregationCursor<A, I = A, R = never> extends AggregationCursorFields<A, I, R>, Pipeable {
22
+ _tag: "AggregationCursor"
23
+ }
24
+
25
+ /** @internal */
26
+ export class AggregationCursorImpl<A, I = A, R = never>
27
+ extends Data.TaggedClass("AggregationCursor")<AggregationCursorFields<A, I, R>>
28
+ implements AggregationCursor<A, I, R>
29
+ {
30
+ pipe() {
31
+ return pipeArguments(this, arguments)
32
+ }
16
33
  }
17
34
 
18
35
  export const toArray = <A, I, R>(
19
36
  cursor: AggregationCursor<A, I, R>
20
37
  ): Effect.Effect<Array<A>, MongoError.MongoError | ParseResult.ParseError, R> => {
21
38
  const decode = Schema.decodeUnknown(cursor.schema)
22
- return Effect.tryPromise({ try: () => cursor.cursor.toArray(), catch: F.identity }).pipe(
23
- Effect.catchAll(MongoError.mongoErrorDie<Array<A>>("Unable to get array from mongodb aggregate cursor")),
39
+ return Effect.promise(() => cursor.cursor.toArray()).pipe(
40
+ Effect.catchAllDefect(mongoErrorOrDie(errorSource(cursor, "toArray"))),
24
41
  Effect.flatMap(Effect.forEach((x) => decode(x)))
25
42
  )
26
43
  }
@@ -31,7 +48,15 @@ export const toStream = <A, I, R>(
31
48
  const decode = Schema.decodeUnknown(cursor.schema)
32
49
  return F.pipe(
33
50
  Stream.fromAsyncIterable(cursor.cursor, F.identity),
34
- Stream.catchAll(MongoError.mongoErrorStream<A>("Unable to get stream from mongodb aggregate cursor")),
51
+ Stream.catchAll(mongoErrorOrDie(errorSource(cursor, "toStream"))),
35
52
  Stream.mapEffect((x) => decode(x))
36
53
  )
37
54
  }
55
+
56
+ const errorSource = <A, I, R>(cursor: AggregationCursor<A, I, R>, functionName: string) =>
57
+ new MongoError.CollectionErrorSource({
58
+ module: AggregationCursorImpl.name,
59
+ functionName,
60
+ db: cursor.cursor.namespace.db,
61
+ collection: cursor.cursor.namespace.collection ?? "NO_COLLECTION_NAME"
62
+ })
package/src/Collection.ts CHANGED
@@ -7,6 +7,8 @@ import * as Effect from "effect/Effect"
7
7
  import * as F from "effect/Function"
8
8
  import type * as O from "effect/Option"
9
9
  import type * as ParseResult from "effect/ParseResult"
10
+ import type { Pipeable } from "effect/Pipeable"
11
+ import { pipeArguments } from "effect/Pipeable"
10
12
  import * as Schema from "effect/Schema"
11
13
  import type {
12
14
  AggregateOptions,
@@ -38,14 +40,32 @@ import * as AggregationCursor from "./AggregationCursor.js"
38
40
  import * as FindCursor from "./FindCursor.js"
39
41
  import type { Filter } from "./internal/filter.js"
40
42
  import type { ModifyResult } from "./internal/modify-result.js"
43
+ import { mongoErrorOrDie } from "./internal/mongo-error.js"
41
44
  import * as SchemaExt from "./internal/schema.js"
42
45
  import * as MongoError from "./MongoError.js"
43
46
 
44
- export class Collection<A extends Document, I extends Document = A, R = never> extends Data.TaggedClass("Collection")<{
47
+ type CollectionFields<A extends Document, I extends Document = A, R = never> = {
45
48
  collection: MongoCollection
46
49
  schema: Schema.Schema<A, I, R>
47
- }> {
50
+ }
51
+
52
+ export interface Collection<A extends Document, I extends Document = A, R = never>
53
+ extends CollectionFields<A, I, R>, Pipeable
54
+ {
55
+ _tag: "Collection"
56
+ /** @internal */
57
+ encode: ReturnType<typeof Schema.encode<A, I, R>>
58
+ }
59
+
60
+ /** @internal */
61
+ export class CollectionImpl<A extends Document, I extends Document = A, R = never>
62
+ extends Data.TaggedClass("Collection")<CollectionFields<A, I, R>>
63
+ implements Collection<A, I, R>
64
+ {
48
65
  readonly encode = Schema.encode(this.schema)
66
+ pipe() {
67
+ return pipeArguments(this, arguments)
68
+ }
49
69
  }
50
70
 
51
71
  export type FindOptions = Omit<MongoFindOptions, "projection">
@@ -67,7 +87,7 @@ export const find: {
67
87
  filter?: Filter<I>,
68
88
  options?: FindOptions
69
89
  ): FindCursor.FindCursor<A, I, R> =>
70
- new FindCursor.FindCursor<A, I, R>({
90
+ new FindCursor.FindCursorImpl<A, I, R>({
71
91
  cursor: collection.collection.find(filter ?? {}, options),
72
92
  schema: collection.schema
73
93
  })
@@ -89,53 +109,53 @@ export const findOne: {
89
109
  filter: Filter<I>,
90
110
  options?: FindOptions
91
111
  ): Effect.Effect<O.Option<A>, MongoError.MongoError | ParseResult.ParseError, R> =>
92
- Effect.gen(function*(_) {
93
- const value = yield* _(Effect.promise(() => collection.collection.findOne(filter, options)))
94
- return yield* _(SchemaExt.decodeNullableDocument(collection.schema, value))
112
+ Effect.gen(function*() {
113
+ const value = yield* Effect.promise(() => collection.collection.findOne(filter, options))
114
+ return yield* SchemaExt.decodeNullableDocument(collection.schema, value)
95
115
  }).pipe(
96
- Effect.catchAllDefect(MongoError.mongoErrorDie<O.Option<A>>("findOne error"))
116
+ Effect.catchAllDefect(mongoErrorOrDie(errorSource(collection, "findOne")))
97
117
  )
98
118
  )
99
119
 
100
120
  export const insertOne: {
101
121
  <A extends Document>(doc: A, options?: InsertOneOptions): <I extends Document, R>(
102
122
  collection: Collection<A, I, R>
103
- ) => Effect.Effect<InsertOneResult, MongoError.MongoError | ParseResult.ParseError, R>
123
+ ) => Effect.Effect<InsertOneResult<I>, MongoError.MongoError | ParseResult.ParseError, R>
104
124
  <A extends Document, I extends Document, R>(
105
125
  collection: Collection<A, I, R>,
106
126
  doc: A,
107
127
  options?: InsertOneOptions
108
- ): Effect.Effect<InsertOneResult, MongoError.MongoError | ParseResult.ParseError, R>
128
+ ): Effect.Effect<InsertOneResult<I>, MongoError.MongoError | ParseResult.ParseError, R>
109
129
  } = F.dual((args) => isCollection(args[0]), <A extends Document, I extends Document, R>(
110
130
  collection: Collection<A, I, R>,
111
131
  doc: A,
112
132
  options?: InsertOneOptions
113
- ): Effect.Effect<InsertOneResult, MongoError.MongoError | ParseResult.ParseError, R> =>
133
+ ): Effect.Effect<InsertOneResult<I>, MongoError.MongoError | ParseResult.ParseError, R> =>
114
134
  F.pipe(
115
135
  collection.encode(doc),
116
136
  Effect.flatMap((doc) => Effect.promise(() => collection.collection.insertOne(doc, options))),
117
- Effect.catchAllDefect(MongoError.mongoErrorDie<InsertOneResult>("insertOne error"))
137
+ Effect.catchAllDefect(mongoErrorOrDie(errorSource(collection, "insertOne")))
118
138
  ))
119
139
 
120
140
  export const insertMany: {
121
141
  <A extends Document>(docs: ReadonlyArray<A>, options?: BulkWriteOptions): <I extends Document, R>(
122
142
  collection: Collection<A, I, R>
123
- ) => Effect.Effect<InsertManyResult, MongoError.MongoError | ParseResult.ParseError, R>
143
+ ) => Effect.Effect<InsertManyResult<I>, MongoError.MongoError | ParseResult.ParseError, R>
124
144
  <A extends Document, I extends Document, R>(
125
145
  collection: Collection<A, I, R>,
126
146
  docs: ReadonlyArray<A>,
127
147
  options?: BulkWriteOptions
128
- ): Effect.Effect<InsertManyResult, MongoError.MongoError | ParseResult.ParseError, R>
148
+ ): Effect.Effect<InsertManyResult<I>, MongoError.MongoError | ParseResult.ParseError, R>
129
149
  } = F.dual((args) => isCollection(args[0]), <A extends Document, I extends Document, R>(
130
150
  collection: Collection<A, I, R>,
131
151
  docs: ReadonlyArray<A>,
132
152
  options?: BulkWriteOptions
133
- ): Effect.Effect<InsertManyResult, MongoError.MongoError | ParseResult.ParseError, R> => {
153
+ ): Effect.Effect<InsertManyResult<I>, MongoError.MongoError | ParseResult.ParseError, R> => {
134
154
  return F.pipe(
135
155
  docs,
136
156
  Effect.forEach((doc) => collection.encode(doc)),
137
157
  Effect.flatMap((docs) => Effect.promise(() => collection.collection.insertMany(docs, options))),
138
- Effect.catchAllDefect(MongoError.mongoErrorDie<InsertManyResult>("insertMany error"))
158
+ Effect.catchAllDefect(mongoErrorOrDie(errorSource(collection, "insertMany")))
139
159
  )
140
160
  })
141
161
 
@@ -156,7 +176,7 @@ export const deleteOne: {
156
176
  options?: DeleteOptions
157
177
  ): Effect.Effect<DeleteResult, MongoError.MongoError, R> =>
158
178
  Effect.promise(() => collection.collection.deleteOne(filter, options)).pipe(
159
- Effect.catchAllDefect(MongoError.mongoErrorDie<DeleteResult>("deleteOne error"))
179
+ Effect.catchAllDefect(mongoErrorOrDie(errorSource(collection, "deleteOne")))
160
180
  )
161
181
  )
162
182
 
@@ -177,7 +197,7 @@ export const deleteMany: {
177
197
  options?: DeleteOptions
178
198
  ): Effect.Effect<DeleteResult, MongoError.MongoError, R> =>
179
199
  Effect.promise(() => collection.collection.deleteMany(filter, options)).pipe(
180
- Effect.catchAllDefect(MongoError.mongoErrorDie<DeleteResult>("deleteMany error"))
200
+ Effect.catchAllDefect(mongoErrorOrDie(errorSource(collection, "deleteMany")))
181
201
  )
182
202
  )
183
203
 
@@ -186,15 +206,15 @@ export const updateMany: {
186
206
  filter: Filter<I>,
187
207
  update: UpdateFilter<I> | ReadonlyArray<Document>,
188
208
  options?: UpdateOptions
189
- ): <A extends Document, R>(
190
- collection: Collection<A, I, R>
191
- ) => Effect.Effect<UpdateResult, MongoError.MongoError, R>
209
+ ): <A extends Document, I2 extends I, R>(
210
+ collection: Collection<A, I2, R>
211
+ ) => Effect.Effect<UpdateResult<I2>, MongoError.MongoError, R>
192
212
  <A extends Document, I extends Document, R>(
193
213
  collection: Collection<A, I, R>,
194
214
  filter: Filter<I>,
195
215
  update: UpdateFilter<I> | ReadonlyArray<Document>,
196
216
  options?: UpdateOptions
197
- ): Effect.Effect<UpdateResult, MongoError.MongoError, R>
217
+ ): Effect.Effect<UpdateResult<I>, MongoError.MongoError, R>
198
218
  } = F.dual(
199
219
  (args) => isCollection(args[0]),
200
220
  <A extends Document, I extends Document, R>(
@@ -202,31 +222,30 @@ export const updateMany: {
202
222
  filter: Filter<I>,
203
223
  update: UpdateFilter<I> | ReadonlyArray<Document>,
204
224
  options?: UpdateOptions
205
- ): Effect.Effect<UpdateResult, MongoError.MongoError, R> =>
225
+ ): Effect.Effect<UpdateResult<I>, MongoError.MongoError, R> =>
206
226
  Effect.promise(() =>
207
227
  collection.collection.updateMany(
208
228
  filter,
209
229
  Array.isArray(update) ? [...update] : update as UpdateFilter<Document>,
210
230
  options
211
231
  )
212
- ).pipe(Effect.catchAllDefect(MongoError.mongoErrorDie<UpdateResult>("updateMany error")))
232
+ ).pipe(Effect.catchAllDefect(mongoErrorOrDie(errorSource(collection, "updateMany"))))
213
233
  )
214
234
 
215
235
  export const replaceOne: {
216
236
  <A extends Document, I extends Document>(
217
237
  filter: Filter<I>,
218
- // TODO: should we put WithoutId<A> here like the driver signature?
219
238
  replacement: A,
220
239
  options?: ReplaceOptions
221
240
  ): <R>(
222
241
  collection: Collection<A, I, R>
223
- ) => Effect.Effect<UpdateResult | Document, MongoError.MongoError | ParseResult.ParseError, R>
242
+ ) => Effect.Effect<UpdateResult<I> | Document, MongoError.MongoError | ParseResult.ParseError, R>
224
243
  <A extends Document, I extends Document, R>(
225
244
  collection: Collection<A, I, R>,
226
245
  filter: Filter<I>,
227
246
  replacement: A,
228
247
  options?: ReplaceOptions
229
- ): Effect.Effect<UpdateResult | Document, MongoError.MongoError | ParseResult.ParseError, R>
248
+ ): Effect.Effect<UpdateResult<I> | Document, MongoError.MongoError | ParseResult.ParseError, R>
230
249
  } = F.dual(
231
250
  (args) => isCollection(args[0]),
232
251
  <A extends Document, I extends Document, R>(
@@ -235,7 +254,7 @@ export const replaceOne: {
235
254
  replacement: A,
236
255
  options?: ReplaceOptions
237
256
  ): Effect.Effect<
238
- UpdateResult | Document,
257
+ UpdateResult<I> | Document,
239
258
  MongoError.MongoError | ParseResult.ParseError,
240
259
  R
241
260
  > =>
@@ -244,7 +263,7 @@ export const replaceOne: {
244
263
  Effect.flatMap((replacement) =>
245
264
  Effect.promise(() => collection.collection.replaceOne(filter, replacement, options))
246
265
  ),
247
- Effect.catchAllDefect(MongoError.mongoErrorDie<UpdateResult | Document>("replaceOne error"))
266
+ Effect.catchAllDefect(mongoErrorOrDie(errorSource(collection, "replaceOne")))
248
267
  )
249
268
  )
250
269
 
@@ -306,17 +325,17 @@ export const findOneAndReplace: {
306
325
  Effect.promise(() => collection.collection.findOneAndReplace(filter, replacement, options ?? {}))
307
326
  ),
308
327
  Effect.flatMap((value) =>
309
- Effect.gen(function*(_) {
328
+ Effect.gen(function*() {
310
329
  if (options?.includeResultMetadata && !!value) {
311
330
  const result = value as unknown as MongoModifyResult<I>
312
- const maybeValue = yield* _(SchemaExt.decodeNullableDocument(collection.schema, result.value))
331
+ const maybeValue = yield* SchemaExt.decodeNullableDocument(collection.schema, result.value)
313
332
  return { ...result, value: maybeValue }
314
333
  }
315
- return yield* _(SchemaExt.decodeNullableDocument(collection.schema, value))
334
+ return yield* SchemaExt.decodeNullableDocument(collection.schema, value)
316
335
  })
317
336
  ),
318
337
  Effect.catchAllDefect(
319
- MongoError.mongoErrorDie<O.Option<A> | ModifyResult<A>>("findOneAndReplace error")
338
+ mongoErrorOrDie(errorSource(collection, "findOneAndReplace"))
320
339
  )
321
340
  )
322
341
  )
@@ -339,8 +358,10 @@ export const rename: {
339
358
  ): Effect.Effect<Collection<A, I, R>, MongoError.MongoError, R> =>
340
359
  F.pipe(
341
360
  Effect.promise(() => collection.collection.rename(newName, options)),
342
- Effect.map((newCollection) => new Collection<A, I, R>({ collection: newCollection, schema: collection.schema })),
343
- Effect.catchAllDefect(MongoError.mongoErrorDie<Collection<A, I, R>>("rename error"))
361
+ Effect.map((newCollection) =>
362
+ new CollectionImpl<A, I, R>({ collection: newCollection, schema: collection.schema })
363
+ ),
364
+ Effect.catchAllDefect(mongoErrorOrDie(errorSource(collection, "rename")))
344
365
  )
345
366
  )
346
367
 
@@ -360,7 +381,7 @@ export const drop: {
360
381
  ): Effect.Effect<boolean, MongoError.MongoError, R> =>
361
382
  F.pipe(
362
383
  Effect.promise(() => collection.collection.drop(options)),
363
- Effect.catchAllDefect(MongoError.mongoErrorDie<boolean>("drop error"))
384
+ Effect.catchAllDefect(mongoErrorOrDie(errorSource(collection, "drop")))
364
385
  )
365
386
  )
366
387
 
@@ -385,7 +406,7 @@ export const createIndexes: {
385
406
  ): Effect.Effect<Array<string>, MongoError.MongoError, R> =>
386
407
  F.pipe(
387
408
  Effect.promise(() => collection.collection.createIndexes([...indexSpecs], options)),
388
- Effect.catchAllDefect(MongoError.mongoErrorDie<Array<string>>("createIndexes error"))
409
+ Effect.catchAllDefect(mongoErrorOrDie(errorSource(collection, "createIndexes")))
389
410
  )
390
411
  )
391
412
 
@@ -407,57 +428,55 @@ export const createIndex: {
407
428
  ): Effect.Effect<string, MongoError.MongoError, R> =>
408
429
  F.pipe(
409
430
  Effect.promise(() => collection.collection.createIndex(indexSpec, options)),
410
- Effect.catchAllDefect(MongoError.mongoErrorDie<string>("createIndex error"))
431
+ Effect.catchAllDefect(mongoErrorOrDie(errorSource(collection, "createIndex")))
411
432
  )
412
433
  )
413
434
 
414
- // TODO: review return type. Should we return Document like mongodb driver?
415
435
  export const dropIndex: {
416
436
  (indexName: string, options?: DropIndexesOptions): <A extends Document, I extends Document, R>(
417
437
  collection: Collection<A, I, R>
418
- ) => Effect.Effect<void, MongoError.MongoError, R>
438
+ ) => Effect.Effect<Document, MongoError.MongoError, R>
419
439
  <A extends Document, I extends Document, R>(
420
440
  collection: Collection<A, I, R>,
421
441
  indexName: string,
422
442
  options?: DropIndexesOptions
423
- ): Effect.Effect<void, MongoError.MongoError, R>
443
+ ): Effect.Effect<Document, MongoError.MongoError, R>
424
444
  } = F.dual(
425
445
  (args) => isCollection(args[0]),
426
446
  <A extends Document, I extends Document, R>(
427
447
  collection: Collection<A, I, R>,
428
448
  indexName: string,
429
449
  options?: DropIndexesOptions
430
- ): Effect.Effect<void, MongoError.MongoError, R> =>
450
+ ): Effect.Effect<Document, MongoError.MongoError, R> =>
431
451
  F.pipe(
432
452
  Effect.promise(() => collection.collection.dropIndex(indexName, options)),
433
- Effect.asVoid,
434
- Effect.catchAllDefect(MongoError.mongoErrorDie<void>("dropIndex error"))
453
+ Effect.catchAllDefect(mongoErrorOrDie(errorSource(collection, "dropIndex")))
435
454
  )
436
455
  )
437
456
 
438
457
  export const aggregate: {
439
458
  <B extends Document, BI extends Document, BR>(
440
- pipeline: ReadonlyArray<Document>,
441
459
  schema: Schema.Schema<B, BI, BR>,
460
+ pipeline: ReadonlyArray<Document>,
442
461
  options?: AggregateOptions
443
462
  ): <A extends Document, I extends Document, R>(
444
463
  collection: Collection<A, I, R>
445
464
  ) => AggregationCursor.AggregationCursor<B, BI, BR>
446
465
  <A extends Document, I extends Document, R, B extends Document, BI extends Document, BR>(
447
466
  collection: Collection<A, I, R>,
448
- pipeline: ReadonlyArray<Document>,
449
467
  schema: Schema.Schema<B, BI, BR>,
468
+ pipeline: ReadonlyArray<Document>,
450
469
  options?: AggregateOptions
451
470
  ): AggregationCursor.AggregationCursor<B, BI, BR>
452
471
  } = F.dual(
453
472
  (args) => isCollection(args[0]),
454
473
  <A extends Document, I extends Document, R, B extends Document, BI extends Document, BR>(
455
474
  collection: Collection<A, I, R>,
456
- pipeline: ReadonlyArray<Document>,
457
475
  schema: Schema.Schema<B, BI, BR>,
476
+ pipeline: ReadonlyArray<Document>,
458
477
  options?: AggregateOptions
459
478
  ): AggregationCursor.AggregationCursor<B, BI, BR> =>
460
- new AggregationCursor.AggregationCursor<B, BI, BR>({
479
+ new AggregationCursor.AggregationCursorImpl<B, BI, BR>({
461
480
  cursor: collection.collection.aggregate([...pipeline], options),
462
481
  schema
463
482
  })
@@ -479,7 +498,7 @@ export const estimatedDocumentCount: {
479
498
  ): Effect.Effect<number, MongoError.MongoError, R> =>
480
499
  F.pipe(
481
500
  Effect.promise(() => collection.collection.estimatedDocumentCount(options)),
482
- Effect.catchAllDefect(MongoError.mongoErrorDie<number>("estimatedDocumentCount error"))
501
+ Effect.catchAllDefect(mongoErrorOrDie(errorSource(collection, "estimatedDocumentCount")))
483
502
  )
484
503
  )
485
504
 
@@ -501,8 +520,19 @@ export const countDocuments: {
501
520
  ): Effect.Effect<number, MongoError.MongoError, R> =>
502
521
  F.pipe(
503
522
  Effect.promise(() => collection.collection.countDocuments(filter, options)),
504
- Effect.catchAllDefect(MongoError.mongoErrorDie<number>("countDocuments error"))
523
+ Effect.catchAllDefect(mongoErrorOrDie(errorSource(collection, "countDocuments")))
505
524
  )
506
525
  )
507
526
 
508
- const isCollection = (x: unknown) => x instanceof Collection
527
+ const isCollection = (x: unknown) => x instanceof CollectionImpl
528
+
529
+ const errorSource = <A extends Document, I extends Document = A, R = never>(
530
+ collection: Collection<A, I, R>,
531
+ functionName: string
532
+ ) =>
533
+ new MongoError.CollectionErrorSource({
534
+ module: CollectionImpl.name,
535
+ functionName,
536
+ db: collection.collection.dbName,
537
+ collection: collection.collection.collectionName
538
+ })