@effect-app/infra 2.37.3 → 2.39.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,22 @@
1
1
  # @effect-app/infra
2
2
 
3
+ ## 2.39.0
4
+
5
+ ### Minor Changes
6
+
7
+ - a661857: who catches the error catcher?
8
+
9
+ ## 2.38.0
10
+
11
+ ### Minor Changes
12
+
13
+ - 9b2e385: update packages
14
+
15
+ ### Patch Changes
16
+
17
+ - Updated dependencies [9b2e385]
18
+ - effect-app@2.27.0
19
+
3
20
  ## 2.37.3
4
21
 
5
22
  ### Patch Changes
@@ -1 +1 @@
1
- {"version":3,"file":"errorReporter.d.ts","sourceRoot":"","sources":["../src/errorReporter.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,YAAY,CAAA;AAG1C,OAAO,EAAE,cAAc,EAAyC,MAAM,aAAa,CAAA;AAGnF,wBAAgB,WAAW,CACzB,IAAI,EAAE,MAAM,WAEG,KAAK,CAAC,OAAO,CAAC,WAAW,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,sEAyBhE;AAgBD,wBAAgB,QAAQ,CAAC,CAAC,EACxB,IAAI,EAAE,MAAM,WAEG,KAAK,CAAC,CAAC,CAAC,WAAW,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,uCAkB1D;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,OAAO,QAG9C;AAED,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,qCAS9E"}
1
+ {"version":3,"file":"errorReporter.d.ts","sourceRoot":"","sources":["../src/errorReporter.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,YAAY,CAAA;AAG1C,OAAO,EAAE,cAAc,EAAyC,MAAM,aAAa,CAAA;AAWnF,wBAAgB,WAAW,CACzB,IAAI,EAAE,MAAM,WAGH,KAAK,CAAC,OAAO,CAAC,WACZ,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,sEAgCnC;AAgBD,wBAAgB,QAAQ,CAAC,CAAC,EACxB,IAAI,EAAE,MAAM,WAEG,KAAK,CAAC,CAAC,CAAC,WAAW,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,uCAoB1D;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,OAAO,QAG9C;AAED,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,qCAS9E"}
@@ -4,13 +4,22 @@ import { dropUndefined } from "effect-app/utils";
4
4
  import { getRC } from "./api/setupRequest.js";
5
5
  import { CauseException, ErrorReported, tryToJson, tryToReport } from "./errors.js";
6
6
  import { InfraLogger } from "./logger.js";
7
+ const tryCauseException = (cause, name) => {
8
+ try {
9
+ return new CauseException(cause, name);
10
+ }
11
+ catch {
12
+ return new CauseException(Cause.die(new Error("Failed to create CauseException")), name);
13
+ }
14
+ };
7
15
  export function reportError(name) {
8
- return (cause, extras) => Effect.gen(function* () {
16
+ return (cause, extras) => Effect
17
+ .gen(function* () {
9
18
  if (Cause.isInterruptedOnly(cause)) {
10
19
  yield* InfraLogger.logDebug("Interrupted").pipe(Effect.annotateLogs("extras", JSON.stringify(extras ?? {})));
11
20
  return;
12
21
  }
13
- const error = new CauseException(cause, name);
22
+ const error = tryCauseException(cause, name);
14
23
  yield* reportSentry(error, extras);
15
24
  yield* InfraLogger
16
25
  .logError("Reporting error", cause)
@@ -19,10 +28,11 @@ export function reportError(name) {
19
28
  error: tryToReport(error),
20
29
  cause: tryToJson(cause),
21
30
  __error_name__: name
22
- })), Effect.catchAllCause((cause) => InfraLogger.logError("Failed to log error", cause)), Effect.catchAllCause(() => InfraLogger.logError("Failed to log error cause")));
31
+ })));
23
32
  error[ErrorReported] = true;
24
33
  return error;
25
- });
34
+ })
35
+ .pipe(Effect.tapErrorCause((cause) => InfraLogger.logError("Failed to report error", cause).pipe(Effect.tapErrorCause(() => InfraLogger.logFatal("Failed to log error cause")))));
26
36
  }
