effect-mongodb 0.1.1 → 0.1.3

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 (74) hide show
  1. package/dist/cjs/AggregationCursor.js +9 -5
  2. package/dist/cjs/AggregationCursor.js.map +1 -1
  3. package/dist/cjs/Collection.js +23 -17
  4. package/dist/cjs/Collection.js.map +1 -1
  5. package/dist/cjs/Db.js +7 -1
  6. package/dist/cjs/Db.js.map +1 -1
  7. package/dist/cjs/DocumentAggregationCursor.js +9 -5
  8. package/dist/cjs/DocumentAggregationCursor.js.map +1 -1
  9. package/dist/cjs/DocumentCollection.js +24 -15
  10. package/dist/cjs/DocumentCollection.js.map +1 -1
  11. package/dist/cjs/DocumentFindCursor.js +9 -5
  12. package/dist/cjs/DocumentFindCursor.js.map +1 -1
  13. package/dist/cjs/FindCursor.js +11 -10
  14. package/dist/cjs/FindCursor.js.map +1 -1
  15. package/dist/cjs/ListCollectionsCursor.js +9 -5
  16. package/dist/cjs/ListCollectionsCursor.js.map +1 -1
  17. package/dist/cjs/MongoClient.js +8 -2
  18. package/dist/cjs/MongoClient.js.map +1 -1
  19. package/dist/cjs/MongoError.js +7 -18
  20. package/dist/cjs/MongoError.js.map +1 -1
  21. package/dist/cjs/internal/mongo-error.js +27 -0
  22. package/dist/cjs/internal/mongo-error.js.map +1 -0
  23. package/dist/cjs/internal/version.js +1 -1
  24. package/dist/dts/AggregationCursor.d.ts.map +1 -1
  25. package/dist/dts/Collection.d.ts +12 -12
  26. package/dist/dts/Collection.d.ts.map +1 -1
  27. package/dist/dts/Db.d.ts.map +1 -1
  28. package/dist/dts/DocumentAggregationCursor.d.ts.map +1 -1
  29. package/dist/dts/DocumentCollection.d.ts +6 -5
  30. package/dist/dts/DocumentCollection.d.ts.map +1 -1
  31. package/dist/dts/DocumentFindCursor.d.ts.map +1 -1
  32. package/dist/dts/FindCursor.d.ts.map +1 -1
  33. package/dist/dts/ListCollectionsCursor.d.ts.map +1 -1
  34. package/dist/dts/MongoClient.d.ts.map +1 -1
  35. package/dist/dts/MongoError.d.ts +32 -12
  36. package/dist/dts/MongoError.d.ts.map +1 -1
  37. package/dist/dts/internal/mongo-error.d.ts +5 -0
  38. package/dist/dts/internal/mongo-error.d.ts.map +1 -0
  39. package/dist/esm/AggregationCursor.js +9 -5
  40. package/dist/esm/AggregationCursor.js.map +1 -1
  41. package/dist/esm/Collection.js +23 -17
  42. package/dist/esm/Collection.js.map +1 -1
  43. package/dist/esm/Db.js +7 -1
  44. package/dist/esm/Db.js.map +1 -1
  45. package/dist/esm/DocumentAggregationCursor.js +9 -5
  46. package/dist/esm/DocumentAggregationCursor.js.map +1 -1
  47. package/dist/esm/DocumentCollection.js +24 -15
  48. package/dist/esm/DocumentCollection.js.map +1 -1
  49. package/dist/esm/DocumentFindCursor.js +9 -5
  50. package/dist/esm/DocumentFindCursor.js.map +1 -1
  51. package/dist/esm/FindCursor.js +11 -10
  52. package/dist/esm/FindCursor.js.map +1 -1
  53. package/dist/esm/ListCollectionsCursor.js +9 -5
  54. package/dist/esm/ListCollectionsCursor.js.map +1 -1
  55. package/dist/esm/MongoClient.js +8 -2
  56. package/dist/esm/MongoClient.js.map +1 -1
  57. package/dist/esm/MongoError.js +3 -17
  58. package/dist/esm/MongoError.js.map +1 -1
  59. package/dist/esm/internal/mongo-error.js +18 -0
  60. package/dist/esm/internal/mongo-error.js.map +1 -0
  61. package/dist/esm/internal/version.js +1 -1
  62. package/package.json +1 -1
  63. package/src/AggregationCursor.ts +12 -3
  64. package/src/Collection.ts +47 -38
  65. package/src/Db.ts +5 -1
  66. package/src/DocumentAggregationCursor.ts +12 -3
  67. package/src/DocumentCollection.ts +37 -20
  68. package/src/DocumentFindCursor.ts +12 -3
  69. package/src/FindCursor.ts +15 -6
  70. package/src/ListCollectionsCursor.ts +12 -3
  71. package/src/MongoClient.ts +6 -2
  72. package/src/MongoError.ts +24 -32
  73. package/src/internal/mongo-error.ts +34 -0
  74. package/src/internal/version.ts +1 -1
