@hg-ts/exception 0.7.18 → 0.7.20
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/dist/exceptions/base.exception.d.ts +7 -2
- package/dist/exceptions/base.exception.d.ts.map +1 -1
- package/dist/exceptions/base.exception.js +13 -6
- package/dist/exceptions/base.exception.js.map +1 -1
- package/dist/tests/serialization.test.d.ts +2 -0
- package/dist/tests/serialization.test.d.ts.map +1 -1
- package/dist/tests/serialization.test.js +38 -0
- package/dist/tests/serialization.test.js.map +1 -1
- package/dist/utils/stack-trace.formatter.d.ts.map +1 -1
- package/dist/utils/stack-trace.formatter.js +1 -2
- package/dist/utils/stack-trace.formatter.js.map +1 -1
- package/package.json +5 -5
- package/src/exceptions/base.exception.ts +20 -11
- package/src/tests/serialization.test.ts +36 -0
- package/src/utils/stack-trace.formatter.ts +1 -2
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import { inspect, InspectOptionsStylized } from 'util';
|
|
2
1
|
export type JSONBaseException = {
|
|
3
2
|
name: string;
|
|
4
3
|
code: Nullable<number>;
|
|
@@ -11,6 +10,10 @@ export type ExceptionOptions = {
|
|
|
11
10
|
code?: number | undefined;
|
|
12
11
|
};
|
|
13
12
|
export declare const PAD_COUNT_PER_DEPTH = 4;
|
|
13
|
+
declare const NODE_INSPECT_CUSTOM_SYMBOL: unique symbol;
|
|
14
|
+
type InspectOptionsLike = {
|
|
15
|
+
stylize?(value: string, styleType: string): string;
|
|
16
|
+
};
|
|
14
17
|
export declare abstract class BaseException extends Error {
|
|
15
18
|
readonly code: Nullable<number>;
|
|
16
19
|
readonly stack: string;
|
|
@@ -21,7 +24,7 @@ export declare abstract class BaseException extends Error {
|
|
|
21
24
|
get name(): string;
|
|
22
25
|
toJSON(): JSONBaseException;
|
|
23
26
|
toString(padCount?: number): string;
|
|
24
|
-
[
|
|
27
|
+
[NODE_INSPECT_CUSTOM_SYMBOL](_depth: Nullable<number>, options?: InspectOptionsLike): string;
|
|
25
28
|
isFromNextTick(): boolean;
|
|
26
29
|
isFromImmediate(): boolean;
|
|
27
30
|
isFromTimer(): boolean;
|
|
@@ -31,5 +34,7 @@ export declare abstract class BaseException extends Error {
|
|
|
31
34
|
protected injectBeforeStack(padCount: number): string[];
|
|
32
35
|
protected static padLine(line: string, padCount: number): string;
|
|
33
36
|
private getLastStackLine;
|
|
37
|
+
private captureStackTrace;
|
|
34
38
|
}
|
|
39
|
+
export {};
|
|
35
40
|
//# sourceMappingURL=base.exception.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"base.exception.d.ts","sourceRoot":"","sources":["../../src/exceptions/base.exception.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"base.exception.d.ts","sourceRoot":"","sources":["../../src/exceptions/base.exception.ts"],"names":[],"mappings":"AAGA,MAAM,MAAM,iBAAiB,GAAG;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,KAAK,CAAC,EAAE,iBAAiB,CAAC;CAC1B,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG;IAC9B,KAAK,CAAC,EAAE,aAAa,GAAG,SAAS,CAAC;IAClC,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAC1B,CAAC;AAEF,eAAO,MAAM,mBAAmB,IAAI,CAAC;AAErC,QAAA,MAAM,0BAA0B,eAA2C,CAAC;AAE5E,KAAK,kBAAkB,GAAG;IACzB,OAAO,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAAC;CACnD,CAAC;AAEF,8BAAsB,aAAc,SAAQ,KAAK;IAChD,SAAgB,IAAI,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAQ;IAC9C,SAAyB,KAAK,EAAE,MAAM,CAAC;IACvC,SAAyB,OAAO,EAAE,MAAM,CAAC;IACzC,SAAyB,KAAK,CAAC,EAAE,aAAa,CAAC;IAC/C,OAAO,CAAC,UAAU,CAAqC;gBAEpC,OAAO,EAAE,MAAM,EAAE,aAAa,GAAE,gBAAqB;IAexE,IAAoB,IAAI,IAAI,MAAM,CAIjC;IAEM,MAAM,IAAI,iBAAiB;IAmBlB,QAAQ,CAAC,QAAQ,SAAsB,GAAG,MAAM;IAazD,CAAC,0BAA0B,CAAC,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC,EAAE,kBAAkB,GAAG,MAAM;IAI5F,cAAc,IAAI,OAAO;IAMzB,eAAe,IAAI,OAAO;IAM1B,WAAW,IAAI,OAAO;WAMf,SAAS,CAAC,KAAK,EAAE,KAAK,GAAG,aAAa;IAIpD,SAAS,CAAC,OAAO,IAAI,QAAQ;IAI7B,SAAS,CAAC,qBAAqB,IAAI,MAAM;IAMzC,SAAS,CAAC,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,EAAE;IAQvD,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM;IAIhE,OAAO,CAAC,gBAAgB;IAMxB,OAAO,CAAC,iBAAiB;CASzB"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import * as os from 'os';
|
|
2
|
-
import { inspect, } from 'util';
|
|
3
1
|
import { StackTraceFormatter } from '../utils/index.js';
|
|
4
2
|
import { ErrorException } from './error.exception.js';
|
|
5
3
|
export const PAD_COUNT_PER_DEPTH = 4;
|
|
4
|
+
const STACK_LINE_SEPARATOR = '\n';
|
|
5
|
+
const NODE_INSPECT_CUSTOM_SYMBOL = Symbol.for('nodejs.util.inspect.custom');
|
|
6
6
|
export class BaseException extends Error {
|
|
7
7
|
code = null;
|
|
8
8
|
stack;
|
|
@@ -18,7 +18,7 @@ export class BaseException extends Error {
|
|
|
18
18
|
if (codeOrOptions.code) {
|
|
19
19
|
this.code = codeOrOptions.code;
|
|
20
20
|
}
|
|
21
|
-
|
|
21
|
+
this.captureStackTrace();
|
|
22
22
|
}
|
|
23
23
|
get name() {
|
|
24
24
|
const { name } = this.getCtor();
|
|
@@ -47,10 +47,10 @@ export class BaseException extends Error {
|
|
|
47
47
|
...this.injectBeforeStack(padCount + PAD_COUNT_PER_DEPTH),
|
|
48
48
|
...formattedStack,
|
|
49
49
|
];
|
|
50
|
-
return errorLines.join(
|
|
50
|
+
return errorLines.join(STACK_LINE_SEPARATOR);
|
|
51
51
|
}
|
|
52
|
-
[
|
|
53
|
-
return stylize(this.toString(), 'regexp');
|
|
52
|
+
[NODE_INSPECT_CUSTOM_SYMBOL](_depth, options) {
|
|
53
|
+
return options?.stylize?.(this.toString(), 'regexp') ?? this.toString();
|
|
54
54
|
}
|
|
55
55
|
isFromNextTick() {
|
|
56
56
|
const lastLine = this.getLastStackLine();
|
|
@@ -87,5 +87,12 @@ export class BaseException extends Error {
|
|
|
87
87
|
const { stack } = this.toJSON();
|
|
88
88
|
return stack[stack.length - 1] ?? '';
|
|
89
89
|
}
|
|
90
|
+
captureStackTrace() {
|
|
91
|
+
if (typeof Error.captureStackTrace === 'function') {
|
|
92
|
+
Error.captureStackTrace(this, this.getCtor());
|
|
93
|
+
return;
|
|
94
|
+
}
|
|
95
|
+
Object.assign(this, { stack: new Error(this.message).stack ?? `${this.name}: ${this.message}` });
|
|
96
|
+
}
|
|
90
97
|
}
|
|
91
98
|
//# sourceMappingURL=base.exception.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"base.exception.js","sourceRoot":"","sources":["../../src/exceptions/base.exception.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"base.exception.js","sourceRoot":"","sources":["../../src/exceptions/base.exception.ts"],"names":[],"mappings":"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"}
|
|
@@ -8,5 +8,7 @@ export declare class SerializationTestSuite extends Suite {
|
|
|
8
8
|
isFromImmediateTest(): Promise<void>;
|
|
9
9
|
fromTimeoutTest(): Promise<void>;
|
|
10
10
|
fromIntervalTest(): Promise<void>;
|
|
11
|
+
shouldWorkWithoutCaptureStackTrace(): Promise<void>;
|
|
12
|
+
shouldSplitStackWithLfSeparator(): Promise<void>;
|
|
11
13
|
}
|
|
12
14
|
//# sourceMappingURL=serialization.test.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"serialization.test.d.ts","sourceRoot":"","sources":["../../src/tests/serialization.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAGN,KAAK,EAEL,MAAM,cAAc,CAAC;AAStB,qBACa,sBAAuB,SAAQ,KAAK;IAEnC,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAe3B,sBAAsB,IAAI,OAAO,CAAC,IAAI,CAAC;IAevC,sBAAsB,IAAI,OAAO,CAAC,IAAI,CAAC;IAiBvC,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC;IAO9B,kBAAkB,IAAI,OAAO,CAAC,IAAI,CAAC;IAYnC,mBAAmB,IAAI,OAAO,CAAC,IAAI,CAAC;IAYpC,eAAe,IAAI,OAAO,CAAC,IAAI,CAAC;IAYhC,gBAAgB,IAAI,OAAO,CAAC,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"serialization.test.d.ts","sourceRoot":"","sources":["../../src/tests/serialization.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAGN,KAAK,EAEL,MAAM,cAAc,CAAC;AAStB,qBACa,sBAAuB,SAAQ,KAAK;IAEnC,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAe3B,sBAAsB,IAAI,OAAO,CAAC,IAAI,CAAC;IAevC,sBAAsB,IAAI,OAAO,CAAC,IAAI,CAAC;IAiBvC,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC;IAO9B,kBAAkB,IAAI,OAAO,CAAC,IAAI,CAAC;IAYnC,mBAAmB,IAAI,OAAO,CAAC,IAAI,CAAC;IAYpC,eAAe,IAAI,OAAO,CAAC,IAAI,CAAC;IAYhC,gBAAgB,IAAI,OAAO,CAAC,IAAI,CAAC;IAcjC,kCAAkC,IAAI,OAAO,CAAC,IAAI,CAAC;IAmBnD,+BAA+B,IAAI,OAAO,CAAC,IAAI,CAAC;CAe7D"}
|
|
@@ -82,6 +82,32 @@ let SerializationTestSuite = class SerializationTestSuite extends Suite {
|
|
|
82
82
|
}, 0);
|
|
83
83
|
});
|
|
84
84
|
}
|
|
85
|
+
async shouldWorkWithoutCaptureStackTrace() {
|
|
86
|
+
const originalCaptureStackTrace = Error.captureStackTrace;
|
|
87
|
+
try {
|
|
88
|
+
Reflect.set(Error, 'captureStackTrace', undefined);
|
|
89
|
+
const exception = new TestException('Browser compatible message');
|
|
90
|
+
expect(exception.message).toEqual('Browser compatible message');
|
|
91
|
+
expect(exception.toJSON().stack).toBeInstanceOf(Array);
|
|
92
|
+
expect(exception.toJSON().stack).not.toEqual([]);
|
|
93
|
+
}
|
|
94
|
+
finally {
|
|
95
|
+
Reflect.set(Error, 'captureStackTrace', originalCaptureStackTrace);
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
async shouldSplitStackWithLfSeparator() {
|
|
99
|
+
const stack = [
|
|
100
|
+
'TestException: Test message',
|
|
101
|
+
'at new TestException (/test/exception.ts:1:1)',
|
|
102
|
+
'at browserHandler (/test/browser.ts:2:2)',
|
|
103
|
+
].join('\n');
|
|
104
|
+
const exception = BaseException.fromError({
|
|
105
|
+
message: 'Test message',
|
|
106
|
+
name: 'Error',
|
|
107
|
+
stack,
|
|
108
|
+
});
|
|
109
|
+
expect(exception.toJSON().stack).toContain('at browserHandler (/test/browser.ts:2:2)');
|
|
110
|
+
}
|
|
85
111
|
};
|
|
86
112
|
__decorate([
|
|
87
113
|
Test(),
|
|
@@ -131,6 +157,18 @@ __decorate([
|
|
|
131
157
|
__metadata("design:paramtypes", []),
|
|
132
158
|
__metadata("design:returntype", Promise)
|
|
133
159
|
], SerializationTestSuite.prototype, "fromIntervalTest", null);
|
|
160
|
+
__decorate([
|
|
161
|
+
Test(),
|
|
162
|
+
__metadata("design:type", Function),
|
|
163
|
+
__metadata("design:paramtypes", []),
|
|
164
|
+
__metadata("design:returntype", Promise)
|
|
165
|
+
], SerializationTestSuite.prototype, "shouldWorkWithoutCaptureStackTrace", null);
|
|
166
|
+
__decorate([
|
|
167
|
+
Test(),
|
|
168
|
+
__metadata("design:type", Function),
|
|
169
|
+
__metadata("design:paramtypes", []),
|
|
170
|
+
__metadata("design:returntype", Promise)
|
|
171
|
+
], SerializationTestSuite.prototype, "shouldSplitStackWithLfSeparator", null);
|
|
134
172
|
SerializationTestSuite = __decorate([
|
|
135
173
|
Describe()
|
|
136
174
|
], SerializationTestSuite);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"serialization.test.js","sourceRoot":"","sources":["../../src/tests/serialization.test.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"serialization.test.js","sourceRoot":"","sources":["../../src/tests/serialization.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stack-trace.formatter.d.ts","sourceRoot":"","sources":["../../src/utils/stack-trace.formatter.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"stack-trace.formatter.d.ts","sourceRoot":"","sources":["../../src/utils/stack-trace.formatter.ts"],"names":[],"mappings":"AAEA,qBAAa,mBAAmB;WACjB,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,GAAG,MAAM,EAAE;IAIpE,SAAS,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,GAAG,MAAM,EAAE;IAkB9E,SAAS,CAAC,MAAM,CAAC,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;CAG3D"}
|
|
@@ -1,11 +1,10 @@
|
|
|
1
|
-
import os from 'os';
|
|
2
1
|
import { SOURCE_MAP_ENABLED } from '../consts.js';
|
|
3
2
|
export class StackTraceFormatter {
|
|
4
3
|
static format(stack, exceptionName) {
|
|
5
4
|
return StackTraceFormatter.getStackLines(stack, exceptionName);
|
|
6
5
|
}
|
|
7
6
|
static getStackLines(stack, exceptionName) {
|
|
8
|
-
let lines = stack.split(
|
|
7
|
+
let lines = stack.split(/\r?\n/u)
|
|
9
8
|
.splice(1)
|
|
10
9
|
.filter(stackLine => !StackTraceFormatter.isInternalStackLine(stackLine))
|
|
11
10
|
.map(line => line.trim());
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stack-trace.formatter.js","sourceRoot":"","sources":["../../src/utils/stack-trace.formatter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"stack-trace.formatter.js","sourceRoot":"","sources":["../../src/utils/stack-trace.formatter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAElD,MAAM,OAAO,mBAAmB;IACxB,MAAM,CAAC,MAAM,CAAC,KAAa,EAAE,aAAqB;QACxD,OAAO,mBAAmB,CAAC,aAAa,CAAC,KAAK,EAAE,aAAa,CAAC,CAAC;IAChE,CAAC;IAES,MAAM,CAAC,aAAa,CAAC,KAAa,EAAE,aAAqB;QAClE,IAAI,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC;aAC/B,MAAM,CAAC,CAAC,CAAC;aACT,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,mBAAmB,CAAC,mBAAmB,CAAC,SAAS,CAAC,CAAC;aACxE,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;QAE3B,IAAI,kBAAkB,EAAE,CAAC;YACxB,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QACxB,CAAC;QACD,MAAM,4BAA4B,GAAG,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,UAAU,aAAa,EAAE,CAAC,CAAC,CAAC;QAEzG,IAAI,4BAA4B,GAAG,CAAC,CAAC,EAAE,CAAC;YACvC,OAAO,KAAK,CAAC,KAAK,CAAC,4BAA4B,GAAG,CAAC,CAAC,CAAC;QACtD,CAAC;QAED,OAAO,KAAK,CAAC;IACd,CAAC;IAES,MAAM,CAAC,mBAAmB,CAAC,IAAY;QAChD,OAAO,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,2BAA2B,CAAC,CAAC;IAClF,CAAC;CACD"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@hg-ts/exception",
|
|
3
|
-
"version": "0.7.
|
|
3
|
+
"version": "0.7.20",
|
|
4
4
|
"main": "dist/index.js",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"exports": {
|
|
@@ -18,10 +18,10 @@
|
|
|
18
18
|
"test:dev": "vitest watch"
|
|
19
19
|
},
|
|
20
20
|
"devDependencies": {
|
|
21
|
-
"@hg-ts-config/typescript": "0.7.
|
|
22
|
-
"@hg-ts/linter": "0.7.
|
|
23
|
-
"@hg-ts/tests": "0.7.
|
|
24
|
-
"@hg-ts/types": "0.7.
|
|
21
|
+
"@hg-ts-config/typescript": "0.7.20",
|
|
22
|
+
"@hg-ts/linter": "0.7.20",
|
|
23
|
+
"@hg-ts/tests": "0.7.20",
|
|
24
|
+
"@hg-ts/types": "0.7.20",
|
|
25
25
|
"@types/node": "22.19.1",
|
|
26
26
|
"@vitest/coverage-v8": "4.0.14",
|
|
27
27
|
"eslint": "9.18.0",
|
|
@@ -1,9 +1,3 @@
|
|
|
1
|
-
import * as os from 'os';
|
|
2
|
-
import {
|
|
3
|
-
inspect,
|
|
4
|
-
InspectOptionsStylized,
|
|
5
|
-
} from 'util';
|
|
6
|
-
|
|
7
1
|
import { StackTraceFormatter } from '../utils/index.js';
|
|
8
2
|
import { ErrorException } from './error.exception.js';
|
|
9
3
|
|
|
@@ -21,6 +15,12 @@ export type ExceptionOptions = {
|
|
|
21
15
|
};
|
|
22
16
|
|
|
23
17
|
export const PAD_COUNT_PER_DEPTH = 4;
|
|
18
|
+
const STACK_LINE_SEPARATOR = '\n';
|
|
19
|
+
const NODE_INSPECT_CUSTOM_SYMBOL = Symbol.for('nodejs.util.inspect.custom');
|
|
20
|
+
|
|
21
|
+
type InspectOptionsLike = {
|
|
22
|
+
stylize?(value: string, styleType: string): string;
|
|
23
|
+
};
|
|
24
24
|
|
|
25
25
|
export abstract class BaseException extends Error {
|
|
26
26
|
public readonly code: Nullable<number> = null;
|
|
@@ -41,7 +41,7 @@ export abstract class BaseException extends Error {
|
|
|
41
41
|
this.code = codeOrOptions.code;
|
|
42
42
|
}
|
|
43
43
|
|
|
44
|
-
|
|
44
|
+
this.captureStackTrace();
|
|
45
45
|
}
|
|
46
46
|
|
|
47
47
|
public override get name(): string {
|
|
@@ -79,12 +79,11 @@ export abstract class BaseException extends Error {
|
|
|
79
79
|
...formattedStack,
|
|
80
80
|
];
|
|
81
81
|
|
|
82
|
-
return errorLines.join(
|
|
82
|
+
return errorLines.join(STACK_LINE_SEPARATOR);
|
|
83
83
|
}
|
|
84
84
|
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
return stylize(this.toString(), 'regexp');
|
|
85
|
+
public [NODE_INSPECT_CUSTOM_SYMBOL](_depth: Nullable<number>, options?: InspectOptionsLike): string {
|
|
86
|
+
return options?.stylize?.(this.toString(), 'regexp') ?? this.toString();
|
|
88
87
|
}
|
|
89
88
|
|
|
90
89
|
public isFromNextTick(): boolean {
|
|
@@ -136,4 +135,14 @@ export abstract class BaseException extends Error {
|
|
|
136
135
|
|
|
137
136
|
return stack[stack.length - 1] ?? '';
|
|
138
137
|
}
|
|
138
|
+
|
|
139
|
+
private captureStackTrace(): void {
|
|
140
|
+
if (typeof Error.captureStackTrace === 'function') {
|
|
141
|
+
Error.captureStackTrace(this, this.getCtor());
|
|
142
|
+
|
|
143
|
+
return;
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
Object.assign(this, { stack: new Error(this.message).stack ?? `${this.name}: ${this.message}` });
|
|
147
|
+
}
|
|
139
148
|
}
|
|
@@ -117,4 +117,40 @@ export class SerializationTestSuite extends Suite {
|
|
|
117
117
|
}, 0);
|
|
118
118
|
});
|
|
119
119
|
}
|
|
120
|
+
|
|
121
|
+
@Test()
|
|
122
|
+
public async shouldWorkWithoutCaptureStackTrace(): Promise<void> {
|
|
123
|
+
// eslint-disable-next-line @typescript/unbound-method
|
|
124
|
+
const originalCaptureStackTrace = Error.captureStackTrace;
|
|
125
|
+
|
|
126
|
+
try {
|
|
127
|
+
// eslint-disable-next-line no-undefined
|
|
128
|
+
Reflect.set(Error, 'captureStackTrace', undefined);
|
|
129
|
+
|
|
130
|
+
const exception = new TestException('Browser compatible message');
|
|
131
|
+
|
|
132
|
+
expect(exception.message).toEqual('Browser compatible message');
|
|
133
|
+
expect(exception.toJSON().stack).toBeInstanceOf(Array);
|
|
134
|
+
expect(exception.toJSON().stack).not.toEqual([]);
|
|
135
|
+
} finally {
|
|
136
|
+
Reflect.set(Error, 'captureStackTrace', originalCaptureStackTrace);
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
@Test()
|
|
141
|
+
public async shouldSplitStackWithLfSeparator(): Promise<void> {
|
|
142
|
+
const stack = [
|
|
143
|
+
'TestException: Test message',
|
|
144
|
+
'at new TestException (/test/exception.ts:1:1)',
|
|
145
|
+
'at browserHandler (/test/browser.ts:2:2)',
|
|
146
|
+
].join('\n');
|
|
147
|
+
|
|
148
|
+
const exception = BaseException.fromError({
|
|
149
|
+
message: 'Test message',
|
|
150
|
+
name: 'Error',
|
|
151
|
+
stack,
|
|
152
|
+
} as Error);
|
|
153
|
+
|
|
154
|
+
expect(exception.toJSON().stack).toContain('at browserHandler (/test/browser.ts:2:2)');
|
|
155
|
+
}
|
|
120
156
|
}
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import os from 'os';
|
|
2
1
|
import { SOURCE_MAP_ENABLED } from '../consts.js';
|
|
3
2
|
|
|
4
3
|
export class StackTraceFormatter {
|
|
@@ -7,7 +6,7 @@ export class StackTraceFormatter {
|
|
|
7
6
|
}
|
|
8
7
|
|
|
9
8
|
protected static getStackLines(stack: string, exceptionName: string): string[] {
|
|
10
|
-
let lines = stack.split(
|
|
9
|
+
let lines = stack.split(/\r?\n/u)
|
|
11
10
|
.splice(1)
|
|
12
11
|
.filter(stackLine => !StackTraceFormatter.isInternalStackLine(stackLine))
|
|
13
12
|
.map(line => line.trim());
|