From f025255fc5f52b142b0626a6386039d40bc9dc3b Mon Sep 17 00:00:00 2001 From: pulkit-30 Date: Fri, 15 Dec 2023 15:00:05 +0530 Subject: [PATCH] watch: fix infinite loop when passing --watch=true flag --- lib/internal/main/watch_mode.js | 2 +- test/sequential/test-watch-mode.mjs | 20 ++++++++++++++++++-- 2 files changed, 19 insertions(+), 3 deletions(-) diff --git a/lib/internal/main/watch_mode.js b/lib/internal/main/watch_mode.js index 4fae6363226310..3be329c57af6db 100644 --- a/lib/internal/main/watch_mode.js +++ b/lib/internal/main/watch_mode.js @@ -41,7 +41,7 @@ const kCommandStr = inspect(ArrayPrototypeJoin(kCommand, ' ')); const args = ArrayPrototypeFilter(process.execArgv, (arg, i, arr) => !StringPrototypeStartsWith(arg, '--watch-path') && (!arr[i - 1] || !StringPrototypeStartsWith(arr[i - 1], '--watch-path')) && - arg !== '--watch' && arg !== '--watch-preserve-output'); + arg !== '--watch' && !StringPrototypeStartsWith(arg, '--watch=') && arg !== '--watch-preserve-output'); ArrayPrototypePushApply(args, kCommand); const watcher = new FilesWatcher({ debounce: 200, mode: kShouldFilterModules ? 'filter' : 'all' }); diff --git a/test/sequential/test-watch-mode.mjs b/test/sequential/test-watch-mode.mjs index 444e296bb9f062..ed072456cd6f7e 100644 --- a/test/sequential/test-watch-mode.mjs +++ b/test/sequential/test-watch-mode.mjs @@ -30,9 +30,9 @@ function createTmpFile(content = 'console.log("running");', ext = '.js', basenam } async function runWriteSucceed({ - file, watchedFile, args = [file], completed = 'Completed running', restarts = 2 + file, watchedFile, watchFlag = '--watch', args = [file], completed = 'Completed running', restarts = 2, options = {} }) { - const child = spawn(execPath, ['--watch', '--no-warnings', ...args], { encoding: 'utf8', stdio: 'pipe' }); + const child = spawn(execPath, [watchFlag, '--no-warnings', ...args], { encoding: 'utf8', stdio: 'pipe', ...options }); let completes = 0; let cancelRestarts = () => {}; let stderr = ''; @@ -88,6 +88,22 @@ async function failWriteSucceed({ file, watchedFile }) { tmpdir.refresh(); describe('watch mode', { concurrency: true, timeout: 60_000 }, () => { + it('should watch changes to a file', async () => { + const file = createTmpFile(); + const { stderr, stdout } = await runWriteSucceed({ file, watchedFile: file, watchFlag: '--watch=true', options: { + timeout: 10000 + } }); + + assert.strictEqual(stderr, ''); + assert.deepStrictEqual(stdout, [ + 'running', + `Completed running ${inspect(file)}`, + `Restarting ${inspect(file)}`, + 'running', + `Completed running ${inspect(file)}`, + ]); + }); + it('should watch changes to a file - event loop ended', async () => { const file = createTmpFile(); const { stderr, stdout } = await runWriteSucceed({ file, watchedFile: file });