@@ -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":[]}
@@ -1,4 +1,4 @@
1
- let moduleVersion = "0.1.1";
1
+ let moduleVersion = "0.1.3";
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.1",
3
+ "version": "0.1.3",
4
4
  "description": "A MongoDB toolkit for Effect",
5
5
  "license": "MIT",
6
6
  "repository": {
@@ -8,6 +8,7 @@ import type * as ParseResult from "effect/ParseResult"
8
8
  import * as Schema from "effect/Schema"
9
9
  import * as Stream from "effect/Stream"
10
10
  import type { AggregationCursor as MongoAggregationCursor } from "mongodb"
11
+ import { mongoErrorOrDie } from "./internal/mongo-error.js"
11
12
  import * as MongoError from "./MongoError.js"
12
13
 
13
14
  export class AggregationCursor<A, I = A, R = never> extends Data.TaggedClass("AggregationCursor")<
@@ -19,8 +20,8 @@ export const toArray = <A, I, R>(
19
20
  cursor: AggregationCursor<A, I, R>
20
21
  ): Effect.Effect<Array<A>, MongoError.MongoError | ParseResult.ParseError, R> => {
21
22
  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")),
23
+ return Effect.promise(() => cursor.cursor.toArray()).pipe(
24
+ Effect.catchAllDefect(mongoErrorOrDie(errorSource(cursor, "toArray"))),
24
25
  Effect.flatMap(Effect.forEach((x) => decode(x)))
25
26
  )
26
27
  }
@@ -31,7 +32,15 @@ export const toStream = <A, I, R>(
31
32
  const decode = Schema.decodeUnknown(cursor.schema)
32
33
  return F.pipe(
33
34
  Stream.fromAsyncIterable(cursor.cursor, F.identity),
34
- Stream.catchAll(MongoError.mongoErrorStream<A>("Unable to get stream from mongodb aggregate cursor")),
35
+ Stream.catchAll(mongoErrorOrDie(errorSource(cursor, "toStream"))),
35
36
  Stream.mapEffect((x) => decode(x))
36
37
  )
37
38
  }
39
+
40
+ const errorSource = <A, I, R>(cursor: AggregationCursor<A, I, R>, functionName: string) =>
41
+ new MongoError.CollectionErrorSource({
42
+ module: AggregationCursor.name,
43
+ functionName,
44
+ db: cursor.cursor.namespace.db,
45
+ collection: cursor.cursor.namespace.collection ?? "NO_COLLECTION_NAME"
46
+ })
package/src/Collection.ts CHANGED
@@ -38,6 +38,7 @@ import * as AggregationCursor from "./AggregationCursor.js"
38
38
  import * as FindCursor from "./FindCursor.js"
39
39
  import type { Filter } from "./internal/filter.js"
40
40
  import type { ModifyResult } from "./internal/modify-result.js"
41
+ import { mongoErrorOrDie } from "./internal/mongo-error.js"
41
42
  import * as SchemaExt from "./internal/schema.js"
42
43
  import * as MongoError from "./MongoError.js"
43
44
 
@@ -93,49 +94,49 @@ export const findOne: {
93
94
  const value = yield* _(Effect.promise(() => collection.collection.findOne(filter, options)))
94
95
  return yield* _(SchemaExt.decodeNullableDocument(collection.schema, value))
95
96
  }).pipe(
96
- Effect.catchAllDefect(MongoError.mongoErrorDie<O.Option<A>>("findOne error"))
97
+ Effect.catchAllDefect(mongoErrorOrDie(errorSource(collection, "findOne")))
97
98
  )
