|
12 | 12 |
|
13 | 13 | import PvStatus from './pv_status_t';
|
14 | 14 |
|
15 |
| -export class CheetahError extends Error {} |
| 15 | +export class CheetahError extends Error { |
| 16 | + private readonly _message: string; |
| 17 | + private readonly _messageStack: string[]; |
| 18 | + |
| 19 | + constructor(message: string, messageStack: string[] = []) { |
| 20 | + super(CheetahError.errorToString(message, messageStack)); |
| 21 | + this._message = message; |
| 22 | + this._messageStack = messageStack; |
| 23 | + } |
| 24 | + |
| 25 | + get message(): string { |
| 26 | + return this._message; |
| 27 | + } |
| 28 | + |
| 29 | + get messageStack(): string[] { |
| 30 | + return this._messageStack; |
| 31 | + } |
| 32 | + |
| 33 | + private static errorToString( |
| 34 | + initial: string, |
| 35 | + messageStack: string[] |
| 36 | + ): string { |
| 37 | + let msg = initial; |
| 38 | + |
| 39 | + if (messageStack.length > 0) { |
| 40 | + msg += `: ${messageStack.reduce((acc, value, index) => |
| 41 | + acc + '\n [' + index + '] ' + value, '')}`; |
| 42 | + } |
| 43 | + |
| 44 | + return msg; |
| 45 | + } |
| 46 | +} |
16 | 47 |
|
17 | 48 | export class CheetahOutOfMemoryError extends CheetahError {}
|
18 |
| -export class CheetahIoError extends CheetahError {} |
| 49 | +export class CheetahIOError extends CheetahError {} |
19 | 50 | export class CheetahInvalidArgumentError extends CheetahError {}
|
20 | 51 | export class CheetahStopIterationError extends CheetahError {}
|
21 | 52 | export class CheetahKeyError extends CheetahError {}
|
22 | 53 | export class CheetahInvalidStateError extends CheetahError {}
|
23 | 54 | export class CheetahRuntimeError extends CheetahError {}
|
24 | 55 | export class CheetahActivationError extends CheetahError {}
|
25 |
| -export class CheetahActivationLimitReached extends CheetahError {} |
26 |
| -export class CheetahActivationThrottled extends CheetahError {} |
27 |
| -export class CheetahActivationRefused extends CheetahError {} |
| 56 | +export class CheetahActivationLimitReachedError extends CheetahError {} |
| 57 | +export class CheetahActivationThrottledError extends CheetahError {} |
| 58 | +export class CheetahActivationRefusedError extends CheetahError {} |
28 | 59 |
|
29 | 60 | export function pvStatusToException(
|
30 | 61 | pvStatus: PvStatus,
|
31 |
| - errorMessage: string |
| 62 | + errorMessage: string, |
| 63 | + messageStack: string[] = [] |
32 | 64 | ): CheetahError {
|
33 | 65 | switch (pvStatus) {
|
34 | 66 | case PvStatus.OUT_OF_MEMORY:
|
35 |
| - throw new CheetahOutOfMemoryError(errorMessage); |
| 67 | + throw new CheetahOutOfMemoryError(errorMessage, messageStack); |
36 | 68 | case PvStatus.IO_ERROR:
|
37 |
| - throw new CheetahIoError(errorMessage); |
| 69 | + throw new CheetahIOError(errorMessage, messageStack); |
38 | 70 | case PvStatus.INVALID_ARGUMENT:
|
39 |
| - throw new CheetahInvalidArgumentError(errorMessage); |
| 71 | + throw new CheetahInvalidArgumentError(errorMessage, messageStack); |
40 | 72 | case PvStatus.STOP_ITERATION:
|
41 |
| - throw new CheetahStopIterationError(errorMessage); |
| 73 | + throw new CheetahStopIterationError(errorMessage, messageStack); |
42 | 74 | case PvStatus.KEY_ERROR:
|
43 |
| - throw new CheetahKeyError(errorMessage); |
| 75 | + throw new CheetahKeyError(errorMessage, messageStack); |
44 | 76 | case PvStatus.INVALID_STATE:
|
45 |
| - throw new CheetahInvalidStateError(errorMessage); |
| 77 | + throw new CheetahInvalidStateError(errorMessage, messageStack); |
46 | 78 | case PvStatus.RUNTIME_ERROR:
|
47 |
| - throw new CheetahRuntimeError(errorMessage); |
| 79 | + throw new CheetahRuntimeError(errorMessage, messageStack); |
48 | 80 | case PvStatus.ACTIVATION_ERROR:
|
49 |
| - throw new CheetahActivationError(errorMessage); |
| 81 | + throw new CheetahActivationError(errorMessage, messageStack); |
50 | 82 | case PvStatus.ACTIVATION_LIMIT_REACHED:
|
51 |
| - throw new CheetahActivationLimitReached(errorMessage); |
| 83 | + throw new CheetahActivationLimitReachedError(errorMessage, messageStack); |
52 | 84 | case PvStatus.ACTIVATION_THROTTLED:
|
53 |
| - throw new CheetahActivationThrottled(errorMessage); |
| 85 | + throw new CheetahActivationThrottledError(errorMessage, messageStack); |
54 | 86 | case PvStatus.ACTIVATION_REFUSED:
|
55 |
| - throw new CheetahActivationRefused(errorMessage); |
| 87 | + throw new CheetahActivationRefusedError(errorMessage, messageStack); |
56 | 88 | default:
|
57 | 89 | // eslint-disable-next-line no-console
|
58 | 90 | console.warn(`Unmapped error code: ${pvStatus}`);
|
59 |
| - throw new CheetahError(errorMessage); |
| 91 | + throw new CheetahError(errorMessage, messageStack); |
60 | 92 | }
|
61 | 93 | }
|
0 commit comments