magix-combine
Version:
合并Magix View的html,js,css成一个js文件,并检测html,js,css中可能存在的问题
77 lines • 2.34 kB
JavaScript
let MOVE_LEFT = '\x1b[1000D';
let MOVE_UP = '\x1b[1A';
let CLEAR_LINE = '\x1b[0K';
let HIDE_CURSOR = '\x1b[?25l';
let SHOW_CURSOR = '\x1b[?25h';
let stringWidth = require('string-width');
let getLogger = stream => {
let str = '';
let prevLineCount = 0;
let last = '';
let oldWrite = stream.write;
let logger = {
log() {
this.clear();
let nextStr = [].join.call(arguments, ' ');
str = HIDE_CURSOR;
str += nextStr;
stream.write(str);
// How many lines to remove on next clear screen
let prevLines = nextStr.split('\n');
prevLineCount = 0;
for (let i = 0; i < prevLines.length; i++) {
prevLineCount += Math.ceil(stringWidth(prevLines[i]) / stream.columns) || 1;
}
last = str;
str = '';
},
ever() {
this.clear();
let nextStr = [].join.call(arguments, ' ');
stream.write(nextStr + '\n');
if (last) {
this.log(last);
}
},
hook() {
stream.write = (args, fn) => {
if (arguments.length <= 2) {
if (fn) {
logger.clear();
oldWrite.call(stream, args, fn);
if (last) {
logger.log(last);
}
} else {
oldWrite.call(stream, args);
}
} else {
oldWrite.call(stream, args, fn, arguments[2]);
}
};
},
unhook() {
stream.write = oldWrite;
},
clear(clearLast) {
if (clearLast) {
last = '';
}
str = SHOW_CURSOR;
// Clear screen
for (let i = 0; i < prevLineCount; i++) {
str += MOVE_LEFT + CLEAR_LINE + (i < prevLineCount - 1 ? MOVE_UP : '');
}
prevLineCount = 0;
stream.write(str);
str = '';
}
};
process.on('SIGINT', () => {
logger.clear();
logger.unhook();
process.exit(0);
});
return logger;
};
module.exports = getLogger(process.stdout);