27
37
  function reportSentry(error, extras) {
28
38
  return getRC.pipe(Effect.map((context) => {
@@ -37,7 +47,8 @@ function reportSentry(error, extras) {
37
47
  }));
38
48
  }
39
49
  export function logError(name) {
40
- return (cause, extras) => Effect.gen(function* () {
50
+ return (cause, extras) => Effect
51
+ .gen(function* () {
41
52
  if (Cause.isInterruptedOnly(cause)) {
42
53
  yield* InfraLogger.logDebug("Interrupted").pipe(Effect.annotateLogs(dropUndefined({ extras })));
43
54
  return;
@@ -48,8 +59,9 @@ export function logError(name) {
48
59
  extras,
49
60
  cause: tryToJson(cause),
50
61
  __error_name__: name
51
- })), Effect.catchAllCause((cause) => InfraLogger.logError("Failed to log error", cause)), Effect.catchAllCause(() => InfraLogger.logError("Failed to log error cause")));
52
- });
62
+ })));
63
+ })
64
+ .pipe(Effect.tapErrorCause(() => InfraLogger.logFatal("Failed to log error cause")));
53
65
  }
54
66
  export function captureException(error) {
55
67
  Sentry.captureException(error);
@@ -66,4 +78,4 @@ export function reportMessage(message, extras) {
66
78
  console.warn(message);
67
79
  }));
68
80
  }
69
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXJyb3JSZXBvcnRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9lcnJvclJlcG9ydGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxNQUFNLE1BQU0sY0FBYyxDQUFBO0FBQ3RDLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sWUFBWSxDQUFBO0FBQzFDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQTtBQUNoRCxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sdUJBQXVCLENBQUE7QUFDN0MsT0FBTyxFQUFFLGNBQWMsRUFBRSxhQUFhLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBRSxNQUFNLGFBQWEsQ0FBQTtBQUNuRixPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sYUFBYSxDQUFBO0FBRXpDLE1BQU0sVUFBVSxXQUFXLENBQ3pCLElBQVk7SUFFWixPQUFPLENBQUMsS0FBcUIsRUFBRSxNQUFnQyxFQUFFLEVBQUUsQ0FDakUsTUFBTSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUM7UUFDbEIsSUFBSSxLQUFLLENBQUMsaUJBQWlCLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUNuQyxLQUFLLENBQUMsQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUE7WUFDNUcsT0FBTTtRQUNSLENBQUM7UUFDRCxNQUFNLEtBQUssR0FBRyxJQUFJLGNBQWMsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUE7UUFFN0MsS0FBSyxDQUFDLENBQUMsWUFBWSxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQTtRQUNsQyxLQUFLLENBQUMsQ0FBQyxXQUFXO2FBQ2YsUUFBUSxDQUFDLGlCQUFpQixF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
81
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXJyb3JSZXBvcnRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9lcnJvclJlcG9ydGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxNQUFNLE1BQU0sY0FBYyxDQUFBO0FBQ3RDLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sWUFBWSxDQUFBO0FBQzFDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQTtBQUNoRCxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sdUJBQXVCLENBQUE7QUFDN0MsT0FBTyxFQUFFLGNBQWMsRUFBRSxhQUFhLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBRSxNQUFNLGFBQWEsQ0FBQTtBQUNuRixPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sYUFBYSxDQUFBO0FBRXpDLE1BQU0saUJBQWlCLEdBQUcsQ0FBSSxLQUFlLEVBQUUsSUFBWSxFQUFxQixFQUFFO0lBQ2hGLElBQUksQ0FBQztRQUNILE9BQU8sSUFBSSxjQUFjLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFBO0lBQ3hDLENBQUM7SUFBQyxNQUFNLENBQUM7UUFDUCxPQUFPLElBQUksY0FBYyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsSUFBSSxLQUFLLENBQUMsaUNBQWlDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFBO0lBQzFGLENBQUM7QUFDSCxDQUFDLENBQUE7QUFFRCxNQUFNLFVBQVUsV0FBVyxDQUN6QixJQUFZO0lBRVosT0FBTyxDQUNMLEtBQXFCLEVBQ3JCLE1BQWdDLEVBQ2hDLEVBQUUsQ0FDRixNQUFNO1NBQ0gsR0FBRyxDQUFDLFFBQVEsQ0FBQztRQUNaLElBQUksS0FBSyxDQUFDLGlCQUFpQixDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDbkMsS0FBSyxDQUFDLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFB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
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@effect-app/infra",
3
- "version": "2.37.3",
3
+ "version": "2.39.0",
4
4
  "license": "MIT",
