n8n/packages/workflow/src/errors/application.error.ts
2024-02-26 14:33:00 +01:00

36 lines
814 B
TypeScript

import callsites from 'callsites';
import type { Event } from '@sentry/node';
export type Level = 'warning' | 'error' | 'fatal' | 'info';
export type ReportingOptions = {
level?: Level;
} & Pick<Event, 'tags' | 'extra'>;
export class ApplicationError extends Error {
level: Level;
readonly tags: NonNullable<Event['tags']>;
readonly extra?: Event['extra'];
readonly packageName?: string;
constructor(
message: string,
{ level, tags = {}, extra, ...rest }: Partial<ErrorOptions> & ReportingOptions = {},
) {
super(message, rest);
this.level = level ?? 'error';
this.tags = tags;
this.extra = extra;
try {
const filePath = callsites()[2].getFileName() ?? '';
const match = /packages\/([^\/]+)\//.exec(filePath)?.[1];
if (match) this.tags.packageName = match;
} catch {}
}
}