@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.
Files changed (155) hide show
  1. package/.eslintcache +1 -0
  2. package/.eslintrc.json +1 -0
  3. package/.mocharc.cjs +1 -0
  4. package/README.md +1 -0
  5. package/dist/consts.d.ts +2 -0
  6. package/dist/consts.d.ts.map +1 -0
  7. package/dist/consts.js +5 -0
  8. package/dist/consts.js.map +1 -0
  9. package/dist/exceptions/aggregate-error.exception.d.ts +5 -0
  10. package/dist/exceptions/aggregate-error.exception.d.ts.map +1 -0
  11. package/dist/exceptions/aggregate-error.exception.js +24 -0
  12. package/dist/exceptions/aggregate-error.exception.js.map +1 -0
  13. package/dist/exceptions/base.aggregate.exception.d.ts +13 -0
  14. package/dist/exceptions/base.aggregate.exception.d.ts.map +1 -0
  15. package/dist/exceptions/base.aggregate.exception.js +33 -0
  16. package/dist/exceptions/base.aggregate.exception.js.map +1 -0
  17. package/dist/exceptions/base.exception.d.ts +36 -0
  18. package/dist/exceptions/base.exception.d.ts.map +1 -0
  19. package/dist/exceptions/base.exception.js +96 -0
  20. package/dist/exceptions/base.exception.js.map +1 -0
  21. package/dist/exceptions/error.exception.d.ts +5 -0
  22. package/dist/exceptions/error.exception.d.ts.map +1 -0
  23. package/dist/exceptions/error.exception.js +17 -0
  24. package/dist/exceptions/error.exception.js.map +1 -0
  25. package/dist/exceptions/forbidden.exception.d.ts +4 -0
  26. package/dist/exceptions/forbidden.exception.d.ts.map +1 -0
  27. package/dist/exceptions/forbidden.exception.js +8 -0
  28. package/dist/exceptions/forbidden.exception.js.map +1 -0
  29. package/dist/exceptions/index.d.ts +9 -0
  30. package/dist/exceptions/index.d.ts.map +1 -0
  31. package/dist/exceptions/index.js +12 -0
  32. package/dist/exceptions/index.js.map +1 -0
  33. package/dist/exceptions/not-implemented.exception.d.ts +5 -0
  34. package/dist/exceptions/not-implemented.exception.d.ts.map +1 -0
  35. package/dist/exceptions/not-implemented.exception.js +11 -0
  36. package/dist/exceptions/not-implemented.exception.js.map +1 -0
  37. package/dist/exceptions/unknown.exception.d.ts +5 -0
  38. package/dist/exceptions/unknown.exception.d.ts.map +1 -0
  39. package/dist/exceptions/unknown.exception.js +11 -0
  40. package/dist/exceptions/unknown.exception.js.map +1 -0
  41. package/dist/exceptions/will-never-happened.exception.d.ts +5 -0
  42. package/dist/exceptions/will-never-happened.exception.d.ts.map +1 -0
  43. package/dist/exceptions/will-never-happened.exception.js +11 -0
  44. package/dist/exceptions/will-never-happened.exception.js.map +1 -0
  45. package/dist/index.d.ts +3 -0
  46. package/dist/index.d.ts.map +1 -0
  47. package/dist/index.js +6 -0
  48. package/dist/index.js.map +1 -0
  49. package/dist/tests/serialization.test-suite.d.ts +13 -0
  50. package/dist/tests/serialization.test-suite.d.ts.map +1 -0
  51. package/dist/tests/serialization.test-suite.js +142 -0
  52. package/dist/tests/serialization.test-suite.js.map +1 -0
  53. package/dist/tests/test.aggregate-exception.d.ts +5 -0
  54. package/dist/tests/test.aggregate-exception.d.ts.map +1 -0
  55. package/dist/tests/test.aggregate-exception.js +16 -0
  56. package/dist/tests/test.aggregate-exception.js.map +1 -0
  57. package/dist/tests/test.d.ts +6 -0
  58. package/dist/tests/test.d.ts.map +1 -0
  59. package/dist/tests/test.exception.d.ts +5 -0
  60. package/dist/tests/test.exception.d.ts.map +1 -0
  61. package/dist/tests/test.exception.js +11 -0
  62. package/dist/tests/test.exception.js.map +1 -0
  63. package/dist/tests/test.js +22 -0
  64. package/dist/tests/test.js.map +1 -0
  65. package/dist/utils/index.d.ts +2 -0
  66. package/dist/utils/index.d.ts.map +1 -0
  67. package/dist/utils/index.js +5 -0
  68. package/dist/utils/index.js.map +1 -0
  69. package/dist/utils/stack-trace.formatter.d.ts +6 -0
  70. package/dist/utils/stack-trace.formatter.d.ts.map +1 -0
  71. package/dist/utils/stack-trace.formatter.js +30 -0
  72. package/dist/utils/stack-trace.formatter.js.map +1 -0
  73. package/dist-esm/consts.d.ts +2 -0
  74. package/dist-esm/consts.d.ts.map +1 -0
  75. package/dist-esm/consts.js +2 -0
  76. package/dist-esm/consts.js.map +1 -0
  77. package/dist-esm/exceptions/aggregate-error.exception.d.ts +5 -0
  78. package/dist-esm/exceptions/aggregate-error.exception.d.ts.map +1 -0
  79. package/dist-esm/exceptions/aggregate-error.exception.js +20 -0
  80. package/dist-esm/exceptions/aggregate-error.exception.js.map +1 -0
  81. package/dist-esm/exceptions/base.aggregate.exception.d.ts +13 -0
  82. package/dist-esm/exceptions/base.aggregate.exception.d.ts.map +1 -0
  83. package/dist-esm/exceptions/base.aggregate.exception.js +29 -0
  84. package/dist-esm/exceptions/base.aggregate.exception.js.map +1 -0
  85. package/dist-esm/exceptions/base.exception.d.ts +36 -0
  86. package/dist-esm/exceptions/base.exception.d.ts.map +1 -0
  87. package/dist-esm/exceptions/base.exception.js +91 -0
  88. package/dist-esm/exceptions/base.exception.js.map +1 -0
  89. package/dist-esm/exceptions/error.exception.d.ts +5 -0
  90. package/dist-esm/exceptions/error.exception.d.ts.map +1 -0
  91. package/dist-esm/exceptions/error.exception.js +13 -0
  92. package/dist-esm/exceptions/error.exception.js.map +1 -0
  93. package/dist-esm/exceptions/forbidden.exception.d.ts +4 -0
  94. package/dist-esm/exceptions/forbidden.exception.d.ts.map +1 -0
  95. package/dist-esm/exceptions/forbidden.exception.js +4 -0
  96. package/dist-esm/exceptions/forbidden.exception.js.map +1 -0
  97. package/dist-esm/exceptions/index.d.ts +9 -0
  98. package/dist-esm/exceptions/index.d.ts.map +1 -0
  99. package/dist-esm/exceptions/index.js +9 -0
  100. package/dist-esm/exceptions/index.js.map +1 -0
  101. package/dist-esm/exceptions/not-implemented.exception.d.ts +5 -0
  102. package/dist-esm/exceptions/not-implemented.exception.d.ts.map +1 -0
  103. package/dist-esm/exceptions/not-implemented.exception.js +7 -0
  104. package/dist-esm/exceptions/not-implemented.exception.js.map +1 -0
  105. package/dist-esm/exceptions/unknown.exception.d.ts +5 -0
  106. package/dist-esm/exceptions/unknown.exception.d.ts.map +1 -0
  107. package/dist-esm/exceptions/unknown.exception.js +7 -0
  108. package/dist-esm/exceptions/unknown.exception.js.map +1 -0
  109. package/dist-esm/exceptions/will-never-happened.exception.d.ts +5 -0
  110. package/dist-esm/exceptions/will-never-happened.exception.d.ts.map +1 -0
  111. package/dist-esm/exceptions/will-never-happened.exception.js +7 -0
  112. package/dist-esm/exceptions/will-never-happened.exception.js.map +1 -0
  113. package/dist-esm/index.d.ts +3 -0
  114. package/dist-esm/index.d.ts.map +1 -0
  115. package/dist-esm/index.js +3 -0
  116. package/dist-esm/index.js.map +1 -0
  117. package/dist-esm/tests/serialization.test-suite.d.ts +13 -0
  118. package/dist-esm/tests/serialization.test-suite.d.ts.map +1 -0
  119. package/dist-esm/tests/serialization.test-suite.js +139 -0
  120. package/dist-esm/tests/serialization.test-suite.js.map +1 -0
  121. package/dist-esm/tests/test.aggregate-exception.d.ts +5 -0
  122. package/dist-esm/tests/test.aggregate-exception.d.ts.map +1 -0
  123. package/dist-esm/tests/test.aggregate-exception.js +12 -0
  124. package/dist-esm/tests/test.aggregate-exception.js.map +1 -0
  125. package/dist-esm/tests/test.exception.d.ts +5 -0
  126. package/dist-esm/tests/test.exception.d.ts.map +1 -0
  127. package/dist-esm/tests/test.exception.js +7 -0
  128. package/dist-esm/tests/test.exception.js.map +1 -0
  129. package/dist-esm/utils/index.d.ts +2 -0
  130. package/dist-esm/utils/index.d.ts.map +1 -0
  131. package/dist-esm/utils/index.js +2 -0
  132. package/dist-esm/utils/index.js.map +1 -0
  133. package/dist-esm/utils/stack-trace.formatter.d.ts +6 -0
  134. package/dist-esm/utils/stack-trace.formatter.d.ts.map +1 -0
  135. package/dist-esm/utils/stack-trace.formatter.js +25 -0
  136. package/dist-esm/utils/stack-trace.formatter.js.map +1 -0
  137. package/package.json +37 -0
  138. package/src/consts.ts +1 -0
  139. package/src/exceptions/aggregate-error.exception.ts +26 -0
  140. package/src/exceptions/base.aggregate.exception.ts +51 -0
  141. package/src/exceptions/base.exception.ts +138 -0
  142. package/src/exceptions/error.exception.ts +16 -0
  143. package/src/exceptions/forbidden.exception.ts +3 -0
  144. package/src/exceptions/index.ts +11 -0
  145. package/src/exceptions/not-implemented.exception.ts +7 -0
  146. package/src/exceptions/unknown.exception.ts +7 -0
  147. package/src/exceptions/will-never-happened.exception.ts +7 -0
  148. package/src/index.ts +2 -0
  149. package/src/tests/serialization.test-suite.ts +121 -0
  150. package/src/tests/test.aggregate-exception.ts +16 -0
  151. package/src/tests/test.exception.ts +7 -0
  152. package/src/utils/index.ts +1 -0
  153. package/src/utils/stack-trace.formatter.ts +30 -0
  154. package/tsconfig.esm.json +9 -0
  155. 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,3 @@
