A suite to track Project Diva score statistics and ratings / D4DJ event data.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
projectdivar/server/node_modules/spex/lib/utils/static.js

76 lines
2.1 KiB

const npm = {
stream: require('stream'),
util: require('util')
};
/////////////////////////////////////
// Checks if the value is a promise;
function isPromise(value) {
return value && typeof value.then === 'function';
}
////////////////////////////////////////////
// Checks object for being a readable stream;
function isReadableStream(obj) {
return obj instanceof npm.stream.Stream &&
typeof obj._read === 'function' &&
typeof obj._readableState === 'object';
}
////////////////////////////////////////////////////////////
// Sets an object property as read-only and non-enumerable.
function extend(obj, name, value) {
Object.defineProperty(obj, name, {
value: value,
configurable: false,
enumerable: false,
writable: false
});
}
///////////////////////////////////////////
// Returns a space gap for console output;
function messageGap(level) {
return ' '.repeat(level * 4);
}
function formatError(error, level) {
const names = ['BatchError', 'PageError', 'SequenceError'];
let msg = npm.util.inspect(error);
if (error instanceof Error) {
if (names.indexOf(error.name) === -1) {
const gap = messageGap(level);
msg = msg.split('\n').map((line, index) => {
return (index ? gap : '') + line;
}).join('\n');
} else {
msg = error.toString(level);
}
}
return msg;
}
////////////////////////////////////////////////////////
// Adds prototype inspection, with support of the newer
// Custom Inspection, which was added in Node.js 6.x
function addInspection(type, cb) {
// istanbul ignore next;
if (npm.util.inspect.custom) {
// Custom inspection is supported:
type.prototype[npm.util.inspect.custom] = cb;
} else {
// Use classic inspection:
type.prototype.inspect = cb;
}
}
module.exports = {
addInspection: addInspection,
formatError: formatError,
isPromise: isPromise,
isReadableStream: isReadableStream,
messageGap: messageGap,
extend: extend
};