0.0.2 • Published 2 years ago

@eeue56/adeilad v0.0.2

Weekly downloads
-
License
BSD-3-Clause
Repository
github
Last release
2 years ago

adeilad

Ensure JSON has the correct structure at runtime, inspired by Elm's decoders and the pipeline decoder package.

These functions are best used at the surface points where JSON comes into your program: either via an API call, user input, or some untyped library.

Part of the Hiraeth collection.

Installation

npm install --save @eeue56/adeilad

Example usage

Imagine you have some API that gives you JSON, for example:

import { decode, pipeline, required, string, number, array } from "@eeue56/adeilad";


// fetched via a http request
const someExampleData = {
    name: "Noah",
    age: 28,
    pets: [
        { name: "Frodo", age: 8 },
        { name: "Fiver", age: 3 },
    ]
};

type Pet = {
    name: string;
    age: number;
}

function Pet(name: string, age: number): Pet {
    return {
        name,
        age
    }
}

type Person = {
    name: string;
    age: number;
    pets: Pet[]
}

function Person(name: string, age: number, pets: Pet[]): Person{
    return {
        name,
        age,
        pets
    }
}

const petDecoder = pipeline([
    required("name", string()),
    required("age", number())
])

const personDecoder = pipeline([
    required("name", string()),
    required("age", number()),
    required(pets, array(petDecoder))
]))

const result = decode(personDecoder, person);

switch (result.kind) {
    "ok": {
        console.log("Got a valid person:", result.value);
    },
    "err": {
        console.error("Invalid person:", res.error);
    }
}

Docs

See docs

You may also want to see the Result type from coed

Name

Adeilad is the Welsh word for buildings. For English speakers it'd be pronounced similar to "ah-dey-lad".