UNPKG

aws-cdk

Version:

CDK Toolkit, the command line tool for CDK apps

80 lines 8.96 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.RewritableBlock = void 0; // namespace object imports won't work in the bundle for function exports // eslint-disable-next-line @typescript-eslint/no-require-imports const wrapAnsi = require('wrap-ansi'); /** * A class representing rewritable display lines */ class RewritableBlock { constructor(stream) { this.stream = stream; this.lastHeight = 0; this.trailingEmptyLines = 0; } get width() { // Might get changed if the user resizes the terminal return this.stream.columns; } get height() { // Might get changed if the user resizes the terminal return this.stream.rows; } displayLines(lines) { lines = terminalWrap(this.width, expandNewlines(lines)); lines = lines.slice(0, getMaxBlockHeight(this.height, this.lastHeight, lines)); this.stream.write(cursorUp(this.lastHeight)); for (const line of lines) { this.stream.write(cll() + line + '\n'); } this.trailingEmptyLines = Math.max(0, this.lastHeight - lines.length); // Clear remainder of unwritten lines for (let i = 0; i < this.trailingEmptyLines; i++) { this.stream.write(cll() + '\n'); } // The block can only ever get bigger this.lastHeight = Math.max(this.lastHeight, lines.length); } removeEmptyLines() { this.stream.write(cursorUp(this.trailingEmptyLines)); } } exports.RewritableBlock = RewritableBlock; const ESC = '\u001b'; /* * Move cursor up `n` lines. Default is 1 */ function cursorUp(n) { n = typeof n === 'number' ? n : 1; return n > 0 ? ESC + '[' + n + 'A' : ''; } /** * Clear to end of line */ function cll() { return ESC + '[K'; } function terminalWrap(width, lines) { if (width === undefined) { return lines; } return lines.flatMap(line => wrapAnsi(line, width - 1, { hard: true, trim: true, wordWrap: false, }).split('\n')); } /** * Make sure there are no hidden newlines in the gin strings */ function expandNewlines(lines) { return lines.flatMap(line => line.split('\n')); } function getMaxBlockHeight(windowHeight, lastHeight, lines) { if (windowHeight === undefined) { return Math.max(lines.length, lastHeight); } return lines.length < windowHeight ? lines.length : windowHeight - 1; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlzcGxheS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImRpc3BsYXkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEseUVBQXlFO0FBQ3pFLGlFQUFpRTtBQUNqRSxNQUFNLFFBQVEsR0FBRyxPQUFPLENBQUMsV0FBVyxDQUFDLENBQUM7QUFFdEM7O0dBRUc7QUFDSCxNQUFhLGVBQWU7SUFJMUIsWUFBNkIsTUFBMEI7UUFBMUIsV0FBTSxHQUFOLE1BQU0sQ0FBb0I7UUFIL0MsZUFBVSxHQUFHLENBQUMsQ0FBQztRQUNmLHVCQUFrQixHQUFHLENBQUMsQ0FBQztJQUcvQixDQUFDO0lBRUQsSUFBVyxLQUFLO1FBQ2QscURBQXFEO1FBQ3JELE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUM7SUFDN0IsQ0FBQztJQUVELElBQVcsTUFBTTtRQUNmLHFEQUFxRDtRQUNyRCxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDO0lBQzFCLENBQUM7SUFFTSxZQUFZLENBQUMsS0FBZTtRQUNqQyxLQUFLLEdBQUcsWUFBWSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsY0FBYyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFDeEQsS0FBSyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLGlCQUFpQixDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLFVBQVUsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBRS9FLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQztRQUM3QyxLQUFLLE1BQU0sSUFBSSxJQUFJLEtBQUssRUFBRTtZQUN4QixJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsR0FBRyxJQUFJLEdBQUcsSUFBSSxDQUFDLENBQUM7U0FDeEM7UUFFRCxJQUFJLENBQUMsa0JBQWtCLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7UUFFdEUscUNBQXFDO1FBQ3JDLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDaEQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUM7U0FDakM7UUFFRCxxQ0FBcUM7UUFDckMsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQzVELENBQUM7SUFFTSxnQkFBZ0I7UUFDckIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLENBQUM7SUFDdkQsQ0FBQztDQUNGO0FBeENELDBDQXdDQztBQUVELE1BQU0sR0FBRyxHQUFHLFFBQVEsQ0FBQztBQUVyQjs7R0FFRztBQUNILFNBQVMsUUFBUSxDQUFDLENBQVM7SUFDekIsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDbEMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUMxQyxDQUFDO0FBRUQ7O0dBRUc7QUFDSCxTQUFTLEdBQUc7SUFDVixPQUFPLEdBQUcsR0FBRyxJQUFJLENBQUM7QUFDcEIsQ0FBQztBQUVELFNBQVMsWUFBWSxDQUFDLEtBQXlCLEVBQUUsS0FBZTtJQUM5RCxJQUFJLEtBQUssS0FBSyxTQUFTLEVBQUU7UUFBRSxPQUFPLEtBQUssQ0FBQztLQUFFO0lBRTFDLE9BQU8sS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsS0FBSyxHQUFHLENBQUMsRUFBRTtRQUNyRCxJQUFJLEVBQUUsSUFBSTtRQUNWLElBQUksRUFBRSxJQUFJO1FBQ1YsUUFBUSxFQUFFLEtBQUs7S0FDaEIsQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ2xCLENBQUM7QUFFRDs7R0FFRztBQUNILFNBQVMsY0FBYyxDQUFDLEtBQWU7SUFDckMsT0FBTyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ2pELENBQUM7QUFFRCxTQUFTLGlCQUFpQixDQUFDLFlBQWdDLEVBQUUsVUFBa0IsRUFBRSxLQUFlO0lBQzlGLElBQUksWUFBWSxLQUFLLFNBQVMsRUFBRTtRQUFFLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLFVBQVUsQ0FBQyxDQUFDO0tBQUU7SUFDOUUsT0FBTyxLQUFLLENBQUMsTUFBTSxHQUFHLFlBQVksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsWUFBWSxHQUFHLENBQUMsQ0FBQztBQUN2RSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gbmFtZXNwYWNlIG9iamVjdCBpbXBvcnRzIHdvbid0IHdvcmsgaW4gdGhlIGJ1bmRsZSBmb3IgZnVuY3Rpb24gZXhwb3J0c1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1yZXF1aXJlLWltcG9ydHNcbmNvbnN0IHdyYXBBbnNpID0gcmVxdWlyZSgnd3JhcC1hbnNpJyk7XG5cbi8qKlxuICogQSBjbGFzcyByZXByZXNlbnRpbmcgcmV3cml0YWJsZSBkaXNwbGF5IGxpbmVzXG4gKi9cbmV4cG9ydCBjbGFzcyBSZXdyaXRhYmxlQmxvY2sge1xuICBwcml2YXRlIGxhc3RIZWlnaHQgPSAwO1xuICBwcml2YXRlIHRyYWlsaW5nRW1wdHlMaW5lcyA9IDA7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSBzdHJlYW06IE5vZGVKUy5Xcml0ZVN0cmVhbSkge1xuICB9XG5cbiAgcHVibGljIGdldCB3aWR0aCgpIHtcbiAgICAvLyBNaWdodCBnZXQgY2hhbmdlZCBpZiB0aGUgdXNlciByZXNpemVzIHRoZSB0ZXJtaW5hbFxuICAgIHJldHVybiB0aGlzLnN0cmVhbS5jb2x1bW5zO1xuICB9XG5cbiAgcHVibGljIGdldCBoZWlnaHQoKSB7XG4gICAgLy8gTWlnaHQgZ2V0IGNoYW5nZWQgaWYgdGhlIHVzZXIgcmVzaXplcyB0aGUgdGVybWluYWxcbiAgICByZXR1cm4gdGhpcy5zdHJlYW0ucm93cztcbiAgfVxuXG4gIHB1YmxpYyBkaXNwbGF5TGluZXMobGluZXM6IHN0cmluZ1tdKSB7XG4gICAgbGluZXMgPSB0ZXJtaW5hbFdyYXAodGhpcy53aWR0aCwgZXhwYW5kTmV3bGluZXMobGluZXMpKTtcbiAgICBsaW5lcyA9IGxpbmVzLnNsaWNlKDAsIGdldE1heEJsb2NrSGVpZ2h0KHRoaXMuaGVpZ2h0LCB0aGlzLmxhc3RIZWlnaHQsIGxpbmVzKSk7XG5cbiAgICB0aGlzLnN0cmVhbS53cml0ZShjdXJzb3JVcCh0aGlzLmxhc3RIZWlnaHQpKTtcbiAgICBmb3IgKGNvbnN0IGxpbmUgb2YgbGluZXMpIHtcbiAgICAgIHRoaXMuc3RyZWFtLndyaXRlKGNsbCgpICsgbGluZSArICdcXG4nKTtcbiAgICB9XG5cbiAgICB0aGlzLnRyYWlsaW5nRW1wdHlMaW5lcyA9IE1hdGgubWF4KDAsIHRoaXMubGFzdEhlaWdodCAtIGxpbmVzLmxlbmd0aCk7XG5cbiAgICAvLyBDbGVhciByZW1haW5kZXIgb2YgdW53cml0dGVuIGxpbmVzXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnRyYWlsaW5nRW1wdHlMaW5lczsgaSsrKSB7XG4gICAgICB0aGlzLnN0cmVhbS53cml0ZShjbGwoKSArICdcXG4nKTtcbiAgICB9XG5cbiAgICAvLyBUaGUgYmxvY2sgY2FuIG9ubHkgZXZlciBnZXQgYmlnZ2VyXG4gICAgdGhpcy5sYXN0SGVpZ2h0ID0gTWF0aC5tYXgodGhpcy5sYXN0SGVpZ2h0LCBsaW5lcy5sZW5ndGgpO1xuICB9XG5cbiAgcHVibGljIHJlbW92ZUVtcHR5TGluZXMoKSB7XG4gICAgdGhpcy5zdHJlYW0ud3JpdGUoY3Vyc29yVXAodGhpcy50cmFpbGluZ0VtcHR5TGluZXMpKTtcbiAgfVxufVxuXG5jb25zdCBFU0MgPSAnXFx1MDAxYic7XG5cbi8qXG4gKiBNb3ZlIGN1cnNvciB1cCBgbmAgbGluZXMuIERlZmF1bHQgaXMgMVxuICovXG5mdW5jdGlvbiBjdXJzb3JVcChuOiBudW1iZXIpIHtcbiAgbiA9IHR5cGVvZiBuID09PSAnbnVtYmVyJyA/IG4gOiAxO1xuICByZXR1cm4gbiA+IDAgPyBFU0MgKyAnWycgKyBuICsgJ0EnIDogJyc7XG59XG5cbi8qKlxuICogQ2xlYXIgdG8gZW5kIG9mIGxpbmVcbiAqL1xuZnVuY3Rpb24gY2xsKCkge1xuICByZXR1cm4gRVNDICsgJ1tLJztcbn1cblxuZnVuY3Rpb24gdGVybWluYWxXcmFwKHdpZHRoOiBudW1iZXIgfCB1bmRlZmluZWQsIGxpbmVzOiBzdHJpbmdbXSkge1xuICBpZiAod2lkdGggPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gbGluZXM7IH1cblxuICByZXR1cm4gbGluZXMuZmxhdE1hcChsaW5lID0+IHdyYXBBbnNpKGxpbmUsIHdpZHRoIC0gMSwge1xuICAgIGhhcmQ6IHRydWUsXG4gICAgdHJpbTogdHJ1ZSxcbiAgICB3b3JkV3JhcDogZmFsc2UsXG4gIH0pLnNwbGl0KCdcXG4nKSk7XG59XG5cbi8qKlxuICogTWFrZSBzdXJlIHRoZXJlIGFyZSBubyBoaWRkZW4gbmV3bGluZXMgaW4gdGhlIGdpbiBzdHJpbmdzXG4gKi9cbmZ1bmN0aW9uIGV4cGFuZE5ld2xpbmVzKGxpbmVzOiBzdHJpbmdbXSk6IHN0cmluZ1tdIHtcbiAgcmV0dXJuIGxpbmVzLmZsYXRNYXAobGluZSA9PiBsaW5lLnNwbGl0KCdcXG4nKSk7XG59XG5cbmZ1bmN0aW9uIGdldE1heEJsb2NrSGVpZ2h0KHdpbmRvd0hlaWdodDogbnVtYmVyIHwgdW5kZWZpbmVkLCBsYXN0SGVpZ2h0OiBudW1iZXIsIGxpbmVzOiBzdHJpbmdbXSk6IG51bWJlciB7XG4gIGlmICh3aW5kb3dIZWlnaHQgPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gTWF0aC5tYXgobGluZXMubGVuZ3RoLCBsYXN0SGVpZ2h0KTsgfVxuICByZXR1cm4gbGluZXMubGVuZ3RoIDwgd2luZG93SGVpZ2h0ID8gbGluZXMubGVuZ3RoIDogd2luZG93SGVpZ2h0IC0gMTtcbn0iXX0=