Files
anonymous_github/src/AnonymousError.ts
2021-09-09 11:53:49 +02:00

54 lines
1.4 KiB
TypeScript

import { CustomError } from "ts-custom-error";
import AnonymizedFile from "./AnonymizedFile";
import Repository from "./Repository";
import GitHubBase from "./source/GitHubBase";
import { GitHubRepository } from "./source/GitHubRepository";
import User from "./User";
/**
* Custom error message
*/
export default class AnonymousError extends CustomError {
value?: any;
httpStatus?: number;
cause?: Error;
constructor(
message: string,
opt?: {
httpStatus?: number;
cause?: Error;
object?: any;
}
) {
super(message);
this.value = opt?.object;
this.httpStatus = opt?.httpStatus;
this.cause = opt?.cause;
}
toString(): string {
let out = "";
let detail = this.value ? JSON.stringify(this.value) : null;
if (this.value instanceof Repository) {
detail = this.value.repoId;
} else if (this.value instanceof AnonymizedFile) {
detail = `/r/${this.value.repository.repoId}/${this.value.anonymizedPath}`;
} else if (this.value instanceof GitHubRepository) {
detail = `${this.value.fullName}`;
} else if (this.value instanceof User) {
detail = `${this.value.username}`;
} else if (this.value instanceof GitHubBase) {
detail = `${this.value.repository.repoId}`;
}
out += this.message;
if (detail) {
out += `: ${detail}`;
}
if (this.cause) {
out += `\n\tCause by ${this.cause}\n${this.cause.stack}`;
}
return out;
}
}