• Stars
    star
    351
  • Rank 120,906 (Top 3 %)
  • Language
    JavaScript
  • License
    MIT License
  • Created about 7 years ago
  • Updated about 1 year ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

Elegant validation library for type-safe input data (for TypeScript and Flow)

Decoders logo

npm Build Status Coverage Status Minified Size

Elegant and battle-tested validation library for type-safe input data for TypeScript and Flow.

Motivation

Data entering your application from the outside world should not be trusted without validation and often is of the any type, effectively disabling your type checker around input values. It's an industry good practice to validate your expectations right at your program's boundaries. This has two benefits: (1) your inputs are getting validated, and (2) you can now statically know for sure the shape of the incoming data. Decoders help solve both of these problems at once.

Example

import { array, iso8601, number, object, optional, string } from 'decoders';

//
// Incoming data at runtime
//
const externalData = {
    id: 123,
    name: 'Alison Roberts',
    createdAt: '1994-01-11T12:26:37.024Z',
    tags: ['foo', 'bar'],
};

//
// Write the decoder (= what you expect the data to look like)
//
const userDecoder = object({
    id: number,
    name: string,
    createdAt: optional(iso8601),
    tags: array(string),
});

//
// Call .verify() on the incoming data
//
const user = userDecoder.verify(externalData);
//    ^^^^
//    TypeScript can automatically infer this type now:
//
//    {
//      id: number;
//      name: string;
//      createdAt?: Date;
//      tags: string[];
//    }
//

Documentation

Documentation can be found on https://decoders.cc.

Building your own decoders

There is a dedicated page in the docs that explains how to build your own decoders β€” it’s fun!

More Repositories

1

gitflow

Git extensions to provide high-level repository operations for Vincent Driessen's branching model.
Shell
26,364
star
2

git-toolbelt

A suite of useful Git commands that aid with scripting or every day command line usage
Shell
1,175
star
3

vim-flake8

Flake8 plugin for Vim
Vim Script
1,053
star
4

vimrc

My personal Neovim configuration, with a lot of love put into it.
Vim Script
548
star
5

times

Times and time zones in Python with a focus on best practices.
Python
394
star
6

cookiecutter-python-cli

Python
186
star
7

itertools

TypeScript port of Python's awesome itertools stdlib.
TypeScript
139
star
8

vim-rst-tables

Easily create and reformat your RST (reStructuredText) tables as you change cell content.
Python
121
star
9

dotfiles

Shell
94
star
10

shFlags

Git mirror of the shFlags project by Kate Ward
Shell
89
star
11

vim-pyunit

Plugin enabling advanced unit test support inside your favorite editor.
Python
74
star
12

lemons.js

πŸ‹ Common algebraΓ―c data types for JS
JavaScript
59
star
13

SimpleAES

AES-256 encryption and decryption in Python for mere mortals.
Python
55
star
14

vim-togglemouse

Toggles the mouse focus between Vim and your terminal emulator, allowing terminal emulator mouse commands, like copy/paste.
Vim Script
52
star
15

python-fu

Python command line tools, for increased fu.
Python
46
star
16

vim-pep8

This project is superseded by vim-flake8!
Vim Script
38
star
17

sr

A simple mass search & replace tool
Rust
30
star
18

osx-install

Personal OSX install scripts / notes
Shell
26
star
19

vim_bridge

A Python-to-Vim bridge decorator that allows transparent calls to Python functions in native Vim scripts.
Python
23
star
20

pluck

General-purpose function to pluck fields from an iterable's values.
Python
21
star
21

dictmerge

Merge dicts without mutating them.
Python
16
star
22

git-it

Git issue tracker
Python
14
star
23

python-drainers

Event-based draining of process output
Python
13
star
24

new_workers

Python
13
star
25

vim-pyflakes

This project is superseded by vim-flake8!
Vim Script
11
star
26

rule-of-law

A sanity checker to verify assumptions about data consistency
JavaScript
8
star
27

debrief.js

Object serialization and annotation, for use in human-friendly error messages
JavaScript
8
star
28

even-more-itertools

Even more itertools than the stdlib and the more-itertools project provide.
Python
8
star
29

BKrypt

Thin wrapper around the bcrypt library.
Python
6
star
30

scripts

A collection of simple and small but useful UNIX shell scripts.
Shell
6
star
31

nox-ideas

Ideas for a new kind of programming language
6
star
32

vim-ini

Syntax highlighting for INI files in Vim.
Vim Script
6
star
33

Convenience

Convenience Cocoa classes, extending default functionality for a bunch of Cocoa objects.
Objective-C
5
star
34

VDOrderedEntityMigrationPolicy

Custom migration policy class for migrating Core Data entities with ordered relationships (i.e. entities that inherit from BWOrderedManagedObject).
Objective-C
4
star
35

ast-generator

TypeScript
3
star
36

syncfrom

Super-duper easy rsync wrappers for your home setup
Shell
3
star
37

Xcode-Extensions

Custom made Xcode extensions
Objective-C
3
star
38

homebrew-tap

Personal taps for Homebrew
Ruby
2
star
39

vim-nox

Nox syntax highlighting for Vim
Vim Script
1
star
40

nvie

1
star
41

clean-project

Repo to demonstrate a bug in Bun
TypeScript
1
star