npm.io
1.3.1 โ€ข Published 3 years ago

@sidiousware/dontpanic

Licence
MIT
Version
1.3.1
Deps
1
Size
23 kB
Vulns
0
Weekly
0
Stars
2

dontpanic

npm package Build Status Code Coverage Commitizen Friendly Semantic Release

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 throws 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

Keywords