78 lines
2.1 KiB
JavaScript
78 lines
2.1 KiB
JavaScript
var util = require('util'),
|
|
EventEmitter = require('events').EventEmitter,
|
|
utils = {};
|
|
|
|
utils.table = function(fields) {
|
|
if (!fields[0]) return;
|
|
var lengths = fields[0].map(function(val, i) {
|
|
return Math.max.apply(Math, fields.map(function(field) {
|
|
if (field[i] === undefined) field[i] = '';
|
|
return field[i].toString().length;
|
|
}));
|
|
});
|
|
fields.forEach(function(field) {
|
|
console.warn(
|
|
field.map(function(val, i) {
|
|
if (i >= lengths.length - 1) return val;
|
|
return val + Array(lengths[i] - val.toString().length + 1).join(' ');
|
|
}).join(' ')
|
|
);
|
|
});
|
|
};
|
|
|
|
utils.getMimeType = function(data) {
|
|
if (data[0] === 0x89 && data[1] === 0x50 && data[2] === 0x4E &&
|
|
data[3] === 0x47 && data[4] === 0x0D && data[5] === 0x0A &&
|
|
data[6] === 0x1A && data[7] === 0x0A) {
|
|
return 'image/png';
|
|
} else if (data[0] === 0xFF && data[1] === 0xD8 &&
|
|
data[data.length - 2] === 0xFF && data[data.length - 1] === 0xD9) {
|
|
return 'image/jpeg';
|
|
} else if (data[0] === 0x47 && data[1] === 0x49 && data[2] === 0x46 &&
|
|
data[3] === 0x38 && (data[4] === 0x39 || data[4] === 0x37) &&
|
|
data[5] === 0x61) {
|
|
return 'image/gif';
|
|
}
|
|
};
|
|
|
|
function Queue(callback, concurrency) {
|
|
this.callback = callback;
|
|
this.concurrency = concurrency || 10;
|
|
this.next = this.next.bind(this);
|
|
this.invoke = this.invoke.bind(this);
|
|
this.queue = [];
|
|
this.running = 0;
|
|
}
|
|
util.inherits(Queue, EventEmitter);
|
|
|
|
Queue.prototype.add = function(item) {
|
|
this.queue.push(item);
|
|
if (this.running < this.concurrency) {
|
|
this.running++;
|
|
this.next();
|
|
}
|
|
};
|
|
|
|
Queue.prototype.invoke = function() {
|
|
if (this.queue.length) {
|
|
this.callback(this.queue.shift(), this.next);
|
|
} else {
|
|
this.next();
|
|
}
|
|
};
|
|
|
|
Queue.prototype.next = function(err) {
|
|
if (this.queue.length) {
|
|
process.nextTick(this.invoke);
|
|
} else {
|
|
this.running--;
|
|
if (!this.running) {
|
|
this.emit('empty');
|
|
}
|
|
}
|
|
};
|
|
|
|
utils.Queue = Queue;
|
|
|
|
module.exports = utils;
|