12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394 |
- /*
- * 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');
|