linx-simulator2/node_modules/precond/lib/checks.js
2019-09-18 11:11:16 +03:00

95 lines
2.7 KiB
JavaScript

/*
* Copyright (c) 2012 Mathieu Turcotte
* Licensed under the MIT license.
*/
var util = require('util');
var errors = module.exports = require('./errors');
function failCheck(ExceptionConstructor, callee, messageFormat, formatArgs) {
messageFormat = messageFormat || '';
var message = util.format.apply(this, [messageFormat].concat(formatArgs));
var error = new ExceptionConstructor(message);
Error.captureStackTrace(error, callee);
throw error;
}
function failArgumentCheck(callee, message, formatArgs) {
failCheck(errors.IllegalArgumentError, callee, message, formatArgs);
}
function failStateCheck(callee, message, formatArgs) {
failCheck(errors.IllegalStateError, callee, message, formatArgs);
}
module.exports.checkArgument = function(value, message) {
if (!value) {
failArgumentCheck(arguments.callee, message,
Array.prototype.slice.call(arguments, 2));
}
};
module.exports.checkState = function(value, message) {
if (!value) {
failStateCheck(arguments.callee, message,
Array.prototype.slice.call(arguments, 2));
}
};
module.exports.checkIsDef = function(value, message) {
if (value !== undefined) {
return value;
}
failArgumentCheck(arguments.callee, message ||
'Expected value to be defined but was undefined.',
Array.prototype.slice.call(arguments, 2));
};
module.exports.checkIsDefAndNotNull = function(value, message) {
// Note that undefined == null.
if (value != null) {
return value;
}
failArgumentCheck(arguments.callee, message ||
'Expected value to be defined and not null but got "' +
typeOf(value) + '".', Array.prototype.slice.call(arguments, 2));
};
// Fixed version of the typeOf operator which returns 'null' for null values
// and 'array' for arrays.
function typeOf(value) {
var s = typeof value;
if (s == 'object') {
if (!value) {
return 'null';
} else if (value instanceof Array) {
return 'array';
}
}
return s;
}
function typeCheck(expect) {
return function(value, message) {
var type = typeOf(value);
if (type == expect) {
return value;
}
failArgumentCheck(arguments.callee, message ||
'Expected "' + expect + '" but got "' + type + '".',
Array.prototype.slice.call(arguments, 2));
};
}
module.exports.checkIsString = typeCheck('string');
module.exports.checkIsArray = typeCheck('array');
module.exports.checkIsNumber = typeCheck('number');
module.exports.checkIsBoolean = typeCheck('boolean');
module.exports.checkIsFunction = typeCheck('function');
module.exports.checkIsObject = typeCheck('object');