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;
};

View File

@@ -1,4 +1,4 @@
import { ApplicationError } from 'n8n-workflow';
import { ApplicationError } from '@n8n/errors';
export class ChatTriggerAuthorizationError extends ApplicationError {
constructor(

View File

@@ -157,9 +157,9 @@
"@types/sanitize-html": "^2.11.0",
"@types/temp": "^0.9.1",
"fast-glob": "catalog:",
"jest-mock-extended": "^3.0.4",
"n8n-core": "workspace:*",
"tsup": "catalog:",
"jest-mock-extended": "^3.0.4"
"tsup": "catalog:"
},
"dependencies": {
"@aws-sdk/client-sso-oidc": "3.808.0",
@@ -190,6 +190,7 @@
"@modelcontextprotocol/sdk": "1.12.0",
"@mozilla/readability": "0.6.0",
"@n8n/client-oauth2": "workspace:*",
"@n8n/errors": "workspace:^",
"@n8n/json-schema-to-zod": "workspace:*",
"@n8n/typeorm": "0.3.20-12",
"@n8n/typescript-config": "workspace:*",

View File

@@ -36,6 +36,7 @@
"dependencies": {
"@n8n/config": "workspace:*",
"@n8n/di": "workspace:*",
"@n8n/errors": "workspace:^",
"@sentry/node": "catalog:",
"acorn": "8.14.0",
"acorn-walk": "8.3.4",

View File

@@ -1,4 +1,4 @@
import { ApplicationError } from 'n8n-workflow';
import { ApplicationError } from '@n8n/errors';
import { createServer } from 'node:http';
export class HealthCheckServer {

View File

@@ -1,4 +1,4 @@
import { ApplicationError } from 'n8n-workflow';
import { ApplicationError } from '@n8n/errors';
import { ExecutionError } from '@/js-task-runner/errors/execution-error';

View File

@@ -1,4 +1,4 @@
import { ApplicationError } from 'n8n-workflow';
import { ApplicationError } from '@n8n/errors';
export class TaskCancelledError extends ApplicationError {
constructor(reason: string) {

View File

@@ -1,4 +1,4 @@
import { ApplicationError } from 'n8n-workflow';
import { ApplicationError } from '@n8n/errors';
export class TimeoutError extends ApplicationError {
description: string;

View File

@@ -1,4 +1,4 @@
import { ApplicationError } from 'n8n-workflow';
import { ApplicationError } from '@n8n/errors';
/**
* Error that indicates that a specific function is not available in the

View File

@@ -1,4 +1,4 @@
import { ApplicationError } from 'n8n-workflow';
import { ApplicationError } from '@n8n/errors';
import { isBuiltin } from 'node:module';
import { ExecutionError } from './errors/execution-error';