From 783e75b4d9775c4208084ef61b86be5b39ac6dee Mon Sep 17 00:00:00 2001 From: Andrey Polischuk Date: Tue, 13 Aug 2024 18:26:20 +0300 Subject: [PATCH] feat(errors): add errors --- .size-limit.json | 4 ++++ packages/errors/README.md | 15 ++++++++++++++ packages/errors/index.test.ts | 26 +++++++++++++++++++++++ packages/errors/index.ts | 39 +++++++++++++++++++++++++++++++++++ packages/errors/package.json | 12 +++++++++++ packages/errors/tsconfig.json | 9 ++++++++ packages/errors/typedoc.json | 5 +++++ 7 files changed, 110 insertions(+) create mode 100644 packages/errors/README.md create mode 100644 packages/errors/index.test.ts create mode 100644 packages/errors/index.ts create mode 100644 packages/errors/package.json create mode 100644 packages/errors/tsconfig.json create mode 100644 packages/errors/typedoc.json diff --git a/.size-limit.json b/.size-limit.json index d6bf74a..ef56bd7 100644 --- a/.size-limit.json +++ b/.size-limit.json @@ -3,6 +3,10 @@ "path": "packages/cookie-storage/dist/index.js", "limit": "990 B" }, + { + "path": "packages/errors/dist/index.js", + "limit": "290 B" + }, { "path": "packages/local-storage/dist/index.js", "limit": "290 B" diff --git a/packages/errors/README.md b/packages/errors/README.md new file mode 100644 index 0000000..902da9f --- /dev/null +++ b/packages/errors/README.md @@ -0,0 +1,15 @@ +# Errors + +Enchanced generic errors + +## Install + +``` +npm install -D @rambler-tech/errors +``` + +or + +``` +yarn add -D @rambler-tech/errors +``` diff --git a/packages/errors/index.test.ts b/packages/errors/index.test.ts new file mode 100644 index 0000000..ad57a7c --- /dev/null +++ b/packages/errors/index.test.ts @@ -0,0 +1,26 @@ +import {GenericError} from '.' + +test('base error', () => { + const error = new GenericError('failed') + + expect(error).toBeInstanceOf(Error) + expect(error).toBeInstanceOf(GenericError) + expect(error.message).toBe('failed') + expect(error.code).toBe('unknown') + expect(error.details).toBeUndefined() +}) + +test('error with details', () => { + const error = new GenericError('api failed', { + code: 'code', + details: { + xid: 'xid' + } + }) + + expect(error).toBeInstanceOf(Error) + expect(error).toBeInstanceOf(GenericError) + expect(error.message).toBe('api failed') + expect(error.code).toBe('code') + expect(error.details).toEqual({xid: 'xid'}) +}) diff --git a/packages/errors/index.ts b/packages/errors/index.ts new file mode 100644 index 0000000..b6c25ce --- /dev/null +++ b/packages/errors/index.ts @@ -0,0 +1,39 @@ +/* eslint-disable import/no-unused-modules */ + +/** Generic error options */ +export interface GenericErrorInput { + code?: number | string + details?: Record +} + +/** + * Generic error + * + * Base usage + * ```ts + * new GenericError('failed') + * ``` + * + * Usage with details + * ```ts + * new GenericError('api failed', { + * code: 'account_suspended', + * details: { + * xid: 'k1k2jn31kjnasxa9' + * } + * }) + * ``` + */ +export class GenericError extends Error { + code: GenericErrorInput['code'] + details?: GenericErrorInput['details'] + + constructor(message: string, input?: GenericErrorInput) { + super() + this.name = 'ApiError' + this.message = message.toString().toLowerCase() + this.code = input?.code ?? 'unknown' + this.details = input?.details + Object.setPrototypeOf(this, GenericError.prototype) + } +} diff --git a/packages/errors/package.json b/packages/errors/package.json new file mode 100644 index 0000000..a09ce36 --- /dev/null +++ b/packages/errors/package.json @@ -0,0 +1,12 @@ +{ + "name": "@rambler-tech/errors", + "version": "0.0.0", + "main": "dist", + "module": "dist", + "types": "dist/index.d.ts", + "license": "MIT", + "sideEffects": false, + "publishConfig": { + "access": "public" + } +} diff --git a/packages/errors/tsconfig.json b/packages/errors/tsconfig.json new file mode 100644 index 0000000..b81d8e5 --- /dev/null +++ b/packages/errors/tsconfig.json @@ -0,0 +1,9 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "module": "commonjs", + "baseUrl": ".", + "outDir": "dist" + }, + "include": [".", "../../types"] +} diff --git a/packages/errors/typedoc.json b/packages/errors/typedoc.json new file mode 100644 index 0000000..fd9d16b --- /dev/null +++ b/packages/errors/typedoc.json @@ -0,0 +1,5 @@ +{ + "extends": "@rambler-tech/typedoc-config", + "readme": "../../README.md", + "entryPoints": ["./index.ts"] +}