mirror of
https://github.com/bower/bower.git
synced 2026-02-11 14:34:58 -05:00
94 lines
2.3 KiB
JavaScript
94 lines
2.3 KiB
JavaScript
var mout = require('mout');
|
||
|
||
var sizes = {
|
||
tag: 10, // Tag max chars
|
||
label: 23, // Label max chars
|
||
sumup: 5 // Amount to sum when the label exceeds
|
||
};
|
||
var tagColors = {
|
||
'warn': 'yellow',
|
||
'error': 'red',
|
||
'default': 'cyan'
|
||
};
|
||
|
||
function isCompact() {
|
||
return process.stdout.columns < 120;
|
||
}
|
||
|
||
function uncolor(str) {
|
||
return str.replace(/\x1B\[\d+m/g, '');
|
||
}
|
||
|
||
function renderTagPlusLabel(data) {
|
||
var label;
|
||
var length;
|
||
var nrSpaces;
|
||
var tag = data.tag;
|
||
var tagColor = tagColors[data.level] || tagColors['default'];
|
||
|
||
// If there's not enough space, print only the tag
|
||
if (isCompact()) {
|
||
return mout.string.rpad(tag, sizes.tag)[tagColor];
|
||
}
|
||
|
||
label = data.origin + '#' + data.endpoint.target;
|
||
length = tag.length + label.length + 1;
|
||
nrSpaces = sizes.tag + sizes.label - length;
|
||
|
||
// Ensure at least one space between the label and the tag
|
||
if (nrSpaces < 1) {
|
||
sizes.label = label.length + sizes.sumup;
|
||
nrSpaces = sizes.tag + sizes.label - length;
|
||
}
|
||
|
||
|
||
return label.green + mout.string.repeat(' ', nrSpaces) + tag[tagColor];
|
||
}
|
||
|
||
// -------------------------
|
||
|
||
var colorful = {
|
||
begin: function () {},
|
||
end: function () {},
|
||
error: function (err) {
|
||
var str;
|
||
|
||
str = 'bower ' + renderTagPlusLabel(err) + ' ' + (err.code ? err.code + ' ,' : '') + err.message + '\n';
|
||
|
||
// Check if additional details were provided
|
||
if (err.details) {
|
||
str += err.details + '\n';
|
||
}
|
||
|
||
// Print stack
|
||
str += '\n' + err.stack + '\n';
|
||
|
||
this._write(process.stderr, str);
|
||
},
|
||
data: function (data) {
|
||
data.data = data.data || '';
|
||
|
||
this._write(process.stdout, 'bower ' + renderTagPlusLabel(data) + ' ' + data.data + '\n');
|
||
},
|
||
checkout: function (data) {
|
||
if (isCompact()) {
|
||
data.data = data.origin + '#' + data.data;
|
||
}
|
||
|
||
this.data(data);
|
||
},
|
||
_write: function (channel, str) {
|
||
channel.write(str);
|
||
}
|
||
};
|
||
|
||
// The colorless variant simply removes the colors from the write method
|
||
var colorless = mout.object.mixIn({}, colorful, {
|
||
_write: function (channel, str) {
|
||
channel.write(uncolor(str));
|
||
}
|
||
});
|
||
|
||
module.exports.colorful = colorful;
|
||
module.exports.colorless = colorless;
|