diff options
Diffstat (limited to 'packages/server/src/git/error')
-rw-r--r-- | packages/server/src/git/error/index.ts | 60 | ||||
-rw-r--r-- | packages/server/src/git/error/types.ts | 39 |
2 files changed, 99 insertions, 0 deletions
diff --git a/packages/server/src/git/error/index.ts b/packages/server/src/git/error/index.ts new file mode 100644 index 0000000..b8994d3 --- /dev/null +++ b/packages/server/src/git/error/index.ts @@ -0,0 +1,60 @@ +import { ErrorType } from "./types"; + +export * from "./types"; + +export class ServerError extends Error { + code: number; + + constructor(where: string, error_type: { code: number, message: string }) { + super(`A ${where} error has occured: ${error_type.message}`); + + this.name = "Server Error"; + this.code = error_type.code; + } +} + +export enum ErrorWhere { + Repository = "repository", + Tree = "tree", + Tag = "tag", + Branch = "branch", + Commit = "commit", + Diff = "diff", + Misc = "misc", + Blob = "blob" +} + +/** + * A error factory + * + * @param where - Where the error has occured + * @param err_type - What type of error it is + * @param args - Parameters for the error type + * + * @returns A server error + * + * @example Example usage: + * import { ErrorType, NotFoundError, createError } from "./error"; + * + * throw(createError(ErrorType.Repository, NotFoundError, "chili sauce")); + */ +export function createError<T extends new (...args: string[]) => ErrorType>(where: ErrorWhere, ErrType: T, ...args: ConstructorParameters<T>): ServerError; + +/** + * A error factory + * + * @param where - Where the error has occured + * @param err_type - What type of error it is + * + * @returns A server error + * + * @example Example usage: + * import { ErrorType, UnknownError, createError } from "./error"; + * + * throw(createError(ErrorType.Repository, UnknownError)); + */ +export function createError<T extends new () => ErrorType>(where: ErrorWhere, ErrType: T): ServerError; + +export function createError<T extends new(...args: string[]) => ErrorType>(where: ErrorWhere, ErrType: T, ...args: ConstructorParameters<T>): ServerError { + return new ServerError(where, new ErrType(...args)); +}
\ No newline at end of file diff --git a/packages/server/src/git/error/types.ts b/packages/server/src/git/error/types.ts new file mode 100644 index 0000000..b8f2de7 --- /dev/null +++ b/packages/server/src/git/error/types.ts @@ -0,0 +1,39 @@ +export abstract class ErrorType { + code: number; + message: string; + + constructor(code: number, message: string) { + this.code = code; + this.message = message; + } +} + +export class UnknownError extends ErrorType { + constructor() { + super(500, "Unknown error!"); + } +} + +export class NotFoundError extends ErrorType { + constructor(target: string) { + super(404, `${target} not found!`); + } +} + +export class FailedError extends ErrorType { + constructor(attempt: string) { + super(500, `Failed to ${attempt}!`); + } +} + +export class IsNotError extends ErrorType { + constructor(target: string, not: string) { + super(500, `${target} is not a ${not}!`); + } +} + +export class CommitNotSignedError extends ErrorType { + constructor() { + super(500, "Commit isn't signed!"); + } +}
\ No newline at end of file |