From 775ef644cc9c4a0241098161e242fa6f24c42216 Mon Sep 17 00:00:00 2001 From: "Ian W. Remmel" Date: Sun, 8 Feb 2015 18:08:16 -0800 Subject: [PATCH 1/2] use named function expressions instead of arguments.callee --- lib/checks.js | 20 +++++++++++--------- lib/errors.js | 3 ++- 2 files changed, 13 insertions(+), 10 deletions(-) diff --git a/lib/checks.js b/lib/checks.js index 6f5123d..6a63e61 100644 --- a/lib/checks.js +++ b/lib/checks.js @@ -2,12 +2,14 @@ * Copyright (c) 2012 Mathieu Turcotte * Licensed under the MIT license. */ +'use strict'; var util = require('util'); var errors = module.exports = require('./errors'); function failCheck(ExceptionConstructor, callee, messageFormat, formatArgs) { + /* jshint validthis: true */ messageFormat = messageFormat || ''; var message = util.format.apply(this, [messageFormat].concat(formatArgs)); var error = new ExceptionConstructor(message); @@ -23,37 +25,37 @@ function failStateCheck(callee, message, formatArgs) { failCheck(errors.IllegalStateError, callee, message, formatArgs); } -module.exports.checkArgument = function(value, message) { +module.exports.checkArgument = function checkArgument(value, message) { if (!value) { - failArgumentCheck(arguments.callee, message, + failArgumentCheck(checkArgument, message, Array.prototype.slice.call(arguments, 2)); } }; -module.exports.checkState = function(value, message) { +module.exports.checkState = function checkState(value, message) { if (!value) { - failStateCheck(arguments.callee, message, + failStateCheck(checkState, message, Array.prototype.slice.call(arguments, 2)); } }; -module.exports.checkIsDef = function(value, message) { +module.exports.checkIsDef = function checkIsDef(value, message) { if (value !== undefined) { return value; } - failArgumentCheck(arguments.callee, message || + failArgumentCheck(checkIsDef, message || 'Expected value to be defined but was undefined.', Array.prototype.slice.call(arguments, 2)); }; -module.exports.checkIsDefAndNotNull = function(value, message) { +module.exports.checkIsDefAndNotNull = function checkIsDefAndNotNull(value, message) { // Note that undefined == null. if (value != null) { return value; } - failArgumentCheck(arguments.callee, message || + failArgumentCheck(checkIsDefAndNotNull, message || 'Expected value to be defined and not null but got "' + typeOf(value) + '".', Array.prototype.slice.call(arguments, 2)); }; @@ -80,7 +82,7 @@ function typeCheck(expect) { return value; } - failArgumentCheck(arguments.callee, message || + failArgumentCheck(typeCheck, message || 'Expected "' + expect + '" but got "' + type + '".', Array.prototype.slice.call(arguments, 2)); }; diff --git a/lib/errors.js b/lib/errors.js index dee7e7c..8d5f6d8 100644 --- a/lib/errors.js +++ b/lib/errors.js @@ -2,6 +2,7 @@ * Copyright (c) 2012 Mathieu Turcotte * Licensed under the MIT license. */ + 'use strict'; var util = require('util'); @@ -22,4 +23,4 @@ util.inherits(IllegalStateError, Error); IllegalStateError.prototype.name = 'IllegalStateError'; module.exports.IllegalStateError = IllegalStateError; -module.exports.IllegalArgumentError = IllegalArgumentError; \ No newline at end of file +module.exports.IllegalArgumentError = IllegalArgumentError; From 8179d60f59a4229465ce73f63c80a545eb120233 Mon Sep 17 00:00:00 2001 From: "Ian W. Remmel" Date: Sat, 17 Oct 2015 15:21:29 -0700 Subject: [PATCH 2/2] respond to PR comments --- lib/checks.js | 42 ++++++++++++++++++++++++------------------ 1 file changed, 24 insertions(+), 18 deletions(-) diff --git a/lib/checks.js b/lib/checks.js index 6a63e61..9845fc0 100644 --- a/lib/checks.js +++ b/lib/checks.js @@ -2,6 +2,7 @@ * Copyright (c) 2012 Mathieu Turcotte * Licensed under the MIT license. */ + 'use strict'; var util = require('util'); @@ -9,9 +10,8 @@ var util = require('util'); var errors = module.exports = require('./errors'); function failCheck(ExceptionConstructor, callee, messageFormat, formatArgs) { - /* jshint validthis: true */ messageFormat = messageFormat || ''; - var message = util.format.apply(this, [messageFormat].concat(formatArgs)); + var message = util.format.apply(util, [messageFormat].concat(formatArgs)); var error = new ExceptionConstructor(message); Error.captureStackTrace(error, callee); throw error; @@ -25,21 +25,21 @@ function failStateCheck(callee, message, formatArgs) { failCheck(errors.IllegalStateError, callee, message, formatArgs); } -module.exports.checkArgument = function checkArgument(value, message) { +function checkArgument(value, message) { if (!value) { failArgumentCheck(checkArgument, message, Array.prototype.slice.call(arguments, 2)); } -}; +} -module.exports.checkState = function checkState(value, message) { +function checkState(value, message) { if (!value) { failStateCheck(checkState, message, Array.prototype.slice.call(arguments, 2)); } -}; +} -module.exports.checkIsDef = function checkIsDef(value, message) { +function checkIsDef(value, message) { if (value !== undefined) { return value; } @@ -47,9 +47,9 @@ module.exports.checkIsDef = function checkIsDef(value, message) { failArgumentCheck(checkIsDef, message || 'Expected value to be defined but was undefined.', Array.prototype.slice.call(arguments, 2)); -}; +} -module.exports.checkIsDefAndNotNull = function checkIsDefAndNotNull(value, message) { +function checkIsDefAndNotNull(value, message) { // Note that undefined == null. if (value != null) { return value; @@ -58,7 +58,7 @@ module.exports.checkIsDefAndNotNull = function checkIsDefAndNotNull(value, messa failArgumentCheck(checkIsDefAndNotNull, 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. @@ -75,22 +75,28 @@ function typeOf(value) { } function typeCheck(expect) { - return function(value, message) { + return function typeChecker(value, message) { var type = typeOf(value); if (type == expect) { return value; } - failArgumentCheck(typeCheck, message || + failArgumentCheck(typeChecker, 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'); +module.exports = { + checkArgument: checkArgument, + checkState: checkState, + checkIsDef: checkIsDef, + checkIsDefAndNotNull: checkIsDefAndNotNull, + checkIsString: typeCheck('string'), + checkIsArray: typeCheck('array'), + checkIsNumber: typeCheck('number'), + checkIsBoolean: typeCheck('boolean'), + checkIsFunction: typeCheck('function'), + checkIsObject: typeCheck('object') +};