Compare commits

...

5 Commits

Author SHA1 Message Date
a0f0699a85 Added format bytes helper
All checks were successful
Build / Build NPM Project (push) Successful in 24s
Build / Tag Version (push) Successful in 7s
2024-09-11 18:33:10 -04:00
adcd6eaf79 Added PUT method to http helper
All checks were successful
Build / Build NPM Project (push) Successful in 30s
Build / Tag Version (push) Successful in 7s
2024-09-11 17:34:56 -04:00
afb6ca0803 Added function to create errors from status codes
All checks were successful
Build / Build NPM Project (push) Successful in 25s
Build / Tag Version (push) Successful in 6s
2024-09-04 18:48:15 -04:00
e699f8a634 Added new error codes
All checks were successful
Build / Build NPM Project (push) Successful in 45s
Build / Tag Version (push) Successful in 6s
2024-09-04 10:47:44 -04:00
c7dd91e9cd Added new error codes
Some checks failed
Build / Tag Version (push) Blocked by required conditions
Build / Build NPM Project (push) Has been cancelled
2024-09-04 10:47:36 -04:00
5 changed files with 134 additions and 4 deletions

4
package-lock.json generated
View File

@ -1,12 +1,12 @@
{ {
"name": "@ztimson/utils", "name": "@ztimson/utils",
"version": "0.15.1", "version": "0.15.3",
"lockfileVersion": 3, "lockfileVersion": 3,
"requires": true, "requires": true,
"packages": { "packages": {
"": { "": {
"name": "@ztimson/utils", "name": "@ztimson/utils",
"version": "0.15.1", "version": "0.15.3",
"license": "MIT", "license": "MIT",
"devDependencies": { "devDependencies": {
"@types/jest": "^29.5.12", "@types/jest": "^29.5.12",

View File

@ -1,6 +1,6 @@
{ {
"name": "@ztimson/utils", "name": "@ztimson/utils",
"version": "0.15.2", "version": "0.15.6",
"description": "Utility library", "description": "Utility library",
"author": "Zak Timson", "author": "Zak Timson",
"license": "MIT", "license": "MIT",

View File

@ -53,6 +53,18 @@ export class UnauthorizedError extends CustomError {
} }
} }
export class PaymentRequiredError extends CustomError {
static code = 402;
constructor(message: string = 'Payment Required') {
super(message);
}
static instanceof(err: Error) {
return (<any>err).constructor.code == this.code;
}
}
export class ForbiddenError extends CustomError { export class ForbiddenError extends CustomError {
static code = 403; static code = 403;
@ -77,6 +89,30 @@ export class NotFoundError extends CustomError {
} }
} }
export class MethodNotAllowedError extends CustomError {
static code = 405;
constructor(message: string = 'Method Not Allowed') {
super(message);
}
static instanceof(err: Error) {
return (<any>err).constructor.code == this.code;
}
}
export class NotAcceptableError extends CustomError {
static code = 406;
constructor(message: string = 'Not Acceptable') {
super(message);
}
static instanceof(err: Error) {
return (<any>err).constructor.code == this.code;
}
}
export class InternalServerError extends CustomError { export class InternalServerError extends CustomError {
static code = 500; static code = 500;
@ -88,3 +124,89 @@ export class InternalServerError extends CustomError {
return (<any>err).constructor.code == this.code; return (<any>err).constructor.code == this.code;
} }
} }
export class NotImplementedError extends CustomError {
static code = 501;
constructor(message: string = 'Not Implemented') {
super(message);
}
static instanceof(err: Error) {
return (<any>err).constructor.code == this.code;
}
}
export class BadGatewayError extends CustomError {
static code = 502;
constructor(message: string = 'Bad Gateway') {
super(message);
}
static instanceof(err: Error) {
return (<any>err).constructor.code == this.code;
}
}
export class ServiceUnavailableError extends CustomError {
static code = 503;
constructor(message: string = 'Service Unavailable') {
super(message);
}
static instanceof(err: Error) {
return (<any>err).constructor.code == this.code;
}
}
export class GatewayTimeoutError extends CustomError {
static code = 504;
constructor(message: string = 'Gateway Timeout') {
super(message);
}
static instanceof(err: Error) {
return (<any>err).constructor.code == this.code;
}
}
/**
* Create the correct error object from a status code
* @param {number} code Will be converted to respective error (ex. 404 -> NotFoundError)
* @param {string} message Override default error message
* @return {CustomError} The proper error type
*/
export function errorFromCode(code: number, message?: string) {
if(code >= 200 && code < 300) return null;
switch(code) {
case 400:
return new BadRequestError(message);
case 401:
return new UnauthorizedError(message);
case 402:
return new PaymentRequiredError(message);
case 403:
return new ForbiddenError(message);
case 404:
return new NotFoundError(message);
case 405:
return new MethodNotAllowedError(message);
case 406:
return new NotAcceptableError(message);
case 500:
return new InternalServerError(message);
case 501:
return new NotImplementedError(message);
case 502:
return new BadGatewayError(message);
case 503:
return new ServiceUnavailableError(message);
case 504:
return new GatewayTimeoutError(message);
default:
return new CustomError(message, code);
}
}

View File

@ -10,7 +10,7 @@ export type HttpRequestOptions = {
decode?: boolean; decode?: boolean;
fragment?: string; fragment?: string;
headers?: {[key: string | symbol]: string | null | undefined}; headers?: {[key: string | symbol]: string | null | undefined};
method?: 'GET' | 'POST' | 'PATCH' | 'DELETE'; method?: 'GET' | 'POST' | 'PATCH' | 'PUT' | 'DELETE';
query?: {key: string, value: string}[] | {[key: string]: string}; query?: {key: string, value: string}[] | {[key: string]: string};
url?: string; url?: string;
[key: string]: any; [key: string]: any;

View File

@ -6,6 +6,14 @@ export function createHex(length: number) {
return Array(length).fill(null).map(() => Math.round(Math.random() * 0xF).toString(16)).join(''); return Array(length).fill(null).map(() => Math.round(Math.random() * 0xF).toString(16)).join('');
} }
export function formatBytes(bytes: number, decimals = 2) {
if (bytes === 0) return '0 Bytes';
const k = 1024;
const sizes = ['Bytes', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'];
const i = Math.floor(Math.log(bytes) / Math.log(k));
return parseFloat((bytes / Math.pow(k, i)).toFixed(decimals)) + ' ' + sizes[i];
}
/** /**
* String of all letters * String of all letters
* *