UNPKG

monorepo-run

Version:

Run scripts in monorepo with colors, streaming and separated panes

59 lines (49 loc) 1.61 kB
const ansiEscapes = require('ansi-escapes') const ESC = '\u001B[' const escapeSeqReg = /[-/\\^$*+?.()|[\]{}]/g exports.escapeAnsiEscapeSeq = (s) => { return s.replace(escapeSeqReg, '\\$&') } const ansiEscapeSeqsReg = new RegExp([ ansiEscapes.clearScreen, ansiEscapes.eraseLine, ansiEscapes.eraseStartLine, ansiEscapes.eraseEndLine, `${ESC}0K`, `${ESC}0J`, ...(genSeq(ansiEscapes.cursorTo, 0, 10)), ...(genSeq2(ansiEscapes.cursorTo, 0, 10, 0, 10)), ...(genSeq(ansiEscapes.cursorMove, -10, 10)), ...(genSeq2(ansiEscapes.cursorMove, -10, 10, -10, 10)), ...(genSeq(ansiEscapes.cursorUp, -10, 10)), ...(genSeq(ansiEscapes.cursorDown, -10, 10)), ...(genSeq(ansiEscapes.cursorForward, -10, 10)), ...(genSeq(ansiEscapes.cursorBackward, -10, 10)), ].map(e => `(${exports.escapeAnsiEscapeSeq(e)})`).join('|'), 'g') exports.stripAnsiEscapeSeqs = (s) => s.replace(ansiEscapeSeqsReg, '') const eraseLineEscapeSeqsReg = new RegExp([ ansiEscapes.eraseLine, ansiEscapes.eraseStartLine, ansiEscapes.eraseEndLine, `${ESC}0K`, ...(genSeq(ansiEscapes.cursorTo, 0, 10)), ].map(e => `(${exports.escapeAnsiEscapeSeq(e)})`).join('|'), 'g') exports.countEraseLineEscapeSeqs = (str) => { return ((str || '').match(eraseLineEscapeSeqsReg) || []).length } function genSeq (fn, from, to) { const result = [] for (let i = from; i <= to; i++) { result.push(fn(i)) } return result } function genSeq2 (fn, from, to, from2, to2) { const result = [] for (let i = from; i <= to; i++) { for (let j = from2; j <= to2; j++) { result.push(fn(i, j)) } } return result }