98
99
  )
99
100
 
100
101
  export const insertOne: {
101
102
  <A extends Document>(doc: A, options?: InsertOneOptions): <I extends Document, R>(
102
103
  collection: Collection<A, I, R>
103
- ) => Effect.Effect<InsertOneResult, MongoError.MongoError | ParseResult.ParseError, R>
104
+ ) => Effect.Effect<InsertOneResult<I>, MongoError.MongoError | ParseResult.ParseError, R>
104
105
  <A extends Document, I extends Document, R>(
105
106
  collection: Collection<A, I, R>,
106
107
  doc: A,
107
108
  options?: InsertOneOptions
108
- ): Effect.Effect<InsertOneResult, MongoError.MongoError | ParseResult.ParseError, R>
109
+ ): Effect.Effect<InsertOneResult<I>, MongoError.MongoError | ParseResult.ParseError, R>
109
110
  } = F.dual((args) => isCollection(args[0]), <A extends Document, I extends Document, R>(
110
111
  collection: Collection<A, I, R>,
111
112
  doc: A,
112
113
  options?: InsertOneOptions
113
- ): Effect.Effect<InsertOneResult, MongoError.MongoError | ParseResult.ParseError, R> =>
114
+ ): Effect.Effect<InsertOneResult<I>, MongoError.MongoError | ParseResult.ParseError, R> =>
114
115
  F.pipe(
115
116
  collection.encode(doc),
116
117
  Effect.flatMap((doc) => Effect.promise(() => collection.collection.insertOne(doc, options))),
117
- Effect.catchAllDefect(MongoError.mongoErrorDie<InsertOneResult>("insertOne error"))
118
+ Effect.catchAllDefect(mongoErrorOrDie(errorSource(collection, "insertOne")))
118
119
  ))
119
120
 
120
121
  export const insertMany: {
121
122
  <A extends Document>(docs: ReadonlyArray<A>, options?: BulkWriteOptions): <I extends Document, R>(
122
123
  collection: Collection<A, I, R>
123
- ) => Effect.Effect<InsertManyResult, MongoError.MongoError | ParseResult.ParseError, R>
124
+ ) => Effect.Effect<InsertManyResult<I>, MongoError.MongoError | ParseResult.ParseError, R>
124
125
  <A extends Document, I extends Document, R>(
125
126
  collection: Collection<A, I, R>,
126
127
  docs: ReadonlyArray<A>,
127
128
  options?: BulkWriteOptions
128
- ): Effect.Effect<InsertManyResult, MongoError.MongoError | ParseResult.ParseError, R>
129
+ ): Effect.Effect<InsertManyResult<I>, MongoError.MongoError | ParseResult.ParseError, R>
129
130
  } = F.dual((args) => isCollection(args[0]), <A extends Document, I extends Document, R>(
130
131
  collection: Collection<A, I, R>,
131
132
  docs: ReadonlyArray<A>,
132
133
  options?: BulkWriteOptions
133
- ): Effect.Effect<InsertManyResult, MongoError.MongoError | ParseResult.ParseError, R> => {
134
+ ): Effect.Effect<InsertManyResult<I>, MongoError.MongoError | ParseResult.ParseError, R> => {
134
135
  return F.pipe(
135
136
  docs,
136
137
  Effect.forEach((doc) => collection.encode(doc)),
137
138
  Effect.flatMap((docs) => Effect.promise(() => collection.collection.insertMany(docs, options))),
138
- Effect.catchAllDefect(MongoError.mongoErrorDie<InsertManyResult>("insertMany error"))
139
+ Effect.catchAllDefect(mongoErrorOrDie(errorSource(collection, "insertMany")))
139
140
  )
140
141
  })
