refactor(core): Move ApplicationError to @n8n/errors (#17667)

This commit is contained in:
Iván Ovejero
2025-07-28 17:48:56 +02:00
committed by GitHub
parent 6c0be292b1
commit 4cf9399432
59 changed files with 90 additions and 58 deletions

View File

@@ -21,6 +21,10 @@
"dist/**/*"
],
"devDependencies": {
"@n8n/typescript-config": "workspace:*"
"@n8n/typescript-config": "workspace:*",
"@sentry/node": "catalog:"
},
"dependencies": {
"callsites": "catalog:"
}
}

View File

@@ -0,0 +1,36 @@
import type { Event } from '@sentry/node';
import callsites from 'callsites';
import type { ErrorLevel, ReportingOptions } from './types';
/**
* @deprecated Use `UserError`, `OperationalError` or `UnexpectedError` instead.
*/
export class ApplicationError extends Error {
level: ErrorLevel;
readonly tags: NonNullable<Event['tags']>;
readonly extra?: Event['extra'];
readonly packageName?: string;
constructor(
message: string,
{ level, tags = {}, extra, ...rest }: ErrorOptions & ReportingOptions = {},
) {
super(message, rest);
this.level = level ?? 'error';
this.tags = tags;
this.extra = extra;
try {
const filePath = callsites()[2].getFileName() ?? '';
// eslint-disable-next-line no-useless-escape
const match = /packages\/([^\/]+)\//.exec(filePath)?.[1];
if (match) this.tags.packageName = match;
// eslint-disable-next-line no-empty
} catch {}
}
}

View File

@@ -1 +1,2 @@
export {};
export { ApplicationError } from './application.error';
export * from './types';

View File

@@ -0,0 +1,16 @@
import type { Event } from '@sentry/node';
export type ErrorLevel = 'fatal' | 'error' | 'warning' | 'info';
export type ErrorTags = NonNullable<Event['tags']>;
export type ReportingOptions = {
/** Whether the error should be reported to Sentry */
shouldReport?: boolean;
/** Whether the error log should be logged (default to true) */
shouldBeLogged?: boolean;
level?: ErrorLevel;
tags?: ErrorTags;
extra?: Event['extra'];
executionId?: string;
};