1
+ import { BaseException } from './base.exception';
2
+
3
+ export class ForbiddenException extends BaseException {}
@@ -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';
@@ -0,0 +1,7 @@
1
+ import { BaseException } from './base.exception';
2
+
3
+ export class NotImplementedException extends BaseException {
4
+ public constructor() {
5
+ super('Not implemented');
6
+ }
7
+ }
@@ -0,0 +1,7 @@
1
+ import { BaseException } from './base.exception';
2
+
3
+ export class UnknownException extends BaseException {
4
+ public constructor(message: string) {
5
+ super(message);
6
+ }
7
+ }
@@ -0,0 +1,7 @@
1
+ import { BaseException } from './base.exception';
2
+
3
+ export class WillNeverHappenedException extends BaseException {
4
+ public constructor(message: string) {
5
+ super(message);
6
+ }
7
+ }
package/src/index.ts ADDED
@@ -0,0 +1,2 @@
1
+ import '@hg-ts/types';
2
+ export * from './exceptions';
@@ -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,7 @@
1
+ import { BaseException } from '../exceptions';
2
+
3
+ export class TestException extends BaseException {
4
+ public constructor(message: string, code?: number) {
5
+ super(message, { code });
6
+ }
7
+ }
@@ -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
+ }
@@ -0,0 +1,9 @@
1
+ {
2
+ "extends": "@hg-ts-config/typescript",
3
+ "compilerOptions": {
4
+ "baseUrl": "src",
5
+ "rootDir": "src",
6
+ "outDir": "dist-esm"
7
+ },
8
+ "exclude": ["dist", "dist-esm"]
9
+ }
package/tsconfig.json ADDED
@@ -0,0 +1,10 @@
1
+ {
2
+ "extends": "@hg-ts-config/typescript",
3
+ "compilerOptions": {
4
+ "module": "CommonJS",
5
+ "baseUrl": "src",
6
+ "rootDir": "src",
7
+ "outDir": "dist"
8
+ },
9
+ "exclude": ["dist", "dist-esm"]
10
+ }