@hg-ts/exception 0.0.15
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/.eslintcache +1 -0
- package/.eslintrc.json +1 -0
- package/.mocharc.cjs +1 -0
- package/README.md +1 -0
- package/dist/consts.d.ts +2 -0
- package/dist/consts.d.ts.map +1 -0
- package/dist/consts.js +5 -0
- package/dist/consts.js.map +1 -0
- package/dist/exceptions/aggregate-error.exception.d.ts +5 -0
- package/dist/exceptions/aggregate-error.exception.d.ts.map +1 -0
- package/dist/exceptions/aggregate-error.exception.js +24 -0
- package/dist/exceptions/aggregate-error.exception.js.map +1 -0
- package/dist/exceptions/base.aggregate.exception.d.ts +13 -0
- package/dist/exceptions/base.aggregate.exception.d.ts.map +1 -0
- package/dist/exceptions/base.aggregate.exception.js +33 -0
- package/dist/exceptions/base.aggregate.exception.js.map +1 -0
- package/dist/exceptions/base.exception.d.ts +36 -0
- package/dist/exceptions/base.exception.d.ts.map +1 -0
- package/dist/exceptions/base.exception.js +96 -0
- package/dist/exceptions/base.exception.js.map +1 -0
- package/dist/exceptions/error.exception.d.ts +5 -0
- package/dist/exceptions/error.exception.d.ts.map +1 -0
- package/dist/exceptions/error.exception.js +17 -0
- package/dist/exceptions/error.exception.js.map +1 -0
- package/dist/exceptions/forbidden.exception.d.ts +4 -0
- package/dist/exceptions/forbidden.exception.d.ts.map +1 -0
- package/dist/exceptions/forbidden.exception.js +8 -0
- package/dist/exceptions/forbidden.exception.js.map +1 -0
- package/dist/exceptions/index.d.ts +9 -0
- package/dist/exceptions/index.d.ts.map +1 -0
- package/dist/exceptions/index.js +12 -0
- package/dist/exceptions/index.js.map +1 -0
- package/dist/exceptions/not-implemented.exception.d.ts +5 -0
- package/dist/exceptions/not-implemented.exception.d.ts.map +1 -0
- package/dist/exceptions/not-implemented.exception.js +11 -0
- package/dist/exceptions/not-implemented.exception.js.map +1 -0
- package/dist/exceptions/unknown.exception.d.ts +5 -0
- package/dist/exceptions/unknown.exception.d.ts.map +1 -0
- package/dist/exceptions/unknown.exception.js +11 -0
- package/dist/exceptions/unknown.exception.js.map +1 -0
- package/dist/exceptions/will-never-happened.exception.d.ts +5 -0
- package/dist/exceptions/will-never-happened.exception.d.ts.map +1 -0
- package/dist/exceptions/will-never-happened.exception.js +11 -0
- package/dist/exceptions/will-never-happened.exception.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +6 -0
- package/dist/index.js.map +1 -0
- package/dist/tests/serialization.test-suite.d.ts +13 -0
- package/dist/tests/serialization.test-suite.d.ts.map +1 -0
- package/dist/tests/serialization.test-suite.js +142 -0
- package/dist/tests/serialization.test-suite.js.map +1 -0
- package/dist/tests/test.aggregate-exception.d.ts +5 -0
- package/dist/tests/test.aggregate-exception.d.ts.map +1 -0
- package/dist/tests/test.aggregate-exception.js +16 -0
- package/dist/tests/test.aggregate-exception.js.map +1 -0
- package/dist/tests/test.d.ts +6 -0
- package/dist/tests/test.d.ts.map +1 -0
- package/dist/tests/test.exception.d.ts +5 -0
- package/dist/tests/test.exception.d.ts.map +1 -0
- package/dist/tests/test.exception.js +11 -0
- package/dist/tests/test.exception.js.map +1 -0
- package/dist/tests/test.js +22 -0
- package/dist/tests/test.js.map +1 -0
- package/dist/utils/index.d.ts +2 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +5 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/stack-trace.formatter.d.ts +6 -0
- package/dist/utils/stack-trace.formatter.d.ts.map +1 -0
- package/dist/utils/stack-trace.formatter.js +30 -0
- package/dist/utils/stack-trace.formatter.js.map +1 -0
- package/dist-esm/consts.d.ts +2 -0
- package/dist-esm/consts.d.ts.map +1 -0
- package/dist-esm/consts.js +2 -0
- package/dist-esm/consts.js.map +1 -0
- package/dist-esm/exceptions/aggregate-error.exception.d.ts +5 -0
- package/dist-esm/exceptions/aggregate-error.exception.d.ts.map +1 -0
- package/dist-esm/exceptions/aggregate-error.exception.js +20 -0
- package/dist-esm/exceptions/aggregate-error.exception.js.map +1 -0
- package/dist-esm/exceptions/base.aggregate.exception.d.ts +13 -0
- package/dist-esm/exceptions/base.aggregate.exception.d.ts.map +1 -0
- package/dist-esm/exceptions/base.aggregate.exception.js +29 -0
- package/dist-esm/exceptions/base.aggregate.exception.js.map +1 -0
- package/dist-esm/exceptions/base.exception.d.ts +36 -0
- package/dist-esm/exceptions/base.exception.d.ts.map +1 -0
- package/dist-esm/exceptions/base.exception.js +91 -0
- package/dist-esm/exceptions/base.exception.js.map +1 -0
- package/dist-esm/exceptions/error.exception.d.ts +5 -0
- package/dist-esm/exceptions/error.exception.d.ts.map +1 -0
- package/dist-esm/exceptions/error.exception.js +13 -0
- package/dist-esm/exceptions/error.exception.js.map +1 -0
- package/dist-esm/exceptions/forbidden.exception.d.ts +4 -0
- package/dist-esm/exceptions/forbidden.exception.d.ts.map +1 -0
- package/dist-esm/exceptions/forbidden.exception.js +4 -0
- package/dist-esm/exceptions/forbidden.exception.js.map +1 -0
- package/dist-esm/exceptions/index.d.ts +9 -0
- package/dist-esm/exceptions/index.d.ts.map +1 -0
- package/dist-esm/exceptions/index.js +9 -0
- package/dist-esm/exceptions/index.js.map +1 -0
- package/dist-esm/exceptions/not-implemented.exception.d.ts +5 -0
- package/dist-esm/exceptions/not-implemented.exception.d.ts.map +1 -0
- package/dist-esm/exceptions/not-implemented.exception.js +7 -0
- package/dist-esm/exceptions/not-implemented.exception.js.map +1 -0
- package/dist-esm/exceptions/unknown.exception.d.ts +5 -0
- package/dist-esm/exceptions/unknown.exception.d.ts.map +1 -0
- package/dist-esm/exceptions/unknown.exception.js +7 -0
- package/dist-esm/exceptions/unknown.exception.js.map +1 -0
- package/dist-esm/exceptions/will-never-happened.exception.d.ts +5 -0
- package/dist-esm/exceptions/will-never-happened.exception.d.ts.map +1 -0
- package/dist-esm/exceptions/will-never-happened.exception.js +7 -0
- package/dist-esm/exceptions/will-never-happened.exception.js.map +1 -0
- package/dist-esm/index.d.ts +3 -0
- package/dist-esm/index.d.ts.map +1 -0
- package/dist-esm/index.js +3 -0
- package/dist-esm/index.js.map +1 -0
- package/dist-esm/tests/serialization.test-suite.d.ts +13 -0
- package/dist-esm/tests/serialization.test-suite.d.ts.map +1 -0
- package/dist-esm/tests/serialization.test-suite.js +139 -0
- package/dist-esm/tests/serialization.test-suite.js.map +1 -0
- package/dist-esm/tests/test.aggregate-exception.d.ts +5 -0
- package/dist-esm/tests/test.aggregate-exception.d.ts.map +1 -0
- package/dist-esm/tests/test.aggregate-exception.js +12 -0
- package/dist-esm/tests/test.aggregate-exception.js.map +1 -0
- package/dist-esm/tests/test.exception.d.ts +5 -0
- package/dist-esm/tests/test.exception.d.ts.map +1 -0
- package/dist-esm/tests/test.exception.js +7 -0
- package/dist-esm/tests/test.exception.js.map +1 -0
- package/dist-esm/utils/index.d.ts +2 -0
- package/dist-esm/utils/index.d.ts.map +1 -0
- package/dist-esm/utils/index.js +2 -0
- package/dist-esm/utils/index.js.map +1 -0
- package/dist-esm/utils/stack-trace.formatter.d.ts +6 -0
- package/dist-esm/utils/stack-trace.formatter.d.ts.map +1 -0
- package/dist-esm/utils/stack-trace.formatter.js +25 -0
- package/dist-esm/utils/stack-trace.formatter.js.map +1 -0
- package/package.json +37 -0
- package/src/consts.ts +1 -0
- package/src/exceptions/aggregate-error.exception.ts +26 -0
- package/src/exceptions/base.aggregate.exception.ts +51 -0
- package/src/exceptions/base.exception.ts +138 -0
- package/src/exceptions/error.exception.ts +16 -0
- package/src/exceptions/forbidden.exception.ts +3 -0
- package/src/exceptions/index.ts +11 -0
- package/src/exceptions/not-implemented.exception.ts +7 -0
- package/src/exceptions/unknown.exception.ts +7 -0
- package/src/exceptions/will-never-happened.exception.ts +7 -0
- package/src/index.ts +2 -0
- package/src/tests/serialization.test-suite.ts +121 -0
- package/src/tests/test.aggregate-exception.ts +16 -0
- package/src/tests/test.exception.ts +7 -0
- package/src/utils/index.ts +1 -0
- package/src/utils/stack-trace.formatter.ts +30 -0
- package/tsconfig.esm.json +9 -0
- package/tsconfig.json +10 -0
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { BaseException } from './base.exception';
|
|
2
|
+
|
|
3
|
+
export class ErrorException extends BaseException {
|
|
4
|
+
public constructor(error: Error) {
|
|
5
|
+
const { cause } = error as any;
|
|
6
|
+
|
|
7
|
+
super(error.message, {
|
|
8
|
+
cause: cause instanceof Error
|
|
9
|
+
? new ErrorException(cause)
|
|
10
|
+
// eslint-disable-next-line no-undefined
|
|
11
|
+
: undefined,
|
|
12
|
+
});
|
|
13
|
+
|
|
14
|
+
(this as any).stack = error.stack;
|
|
15
|
+
}
|
|
16
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
// Error exceptions must be imported before base exceptions because of cyclical imports
|
|
2
|
+
export * from './error.exception';
|
|
3
|
+
export * from './aggregate-error.exception';
|
|
4
|
+
|
|
5
|
+
export * from './base.exception';
|
|
6
|
+
export * from './base.aggregate.exception';
|
|
7
|
+
|
|
8
|
+
export * from './unknown.exception';
|
|
9
|
+
export * from './not-implemented.exception';
|
|
10
|
+
export * from './will-never-happened.exception';
|
|
11
|
+
export * from './forbidden.exception';
|
package/src/index.ts
ADDED
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
import '@hg-ts/types';
|
|
2
|
+
import {
|
|
3
|
+
Test,
|
|
4
|
+
TestSuite,
|
|
5
|
+
Describe,
|
|
6
|
+
expect,
|
|
7
|
+
} from '@hg-ts/tests';
|
|
8
|
+
import {
|
|
9
|
+
BaseAggregateException,
|
|
10
|
+
BaseException,
|
|
11
|
+
ErrorException,
|
|
12
|
+
} from '../exceptions';
|
|
13
|
+
import { TestAggregateException } from './test.aggregate-exception';
|
|
14
|
+
import { TestException } from './test.exception';
|
|
15
|
+
|
|
16
|
+
@Describe()
|
|
17
|
+
export class SerializationTestSuite extends TestSuite {
|
|
18
|
+
@Test()
|
|
19
|
+
public async commonTest(): Promise<void> {
|
|
20
|
+
const message = 'Test message';
|
|
21
|
+
const exception = new TestException(message);
|
|
22
|
+
|
|
23
|
+
expect(exception).toBeInstanceOf(Error);
|
|
24
|
+
expect(exception).toBeInstanceOf(BaseException);
|
|
25
|
+
expect(exception).toBeInstanceOf(TestException);
|
|
26
|
+
expect(exception.message).toEqual(message);
|
|
27
|
+
expect(exception.code).toBeNull();
|
|
28
|
+
expect(exception.toJSON().name).toEqual(TestException.name);
|
|
29
|
+
expect(exception.toJSON().stack).toBeInstanceOf(Array);
|
|
30
|
+
expect(exception.toJSON().stack).not.toEqual([]);
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
@Test()
|
|
34
|
+
public async baseExceptionFromError(): Promise<void> {
|
|
35
|
+
const message = 'Test message';
|
|
36
|
+
const error = new Error(message);
|
|
37
|
+
const exception = BaseException.fromError(error);
|
|
38
|
+
|
|
39
|
+
expect(exception).toBeInstanceOf(Error);
|
|
40
|
+
expect(exception).toBeInstanceOf(BaseException);
|
|
41
|
+
expect(exception).toBeInstanceOf(ErrorException);
|
|
42
|
+
expect(exception.message).toEqual(message);
|
|
43
|
+
expect(exception.code).toBeNull();
|
|
44
|
+
expect(exception.toJSON().stack).toBeInstanceOf(Array);
|
|
45
|
+
expect(exception.toJSON().stack).not.toEqual([]);
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
@Test()
|
|
49
|
+
public async aggregateExceptionTest(): Promise<void> {
|
|
50
|
+
const message = 'Test aggregate message';
|
|
51
|
+
const exception = new TestAggregateException(message);
|
|
52
|
+
|
|
53
|
+
expect(exception).toBeInstanceOf(Error);
|
|
54
|
+
expect(exception).toBeInstanceOf(BaseException);
|
|
55
|
+
expect(exception).toBeInstanceOf(BaseAggregateException);
|
|
56
|
+
expect(exception).toBeInstanceOf(TestAggregateException);
|
|
57
|
+
|
|
58
|
+
expect(exception.message).toEqual(message);
|
|
59
|
+
expect(exception.code).toBeNull();
|
|
60
|
+
|
|
61
|
+
expect(exception.exceptions).toBeInstanceOf(Array);
|
|
62
|
+
expect(exception.exceptions).toHaveLength(3);
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
@Test()
|
|
66
|
+
public async syncStackTest(): Promise<void> {
|
|
67
|
+
const { stack } = new TestException('Test message').toJSON();
|
|
68
|
+
|
|
69
|
+
expect(stack[0]!.startsWith('at SerializationTestSuite.syncStackTest')).toBeTruthy();
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
@Test()
|
|
73
|
+
public async isFromNextTickTest(): Promise<void> {
|
|
74
|
+
return new Promise<void>(resolve => {
|
|
75
|
+
process.nextTick(() => {
|
|
76
|
+
const exception = new TestException('Test message');
|
|
77
|
+
|
|
78
|
+
expect(exception.isFromNextTick()).toBeTruthy();
|
|
79
|
+
resolve();
|
|
80
|
+
});
|
|
81
|
+
});
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
@Test()
|
|
85
|
+
public async isFromImmediateTest(): Promise<void> {
|
|
86
|
+
return new Promise<void>(resolve => {
|
|
87
|
+
setImmediate(() => {
|
|
88
|
+
const exception = new TestException('Test message');
|
|
89
|
+
|
|
90
|
+
expect(exception.isFromImmediate()).toBeTruthy();
|
|
91
|
+
resolve();
|
|
92
|
+
});
|
|
93
|
+
});
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
@Test()
|
|
97
|
+
public async fromTimeoutTest(): Promise<void> {
|
|
98
|
+
return new Promise<void>(resolve => {
|
|
99
|
+
setTimeout(() => {
|
|
100
|
+
const exception = new TestException('Test message');
|
|
101
|
+
|
|
102
|
+
expect(exception.isFromTimer()).toBeTruthy();
|
|
103
|
+
resolve();
|
|
104
|
+
}, 0);
|
|
105
|
+
});
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
@Test()
|
|
109
|
+
public async fromIntervalTest(): Promise<void> {
|
|
110
|
+
let interval: NodeJS.Timeout;
|
|
111
|
+
return new Promise<void>(resolve => {
|
|
112
|
+
interval = setInterval(() => {
|
|
113
|
+
const exception = new TestException('Test message');
|
|
114
|
+
|
|
115
|
+
expect(exception.isFromTimer()).toBeTruthy();
|
|
116
|
+
clearInterval(interval);
|
|
117
|
+
resolve();
|
|
118
|
+
}, 0);
|
|
119
|
+
});
|
|
120
|
+
}
|
|
121
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { BaseAggregateException } from '../exceptions';
|
|
2
|
+
import { TestException } from './test.exception';
|
|
3
|
+
|
|
4
|
+
export class TestAggregateException extends BaseAggregateException {
|
|
5
|
+
public constructor(message: string, code?: number) {
|
|
6
|
+
super(
|
|
7
|
+
[
|
|
8
|
+
new TestException('First inner exception'),
|
|
9
|
+
new TestException('Second inner exception'),
|
|
10
|
+
new TestException('Third inner exception'),
|
|
11
|
+
],
|
|
12
|
+
message,
|
|
13
|
+
{ code },
|
|
14
|
+
);
|
|
15
|
+
}
|
|
16
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './stack-trace.formatter';
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import os from 'os';
|
|
2
|
+
import { SOURCE_MAP_ENABLED } from '../consts';
|
|
3
|
+
|
|
4
|
+
export class StackTraceFormatter {
|
|
5
|
+
public static format(stack: string, exceptionName: string): string[] {
|
|
6
|
+
return StackTraceFormatter.getStackLines(stack, exceptionName);
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
protected static getStackLines(stack: string, exceptionName: string): string[] {
|
|
10
|
+
let lines = stack.split(os.EOL)
|
|
11
|
+
.splice(1)
|
|
12
|
+
.filter(stackLine => !StackTraceFormatter.isInternalStackLine(stackLine))
|
|
13
|
+
.map(line => line.trim());
|
|
14
|
+
|
|
15
|
+
if (SOURCE_MAP_ENABLED) {
|
|
16
|
+
lines = lines.slice(4);
|
|
17
|
+
}
|
|
18
|
+
const lineFromExceptionConstructor = lines.findIndex(line => line.startsWith(`at new ${exceptionName}`));
|
|
19
|
+
|
|
20
|
+
if (lineFromExceptionConstructor > -1) {
|
|
21
|
+
return lines.slice(lineFromExceptionConstructor + 1);
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
return lines;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
protected static isInternalStackLine(line: string): boolean {
|
|
28
|
+
return line.includes('internal/') && !line.includes('processTicksAndRejections');
|
|
29
|
+
}
|
|
30
|
+
}
|