diff --git a/packages/server/src/error/index.ts b/packages/server/src/error/index.ts index 9f496dd..3206207 100644 --- a/packages/server/src/error/index.ts +++ b/packages/server/src/error/index.ts @@ -1,2 +1,3 @@ export * from './ErrorTransformer' export * from './TransformedError' +export * from './valueOrError' diff --git a/packages/server/src/error/valueOrError.test.ts b/packages/server/src/error/valueOrError.test.ts new file mode 100644 index 0000000..58fbae5 --- /dev/null +++ b/packages/server/src/error/valueOrError.test.ts @@ -0,0 +1,34 @@ +import {valueOrError} from './' + +describe('valueOrError', () => { + + it('throws a 404 error when value is undefined', () => { + expect(() => valueOrError(undefined)).toThrowError('Not Found') + }) + + it('throws a 404 error when value is null', () => { + expect(() => valueOrError(null)).toThrowError('Not Found') + }) + + it('returns the value when it is neither null, nor undefined', () => { + const obj = {} + expect(valueOrError(obj)).toBe(obj) + expect(valueOrError(0)).toBe(0) + expect(valueOrError(1)).toBe(1) + expect(valueOrError('')).toBe('') + }) + + it('returns a HTTP error with custom status code', () => { + expect(() => valueOrError(undefined, 400)).toThrowError('Bad Request') + }) + + it('removes undefined and null from function', () => { + function getValue(): number | undefined { + return 1 + } + const obj1 = getValue() + const obj2: number = valueOrError(obj1) + expect(obj2).toEqual(1) + }) + +}) diff --git a/packages/server/src/error/valueOrError.ts b/packages/server/src/error/valueOrError.ts new file mode 100644 index 0000000..373bb49 --- /dev/null +++ b/packages/server/src/error/valueOrError.ts @@ -0,0 +1,16 @@ +import createError from 'http-errors' + +/** + * Checks if the value is either null or undefined. If so, throws a Not Found + * HTTP error. Otherwise, returns the value. The parameter `statusCode` can be + * used to modify the error status code. + */ +export function valueOrError( + value: T | undefined | null, + statusCode = 404, +): T { + if (value === undefined || value === null) { + throw createError(statusCode) + } + return value +}