5
5
  "type": "module",
6
6
  "dependencies": {
@@ -13,20 +13,20 @@
13
13
  "proper-lockfile": "^4.1.2",
14
14
  "pure-rand": "7.0.1",
15
15
  "query-string": "^9.1.1",
16
- "effect-app": "2.26.3"
16
+ "effect-app": "2.27.0"
17
17
  },
18
18
  "devDependencies": {
19
19
  "@azure/cosmos": "^4.2.0",
20
20
  "@azure/service-bus": "^7.9.5",
21
21
  "@babel/cli": "^7.26.4",
22
- "@babel/core": "^7.26.7",
22
+ "@babel/core": "^7.26.9",
23
23
  "@babel/plugin-proposal-export-namespace-from": "^7.18.9",
24
24
  "@babel/plugin-syntax-import-attributes": "^7.26.0",
25
25
  "@babel/plugin-transform-modules-commonjs": "^7.26.3",
26
26
  "babel-plugin-replace-import-extension": "^1.1.4",
27
- "@sentry/node": "^8.54.0",
27
+ "@sentry/node": "^9.1.0",
28
28
  "@types/express": "^5.0.0",
29
- "@types/node": "~22.13.1",
29
+ "@types/node": "~22.13.4",
30
30
  "@types/proper-lockfile": "^4.1.4",
31
31
  "@types/redis": "^2.8.32",
32
32
  "@types/redlock": "^4.0.7",
@@ -38,22 +38,22 @@
38
38
  "redlock": "^4.2.0",
39
39
  "strip-ansi": "^7.1.0",
40
40
  "typescript": "^5.7.3",
41
- "vitest": "^3.0.5"
41
+ "vitest": "^3.0.6"
42
42
  },
43
43
  "peerDependencies": {
44
44
  "@azure/cosmos": "^4.2.0",
45
45
  "@azure/service-bus": "^7.9.5",
46
- "@effect/experimental": "^0.39.4",
47
- "@effect/platform": "^0.75.4",
48
- "@effect/rpc-http": "^0.48.4",
49
- "@effect/rpc": "^0.50.4",
50
- "@effect/sql": "^0.28.4",
51
- "@effect/vitest": "^0.17.6",
46
+ "@effect/experimental": "^0.41.2",
47
+ "@effect/platform": "^0.77.2",
48
+ "@effect/rpc-http": "^0.50.2",
49
+ "@effect/rpc": "^0.52.2",
50
+ "@effect/sql": "^0.30.2",
51
+ "@effect/vitest": "^0.19.0",
52
52
  "@sendgrid/helpers": "^8.0.0",
53
53
  "@sendgrid/mail": "^8.1.4",
54
54
  "redis": "^3.1.2",
55
55
  "redlock": "^4.2.0",
56
- "effect": "^3.12.10",
56
+ "effect": "^3.13.2",
57
57
  "express": "^4.21.2"
58
58
  },