141
142
 
@@ -156,7 +157,7 @@ export const deleteOne: {
156
157
  options?: DeleteOptions
157
158
  ): Effect.Effect<DeleteResult, MongoError.MongoError, R> =>
158
159
  Effect.promise(() => collection.collection.deleteOne(filter, options)).pipe(
159
- Effect.catchAllDefect(MongoError.mongoErrorDie<DeleteResult>("deleteOne error"))
160
+ Effect.catchAllDefect(mongoErrorOrDie(errorSource(collection, "deleteOne")))
160
161
  )
161
162
  )
162
163
 
@@ -177,7 +178,7 @@ export const deleteMany: {
177
178
  options?: DeleteOptions
178
179
  ): Effect.Effect<DeleteResult, MongoError.MongoError, R> =>
179
180
  Effect.promise(() => collection.collection.deleteMany(filter, options)).pipe(
180
- Effect.catchAllDefect(MongoError.mongoErrorDie<DeleteResult>("deleteMany error"))
181
+ Effect.catchAllDefect(mongoErrorOrDie(errorSource(collection, "deleteMany")))
181
182
  )
182
183
  )
183
184
 
@@ -186,15 +187,15 @@ export const updateMany: {
186
187
  filter: Filter<I>,
187
188
  update: UpdateFilter<I> | ReadonlyArray<Document>,
188
189
  options?: UpdateOptions
189
- ): <A extends Document, R>(
190
- collection: Collection<A, I, R>
191
- ) => Effect.Effect<UpdateResult, MongoError.MongoError, R>
190
+ ): <A extends Document, I2 extends I, R>(
191
+ collection: Collection<A, I2, R>
192
+ ) => Effect.Effect<UpdateResult<I2>, MongoError.MongoError, R>
192
193
  <A extends Document, I extends Document, R>(
193
194
  collection: Collection<A, I, R>,
194
195
  filter: Filter<I>,
195
196
  update: UpdateFilter<I> | ReadonlyArray<Document>,
196
197
  options?: UpdateOptions
197
- ): Effect.Effect<UpdateResult, MongoError.MongoError, R>
198
+ ): Effect.Effect<UpdateResult<I>, MongoError.MongoError, R>
198
199
  } = F.dual(
199
200
  (args) => isCollection(args[0]),
200
201
  <A extends Document, I extends Document, R>(
@@ -202,31 +203,30 @@ export const updateMany: {
202
203
  filter: Filter<I>,
203
204
  update: UpdateFilter<I> | ReadonlyArray<Document>,
204
205
  options?: UpdateOptions
205
- ): Effect.Effect<UpdateResult, MongoError.MongoError, R> =>
206
+ ): Effect.Effect<UpdateResult<I>, MongoError.MongoError, R> =>
206
207
  Effect.promise(() =>
207
208
  collection.collection.updateMany(
208
209
  filter,
209
210
  Array.isArray(update) ? [...update] : update as UpdateFilter<Document>,
210
211
  options
211
212
  )
212
- ).pipe(Effect.catchAllDefect(MongoError.mongoErrorDie<UpdateResult>("updateMany error")))
213
+ ).pipe(Effect.catchAllDefect(mongoErrorOrDie(errorSource(collection, "updateMany"))))
213
214
  )
214
215
 
