enotype v0.3.0
enotype
A cross-language type library
const { color } = require('enotype');
color('#fff'); // returns "#fff"
color('#xyz'); // throws "A color is required, for instance '#B6D918', '#fff' or '#01b'."const { color } = require('enotype/es'); // with localized error messages
color('#xyz'); // throws "Se requiere un color, por ejemplo '#B6D918', '#fff' o '#01b'."Installation
npm install enotypeFeatures
- Validation and conversion of
stringrepresentations into language-native types. - Implemented as a collection of minimalist functions, so called loaders.
- Zero-cost localization (currently
de,en,es) through statically generated code. - Generically usable in a multitude of contexts through a plain and simple design.
- Standard type library for the eno notation language.
Documentation
boolean
const { boolean } = require('enotype');
boolean('true'); // returns true'true' returns true.'false' returns false.'yes' returns true.'no' returns false.'nope' throws an error.
color
const { color } = require('enotype');
color('#abcdef'); // returns '#abcdef''#abcdef' returns '#abcdef'.'#ABCDEF' returns '#ABCDEF'.'#012345' returns '#012345'.'#678' returns '#678'.'#89a' returns '#89a'.'#ab' throws an error.'#abcd' throws an error.'#abcde' throws an error.'#bcdefg' throws an error.'blue' throws an error.
commaSeparated
const { commaSeparated } = require('enotype');
commaSeparated('one,two,three'); // returns ['one', 'two', 'three']'one,two,three' returns ['one', 'two', 'three'].' one,two,three ' returns ['one', 'two', 'three'].'one , two , three' returns ['one', 'two', 'three'].' one , two , three ' returns ['one', 'two', 'three'].',,' returns ['', '', ''].'one two three' returns ['one two three'].'one;two;three' returns ['one;two;three'].' ' returns [''].
date
const { date } = require('enotype');
date('1992-02-02'); // returns new Date(Date.UTC(1992, 1, 2))'1992-02-02' returns new Date(Date.UTC(1992, 1, 2)).'1990' throws an error.'1991-01' throws an error.'1993-03-03T1920+01:00' throws an error.'1994-04-04T1920:30+01:00' throws an error.'1995-05-05T1920:30.45+01:00' throws an error.'1996-06-06T0815:30-05:00' throws an error.'1997-07-07T1315:30Z' throws an error.'2002 12 14' throws an error.'2002-12-14 20:15' throws an error.'January' throws an error.'13:00' throws an error.
datetime
const { datetime } = require('enotype');
datetime('1990'); // returns new Date(Date.UTC(1990, 0, 1))'1990' returns new Date(Date.UTC(1990, 0, 1)).'1991-01' returns new Date(Date.UTC(1991, 0, 1)).'1992-02-02' returns new Date(Date.UTC(1992, 1, 2)).'1993-03-03T19:20+01:00' returns new Date(Date.UTC(1993, 2, 3, 18, 20)).'1994-04-04T19:20:30+01:00' returns new Date(Date.UTC(1994, 3, 4, 18, 20, 30)).'1995-05-05T19:20:30.45+01:00' returns new Date(Date.UTC(1995, 4, 5, 18, 20, 30, 450)).'1996-06-06T08:15:30-05:00' returns new Date(Date.UTC(1996, 5, 6, 13, 15, 30)).'1997-07-07T13:15:30Z' returns new Date(Date.UTC(1997, 6, 7, 13, 15, 30)).'2002 12 14' throws an error.'2002-12-14 20:15' throws an error.'January' throws an error.'13:00' throws an error.
const { email } = require('enotype');
email('john.doe@eno-lang.org'); // returns 'john.doe@eno-lang.org''john.doe@eno-lang.org' returns 'john.doe@eno-lang.org'.'john.doe@eno-lang' throws an error.'@eno-lang.org' throws an error.'john.doe@.org' throws an error.
float
const { float } = require('enotype');
float('42'); // returns 42.0'42' returns 42.0.'-42' returns -42.0.'42.0' returns 42.0.'42,0' throws an error.'4 2.0' throws an error.'fortytwo' throws an error.
integer
const { integer } = require('enotype');
integer('42'); // returns 42'42' returns 42.'-42' returns -42.'42.0' throws an error.'42,0' throws an error.'4 2' throws an error.'fortytwo' throws an error.
ipv4
const { ipv4 } = require('enotype');
ipv4('0.0.0.0'); // returns '0.0.0.0''0.0.0.0' returns '0.0.0.0'.'255.255.255.255' returns '255.255.255.255'.'192.168.0.1' returns '192.168.0.1'.'10.10.10.10' returns '10.10.10.10'.'255.255.255.256' throws an error.'localhost' throws an error.'4.staging.production.lan' throws an error.
json
const { json } = require('enotype');
json('{ "valid": true }'); // returns { valid: true }'{ "valid": true }' returns { valid: true }.'42' returns 42.'["valid", true]' returns ['valid', true].'invalid' throws an error.'{ invalid: true }' throws an error.'{ "invalid": true, }' throws an error.
latLng
const { latLng } = require('enotype');
latLng('48.205870, 16.413690'); // returns { lat: 48.205870, lng: 16.413690 }'48.205870, 16.413690' returns { lat: 48.205870, lng: 16.413690 }.'41.25, -120.9762' returns { lat: 41.25, lng: -120.9762 }.'-31.96, 115.84' returns { lat: -31.96, lng: 115.84 }.'90, 0' returns { lat: 90, lng: 0 }.' 0 , 0 ' returns { lat: 0, lng: 0 }.'-0,-0' returns { lat: -0, lng: -0 }.'1000,10' throws an error.'10,1000' throws an error.'48.205870,' throws an error.', 16.413690' throws an error.'48,205870, 16,413690' throws an error.
slug
const { slug } = require('enotype');
slug('eno-lang-article'); // returns 'eno-lang-article''eno-lang-article' returns 'eno-lang-article'.'eno_lang_article' returns 'eno_lang_article'.'eno-lang-article!' throws an error.'%eno-lang-article' throws an error.'eno lang article' throws an error.'enö-läng-ärticle' throws an error.'énó-láng-ártíclé' throws an error.
url
const { url } = require('enotype');
url('http://www.valid.com'); // returns 'http://www.valid.com''http://www.valid.com' returns 'http://www.valid.com'.'https://valid.com' returns 'https://valid.com'.'https://www.valid.com' returns 'https://www.valid.com'.'invalid' throws an error.'www.invalid' throws an error.'www.invalid.com' throws an error.'htp://www.invalid.com' throws an error.'http:/invalid.com' throws an error.'https//invalid.com' throws an error.'https://invalid' throws an error.