UNPKG

casting

Version:

Tiny type casting library for node.js and the browser.

1 lines 3.04 kB
!function(e){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=e();else if("function"==typeof define&&define.amd)define([],e);else{var f;"undefined"!=typeof window?f=window:"undefined"!=typeof global?f=global:"undefined"!=typeof self&&(f=self),f.Casting=e()}}(function(){var define,module,exports;return function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);throw new Error("Cannot find module '"+o+"'")}var f=n[o]={exports:{}};t[o][0].call(f.exports,function(e){var n=t[o][1][e];return s(n?n:e)},f,f.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s}({1:[function(_dereq_,module,exports){(function(global){"use strict";exports.casters=[];exports.define=function(name,Constructor,caster){if(!caster){caster=function(value){return new Constructor(value)}}exports.casters.push([name,Constructor,caster]);return exports};exports.get=function(type){var casters=exports.casters,total=casters.length,item,i;for(i=0;i<total;i++){item=casters[i];if(type===item[0]||type===item[1]){return item[2]}}return function(value){if(typeof type==="string"){type=global[type]}if(!(value instanceof type)){return new type(value)}else{return value}}};exports.cast=function(type,value){var caster=exports.get(type);if(!caster){throw new TypeError("Cannot cast to unknown type: "+type)}return caster(value)};exports.forDescriptors=function(descriptors){var names=Object.keys(descriptors),total=names.length,lines=[],casters={},accessor,descriptor,name,i;for(i=0;i<total;i++){name=names[i];descriptor=descriptors[name];if(/^([\w|_|$]+)$/.test(name)){accessor="."+name}else{accessor='["'+name+'"]'}if(descriptor.type){casters[name]=exports.get(descriptor.type);lines.push("if (object"+accessor+" != null) {"," object"+accessor+" = casters"+accessor+"(object"+accessor+");","}")}}lines.push("return object;");return new Function("casters","object",lines.join("\n")).bind(undefined,casters)};exports.forDescriptor=function(descriptor){if(descriptor.type){return exports.get(descriptor.type)}else{return function(a){return a}}};exports.define("array",Array,function(value){if(!Array.isArray(value)){return[value]}else{return value}});exports.define("string",String,function(value){return""+value});exports.define("number",Number,function(value){return+value});exports.define("boolean",Boolean,function(value){return+value?true:false});exports.define("regexp",RegExp,function(value){if(value instanceof RegExp){return value}else if(typeof value==="string"){return new RegExp(value)}else{throw new TypeError("Cannot cast value to RegExp")}});exports.define("object",Object,function(value){return Object(value)});exports.define("date",Date,function(value){if(!(value instanceof Date)){value=new Date(value)}if(isNaN(value.valueOf())){throw new TypeError("Invalid date value")}return value})}).call(this,typeof self!=="undefined"?self:typeof window!=="undefined"?window:{})},{}]},{},[1])(1)});