diff --git a/src/node.js b/src/node.js index b924bd1a00..8ca0da48d0 100644 --- a/src/node.js +++ b/src/node.js @@ -569,21 +569,30 @@ NativeModule._cache[this.id] = this; }; + // Wrap a core module's method in a wrapper that will warn on first use + // and then return the result of invoking the original function. After + // first being called the original method is restored. NativeModule.prototype.deprecate = function(method, message) { var original = this.exports[method]; var self = this; + var warned = false; + message = message || ''; Object.defineProperty(this.exports, method, { enumerable: false, value: function() { - message = self.id + '.' + method + ' is deprecated. ' + (message || ''); + if (!warned) { + warned = true; + message = self.id + '.' + method + ' is deprecated. ' + message; - if ((new RegExp('\\b' + self.id + '\\b')).test(process.env.NODE_DEBUG)) - console.trace(message); - else - console.error(message); + var moduleIdCheck = new RegExp('\\b' + self.id + '\\b'); + if (moduleIdCheck.test(process.env.NODE_DEBUG)) + console.trace(message); + else + console.error(message); - self.exports[method] = original; + self.exports[method] = original; + } return original.apply(this, arguments); } });