import extend from './extend';
|
import { hooks } from './hooks';
|
import isUndefined from './is-undefined';
|
|
function warn(msg) {
|
if (hooks.suppressDeprecationWarnings === false &&
|
(typeof console !== 'undefined') && console.warn) {
|
console.warn('Deprecation warning: ' + msg);
|
}
|
}
|
|
export function deprecate(msg, fn) {
|
var firstTime = true;
|
|
return extend(function () {
|
if (hooks.deprecationHandler != null) {
|
hooks.deprecationHandler(null, msg);
|
}
|
if (firstTime) {
|
var args = [];
|
var arg;
|
for (var i = 0; i < arguments.length; i++) {
|
arg = '';
|
if (typeof arguments[i] === 'object') {
|
arg += '\n[' + i + '] ';
|
for (var key in arguments[0]) {
|
arg += key + ': ' + arguments[0][key] + ', ';
|
}
|
arg = arg.slice(0, -2); // Remove trailing comma and space
|
} else {
|
arg = arguments[i];
|
}
|
args.push(arg);
|
}
|
warn(msg + '\nArguments: ' + Array.prototype.slice.call(args).join('') + '\n' + (new Error()).stack);
|
firstTime = false;
|
}
|
return fn.apply(this, arguments);
|
}, fn);
|
}
|
|
var deprecations = {};
|
|
export function deprecateSimple(name, msg) {
|
if (hooks.deprecationHandler != null) {
|
hooks.deprecationHandler(name, msg);
|
}
|
if (!deprecations[name]) {
|
warn(msg);
|
deprecations[name] = true;
|
}
|
}
|
|
hooks.suppressDeprecationWarnings = false;
|
hooks.deprecationHandler = null;
|