diff --git a/packages/backend/src/core/CustomEmojiService.ts b/packages/backend/src/core/CustomEmojiService.ts index 65bc4c6451..51a48aeec4 100644 --- a/packages/backend/src/core/CustomEmojiService.ts +++ b/packages/backend/src/core/CustomEmojiService.ts @@ -768,6 +768,9 @@ export class CustomEmojiService { } export class InvalidEmojiError extends Error { + // Fix the error name in stack traces - https://stackoverflow.com/a/71573071 + override name = this.constructor.name; + public readonly [isRetryableSymbol] = false; } diff --git a/packages/backend/src/misc/captcha-error.ts b/packages/backend/src/misc/captcha-error.ts index 7da8e386d9..9e91826c81 100644 --- a/packages/backend/src/misc/captcha-error.ts +++ b/packages/backend/src/misc/captcha-error.ts @@ -14,6 +14,9 @@ export const captchaErrorCodes = { export type CaptchaErrorCode = typeof captchaErrorCodes[keyof typeof captchaErrorCodes]; export class CaptchaError extends Error { + // Fix the error name in stack traces - https://stackoverflow.com/a/71573071 + override name = this.constructor.name; + public readonly code: CaptchaErrorCode; public readonly cause?: unknown; diff --git a/packages/backend/src/misc/errors/ConflictError.ts b/packages/backend/src/misc/errors/ConflictError.ts index b63afb8efe..ecd9919589 100644 --- a/packages/backend/src/misc/errors/ConflictError.ts +++ b/packages/backend/src/misc/errors/ConflictError.ts @@ -3,4 +3,7 @@ * SPDX-License-Identifier: AGPL-3.0-only */ -export class ConflictError extends Error {} +export class ConflictError extends Error { + // Fix the error name in stack traces - https://stackoverflow.com/a/71573071 + override name = this.constructor.name; +} diff --git a/packages/backend/src/misc/errors/DisposeError.ts b/packages/backend/src/misc/errors/DisposeError.ts index bfa4ef218d..a5c154ba5f 100644 --- a/packages/backend/src/misc/errors/DisposeError.ts +++ b/packages/backend/src/misc/errors/DisposeError.ts @@ -7,6 +7,9 @@ * Common base class for DisposedError and DisposingError - please use only for catch() blocks. */ export abstract class DisposeError extends Error { + // Fix the error name in stack traces - https://stackoverflow.com/a/71573071 + override name = this.constructor.name; + public readonly source: string | undefined; protected constructor(opts?: { source?: string, message?: string }) { @@ -19,6 +22,9 @@ export abstract class DisposeError extends Error { * Thrown when an attempt is made to use an object that has been disposed. */ export class DisposedError extends DisposeError { + // Fix the error name in stack traces - https://stackoverflow.com/a/71573071 + override name = this.constructor.name; + constructor(opts?: { source?: string, message?: string }) { super({ source: opts?.source, @@ -31,6 +37,9 @@ export class DisposedError extends DisposeError { * Thrown when an object is use begins disposing. */ export class DisposingError extends DisposeError { + // Fix the error name in stack traces - https://stackoverflow.com/a/71573071 + override name = this.constructor.name; + constructor(opts?: { source?: string, message?: string }) { super({ source: opts?.source, diff --git a/packages/backend/src/misc/errors/FetchFailedError.ts b/packages/backend/src/misc/errors/FetchFailedError.ts index d5f8f74abc..c821f0e3b5 100644 --- a/packages/backend/src/misc/errors/FetchFailedError.ts +++ b/packages/backend/src/misc/errors/FetchFailedError.ts @@ -4,6 +4,10 @@ import { QuantumCacheError } from '@/misc/errors/QuantumCacheError.js'; * Thrown when a fetch failed for any reason. */ export class FetchFailedError extends QuantumCacheError { + // Fix the error name in stack traces - https://stackoverflow.com/a/71573071 + override name = this.constructor.name; + + /** * Name of the key(s) that could not be fetched. * Will be an array if bulkFetcher() failed, and a string if regular fetch() failed. diff --git a/packages/backend/src/misc/errors/KeyNotFoundError.ts b/packages/backend/src/misc/errors/KeyNotFoundError.ts index 52b5a3ddf8..dec84c1dfb 100644 --- a/packages/backend/src/misc/errors/KeyNotFoundError.ts +++ b/packages/backend/src/misc/errors/KeyNotFoundError.ts @@ -5,6 +5,9 @@ import { isRetryableSymbol } from '@/misc/is-retryable-error.js'; * Thrown when a fetch failed because no value was found for the requested key(s). */ export class KeyNotFoundError extends FetchFailedError { + // Fix the error name in stack traces - https://stackoverflow.com/a/71573071 + override name = this.constructor.name; + /** * Missing keys are considered non-retryable, as they won't suddenly appear unless something external creates them. */ diff --git a/packages/backend/src/misc/errors/QuantumCacheError.ts b/packages/backend/src/misc/errors/QuantumCacheError.ts index d70331087d..fc329697fa 100644 --- a/packages/backend/src/misc/errors/QuantumCacheError.ts +++ b/packages/backend/src/misc/errors/QuantumCacheError.ts @@ -2,6 +2,9 @@ * Base class for all Quantum Cache errors. */ export class QuantumCacheError extends Error { + // Fix the error name in stack traces - https://stackoverflow.com/a/71573071 + override name = this.constructor.name; + /** * Name of the cache that produced this error. */ diff --git a/packages/backend/src/misc/fastify-reply-error.ts b/packages/backend/src/misc/fastify-reply-error.ts index 03109e8b96..885d33fad3 100644 --- a/packages/backend/src/misc/fastify-reply-error.ts +++ b/packages/backend/src/misc/fastify-reply-error.ts @@ -5,6 +5,9 @@ // https://www.fastify.io/docs/latest/Reference/Reply/#async-await-and-promises export class FastifyReplyError extends Error { + // Fix the error name in stack traces - https://stackoverflow.com/a/71573071 + override name = this.constructor.name; + public message: string; public statusCode: number; diff --git a/packages/backend/src/misc/identifiable-error.ts b/packages/backend/src/misc/identifiable-error.ts index 56e13f2622..9497791ea1 100644 --- a/packages/backend/src/misc/identifiable-error.ts +++ b/packages/backend/src/misc/identifiable-error.ts @@ -7,6 +7,9 @@ * ID付きエラー */ export class IdentifiableError extends Error { + // Fix the error name in stack traces - https://stackoverflow.com/a/71573071 + override name = this.constructor.name; + public message: string; public id: string; diff --git a/packages/backend/src/misc/status-error.ts b/packages/backend/src/misc/status-error.ts index 4fd3bfcafb..815a7686e3 100644 --- a/packages/backend/src/misc/status-error.ts +++ b/packages/backend/src/misc/status-error.ts @@ -4,6 +4,9 @@ */ export class StatusError extends Error { + // Fix the error name in stack traces - https://stackoverflow.com/a/71573071 + override name = this.constructor.name; + public statusCode: number; public statusMessage?: string; public isClientError: boolean; diff --git a/packages/backend/src/server/api/AuthenticateService.ts b/packages/backend/src/server/api/AuthenticateService.ts index f9bccb638e..2c5615c084 100644 --- a/packages/backend/src/server/api/AuthenticateService.ts +++ b/packages/backend/src/server/api/AuthenticateService.ts @@ -18,6 +18,9 @@ import { CacheManagementService, type ManagedMemoryKVCache } from '@/global/Cach import { TimeService } from '@/global/TimeService.js'; export class AuthenticationError extends Error { + // Fix the error name in stack traces - https://stackoverflow.com/a/71573071 + override name = this.constructor.name; + constructor(message: string) { super(message); this.name = 'AuthenticationError'; diff --git a/packages/backend/src/server/api/error.ts b/packages/backend/src/server/api/error.ts index 2f8322a568..576f13aeac 100644 --- a/packages/backend/src/server/api/error.ts +++ b/packages/backend/src/server/api/error.ts @@ -6,6 +6,9 @@ type E = { message: string, code: string, id: string, kind?: 'client' | 'server' | 'permission', httpStatusCode?: number }; export class ApiError extends Error { + // Fix the error name in stack traces - https://stackoverflow.com/a/71573071 + override name = this.constructor.name; + public message: string; public code: string; public id: string; diff --git a/packages/megalodon/src/lib/cancel.ts b/packages/megalodon/src/lib/cancel.ts index 3b905a492e..cab4c15bb2 100644 --- a/packages/megalodon/src/lib/cancel.ts +++ b/packages/megalodon/src/lib/cancel.ts @@ -1,5 +1,8 @@ export class RequestCanceledError extends Error { - public isCancel: boolean + // Fix the error name in stack traces - https://stackoverflow.com/a/71573071 + override name = this.constructor.name; + + public isCancel: boolean constructor(msg: string) { super(msg) diff --git a/packages/megalodon/src/lib/megalodon.ts b/packages/megalodon/src/lib/megalodon.ts index 5bde31ff82..1d3c965e26 100644 --- a/packages/megalodon/src/lib/megalodon.ts +++ b/packages/megalodon/src/lib/megalodon.ts @@ -1354,37 +1354,21 @@ export interface MegalodonInterface { } export class NoImplementedError extends Error { - constructor(err?: string) { - super(err) - - this.name = new.target.name - Object.setPrototypeOf(this, new.target.prototype) - } + // Fix the error name in stack traces - https://stackoverflow.com/a/71573071 + override name = this.constructor.name; } export class ArgumentError extends Error { - constructor(err?: string) { - super(err) - - this.name = new.target.name - Object.setPrototypeOf(this, new.target.prototype) - } + // Fix the error name in stack traces - https://stackoverflow.com/a/71573071 + override name = this.constructor.name; } export class UnexpectedError extends Error { - constructor(err?: string) { - super(err) - - this.name = new.target.name - Object.setPrototypeOf(this, new.target.prototype) - } + // Fix the error name in stack traces - https://stackoverflow.com/a/71573071 + override name = this.constructor.name; } export class NodeinfoError extends Error { - constructor(err?: string) { - super(err) - - this.name = new.target.name - Object.setPrototypeOf(this, new.target.prototype) - } + // Fix the error name in stack traces - https://stackoverflow.com/a/71573071 + override name = this.constructor.name; } diff --git a/packages/megalodon/src/lib/notification.ts b/packages/megalodon/src/lib/notification.ts index 846d79c6d7..342e730da4 100644 --- a/packages/megalodon/src/lib/notification.ts +++ b/packages/megalodon/src/lib/notification.ts @@ -13,10 +13,8 @@ export const AdminSignup = 'admin.sign_up' as const; export const AdminReport = 'admin.report' as const; export class UnknownNotificationTypeError extends Error { - constructor() { - super() - Object.setPrototypeOf(this, UnknownNotificationTypeError.prototype) - } + // Fix the error name in stack traces - https://stackoverflow.com/a/71573071 + override name = this.constructor.name; } export const notificationTypes = [