215
216
  export const replaceOne: {
216
217
  <A extends Document, I extends Document>(
217
218
  filter: Filter<I>,
218
- // TODO: should we put WithoutId<A> here like the driver signature?
219
219
  replacement: A,
220
220
  options?: ReplaceOptions
221
221
  ): <R>(
222
222
  collection: Collection<A, I, R>
223
- ) => Effect.Effect<UpdateResult | Document, MongoError.MongoError | ParseResult.ParseError, R>
223
+ ) => Effect.Effect<UpdateResult<I> | Document, MongoError.MongoError | ParseResult.ParseError, R>
224
224
  <A extends Document, I extends Document, R>(
225
225
  collection: Collection<A, I, R>,
226
226
  filter: Filter<I>,
227
227
  replacement: A,
228
228
  options?: ReplaceOptions
229
- ): Effect.Effect<UpdateResult | Document, MongoError.MongoError | ParseResult.ParseError, R>
229
+ ): Effect.Effect<UpdateResult<I> | Document, MongoError.MongoError | ParseResult.ParseError, R>
230
230
  } = F.dual(
231
231
  (args) => isCollection(args[0]),
232
232
  <A extends Document, I extends Document, R>(
@@ -235,7 +235,7 @@ export const replaceOne: {
235
235
  replacement: A,
236
236
  options?: ReplaceOptions
237
237
  ): Effect.Effect<
238
- UpdateResult | Document,
238
+ UpdateResult<I> | Document,
239
239
  MongoError.MongoError | ParseResult.ParseError,
240
240
  R
241
241
  > =>
@@ -244,7 +244,7 @@ export const replaceOne: {
244
244
  Effect.flatMap((replacement) =>
245
245
  Effect.promise(() => collection.collection.replaceOne(filter, replacement, options))
246
246
  ),
247
- Effect.catchAllDefect(MongoError.mongoErrorDie<UpdateResult | Document>("replaceOne error"))
247
+ Effect.catchAllDefect(mongoErrorOrDie(errorSource(collection, "replaceOne")))
248
248
  )
249
249
  )
250
250
 
@@ -316,7 +316,7 @@ export const findOneAndReplace: {
316
316
  })
317
317
  ),
318
318
  Effect.catchAllDefect(
319
- MongoError.mongoErrorDie<O.Option<A> | ModifyResult<A>>("findOneAndReplace error")
319
+ mongoErrorOrDie(errorSource(collection, "findOneAndReplace"))
320
320
  )
321
321
  )
322
322
  )
@@ -340,7 +340,7 @@ export const rename: {
340
340
  F.pipe(
341
341
  Effect.promise(() => collection.collection.rename(newName, options)),
342
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"))
343
+ Effect.catchAllDefect(mongoErrorOrDie(errorSource(collection, "rename")))
344
344
  )
345
345
  )
346
346
 
@@ -360,7 +360,7 @@ export const drop: {
360
360
  ): Effect.Effect<boolean, MongoError.MongoError, R> =>
361
361
  F.pipe(
362
362
  Effect.promise(() => collection.collection.drop(options)),
363
- Effect.catchAllDefect(MongoError.mongoErrorDie<boolean>("drop error"))
363
+ Effect.catchAllDefect(mongoErrorOrDie(errorSource(collection, "drop")))
364
364
  )
365
365
  )
366
366
 
@@ -385,7 +385,7 @@ export const createIndexes: {
385
385
  ): Effect.Effect<Array<string>, MongoError.MongoError, R> =>
386
386
  F.pipe(
387
387
  Effect.promise(() => collection.collection.createIndexes([...indexSpecs], options)),
388
- Effect.catchAllDefect(MongoError.mongoErrorDie<Array<string>>("createIndexes error"))
388
+ Effect.catchAllDefect(mongoErrorOrDie(errorSource(collection, "createIndexes")))
389
389
  )
390
390
  )
391
391
 
@@ -407,54 +407,52 @@ export const createIndex: {
407
407
  ): Effect.Effect<string, MongoError.MongoError, R> =>
408
408
  F.pipe(
409
409
  Effect.promise(() => collection.collection.createIndex(indexSpec, options)),
410
- Effect.catchAllDefect(MongoError.mongoErrorDie<string>("createIndex error"))
410
+ Effect.catchAllDefect(mongoErrorOrDie(errorSource(collection, "createIndex")))
411
411
  )
412
412
  )
413
413
 
