🦀
Rust-Inspired
Familiar Result
Type-safe Result
npm install @eriveltonsilva/result.jsWARNING
Requires node.js 22.0.0+
import { Result } from '@eriveltonsilva/result.js'
// Create Results
const success = Result.ok(42)
const failure = Result.err(new Error('Something went wrong'))
// Chain operations
const result = Result.ok(10)
.map((x) => x * 2)
.andThen((x) => x > 15 ? Result.ok(x) : Result.err('too small'))
.unwrapOr(0)
console.log(result) // 20With Result, errors are explicit in your function signatures:
function divide(a: number, b: number): Result<number, string> {
if (b === 0) return Result.err('Division by zero')
return Result.ok(a / b)
}
const result = divide(10, 0)
result.match({
ok: (val) => console.log(val),
err: (msg) => console.error(msg)
})Chain operations without nested try-catch blocks:
async function loadUserData(userId: string): AsyncResult<User, ApiError> {
return (await fetchUser(userId))
.andThenAsync((user) => validateUser(user))
.andThenAsync((user) => saveToCache(user))
.orElseAsync(() => fetchFromBackup(userId))
}
const result = await loadUserData('123')
result.match({
ok: (user) => console.log('User:', user),
err: (error) => console.error('Failed:', error)
})match() for handling both success and failure