oh-my-error
v2.0.2
Published
A simple error handler for nodejs
Readme
About package:
- 🛡️ Type safety
- 📖 TSDocs (Internal documentation)
- ♻️ Minified & Compressed
- ⚠️ Error Handler (
oh-my-error) - ✅ Support JS/TS & CJS/ESM
What you get:
- 🚀 One-line error handling
- 🎯 Centralized error management
- 🧑💻👥 Error messages for Developers and users!
- 📝 Pre-defined error templates
- 🏗️ Consistent error structure across your application
- 🔌 Easy integration with existing codebases
Showcase
// Make your life better
// Instead
let data;
try {
data = readFile("...path");
} catch {
throw Error("Cant Load File!");
}
// Do
const data = myErrorWrapper(readFile, Error("Cant Load File!"))("...path");📜 List of Contest
Install
NPM
npm install oh-my-errorPNPM
pnpm add oh-my-errorYarn
yarn add oh-my-errorTLDR (Only Most Important!)
Functions
| Name | Description |
| ---------------------------------------------- | ------------------------------- |
| myError | Handle with Error Object |
| myErrorWrapper | trycatch wrapper one liner |
| myErrorCatcher | promise wrapper |
| myErrorHandler | handle scenarios for each error |
Types
Error Templates
| Name | Description |
| ------------------------------------------------- | --------------------------------------------------------------- |
| TMyErrorList !important | For creating list with errors in one place! |
| IMyError | Basic Error |
| IMyErrorAPI | Basic Error API |
| IMyErrorRateLimit | IMyErrorApi with RateLimit error |
| IMyErrorValidation | IMyError with Validation error |
Rest Types for creating own Errors
Functions
myError ♻️ Refactored
Processes an error object, invoking functions with provided arguments
const MyErrorList = {
BLACKLISTED: {
name: "Black Listed Name",
hint: "Try use other one!",
message: (name: string) => `${name} is on black list!`
}
} as const satisfies TMyErrorList;
throw new myError(MyErrorList.BLACKLISTED, { message: ["nameInputed"] });Output
{
name:"Black Listed Name",
hint:"Try use other one!",
message:"nameInputed is on black list!"
}myErrorWrapper 🎉 New feature!
TryCatch one line wrapper with instant error thrower.
// Before
let data;
try {
data = readFile("path...");
} catch(){
throw new Error("Can't read file!");
}
// After
const [data,isError] = myErrorWrapper(readFile)("path...");
if(isError) throw new Error("Can't read file!")
// Or instant Error Throw (with errorToThrow)
const data = myErrorWrapper(readFile,new Error("Can't read file!"))("path...");
// With Passing Throwed Error to our error
const data = myErrorWrapper(readFile,err => new Error(`ERROR MESSAGE: ${err.message}}`))("path...");[!TIP] Async Functions
At async function it returns Promise, just useawaitto solve that
const data = await myErrorWrapper(asyncFun, new Error("Oh, Error!"))("MyString");myErrorCatcher
new Promise wrapper.
const data = await myErrorCatcher(readFile)("path...").catch(() => {
// Code before crash...
throw new Error("Can't read file!");
});myErrorHandler
Execute Scenarios for an error!
const [data, isError] = myErrorWrapper(readFile)("./ReadThisFile");
const MyErrorHandlerList = {
FS001: () => {
// Do this code if throw this error
console.error("ERROR");
}
};
if (isError) myErrorHandler(data.code, MyErrorHandlerList)();Types
TMyErrorList
[!IMPORTANT]
Useas const satisfies TMyErrorListto work it properly. Don't forget aboutconstbecause without this you not gonna get tips.
[!TIP]
You can addsatisfies ERRORTYPEper error to have strict typing per error or just addas const satisfies TMyErrorList<ERRORTYPE>to have strict typing too!
const ErrorList = {
notFound: {
name: "Not Found",
code: "FS001",
message: {
user: "File not found",
dev: "The file you are trying to read does not exist"
},
hint: (path: string) => `Check if the file exists at ${path}`
} satisfies IMyError,
cantRead: {
code: "FS002",
name: "Cant Read",
message: { user: "Can't read file", dev: "readFileSync throw error" },
hint: {
user: "Check if the file is not corrupted or permissions",
dev: "File is corrupted or has no permissions to be read"
}
}
} as const satisfies TMyErrorList;Error Templates (Organisms) new!
There you can find ready error structures.
| Name | Description | Extends |
| ---------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| IMyError new! | Basic Error Template for Error | |
| IMyErrorAPI new! | Basic Error Template for API | IMyError, TApiError |
| IMyErrorRateLimit new! | Basic Error Template for API Rate limit | IMyError, TApiRateLimit |
| IMyErrorValidation new! | Basic Error Template for Validation | IMyError, TValidationError |
| TAllMyErrorTypes new! | Every Error Template exclude TBaseError & TBaseErrorExt | IMyError | IMyErrorAPI | IMyErrorRateLimit | IMyErrorValidation |
| TAllMyErrorTypesExt new! | Every Error Template with return type Function or Value option exclude TBaseError & TBaseErrorExt | TValueOrFunction<TAllMyErrorTypes> |
| | | |
| TBaseError new! | Predefined type for Error | - |
| TBaseErrorExt new! | Predefined type for Error with function types | - |
Predefined elements (Moleculars) new!
Short predefined types to easy creating own Error types!
| Name (Col1) | Name (Col2) | Name (Col3) |
| -------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------- |
| TValidationError new! | TApiError new! | TApiRateLimit new! |
| TErrorMessagesExt new! | TErrorList new! | TCauseError new! |
| TDetails new! | - | - |
Predefined types for properties (Atoms) new!
Short predefined types for properties!
| Name (Col1) | Name (Col2) | Name (Col3) |
| ------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------ |
| TSeverity new! | TSeverity2 new! | StatusCodes |
Utils Types new!
| Name (Col1) | Name (Col2) | Name (Col3) |
| ------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------- | ----------- |
| TValueOrFunction new! | TValueOrFunctionAll new! | - |