414
- // TODO: review return type. Should we return Document like mongodb driver?
415
414
  export const dropIndex: {
416
415
  (indexName: string, options?: DropIndexesOptions): <A extends Document, I extends Document, R>(
417
416
  collection: Collection<A, I, R>
418
- ) => Effect.Effect<void, MongoError.MongoError, R>
417
+ ) => Effect.Effect<Document, MongoError.MongoError, R>
419
418
  <A extends Document, I extends Document, R>(
420
419
  collection: Collection<A, I, R>,
421
420
  indexName: string,
422
421
  options?: DropIndexesOptions
423
- ): Effect.Effect<void, MongoError.MongoError, R>
422
+ ): Effect.Effect<Document, MongoError.MongoError, R>
424
423
  } = F.dual(
425
424
  (args) => isCollection(args[0]),
426
425
  <A extends Document, I extends Document, R>(
427
426
  collection: Collection<A, I, R>,
428
427
  indexName: string,
429
428
  options?: DropIndexesOptions
430
- ): Effect.Effect<void, MongoError.MongoError, R> =>
429
+ ): Effect.Effect<Document, MongoError.MongoError, R> =>
431
430
  F.pipe(
432
431
  Effect.promise(() => collection.collection.dropIndex(indexName, options)),
433
- Effect.asVoid,
434
- Effect.catchAllDefect(MongoError.mongoErrorDie<void>("dropIndex error"))
432
+ Effect.catchAllDefect(mongoErrorOrDie(errorSource(collection, "dropIndex")))
435
433
  )
436
434
  )
437
435
 
