| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298 | // Generated by LiveScript 1.4.0(function(){  var parsedTypeCheck, types, toString$ = {}.toString;  parsedTypeCheck = require('type-check').parsedTypeCheck;  types = {    '*': function(value, options){      switch (toString$.call(value).slice(8, -1)) {      case 'Array':        return typeCast(value, {          type: 'Array'        }, options);      case 'Object':        return typeCast(value, {          type: 'Object'        }, options);      default:        return {          type: 'Just',          value: typesCast(value, [            {              type: 'Undefined'            }, {              type: 'Null'            }, {              type: 'NaN'            }, {              type: 'Boolean'            }, {              type: 'Number'            }, {              type: 'Date'            }, {              type: 'RegExp'            }, {              type: 'Array'            }, {              type: 'Object'            }, {              type: 'String'            }          ], (options.explicit = true, options))        };      }    },    Undefined: function(it){      if (it === 'undefined' || it === void 8) {        return {          type: 'Just',          value: void 8        };      } else {        return {          type: 'Nothing'        };      }    },    Null: function(it){      if (it === 'null') {        return {          type: 'Just',          value: null        };      } else {        return {          type: 'Nothing'        };      }    },    NaN: function(it){      if (it === 'NaN') {        return {          type: 'Just',          value: NaN        };      } else {        return {          type: 'Nothing'        };      }    },    Boolean: function(it){      if (it === 'true') {        return {          type: 'Just',          value: true        };      } else if (it === 'false') {        return {          type: 'Just',          value: false        };      } else {        return {          type: 'Nothing'        };      }    },    Number: function(it){      return {        type: 'Just',        value: +it      };    },    Int: function(it){      return {        type: 'Just',        value: +it      };    },    Float: function(it){      return {        type: 'Just',        value: +it      };    },    Date: function(value, options){      var that;      if (that = /^\#([\s\S]*)\#$/.exec(value)) {        return {          type: 'Just',          value: new Date(+that[1] || that[1])        };      } else if (options.explicit) {        return {          type: 'Nothing'        };      } else {        return {          type: 'Just',          value: new Date(+value || value)        };      }    },    RegExp: function(value, options){      var that;      if (that = /^\/([\s\S]*)\/([gimy]*)$/.exec(value)) {        return {          type: 'Just',          value: new RegExp(that[1], that[2])        };      } else if (options.explicit) {        return {          type: 'Nothing'        };      } else {        return {          type: 'Just',          value: new RegExp(value)        };      }    },    Array: function(value, options){      return castArray(value, {        of: [{          type: '*'        }]      }, options);    },    Object: function(value, options){      return castFields(value, {        of: {}      }, options);    },    String: function(it){      var that;      if (toString$.call(it).slice(8, -1) !== 'String') {        return {          type: 'Nothing'        };      }      if (that = it.match(/^'([\s\S]*)'$/)) {        return {          type: 'Just',          value: that[1].replace(/\\'/g, "'")        };      } else if (that = it.match(/^"([\s\S]*)"$/)) {        return {          type: 'Just',          value: that[1].replace(/\\"/g, '"')        };      } else {        return {          type: 'Just',          value: it        };      }    }  };  function castArray(node, type, options){    var typeOf, element;    if (toString$.call(node).slice(8, -1) !== 'Array') {      return {        type: 'Nothing'      };    }    typeOf = type.of;    return {      type: 'Just',      value: (function(){        var i$, ref$, len$, results$ = [];        for (i$ = 0, len$ = (ref$ = node).length; i$ < len$; ++i$) {          element = ref$[i$];          results$.push(typesCast(element, typeOf, options));        }        return results$;      }())    };  }  function castTuple(node, type, options){    var result, i, i$, ref$, len$, types, cast;    if (toString$.call(node).slice(8, -1) !== 'Array') {      return {        type: 'Nothing'      };    }    result = [];    i = 0;    for (i$ = 0, len$ = (ref$ = type.of).length; i$ < len$; ++i$) {      types = ref$[i$];      cast = typesCast(node[i], types, options);      if (toString$.call(cast).slice(8, -1) !== 'Undefined') {        result.push(cast);      }      i++;    }    if (node.length <= i) {      return {        type: 'Just',        value: result      };    } else {      return {        type: 'Nothing'      };    }  }  function castFields(node, type, options){    var typeOf, key, value;    if (toString$.call(node).slice(8, -1) !== 'Object') {      return {        type: 'Nothing'      };    }    typeOf = type.of;    return {      type: 'Just',      value: (function(){        var ref$, resultObj$ = {};        for (key in ref$ = node) {          value = ref$[key];          resultObj$[typesCast(key, [{            type: 'String'          }], options)] = typesCast(value, typeOf[key] || [{            type: '*'          }], options);        }        return resultObj$;      }())    };  }  function typeCast(node, typeObj, options){    var type, structure, castFunc, ref$;    type = typeObj.type, structure = typeObj.structure;    if (type) {      castFunc = ((ref$ = options.customTypes[type]) != null ? ref$.cast : void 8) || types[type];      if (!castFunc) {        throw new Error("Type not defined: " + type + ".");      }      return castFunc(node, options, typesCast);    } else {      switch (structure) {      case 'array':        return castArray(node, typeObj, options);      case 'tuple':        return castTuple(node, typeObj, options);      case 'fields':        return castFields(node, typeObj, options);      }    }  }  function typesCast(node, types, options){    var i$, len$, type, ref$, valueType, value;    for (i$ = 0, len$ = types.length; i$ < len$; ++i$) {      type = types[i$];      ref$ = typeCast(node, type, options), valueType = ref$.type, value = ref$.value;      if (valueType === 'Nothing') {        continue;      }      if (parsedTypeCheck([type], value, {        customTypes: options.customTypes      })) {        return value;      }    }    throw new Error("Value " + JSON.stringify(node) + " does not type check against " + JSON.stringify(types) + ".");  }  module.exports = typesCast;}).call(this);
 |