Package Exports
- @andreasnicolaou/safe
Readme
@andreasnicolaou/safe — Say Goodbye to Try-Catch Blocks!
Tired of writing try...catch everywhere?
Let @andreasnicolaou/safe handle it for you. This tiny, library automatically wraps your functions and promises in a safe execution environment.
Features
- No more try-catch everywhere: Clean up your code by handling errors in one place.
- Works with sync and async: One API for both synchronous and asynchronous code.
- TypeScript-first: Full type inference and guards for safer code.
- Customizable logging: Plug in your own logger or error reporting.
- Framework-agnostic: Use in Node.js, browsers, React and more.
Package Managers
# npm
npm install @andreasnicolaou/safe
# yarn
yarn add @andreasnicolaou/safe
# pnpm
pnpm add @andreasnicolaou/safeCDN Usage
For direct browser usage without a build step:
<!-- unpkg CDN (latest version, unminified) -->
<script src="https://unpkg.com/@andreasnicolaou/safe/dist/index.umd.js"></script>
<!-- unpkg CDN (latest version, minified) -->
<script src="https://unpkg.com/@andreasnicolaou/safe/dist/index.umd.min.js"></script>
<!-- jsDelivr CDN (unminified) -->
<script src="https://cdn.jsdelivr.net/npm/@andreasnicolaou/safe/dist/index.umd.js"></script>
<!-- jsDelivr CDN (minified) -->
<script src="https://cdn.jsdelivr.net/npm/@andreasnicolaou/safe/dist/index.umd.min.js"></script>The library will be available as safe on the global scope:
<script>
// Example: use safe utilities from the global `safe` object
const { safe: safeFn, isSuccess, isFailure } = safe;
const [error, result] = safeFn(() => JSON.parse('{"foo": 123}'));
if (isSuccess([error, result])) {
console.log('Parsed:', result);
}
</script>Usage
You can use this library in any modern JavaScript environment:
ESM (ECMAScript Modules)
import { safe, isSuccess, isFailure } from '@andreasnicolaou/safe';
const [error, result] = safe(() => JSON.parse('{"foo": 123}'));
if (isSuccess([error, result])) {
console.log('Parsed:', result);
}CommonJS (Node.js require)
const { safe, isSuccess, isFailure } = require('@andreasnicolaou/safe');
const [error, result] = safe(() => JSON.parse('{"foo": 123}'));
if (isSuccess([error, result])) {
console.log('Parsed:', result);
}UMD (CDN/Browser)
<script src="https://unpkg.com/@andreasnicolaou/safe/dist/index.umd.min.js"></script>
<script>
const { safe: safeFn, isSuccess, isFailure } = safe;
const [error, result] = safeFn(() => JSON.parse('{"foo": 123}'));
if (isSuccess([error, result])) {
console.log('Parsed:', result);
}
</script>Basic Usage
import { safe, isSuccess, isFailure } from '@andreasnicolaou/safe';
const [error, result] = safe(() => {
throw new Error('An error Occured!');
});
console.log(error); // An error Occured!
console.log(result); // undefined
console.log(isSuccess([error, result])); // false
console.log(isFailure([error, result])); // trueAdvanced Error Handling
const { safe, safeWithRetries } = createSafeUtils({
logger: (error) => sentry.captureException(error),
logErrors: process.env.NODE_ENV === 'production',
});Architecture Benefits
- Functional Programming Friendly
Compose operations without error handling noise - TypeScript Optimized
Full type inference and guards - Framework Agnostic
Works with React, Node.js, Deno, etc.
Related
Contributing
Contributions are welcome! If you encounter issues or have ideas to enhance the library, feel free to submit an issue or pull request.