59
59
  "typesVersions": {
@@ -5,34 +5,51 @@ import { getRC } from "./api/setupRequest.js"
5
5
  import { CauseException, ErrorReported, tryToJson, tryToReport } from "./errors.js"
6
6
  import { InfraLogger } from "./logger.js"
7
7
 
8
+ const tryCauseException = <E>(cause: Cause<E>, name: string): CauseException<E> => {
9
+ try {
10
+ return new CauseException(cause, name)
11
+ } catch {
12
+ return new CauseException(Cause.die(new Error("Failed to create CauseException")), name)
13
+ }
14
+ }
15
+
8
16
  export function reportError(
9
17
  name: string
10
18
  ) {
11
- return (cause: Cause<unknown>, extras?: Record<string, unknown>) =>
12
- Effect.gen(function*() {
13
- if (Cause.isInterruptedOnly(cause)) {
14
- yield* InfraLogger.logDebug("Interrupted").pipe(Effect.annotateLogs("extras", JSON.stringify(extras ?? {})))
15
- return
16
- }
17
- const error = new CauseException(cause, name)
19
+ return (
20
+ cause: Cause<unknown>,
21
+ extras?: Record<string, unknown>
22
+ ) =>
23
+ Effect
24
+ .gen(function*() {
25
+ if (Cause.isInterruptedOnly(cause)) {
26
+ yield* InfraLogger.logDebug("Interrupted").pipe(Effect.annotateLogs("extras", JSON.stringify(extras ?? {})))
27
+ return
28
+ }
29
+ const error = tryCauseException(cause, name)
18
30
 
19
- yield* reportSentry(error, extras)
20
- yield* InfraLogger
21
- .logError("Reporting error", cause)
22
- .pipe(
23
- Effect.annotateLogs(dropUndefined({
24
- extras,
25
- error: tryToReport(error),
26
- cause: tryToJson(cause),
27
- __error_name__: name
28
- })),
29
- Effect.catchAllCause((cause) => InfraLogger.logError("Failed to log error", cause)),
30
- Effect.catchAllCause(() => InfraLogger.logError("Failed to log error cause"))
31
- )
31
+ yield* reportSentry(error, extras)
32
+ yield* InfraLogger
33
+ .logError("Reporting error", cause)
34
+ .pipe(
35
+ Effect.annotateLogs(dropUndefined({
36
+ extras,
37
+ error: tryToReport(error),
38
+ cause: tryToJson(cause),
39
+ __error_name__: name
40
+ }))
41
+ )
32
42
 
33
- error[ErrorReported] = true
34
- return error
35
- })
43
+ error[ErrorReported] = true
44
+ return error
45
+ })
46
+ .pipe(
47
+ Effect.tapErrorCause((cause) =>
48
+ InfraLogger.logError("Failed to report error", cause).pipe(
49
+ Effect.tapErrorCause(() => InfraLogger.logFatal("Failed to log error cause"))
50
+ )
51
+ )
52
+ )
36
53
  }
37
54
 
38
55
  function reportSentry(
@@ -53,23 +70,25 @@ export function logError<E>(
53
70
  name: string
54
71
  ) {
55
72
  return (cause: Cause<E>, extras?: Record<string, unknown>) =>
56
- Effect.gen(function*() {
57
- if (Cause.isInterruptedOnly(cause)) {
58
- yield* InfraLogger.logDebug("Interrupted").pipe(Effect.annotateLogs(dropUndefined({ extras })))
59
- return
60
- }
61
- yield* InfraLogger
62
- .logWarning("Logging error", cause)
63
- .pipe(
64
- Effect.annotateLogs(dropUndefined({
65
- extras,
66
- cause: tryToJson(cause),
67
- __error_name__: name
68
- })),
69
- Effect.catchAllCause((cause) => InfraLogger.logError("Failed to log error", cause)),
70
- Effect.catchAllCause(() => InfraLogger.logError("Failed to log error cause"))
71
- )
72
- })
73
+ Effect
74
+ .gen(function*() {
75
+ if (Cause.isInterruptedOnly(cause)) {
76
+ yield* InfraLogger.logDebug("Interrupted").pipe(Effect.annotateLogs(dropUndefined({ extras })))
77
+ return
78
+ }
79
+ yield* InfraLogger
80
+ .logWarning("Logging error", cause)
81
+ .pipe(
82
+ Effect.annotateLogs(dropUndefined({
83
+ extras,
84
+ cause: tryToJson(cause),
85
+ __error_name__: name
86
+ }))
87
+ )
88
+ })
89
+ .pipe(
90
+ Effect.tapErrorCause(() => InfraLogger.logFatal("Failed to log error cause"))
91
+ )
73
92
  }
74
93
 
75
94
  export function captureException(error: unknown) {