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
- Busses split parsing and conditional logic into seperate functions
- IO returns
Either
objects rather than throw exceptions - Functions can be
chain
ed or turned into aunion
- Prelude-IO/Fetch: A wrapper around
fetch
for runtime type-checking
- Add extra commonly used types
@prelude-io/test
: A set of functions to run basic tests on your data types
- Prelude-ts: Provides functional programming concepts in an accessible manner. Though a similar name, this project is not directly affiliated with prelude-ts or its authors.
- io-ts: Runtime type checking, encoding and decoding, based on
fp-ts
.