From 797184f587f2da19b45b587829bd83413f3ed2b1 Mon Sep 17 00:00:00 2001 From: "Alex Lam S.L" Date: Sun, 11 Dec 2022 07:25:06 +0200 Subject: [PATCH] improve CLI interoperability (#5762) --- bin/uglifyjs | 14 ++++++++++++-- tools/tty.js | 2 +- 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/bin/uglifyjs b/bin/uglifyjs index a2a02575..4b790f4b 100755 --- a/bin/uglifyjs +++ b/bin/uglifyjs @@ -301,9 +301,19 @@ if (specified["in-situ"]) { process.stdin.setEncoding("utf8"); process.stdin.once("data", function() { clearTimeout(timerId); - }).on("data", function(chunk) { + }).on("data", process.stdin.isTTY ? function(chunk) { + // emulate console input termination via Ctrl+D / Ctrl+Z + var match = /[\x04\x1a]\r?\n?$/.exec(chunk); + if (match) { + chunks.push(chunk.slice(0, -match[0].length)); + process.stdin.pause(); + process.stdin.emit("end"); + } else { + chunks.push(chunk); + } + } : function(chunk) { chunks.push(chunk); - }).on("end", function() { + }).once("end", function() { files = { STDIN: chunks.join("") }; run(); }); diff --git a/tools/tty.js b/tools/tty.js index 395c48ec..d219581c 100644 --- a/tools/tty.js +++ b/tools/tty.js @@ -6,7 +6,7 @@ try { } catch (e) { // ensure output buffers are flushed before process termination var exit = process.exit; - process.exit = function() { + if ("bufferSize" in process.stdout) process.exit = function() { var args = [].slice.call(arguments); process.once("uncaughtException", function() { (function callback() {