Skip to content

wopjs/tsur

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

51 Commits
Feb 10, 2025
Nov 13, 2024
Oct 17, 2023
Mar 3, 2025
Nov 28, 2024
Oct 16, 2023
Oct 16, 2023
Oct 16, 2023
Feb 10, 2025
Nov 28, 2024
Oct 16, 2023
Nov 13, 2024
Oct 18, 2023
Feb 10, 2025
Mar 3, 2025
Mar 3, 2025
Mar 3, 2025
Mar 3, 2025
Feb 10, 2025
Mar 3, 2025

Repository files navigation

Docs Build Status npm-version Coverage Status minified-size

TypeScript goodies inspired by Rust.

This project draws inspiration from Rust, but is designed to be more ergonomic and tailored to TypeScript's features and syntax.

Install

npm add @wopjs/tsur

Usage

Option

import { Option, Some, None } from "@wopjs/tsur";

const maybeNumber = Some(42);

if (maybeNumber.isSome()) {
  console.log(maybeNumber.unwrap()); // 42
} else {
  console.log("There is no number");
}

const maybeString = None;

if (maybeString.isSome()) {
  console.log(maybeString.unwrap());
} else {
  console.log("There is no string"); // "There is no string"
}

Result

import { Result, Ok, Err } from "@wopjs/tsur";

function divide(a: number, b: number): Result<number, string> {
  if (b === 0) {
    return Err("Cannot divide by zero");
  }
  return Ok(a / b);
}

const result = divide(10, 2);

if (result.isOk()) {
  console.log(result.unwrap()); // 5
} else {
  console.log(result.unwrapErr()); // "Cannot divide by zero"
}

Chaining

import { Option } from "@wopjs/tsur";

function get(obj: any, key: string): Option<any> {
  return key in obj ? Some(obj[key]) : None;
}

const obj = {
  a: {
    b: {
      c: 42,
    },
  },
};

const result = get(obj, "a")
  .map(x => x.b)
  .unwrapOr("default");

Array

Many useful array methods are added:

import { filterMap, Some, None } from "@wopjs/tsur";

const arr = [1, 2, 3, 4, 5];

const result = filterMap(arr, x => (x % 2 === 0 ? Some(x * 2) : None));

console.log(result); // [4, 8]

Or you can patch them to the native array:

import "@wopjs/tsur/patches/array";

const arr = [1, 2, 3, 4, 5];

const result = arr.filterMap(x => (x % 2 === 0 ? Some(x * 2) : None));

console.log(result); // [4, 8]

See docs for more details.

License

MIT @ CRIMX