123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128 |
- // Generated by LiveScript 1.6.0
- (function(){
- var ref$, any, all, isItNaN, types, defaultType, toString$ = {}.toString;
- ref$ = require('prelude-ls'), any = ref$.any, all = ref$.all, isItNaN = ref$.isItNaN;
- types = {
- Number: {
- typeOf: 'Number',
- validate: function(it){
- return !isItNaN(it);
- }
- },
- NaN: {
- typeOf: 'Number',
- validate: isItNaN
- },
- Int: {
- typeOf: 'Number',
- validate: function(it){
- return !isItNaN(it) && it % 1 === 0;
- }
- },
- Float: {
- typeOf: 'Number',
- validate: function(it){
- return !isItNaN(it);
- }
- },
- Date: {
- typeOf: 'Date',
- validate: function(it){
- return !isItNaN(it.getTime());
- }
- }
- };
- defaultType = {
- array: 'Array',
- tuple: 'Array'
- };
- function checkArray(input, type, options){
- return all(function(it){
- return checkMultiple(it, type.of, options);
- }, input);
- }
- function checkTuple(input, type, options){
- var i, i$, ref$, len$, types;
- i = 0;
- for (i$ = 0, len$ = (ref$ = type.of).length; i$ < len$; ++i$) {
- types = ref$[i$];
- if (!checkMultiple(input[i], types, options)) {
- return false;
- }
- i++;
- }
- return input.length <= i;
- }
- function checkFields(input, type, options){
- var inputKeys, numInputKeys, k, numOfKeys, key, ref$, types;
- inputKeys = {};
- numInputKeys = 0;
- for (k in input) {
- inputKeys[k] = true;
- numInputKeys++;
- }
- numOfKeys = 0;
- for (key in ref$ = type.of) {
- types = ref$[key];
- if (!checkMultiple(input[key], types, options)) {
- return false;
- }
- if (inputKeys[key]) {
- numOfKeys++;
- }
- }
- return type.subset || numInputKeys === numOfKeys;
- }
- function checkStructure(input, type, options){
- if (!(input instanceof Object)) {
- return false;
- }
- switch (type.structure) {
- case 'fields':
- return checkFields(input, type, options);
- case 'array':
- return checkArray(input, type, options);
- case 'tuple':
- return checkTuple(input, type, options);
- }
- }
- function check(input, typeObj, options){
- var type, structure, setting, that;
- type = typeObj.type, structure = typeObj.structure;
- if (type) {
- if (type === '*') {
- return true;
- }
- setting = options.customTypes[type] || types[type];
- if (setting) {
- return (setting.typeOf === void 8 || setting.typeOf === toString$.call(input).slice(8, -1)) && setting.validate(input);
- } else {
- return type === toString$.call(input).slice(8, -1) && (!structure || checkStructure(input, typeObj, options));
- }
- } else if (structure) {
- if (that = defaultType[structure]) {
- if (that !== toString$.call(input).slice(8, -1)) {
- return false;
- }
- }
- return checkStructure(input, typeObj, options);
- } else {
- throw new Error("No type defined. Input: " + input + ".");
- }
- }
- function checkMultiple(input, types, options){
- if (toString$.call(types).slice(8, -1) !== 'Array') {
- throw new Error("Types must be in an array. Input: " + input + ".");
- }
- return any(function(it){
- return check(input, it, options);
- }, types);
- }
- module.exports = function(parsedType, input, options){
- options == null && (options = {});
- if (options.customTypes == null) {
- options.customTypes = {};
- }
- return checkMultiple(input, parsedType, options);
- };
- }).call(this);
|