Skip to content

artus/voft

Repository files navigation

voft ∙ Docs License npm version CI status

Various Objects For Typescript

voft is a library that provides various objects and utilities for TypeScript, allowing you to write more declarative and functional code.

Right now, the library includes the following classes:

  • Try: A class that allows you to chain synchronous functions and handle errors in a more declarative way.
  • AsyncTry: A class that allows you to chain asynchronous functions and handle errors in a more declarative way.
  • Optional: A class that allows you to convey the presence or absence of a value in a more declarative way.
  • Either: A class that allows you to convey a success or failure in a more declarative way.

You can find more information about each class in the docs.

Examples

You can find examples of how to use the classes in the examples directory.

Installation

npm install voft

Usage

import { AsyncTry } from '../src';

interface Launch {
  rocket: string;
}

interface Rocket {
  name: string;
}

async function getLatestLaunch(): Promise<Launch> {
  const response = await fetch('https://api.spacexdata.com/v5/launches/latest');
  return response.json();
}

async function getRocket(rocketIdentifier: string): Promise<Rocket> {
  const response = await fetch(
    `https://api.spacexdata.com/v4/rockets/${rocketIdentifier}`
  );

  return response.json();
}

export function printRocketNameOfLatestLaunch(): AsyncTry<string> {
  return AsyncTry.of(getLatestLaunch)
    .andThen(() => console.log('Got the latest launch!'))
    .map((launch) => launch.rocket)
    .andThen((rocketId: string) =>
      console.log(`Got the rocket id: ${rocketId}`)
    )
    .map(getRocket)
    .andThen(() => console.log('Got the rocket!'))
    .map((rocket: Rocket) => rocket.name)
    .andThen((rocketName: string) =>
      console.log(`The rocket name is: ${rocketName}`)
    );
}

Commands

build

npm run build

This builds to /dist. Test files and examples are not included.

test

npm test

This runs the tests in all /test directories.

coverage

npm run test:coverage

This runs the tests and generates a coverage report. The tests will fail if the coverage is below 100% for all files.

lint

npm run lint

This runs the linter on all files in the /src directory.

docs

npm run docs

This generates documentation based on the JSDoc to the /docs directory.