@shivaedev/errors 0.10.0 → 0.11.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/boundary.d.ts.map +1 -1
- package/dist/boundary.js +20 -1
- package/dist/boundary.js.map +1 -1
- package/dist/redactCause.d.ts.map +1 -1
- package/dist/redactCause.js +26 -23
- package/dist/redactCause.js.map +1 -1
- package/package.json +5 -5
- package/src/boundary.ts +21 -1
- package/src/redactCause.ts +30 -23
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,17 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 0.11.0 - 2026-11-08
|
|
4
|
+
|
|
5
|
+
### Breaking
|
|
6
|
+
|
|
7
|
+
- Error reporting now gives the reporter a copied `Error` with the source message, stack and own annotations, leaving the supplied value unchanged.
|
|
8
|
+
|
|
9
|
+
## 0.10.1 - 2026-11-07
|
|
10
|
+
|
|
11
|
+
### Changed
|
|
12
|
+
|
|
13
|
+
- Require Effect 4.1.1 and its matching platform packages.
|
|
14
|
+
|
|
3
15
|
## 0.10.0 - 2026-11-05
|
|
4
16
|
|
|
5
17
|
### Breaking
|
package/dist/boundary.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"boundary.d.ts","sourceRoot":"","sources":["../src/boundary.ts"],"names":[],"mappings":"AAAA,OAAO,EAAkB,MAAM,EAA4B,MAAM,EAAE,MAAM,QAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"boundary.d.ts","sourceRoot":"","sources":["../src/boundary.ts"],"names":[],"mappings":"AAAA,OAAO,EAAkB,MAAM,EAA4B,MAAM,EAAE,MAAM,QAAQ,CAAC;AAsDlF,MAAM,WAAW,kBAAkB,CAAC,CAAC;IACpC,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,UAAU,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,CAAC,CAAC;CAC5C;AACD,wBAAgB,WAAW,CAAC,OAAO,SAAS,MAAM,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,kBAAkB,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,IAEnH,CAAC,EAAE,CAAC,EAAE,CAAC,QAAQ,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,KAAG,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAkBpF"}
|
package/dist/boundary.js
CHANGED
|
@@ -1,8 +1,27 @@
|
|
|
1
1
|
import { Cause, Context, Effect, ErrorReporter, Predicate, Schema } from "effect";
|
|
2
2
|
import { redactDiagnosticCause } from "#redactCause.ts";
|
|
3
3
|
import { isSensitiveKey, redactText } from "#sensitive.ts";
|
|
4
|
+
class ReportableError extends Error {
|
|
5
|
+
[ErrorReporter.severity] = "Error";
|
|
6
|
+
}
|
|
4
7
|
function reportable(value) {
|
|
5
|
-
|
|
8
|
+
const message = Predicate.isObject(value) && "message" in value ? String(value.message) : String(value);
|
|
9
|
+
const reported = new ReportableError(message);
|
|
10
|
+
if (Predicate.isObject(value)) {
|
|
11
|
+
for (const key of Reflect.ownKeys(value)) {
|
|
12
|
+
if (key === "message" || key === "stack" || key === ErrorReporter.severity) {
|
|
13
|
+
continue;
|
|
14
|
+
}
|
|
15
|
+
const descriptor = Object.getOwnPropertyDescriptor(value, key);
|
|
16
|
+
if (descriptor !== undefined) {
|
|
17
|
+
Object.defineProperty(reported, key, descriptor);
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
if ("stack" in value) {
|
|
21
|
+
reported.stack = String(value.stack);
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
return reported;
|
|
6
25
|
}
|
|
7
26
|
function reportUnexpected(cause) {
|
|
8
27
|
const diagnostic = redactDiagnosticCause(cause);
|
package/dist/boundary.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"boundary.js","sourceRoot":"","sources":["../src/boundary.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAClF,OAAO,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AACxD,OAAO,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAE3D,SAAS,UAAU,CAAC,KAAc;IACjC,OAAO,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,
|
|
1
|
+
{"version":3,"file":"boundary.js","sourceRoot":"","sources":["../src/boundary.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"redactCause.d.ts","sourceRoot":"","sources":["../src/redactCause.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAW,aAAa,EAA8B,MAAM,QAAQ,CAAC;AAEnF,OAAO,EAA0D,KAAK,YAAY,EAAE,MAAM,eAAe,CAAC;AA4B1G,wBAAgB,YAAY,CAAC,MAAM,EAAE,OAAO,EAAE,SAAS,GAAE,YAA6B,GAAG,OAAO,CAE/F;AACD,wBAAgB,WAAW,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,SAAS,GAAE,YAA6B,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAQ9G;
|
|
1
|
+
{"version":3,"file":"redactCause.d.ts","sourceRoot":"","sources":["../src/redactCause.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAW,aAAa,EAA8B,MAAM,QAAQ,CAAC;AAEnF,OAAO,EAA0D,KAAK,YAAY,EAAE,MAAM,eAAe,CAAC;AA4B1G,wBAAgB,YAAY,CAAC,MAAM,EAAE,OAAO,EAAE,SAAS,GAAE,YAA6B,GAAG,OAAO,CAE/F;AACD,wBAAgB,WAAW,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,SAAS,GAAE,YAA6B,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAQ9G;AAuDD,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,SAAS,GAAE,YAA6B,GAAG,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAQjI;AACD,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,aAAa,CAAC,aAAa,EAAE,SAAS,GAAE,YAA6B,GAAG,aAAa,CAAC,aAAa,CAKnJ"}
|
package/dist/redactCause.js
CHANGED
|
@@ -41,22 +41,6 @@ function diagnosticReason(reason, sensitive) {
|
|
|
41
41
|
return Cause.interrupt(reason.fiberId);
|
|
42
42
|
}
|
|
43
43
|
}
|
|
44
|
-
function stackFrame(frame, sensitive, remaining = 8) {
|
|
45
|
-
if (frame === undefined || remaining === 0) {
|
|
46
|
-
return undefined;
|
|
47
|
-
}
|
|
48
|
-
return {
|
|
49
|
-
name: sensitive("name") ? REDACTED : redactText(frame.name, sensitive),
|
|
50
|
-
parent: stackFrame(frame.parent, sensitive, remaining - 1),
|
|
51
|
-
stack: () => {
|
|
52
|
-
const value = frame.stack();
|
|
53
|
-
if (value === undefined) {
|
|
54
|
-
return undefined;
|
|
55
|
-
}
|
|
56
|
-
return sensitive("name") || sensitive("message") ? REDACTED : redactText(value, sensitive);
|
|
57
|
-
},
|
|
58
|
-
};
|
|
59
|
-
}
|
|
60
44
|
function diagnosticAnnotations(reason, sensitive) {
|
|
61
45
|
const nativeStacks = [
|
|
62
46
|
Cause.StackTrace,
|
|
@@ -65,14 +49,33 @@ function diagnosticAnnotations(reason, sensitive) {
|
|
|
65
49
|
const annotations = new Map([...reason.annotations]
|
|
66
50
|
.filter(([key]) => !nativeStacks.some((service) => service.key === key))
|
|
67
51
|
.map(([key, value]) => [key, sensitive(key) ? REDACTED : redact(value, sensitive)]));
|
|
68
|
-
if (
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
52
|
+
if (sensitive("stack")) {
|
|
53
|
+
return annotations;
|
|
54
|
+
}
|
|
55
|
+
const context = Cause.reasonAnnotations(reason);
|
|
56
|
+
for (const service of nativeStacks) {
|
|
57
|
+
const frame = Context.getOrUndefined(context, service);
|
|
58
|
+
if (frame === undefined || sensitive(service.key)) {
|
|
59
|
+
continue;
|
|
60
|
+
}
|
|
61
|
+
const frames = [];
|
|
62
|
+
let current = frame;
|
|
63
|
+
while (current !== undefined && frames.length < 8) {
|
|
64
|
+
frames.push({ name: sensitive("name") ? REDACTED : redactText(current.name, sensitive), source: current });
|
|
65
|
+
current = current.parent;
|
|
75
66
|
}
|
|
67
|
+
const redactedFrame = frames.reduceRight((parent, { source, name }) => ({
|
|
68
|
+
name,
|
|
69
|
+
parent,
|
|
70
|
+
stack: () => {
|
|
71
|
+
const value = source.stack();
|
|
72
|
+
if (value === undefined) {
|
|
73
|
+
return undefined;
|
|
74
|
+
}
|
|
75
|
+
return sensitive("name") || sensitive("message") ? REDACTED : redactText(value, sensitive);
|
|
76
|
+
},
|
|
77
|
+
}), undefined);
|
|
78
|
+
annotations.set(service.key, redactedFrame);
|
|
76
79
|
}
|
|
77
80
|
return annotations;
|
|
78
81
|
}
|
package/dist/redactCause.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"redactCause.js","sourceRoot":"","sources":["../src/redactCause.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"redactCause.js","sourceRoot":"","sources":["../src/redactCause.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@shivaedev/errors",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.11.0",
|
|
4
4
|
"description": "Typed expected failures and secret-safe failure reporting for Effect applications",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"effect"
|
|
@@ -45,15 +45,15 @@
|
|
|
45
45
|
"README.md"
|
|
46
46
|
],
|
|
47
47
|
"devDependencies": {
|
|
48
|
-
"@shivaedev/quality": "0.
|
|
49
|
-
"@shivaedev/test-story": "0.
|
|
48
|
+
"@shivaedev/quality": "0.75.0",
|
|
49
|
+
"@shivaedev/test-story": "0.46.0",
|
|
50
50
|
"@types/node": "24.19.2",
|
|
51
|
-
"effect": "4.1.
|
|
51
|
+
"effect": "4.1.1",
|
|
52
52
|
"typescript": "7.0.2",
|
|
53
53
|
"vitest": "5.0.5"
|
|
54
54
|
},
|
|
55
55
|
"peerDependencies": {
|
|
56
|
-
"effect": "4.1.
|
|
56
|
+
"effect": "4.1.1"
|
|
57
57
|
},
|
|
58
58
|
"engines": {
|
|
59
59
|
"node": ">=24"
|
package/src/boundary.ts
CHANGED
|
@@ -2,8 +2,28 @@ import { Cause, Context, Effect, ErrorReporter, Predicate, Schema } from "effect
|
|
|
2
2
|
import { redactDiagnosticCause } from "#redactCause.ts";
|
|
3
3
|
import { isSensitiveKey, redactText } from "#sensitive.ts";
|
|
4
4
|
|
|
5
|
+
class ReportableError extends Error {
|
|
6
|
+
override readonly [ErrorReporter.severity] = "Error";
|
|
7
|
+
}
|
|
8
|
+
|
|
5
9
|
function reportable(value: unknown) {
|
|
6
|
-
|
|
10
|
+
const message = Predicate.isObject(value) && "message" in value ? String(value.message) : String(value);
|
|
11
|
+
const reported = new ReportableError(message);
|
|
12
|
+
if (Predicate.isObject(value)) {
|
|
13
|
+
for (const key of Reflect.ownKeys(value)) {
|
|
14
|
+
if (key === "message" || key === "stack" || key === ErrorReporter.severity) {
|
|
15
|
+
continue;
|
|
16
|
+
}
|
|
17
|
+
const descriptor = Object.getOwnPropertyDescriptor(value, key);
|
|
18
|
+
if (descriptor !== undefined) {
|
|
19
|
+
Object.defineProperty(reported, key, descriptor);
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
if ("stack" in value) {
|
|
23
|
+
reported.stack = String(value.stack);
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
return reported;
|
|
7
27
|
}
|
|
8
28
|
function reportUnexpected(cause: Cause.Cause<unknown>): Effect.Effect<void> {
|
|
9
29
|
const diagnostic = redactDiagnosticCause(cause);
|
package/src/redactCause.ts
CHANGED
|
@@ -50,22 +50,7 @@ function diagnosticReason(reason: Cause.Reason<unknown>, sensitive: SensitiveKey
|
|
|
50
50
|
return Cause.interrupt(reason.fiberId);
|
|
51
51
|
}
|
|
52
52
|
}
|
|
53
|
-
|
|
54
|
-
if (frame === undefined || remaining === 0) {
|
|
55
|
-
return undefined;
|
|
56
|
-
}
|
|
57
|
-
return {
|
|
58
|
-
name: sensitive("name") ? REDACTED : redactText(frame.name, sensitive),
|
|
59
|
-
parent: stackFrame(frame.parent, sensitive, remaining - 1),
|
|
60
|
-
stack: () => {
|
|
61
|
-
const value = frame.stack();
|
|
62
|
-
if (value === undefined) {
|
|
63
|
-
return undefined;
|
|
64
|
-
}
|
|
65
|
-
return sensitive("name") || sensitive("message") ? REDACTED : redactText(value, sensitive);
|
|
66
|
-
},
|
|
67
|
-
};
|
|
68
|
-
}
|
|
53
|
+
|
|
69
54
|
function diagnosticAnnotations(reason: Cause.Reason<unknown>, sensitive: SensitiveKey) {
|
|
70
55
|
const nativeStacks: Context.Key<Cause.StackTrace | Cause.InterruptorStackTrace, References.StackFrame>[] = [
|
|
71
56
|
Cause.StackTrace,
|
|
@@ -76,14 +61,36 @@ function diagnosticAnnotations(reason: Cause.Reason<unknown>, sensitive: Sensiti
|
|
|
76
61
|
.filter(([key]) => !nativeStacks.some((service) => service.key === key))
|
|
77
62
|
.map(([key, value]) => [key, sensitive(key) ? REDACTED : redact(value, sensitive)]),
|
|
78
63
|
);
|
|
79
|
-
if (
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
64
|
+
if (sensitive("stack")) {
|
|
65
|
+
return annotations;
|
|
66
|
+
}
|
|
67
|
+
const context = Cause.reasonAnnotations(reason);
|
|
68
|
+
for (const service of nativeStacks) {
|
|
69
|
+
const frame = Context.getOrUndefined(context, service);
|
|
70
|
+
if (frame === undefined || sensitive(service.key)) {
|
|
71
|
+
continue;
|
|
72
|
+
}
|
|
73
|
+
const frames: Array<{ readonly source: References.StackFrame; readonly name: string }> = [];
|
|
74
|
+
let current: References.StackFrame | undefined = frame;
|
|
75
|
+
while (current !== undefined && frames.length < 8) {
|
|
76
|
+
frames.push({ name: sensitive("name") ? REDACTED : redactText(current.name, sensitive), source: current });
|
|
77
|
+
current = current.parent;
|
|
86
78
|
}
|
|
79
|
+
const redactedFrame = frames.reduceRight<References.StackFrame | undefined>(
|
|
80
|
+
(parent, { source, name }) => ({
|
|
81
|
+
name,
|
|
82
|
+
parent,
|
|
83
|
+
stack: () => {
|
|
84
|
+
const value = source.stack();
|
|
85
|
+
if (value === undefined) {
|
|
86
|
+
return undefined;
|
|
87
|
+
}
|
|
88
|
+
return sensitive("name") || sensitive("message") ? REDACTED : redactText(value, sensitive);
|
|
89
|
+
},
|
|
90
|
+
}),
|
|
91
|
+
undefined,
|
|
92
|
+
);
|
|
93
|
+
annotations.set(service.key, redactedFrame);
|
|
87
94
|
}
|
|
88
95
|
return annotations;
|
|
89
96
|
}
|