back to devpro   download
// (C) Andrea Giammarchi [www.3site.eu] - MIT Style License
function Strict(returnValue, callback, arguments, name){
	return	Strict.debug ? Strict.returnValue(returnValue, Strict.apply(callback, arguments, name), name) : callback
};
Strict.apply = function(callback, args, name){
	return	Strict.debug ? function(){
		for(var	i = 0; i < arguments.length ; i++){
			if(!Strict.check(arguments[i], args[i]))
				throw new Error("[".concat(name || callback.name, "] Strict arguments ", i, " Error"));
		};
		return callback.apply(this, arguments)
	} : callback
};
Strict.call = function(){
	var	name = (arguments = [].slice.call(arguments)).length,
		callback = arguments.shift();
	return	Strict.debug ? Strict.apply(callback, arguments, Strict.check(arguments[name-2], "".constructor) ? arguments.pop() : Strict.Void) : callback
};
Strict.check = function(arguments, constructor){
	var	returnValue = constructor === Strict.Void;
	return	arguments === Strict.Void ? returnValue : (arguments === null ? !returnValue : (returnValue ? false : (Strict.object ? (typeof arguments === "object" ? arguments instanceof constructor : arguments.constructor === constructor) : (constructor === Object ? true : (arguments instanceof constructor || arguments.constructor === constructor)))))
};
Strict.returnValue = function(args, callback, name){
	return	Strict.debug ? function(){
		var	returnValue = callback.apply(this, arguments);
		if(!Strict.check(returnValue, args))
			throw new Error("[".concat(name || callback.name, "] Strict returnValue Error"));
		return returnValue
	} : callback
};
Strict.debug = true;			// set false on production enviroment to increase performances removing Strict checks
Strict.object = false;			// set true to check primitives too
var	Void = Strict.Void = Strict.Void;
back to devpro   download
Creative Commons License