DeesseJS FP

Getting Started

Install and use "@deessejs/fp" in your project

Installation

npm install @deessejs/fp
pnpm add @deessejs/fp
yarn add @deessejs/fp

@deessejs/fp requires TypeScript 5.0 or later.

Peer dependency

@deessejs/fp uses structured errors from @deessejs/errors for advanced error handling:

npm install @deessejs/errors

This is optional — the library works without it.

Your first Result

import { ok, err } from '@deessejs/fp';

// A function that can fail
function divide(a: number, b: number) {
  if (b === 0) {
    return err('Division by zero');
  }
  return ok(a / b);
}

const result = divide(10, 2);

// Check the result
if (result.isOk()) {
  console.log(result.value); // 5
} else {
  console.error(result.error); // 'Division by zero'
}

Transform with map

import { ok, err } from '@deessejs/fp';

const result = ok(5)
  .map(n => n * 2)    // Ok(10)
  .map(n => n + 1);   // Ok(11)

result.getOrElse(0); // 11

Chain operations with flatMap

import { ok, err } from '@deessejs/fp';

function findUser(id: string) {
  return id === '1' ? ok({ id: '1', name: 'Alice' }) : err('Not found');
}

ok('1')
  .flatMap(id => findUser(id))
  .map(user => user.name)   // Ok('Alice')
  .getOrElse('Unknown');    // 'Alice'

Handle optional values with Maybe

import { some, none, maybe } from '@deessejs/fp';

// Create from a nullable value
maybe(null);       // None
maybe(undefined);  // None
maybe('hello');    // Some('hello')

// Safe property access
const user = { name: 'Alice', address: { city: 'Paris' } };

some(user)
  .flatMap(u => maybe(u.address))
  .map(addr => addr.city)  // Some('Paris')
  .getOrElse('Unknown');   // 'Paris'

Pattern matching

import { ok, err, some, none } from '@deessejs/fp';

// Result
const result = ok(42);

result.match({
  ok: (value) => `Got ${value}`,
  err: (error) => `Error: ${error}`,
}); // 'Got 42'

// Maybe
const maybeName = some('Alice');

maybeName.match({
  some: (name) => `Hello, ${name}`,
  none: () => 'Hello, stranger',
}); // 'Hello, Alice'

See Also

On this page