438
436
  export const aggregate: {
439
437
  <B extends Document, BI extends Document, BR>(
440
- pipeline: ReadonlyArray<Document>,
441
438
  schema: Schema.Schema<B, BI, BR>,
439
+ pipeline: ReadonlyArray<Document>,
442
440
  options?: AggregateOptions
443
441
  ): <A extends Document, I extends Document, R>(
444
442
  collection: Collection<A, I, R>
445
443
  ) => AggregationCursor.AggregationCursor<B, BI, BR>
446
444
  <A extends Document, I extends Document, R, B extends Document, BI extends Document, BR>(
447
445
  collection: Collection<A, I, R>,
448
- pipeline: ReadonlyArray<Document>,
449
446
  schema: Schema.Schema<B, BI, BR>,
447
+ pipeline: ReadonlyArray<Document>,
450
448
  options?: AggregateOptions
451
449
  ): AggregationCursor.AggregationCursor<B, BI, BR>
452
450
  } = F.dual(
453
451
  (args) => isCollection(args[0]),
454
452
  <A extends Document, I extends Document, R, B extends Document, BI extends Document, BR>(
455
453
  collection: Collection<A, I, R>,
456
- pipeline: ReadonlyArray<Document>,
457
454
  schema: Schema.Schema<B, BI, BR>,
455
+ pipeline: ReadonlyArray<Document>,
458
456
  options?: AggregateOptions
459
457
  ): AggregationCursor.AggregationCursor<B, BI, BR> =>
460
458
  new AggregationCursor.AggregationCursor<B, BI, BR>({
@@ -479,7 +477,7 @@ export const estimatedDocumentCount: {
479
477
  ): Effect.Effect<number, MongoError.MongoError, R> =>
480
478
  F.pipe(
481
479
  Effect.promise(() => collection.collection.estimatedDocumentCount(options)),
482
- Effect.catchAllDefect(MongoError.mongoErrorDie<number>("estimatedDocumentCount error"))
480
+ Effect.catchAllDefect(mongoErrorOrDie(errorSource(collection, "estimatedDocumentCount")))
483
481
  )
484
482
  )
485
483
 
@@ -501,8 +499,19 @@ export const countDocuments: {
501
499
  ): Effect.Effect<number, MongoError.MongoError, R> =>
502
500
  F.pipe(
503
501
  Effect.promise(() => collection.collection.countDocuments(filter, options)),
504
- Effect.catchAllDefect(MongoError.mongoErrorDie<number>("countDocuments error"))
502
+ Effect.catchAllDefect(mongoErrorOrDie(errorSource(collection, "countDocuments")))
505
503
  )
506
504
  )
507
505
 
508
506
  const isCollection = (x: unknown) => x instanceof Collection
507
+
508
+ const errorSource = <A extends Document, I extends Document = A, R = never>(
509
+ collection: Collection<A, I, R>,
510
+ functionName: string
511
+ ) =>
512
+ new MongoError.CollectionErrorSource({
513
+ module: Collection.name,
514
+ functionName,
515
+ db: collection.collection.dbName,
516
+ collection: collection.collection.collectionName
517
+ })
package/src/Db.ts CHANGED
@@ -8,6 +8,7 @@ import type { Document, DropCollectionOptions, ListCollectionsOptions } from "mo
8
8
  import { Db } from "mongodb"
9
9
  import type * as Collection from "./Collection.js"
10
10
  import * as DocumentCollection from "./DocumentCollection.js"
11
+ import { mongoErrorOrDie } from "./internal/mongo-error.js"
11
12
  import * as ListCollectionsCursor from "./ListCollectionsCursor.js"
12
13
  import * as MongoError from "./MongoError.js"
13
14
 
@@ -79,8 +80,11 @@ export const dropCollection: {
79
80
  (db: Db, name: string, options?: DropCollectionOptions): Effect.Effect<boolean, MongoError.MongoError> =>
80
81
  F.pipe(
81
82
  Effect.promise(() => db.dropCollection(name, options)),
82
- Effect.catchAllDefect(MongoError.mongoErrorDie<boolean>("dropCollection error"))
83
+ Effect.catchAllDefect(mongoErrorOrDie(errorSource(db, "dropCollection")))
83
84
  )
84
85
  )
85
86
 
86
87
  const isDb = (x: unknown) => x instanceof Db
88
+
89
+ const errorSource = (db: Db, functionName: string) =>
90
+ new MongoError.DbErrorSource({ module: "Db", functionName, db: db.databaseName })
@@ -6,6 +6,7 @@ import * as Effect from "effect/Effect"
6
6
  import * as F from "effect/Function"
7
7
  import * as Stream from "effect/Stream"
8
8
  import type { AggregationCursor as MongoAggregationCursor, Document } from "mongodb"
9
+ import { mongoErrorOrDie } from "./internal/mongo-error.js"
9
10
  import * as MongoError from "./MongoError.js"
10
11
 
11
12
  export class DocumentAggregationCursor
@@ -17,8 +18,8 @@ export const toArray = (
17
18
  cursor: DocumentAggregationCursor
18
19
  ): Effect.Effect<Array<Document>, MongoError.MongoError> =>
19
20
  F.pipe(
20
- Effect.tryPromise({ try: () => cursor.cursor.toArray(), catch: F.identity }),
21
- Effect.catchAll(MongoError.mongoErrorDie<Array<Document>>(`${cursor._tag}.toArray error`))
21
+ Effect.promise(() => cursor.cursor.toArray()),
22
+ Effect.catchAllDefect(mongoErrorOrDie(errorSource(cursor, "toArray")))
22
23
  )
23
24
 
24
25
  export const toStream = (
@@ -26,5 +27,13 @@ export const toStream = (
26
27
  ): Stream.Stream<Document, MongoError.MongoError> =>
27
28
  F.pipe(
28
29
  Stream.fromAsyncIterable(cursor.cursor, F.identity),
29
- Stream.catchAll(MongoError.mongoErrorStream<Document>(`${cursor._tag}.toStream error`))
30
+ Stream.catchAll(mongoErrorOrDie(errorSource(cursor, "toStream")))
30
31
  )
32
+
33
+ const errorSource = (cursor: DocumentAggregationCursor, functionName: string) =>
34
+ new MongoError.CollectionErrorSource({
35
+ module: DocumentAggregationCursor.name,
36
+ functionName,
37
+ db: cursor.cursor.namespace.db,
38
+ collection: cursor.cursor.namespace.collection ?? "NO_COLLECTION_NAME"
39
+ })