From a15de8eceea55470907728d9d59acafb853d567a Mon Sep 17 00:00:00 2001 From: Tobias Herber <22559657+herber@users.noreply.github.com> Date: Tue, 6 Jan 2026 10:28:42 +0100 Subject: [PATCH] Add modifiable error codes --- packages/error/CHANGELOG.md | 6 ++++++ packages/error/package.json | 2 +- packages/error/src/defaultErrors.ts | 4 +++- packages/error/src/error.ts | 16 ++++++++++++---- 4 files changed, 22 insertions(+), 6 deletions(-) diff --git a/packages/error/CHANGELOG.md b/packages/error/CHANGELOG.md index 8982243..be052ba 100644 --- a/packages/error/CHANGELOG.md +++ b/packages/error/CHANGELOG.md @@ -1,5 +1,11 @@ # @lowerdeck/error +## 1.0.9 + +### Patch Changes + +- Make error codes editable + ## 1.0.8 ### Patch Changes diff --git a/packages/error/package.json b/packages/error/package.json index 0faf5ff..2b640ef 100644 --- a/packages/error/package.json +++ b/packages/error/package.json @@ -1,6 +1,6 @@ { "name": "@lowerdeck/error", - "version": "1.0.8", + "version": "1.0.9", "publishConfig": { "access": "public" }, diff --git a/packages/error/src/defaultErrors.ts b/packages/error/src/defaultErrors.ts index 65eae1d..78739c1 100644 --- a/packages/error/src/defaultErrors.ts +++ b/packages/error/src/defaultErrors.ts @@ -25,7 +25,9 @@ export let badRequestError = createError({ message: 'The request is invalid.' }); -export function notFoundError(p1: { entity: string; id?: string } & Partial>): ReturnType; +export function notFoundError( + p1: { entity: string; id?: string } & Partial> +): ReturnType; export function notFoundError(p1: string, p2?: string | null): ReturnType; export function notFoundError(p1: any, p2?: any): ReturnType { let entity = typeof p1 == 'string' ? p1 : p1.entity; diff --git a/packages/error/src/error.ts b/packages/error/src/error.ts index 8bab5dd..f527672 100644 --- a/packages/error/src/error.ts +++ b/packages/error/src/error.ts @@ -8,27 +8,35 @@ export interface ErrorData { [key: string]: any; } +export type ErrorRecordExtension = < + NewCode extends string = Code +>( + extension?: Partial> +) => ErrorRecord; + export type ErrorRecord = { object: 'error'; data: ErrorData; toResponse: () => ErrorData & { object: 'error'; ok: false }; -} & ((extension?: Partial>) => ErrorRecord); +} & ErrorRecordExtension; export let createError = ( data: ErrorData ): ErrorRecord => { return Object.assign( - (extension: Partial> = {}): ErrorRecord => + ( + extension: Partial> = {} + ): ErrorRecord => createError({ ...data, ...extension - }), + }) as any, { object: 'error' as const, data, toResponse: () => ({ object: 'error' as const, ok: false as const, ...data }) } - ); + ) as any; }; export class ServiceError> extends Error {