Skip to content

Commit a9bc84e

Browse files
committed
fix(dev): drain stdin when not interactive
If stdin.on('data') isn't called, 'end' is never emitted. This works in interactive mode (ie. stdin.isTTY) since readline drains stdin.
1 parent fdb758a commit a9bc84e

File tree

1 file changed

+6
-0
lines changed

1 file changed

+6
-0
lines changed

packages/vite/src/node/utils.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1634,12 +1634,17 @@ const parentSigtermCallback: SigtermCallback = async (signal, exitCode) => {
16341634
await Promise.all([...sigtermCallbacks].map((cb) => cb(signal, exitCode)))
16351635
}
16361636

1637+
const drain = () => {}
1638+
16371639
export const setupSIGTERMListener = (
16381640
callback: (signal?: 'SIGTERM', exitCode?: number) => Promise<void>,
16391641
): void => {
16401642
if (sigtermCallbacks.size === 0) {
16411643
process.once('SIGTERM', parentSigtermCallback)
16421644
if (process.env.CI !== 'true') {
1645+
if (!process.stdin.isTTY) {
1646+
process.stdin.on("data", drain)
1647+
}
16431648
process.stdin.on('end', parentSigtermCallback)
16441649
}
16451650
}
@@ -1653,6 +1658,7 @@ export const teardownSIGTERMListener = (
16531658
if (sigtermCallbacks.size === 0) {
16541659
process.off('SIGTERM', parentSigtermCallback)
16551660
if (process.env.CI !== 'true') {
1661+
process.stdin.off("data", drain)
16561662
process.stdin.off('end', parentSigtermCallback)
16571663
}
16581664
}

0 commit comments

Comments
 (0)