var types = require(“../lib/types”); var Type = types.Type; var builtin = types.builtInTypes; var isNumber = builtin.number;
// An example of constructing a new type with arbitrary constraints from // an existing type. exports.geq = function(than) {
return new Type(function(value) { return isNumber.check(value) && value >= than; }, isNumber + " >= " + than);
};
// Default value-returning functions that may optionally be passed as a // third argument to Def.prototype.field. exports.defaults = {
// Functions were used because (among other reasons) that's the most // elegant way to allow for the emptyArray one always to give a new // array instance. "null": function() { return null }, "emptyArray": function() { return [] }, "false": function() { return false }, "true": function() { return true }, "undefined": function() {}
};
var naiveIsPrimitive = Type.or(
builtin.string, builtin.number, builtin.boolean, builtin.null, builtin.undefined
);
exports.isPrimitive = new Type(function(value) {
if (value === null) return true; var type = typeof value; return !(type === "object" || type === "function");
}, naiveIsPrimitive.toString());