|
|
|
'use strict';
|
|
|
|
|
|
|
|
const binding = process.binding('util');
|
|
|
|
const prefix = `(${process.release.name}:${process.pid}) `;
|
|
|
|
const noDeprecation = process.noDeprecation;
|
|
|
|
|
|
|
|
exports.getHiddenValue = binding.getHiddenValue;
|
|
|
|
exports.setHiddenValue = binding.setHiddenValue;
|
|
|
|
|
|
|
|
// All the internal deprecations have to use this function only, as this will
|
|
|
|
// prepend the prefix to the actual message.
|
|
|
|
exports.deprecate = function(fn, msg) {
|
|
|
|
return exports._deprecate(fn, msg);
|
|
|
|
};
|
|
|
|
|
|
|
|
// All the internal deprecations have to use this function only, as this will
|
|
|
|
// prepend the prefix to the actual message.
|
|
|
|
exports.printDeprecationMessage = function(msg, warned, ctor) {
|
|
|
|
if (warned || noDeprecation)
|
|
|
|
return true;
|
|
|
|
process.emitWarning(msg, 'DeprecationWarning',
|
|
|
|
ctor || exports.printDeprecationMessage);
|
|
|
|
return true;
|
|
|
|
};
|
|
|
|
|
|
|
|
exports.error = function(msg) {
|
|
|
|
const fmt = `${prefix}${msg}`;
|
|
|
|
if (arguments.length > 1) {
|
|
|
|
const args = new Array(arguments.length);
|
|
|
|
args[0] = fmt;
|
|
|
|
for (let i = 1; i < arguments.length; ++i)
|
|
|
|
args[i] = arguments[i];
|
|
|
|
console.error.apply(console, args);
|
|
|
|
} else {
|
|
|
|
console.error(fmt);
|
|
|
|
}
|
|
|
|
};
|
|
|
|
|
|
|
|
exports.trace = function(msg) {
|
|
|
|
console.trace(`${prefix}${msg}`);
|
|
|
|
};
|
|
|
|
|
|
|
|
// Mark that a method should not be used.
|
|
|
|
// Returns a modified function which warns once by default.
|
|
|
|
// If --no-deprecation is set, then it is a no-op.
|
|
|
|
exports._deprecate = function(fn, msg) {
|
|
|
|
// Allow for deprecating things in the process of starting up.
|
|
|
|
if (global.process === undefined) {
|
|
|
|
return function() {
|
|
|
|
return exports._deprecate(fn, msg).apply(this, arguments);
|
|
|
|
};
|
|
|
|
}
|
|
|
|
|
|
|
|
if (process.noDeprecation === true) {
|
|
|
|
return fn;
|
|
|
|
}
|
|
|
|
|
|
|
|
var warned = false;
|
|
|
|
function deprecated() {
|
|
|
|
warned = exports.printDeprecationMessage(msg, warned, deprecated);
|
|
|
|
return fn.apply(this, arguments);
|
|
|
|
}
|
|
|
|
|
|
|
|
return deprecated;
|
|
|
|
};
|
|
|
|
|
|
|
|
exports.decorateErrorStack = function decorateErrorStack(err) {
|
|
|
|
if (!(exports.isError(err) && err.stack) ||
|
|
|
|
exports.getHiddenValue(err, 'node:decorated') === true)
|
|
|
|
return;
|
|
|
|
|
|
|
|
const arrow = exports.getHiddenValue(err, 'node:arrowMessage');
|
|
|
|
|
|
|
|
if (arrow) {
|
|
|
|
err.stack = arrow + err.stack;
|
|
|
|
exports.setHiddenValue(err, 'node:decorated', true);
|
|
|
|
}
|
|
|
|
};
|
|
|
|
|
|
|
|
exports.isError = function isError(e) {
|
|
|
|
return exports.objectToString(e) === '[object Error]' || e instanceof Error;
|
|
|
|
};
|
|
|
|
|
|
|
|
exports.objectToString = function objectToString(o) {
|
|
|
|
return Object.prototype.toString.call(o);
|
|
|
|
};
|
|
|
|
|
|
|
|
const noCrypto = !process.versions.openssl;
|
|
|
|
exports.assertCrypto = function(exports) {
|
|
|
|
if (noCrypto)
|
|
|
|
throw new Error('Node.js is not compiled with openssl crypto support');
|
|
|
|
};
|