This library aims to provide easy to use run- and compiletime type-safety combined with the benefits of immutability through Prelude-ts.
Interop with Prelude-ts is a key feature of this library, but not strictly required for operation.
Prelude-IO's base unit is the Bus<I, O>
class, which provides basic functionality and abstractions around creating reversible data pipelines.
The core library also includes a few basic types to represent most data formats, found here under Presets.
Examples can be found here. Alternatively, here's an overview of some basic functionality:
import * as io from "prelude-io";
import { Predicate } from "prelude-ts";
// Conditional types
const rating = io.number.if(Predicate.of((n) => n > 0 && n <= 5));
// Complex types
const roomType = io.Complex("Room", {
name: io.string.
description: io.Optional(io.string),
rating: rating,
});
// Nesting
const hotelType = io.Complex("Hotel", {
address: io.string,
website: io.string,
rating: rating
rooms: io.Vector(Room)
});
// Deserialising
fetch("http://example.com/hotels.json")
.then(response => response.json())
// (de)serialising
.then(HotelType.deserialise)
.then(hotel => {
// Either-based error handling
if(hotel.isLeft()) {
// Built-in debugger
console.error(io.humanizeErrors(hotel.getLeft()))
} else {
LocalStorage.setItem("hotel", hotel.get())
}
});
You can read typedoc documentation here
npm install --save @prelude-io/core prelude-ts
Either
objects rather than throw exceptionschain
ed or turned into a union
fetch
for runtime type-checking@prelude-io/test
: A set of functions to run basic tests on your data typesfp-ts
.Generated using TypeDoc