Unit and integration tests have been failing due to failed logging of `Error` objects. These were creating an issue where `mocha` was not properly returning right exit codes, leading to test pipelines incorrectly passing despite test failures. - Fix runtime behavior of failing to retrieve error stacks. - Add tests for error handling. - Add more robust custom error handling. Related issues: babel/babel#14273, vuejs/vue-cli#6994.
35 lines
1.0 KiB
TypeScript
35 lines
1.0 KiB
TypeScript
import { CustomError } from '@/application/Common/CustomError';
|
|
import { NodeType } from './NodeType';
|
|
import { NodeData } from './NodeData';
|
|
|
|
export class NodeDataError extends CustomError {
|
|
constructor(message: string, public readonly context: INodeDataErrorContext) {
|
|
super(createMessage(message, context));
|
|
}
|
|
}
|
|
|
|
export interface INodeDataErrorContext {
|
|
readonly type?: NodeType;
|
|
readonly selfNode: NodeData;
|
|
readonly parentNode?: NodeData;
|
|
}
|
|
|
|
function createMessage(errorMessage: string, context: INodeDataErrorContext) {
|
|
let message = '';
|
|
if (context.type !== undefined) {
|
|
message += `${NodeType[context.type]}: `;
|
|
}
|
|
message += errorMessage;
|
|
message += `\n${dump(context)}`;
|
|
return message;
|
|
}
|
|
|
|
function dump(context: INodeDataErrorContext): string {
|
|
const printJson = (obj: unknown) => JSON.stringify(obj, undefined, 2);
|
|
let output = `Self: ${printJson(context.selfNode)}`;
|
|
if (context.parentNode) {
|
|
output += `\nParent: ${printJson(context.parentNode)}`;
|
|
}
|
|
return output;
|
|
}
|