@effect-app/infra 2.38.0 → 2.40.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 +12 -0
- package/dist/errorReporter.d.ts.map +1 -1
- package/dist/errorReporter.js +20 -8
- package/package.json +1 -1
- package/src/errorReporter.ts +59 -40
package/CHANGELOG.md
CHANGED
|
@@ -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;
|
|
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"}
|
package/dist/errorReporter.js
CHANGED
|
@@ -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
|
|
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 =
|
|
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
|
-
}))
|
|
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
|
|
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
|
-
}))
|
|
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,
|
|
81
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXJyb3JSZXBvcnRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9lcnJvclJlcG9ydGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxNQUFNLE1BQU0sY0FBYyxDQUFBO0FBQ3RDLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sWUFBWSxDQUFBO0FBQzFDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQTtBQUNoRCxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sdUJBQXVCLENBQUE7QUFDN0MsT0FBTyxFQUFFLGNBQWMsRUFBRSxhQUFhLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBRSxNQUFNLGFBQWEsQ0FBQTtBQUNuRixPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sYUFBYSxDQUFBO0FBRXpDLE1BQU0saUJBQWlCLEdBQUcsQ0FBSSxLQUFlLEVBQUUsSUFBWSxFQUFxQixFQUFFO0lBQ2hGLElBQUksQ0FBQztRQUNILE9BQU8sSUFBSSxjQUFjLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFBO0lBQ3hDLENBQUM7SUFBQyxNQUFNLENBQUM7UUFDUCxPQUFPLElBQUksY0FBYyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsSUFBSSxLQUFLLENBQUMsaUNBQWlDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFBO0lBQzFGLENBQUM7QUFDSCxDQUFDLENBQUE7QUFFRCxNQUFNLFVBQVUsV0FBVyxDQUN6QixJQUFZO0lBRVosT0FBTyxDQUNMLEtBQXFCLEVBQ3JCLE1BQWdDLEVBQ2hDLEVBQUUsQ0FDRixNQUFNO1NBQ0gsR0FBRyxDQUFDLFFBQVEsQ0FBQztRQUNaLElBQUksS0FBSyxDQUFDLGlCQUFpQixDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDbkMsS0FBSyxDQUFDLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFB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
|
package/package.json
CHANGED
package/src/errorReporter.ts
CHANGED
|
@@ -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 (
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
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
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
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
|
-
|
|
34
|
-
|
|
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
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
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) {
|