Nationwide Polamorous Matrimony

    deftypes

    0.2.2 • Public • Published

    Deftypes.js

    JavaScript type annotaion DSL library for structure and function.

    Provide simple DSL and No side effects

    It is type checker on execution(not static).

    Deftypes can avoid all side effects if you want. It may be also good on testing framework.

    Install

    Examples are coffee-script.

    Node

    $ npm install deftypes
    
    {defdefunT} = require 'deftypes'

    Browser

    $ bower install deftypes
    
    <script src="bower_components/deftypes/deftypes.js"></script>
    

    or download deftypes.js of this directory

    <script src="master/deftypes.js"></script>
    
    Deftypes()
    

    It provides DSLs => def, defun, T

    How to use

    Struct Definition

    Point = {x: Numbery: Number}
    p1 = def Point{x:1y:2} #=> {x: 1, y:2} 
    p2 = def Point{x:1z:2} #=> type error 

    Typed Array

    list = def [T.Int][1,2,3]

    (T.Int and T.Fload are defined by default)

    Nullable

    NullableNumber = {n: T.Nullable(Number)}
    p1 = def NullableNumbern:1
    p2 = def NullableNumbern:null

    Typed Hash

    id_table = def T.Hash(StringNumber){
      A:1
      B:2
      C:3
    }

    Key accepts only Number or String (but it doesn't check yet)

    Function Definition

    check arguments and returned object

    f1 = def T.Func([NumberNumber]String)(m, n) -> "#{m}#{n}"
    f1(1,2) #=> "1, 2" 
    f1("",2) #=> argument error 
    find_index = def T.Func([[Number]Number]T.Nullable(Number))(arr, n) ->
      if (index = arr.indexOf(n)) is -1 then null else index
     
    find_index([3,4,5]4) #=> 1 
    find_index([3,4,5]9) #=> null 

    Function DSL

    f2 = defun [NumberNumber]String(m, n) -> "#{m}#{n}"

    Any Type

    events = def Objectrequire('events')
    list = def [T.any][0""null]

    Function Scope with type check

    = def Point{x:1y:2}
    def Pointp->
      @x = 3
     
    # Type Error 
    def Pointp-> @y = "not number"

    Transparent mode

    if option.transparent is true, typechecker does nothing, passing through def like transparent for avoiding performance down.

    {option} = require 'deftypes'
    option.transparent = true
    Deftypes.option.transparent = true

    TODO

    • trait feature
    • struct inheritance
    • valid error message

    Keywords

    none

    Install

    npm i deftypes

    DownloadsWeekly Downloads

    2

    Version

    0.2.2

    License

    BSD

    Last publish

    Collaborators

    • mizchi