1.3.1 โข Published 1 year ago
@sidiousware/dontpanic v1.3.1
๐ฏ dontpanic
Introduction
Humans are known to panic. This is widely considered bad design.
function eat(f: string) {
if (f === '๐ฏ') ...
else throw; // panic
}
Panic is not usefulโข. What's useful is a thorough assessment of the circumstances. dontpanic
brings you blazingly steadfast abstractions that help you recover from failure and guide your code to success.
DontPanic(eat)('๐ฏ').onSuccess(sleep).onFailure(getPizza); // ๐ Don't panic
Principles
๐ฏ No littering
Unhandled throw
s crash your program and send it into an unrecoverable state.
throw new Error('Invalid input'); // ๐ฏ Crash risk
return Failed('Invalid input'); // ๐ฃ No crash risk
99.9% of the time there is no need to panic.
โ ๏ธ Explicit content
Throwable functions do not encode potential in their type signature.
const parsed = JSON.stringify(input); // โ ๏ธ Number, may crash
DontPanic(JSON.stringify)(input); // โ
Outcome<string, Error>
Explicit is better than implicit.
๐ฅ Flat as a pancake
Try/catch creates new execution scopes.
try {
const parsed = JSON.parse(input);
try {
const validated = validateInput(parsed);
register(validated);
} catch (e) {
handleValidationError(e);
}
} catch (e) {
handleParsingError(e); // ๐ชน Far away from home
}
DontPanic(JSON.parse)(input) // ๐ฅ
.onFailure(handleParsingError)
.onSuccess(validateInput)
.onFailure(handleValidationError)
.onSuccess(register);
Flatten your error handling.
Install
npm install @sidiousware/dontpanic