From 26d26ceef98ac4fdecde29b17df7cefc7bb7a07d Mon Sep 17 00:00:00 2001 From: Nitin Kumar Date: Sun, 14 Nov 2021 10:32:28 +0530 Subject: [PATCH 1/8] feat: allow `chokidar` options --- lib/Server.js | 42 +++++++++++++++++++++++++++++++----------- 1 file changed, 31 insertions(+), 11 deletions(-) diff --git a/lib/Server.js b/lib/Server.js index 4fa065d149..fc079f9073 100644 --- a/lib/Server.js +++ b/lib/Server.js @@ -445,13 +445,22 @@ class Server { const compilerOptions = this.getCompilerOptions(); // TODO remove `{}` after drop webpack v4 support const watchOptions = compilerOptions.watchOptions || {}; + const defaultWatchOptions = { + ignoreInitial: true, + persistent: true, + followSymlinks: false, + atomic: false, + alwaysStat: true, + ignorePermissionErrors: true, + ...watchOptions, + }; const defaultOptionsForStatic = { directory: path.join(process.cwd(), "public"), staticOptions: {}, publicPath: ["/"], serveIndex: { icons: true }, // Respect options from compiler watchOptions - watch: watchOptions, + watch: defaultWatchOptions, }; if (typeof options.allowedHosts === "undefined") { @@ -954,6 +963,11 @@ class Server { // ensure that watch is an object if true if (staticOption.watch === true) { staticOption.watch = defaultOptionsForStatic.watch; + } else if (typeof staticOption.watch === "object") { + staticOption.watch = { + ...defaultOptionsForStatic.watch, + ...staticOption.watch, + }; } // ensure that serveIndex is an object if true @@ -964,7 +978,9 @@ class Server { } if (typeof options.watchFiles === "string") { - options.watchFiles = [{ paths: options.watchFiles, options: {} }]; + options.watchFiles = [ + { paths: options.watchFiles, options: defaultWatchOptions }, + ]; } else if ( typeof options.watchFiles === "object" && options.watchFiles !== null && @@ -973,16 +989,25 @@ class Server { options.watchFiles = [ { paths: options.watchFiles.paths, - options: options.watchFiles.options || {}, + options: { + ...defaultWatchOptions, + ...(options.watchFiles.options || {}), + }, }, ]; } else if (Array.isArray(options.watchFiles)) { options.watchFiles = options.watchFiles.map((item) => { if (typeof item === "string") { - return { paths: item, options: {} }; + return { paths: item, options: defaultWatchOptions }; } - return { paths: item.paths, options: item.options || {} }; + return { + paths: item.paths, + options: { + ...defaultWatchOptions, + ...(item.options || {}), + }, + }; }); } else { options.watchFiles = []; @@ -2141,12 +2166,7 @@ class Server { undefined; const finalWatchOptions = { - ignoreInitial: true, - persistent: true, - followSymlinks: false, - atomic: false, - alwaysStat: true, - ignorePermissionErrors: true, + ...watchOptions, ignored: watchOptions.ignored, usePolling, interval, From 38bb41a73f276229eeb49568934e83d4159f2de2 Mon Sep 17 00:00:00 2001 From: Nitin Kumar Date: Sun, 14 Nov 2021 10:40:47 +0530 Subject: [PATCH 2/8] test: update snapshots --- .../Server.test.js.snap.webpack4 | 436 ++++++++++++++++-- .../Server.test.js.snap.webpack5 | 436 ++++++++++++++++-- 2 files changed, 782 insertions(+), 90 deletions(-) diff --git a/test/server/__snapshots__/Server.test.js.snap.webpack4 b/test/server/__snapshots__/Server.test.js.snap.webpack4 index d394c36fa9..d2238178cf 100644 --- a/test/server/__snapshots__/Server.test.js.snap.webpack4 +++ b/test/server/__snapshots__/Server.test.js.snap.webpack4 @@ -90,7 +90,14 @@ Object { "icons": true, }, "staticOptions": Object {}, - "watch": Object {}, + "watch": Object { + "alwaysStat": true, + "atomic": false, + "followSymlinks": false, + "ignoreInitial": true, + "ignorePermissionErrors": true, + "persistent": true, + }, }, ], "watchFiles": Array [], @@ -137,7 +144,14 @@ Object { "icons": true, }, "staticOptions": Object {}, - "watch": Object {}, + "watch": Object { + "alwaysStat": true, + "atomic": false, + "followSymlinks": false, + "ignoreInitial": true, + "ignorePermissionErrors": true, + "persistent": true, + }, }, ], "watchFiles": Array [], @@ -185,7 +199,14 @@ Object { "icons": true, }, "staticOptions": Object {}, - "watch": Object {}, + "watch": Object { + "alwaysStat": true, + "atomic": false, + "followSymlinks": false, + "ignoreInitial": true, + "ignorePermissionErrors": true, + "persistent": true, + }, }, ], "watchFiles": Array [], @@ -235,7 +256,14 @@ Object { "icons": true, }, "staticOptions": Object {}, - "watch": Object {}, + "watch": Object { + "alwaysStat": true, + "atomic": false, + "followSymlinks": false, + "ignoreInitial": true, + "ignorePermissionErrors": true, + "persistent": true, + }, }, ], "watchFiles": Array [], @@ -285,7 +313,14 @@ Object { "icons": true, }, "staticOptions": Object {}, - "watch": Object {}, + "watch": Object { + "alwaysStat": true, + "atomic": false, + "followSymlinks": false, + "ignoreInitial": true, + "ignorePermissionErrors": true, + "persistent": true, + }, }, ], "watchFiles": Array [], @@ -334,7 +369,14 @@ Object { "icons": true, }, "staticOptions": Object {}, - "watch": Object {}, + "watch": Object { + "alwaysStat": true, + "atomic": false, + "followSymlinks": false, + "ignoreInitial": true, + "ignorePermissionErrors": true, + "persistent": true, + }, }, ], "watchFiles": Array [], @@ -383,7 +425,14 @@ Object { "icons": true, }, "staticOptions": Object {}, - "watch": Object {}, + "watch": Object { + "alwaysStat": true, + "atomic": false, + "followSymlinks": false, + "ignoreInitial": true, + "ignorePermissionErrors": true, + "persistent": true, + }, }, ], "watchFiles": Array [], @@ -431,7 +480,14 @@ Object { "icons": true, }, "staticOptions": Object {}, - "watch": Object {}, + "watch": Object { + "alwaysStat": true, + "atomic": false, + "followSymlinks": false, + "ignoreInitial": true, + "ignorePermissionErrors": true, + "persistent": true, + }, }, ], "watchFiles": Array [], @@ -479,7 +535,14 @@ Object { "icons": true, }, "staticOptions": Object {}, - "watch": Object {}, + "watch": Object { + "alwaysStat": true, + "atomic": false, + "followSymlinks": false, + "ignoreInitial": true, + "ignorePermissionErrors": true, + "persistent": true, + }, }, ], "watchFiles": Array [], @@ -527,7 +590,14 @@ Object { "icons": true, }, "staticOptions": Object {}, - "watch": Object {}, + "watch": Object { + "alwaysStat": true, + "atomic": false, + "followSymlinks": false, + "ignoreInitial": true, + "ignorePermissionErrors": true, + "persistent": true, + }, }, ], "watchFiles": Array [], @@ -577,7 +647,14 @@ Object { "icons": true, }, "staticOptions": Object {}, - "watch": Object {}, + "watch": Object { + "alwaysStat": true, + "atomic": false, + "followSymlinks": false, + "ignoreInitial": true, + "ignorePermissionErrors": true, + "persistent": true, + }, }, ], "watchFiles": Array [], @@ -627,7 +704,14 @@ Object { "icons": true, }, "staticOptions": Object {}, - "watch": Object {}, + "watch": Object { + "alwaysStat": true, + "atomic": false, + "followSymlinks": false, + "ignoreInitial": true, + "ignorePermissionErrors": true, + "persistent": true, + }, }, ], "watchFiles": Array [], @@ -676,7 +760,14 @@ Object { "icons": true, }, "staticOptions": Object {}, - "watch": Object {}, + "watch": Object { + "alwaysStat": true, + "atomic": false, + "followSymlinks": false, + "ignoreInitial": true, + "ignorePermissionErrors": true, + "persistent": true, + }, }, ], "watchFiles": Array [], @@ -723,7 +814,14 @@ Object { "icons": true, }, "staticOptions": Object {}, - "watch": Object {}, + "watch": Object { + "alwaysStat": true, + "atomic": false, + "followSymlinks": false, + "ignoreInitial": true, + "ignorePermissionErrors": true, + "persistent": true, + }, }, ], "watchFiles": Array [], @@ -770,7 +868,14 @@ Object { "icons": true, }, "staticOptions": Object {}, - "watch": Object {}, + "watch": Object { + "alwaysStat": true, + "atomic": false, + "followSymlinks": false, + "ignoreInitial": true, + "ignorePermissionErrors": true, + "persistent": true, + }, }, ], "watchFiles": Array [], @@ -817,7 +922,14 @@ Object { "icons": true, }, "staticOptions": Object {}, - "watch": Object {}, + "watch": Object { + "alwaysStat": true, + "atomic": false, + "followSymlinks": false, + "ignoreInitial": true, + "ignorePermissionErrors": true, + "persistent": true, + }, }, ], "watchFiles": Array [], @@ -864,7 +976,14 @@ Object { "icons": true, }, "staticOptions": Object {}, - "watch": Object {}, + "watch": Object { + "alwaysStat": true, + "atomic": false, + "followSymlinks": false, + "ignoreInitial": true, + "ignorePermissionErrors": true, + "persistent": true, + }, }, ], "watchFiles": Array [], @@ -911,7 +1030,14 @@ Object { "icons": true, }, "staticOptions": Object {}, - "watch": Object {}, + "watch": Object { + "alwaysStat": true, + "atomic": false, + "followSymlinks": false, + "ignoreInitial": true, + "ignorePermissionErrors": true, + "persistent": true, + }, }, ], "watchFiles": Array [], @@ -958,7 +1084,14 @@ Object { "icons": true, }, "staticOptions": Object {}, - "watch": Object {}, + "watch": Object { + "alwaysStat": true, + "atomic": false, + "followSymlinks": false, + "ignoreInitial": true, + "ignorePermissionErrors": true, + "persistent": true, + }, }, ], "watchFiles": Array [], @@ -1005,7 +1138,14 @@ Object { "icons": true, }, "staticOptions": Object {}, - "watch": Object {}, + "watch": Object { + "alwaysStat": true, + "atomic": false, + "followSymlinks": false, + "ignoreInitial": true, + "ignorePermissionErrors": true, + "persistent": true, + }, }, ], "watchFiles": Array [], @@ -1052,7 +1192,14 @@ Object { "icons": true, }, "staticOptions": Object {}, - "watch": Object {}, + "watch": Object { + "alwaysStat": true, + "atomic": false, + "followSymlinks": false, + "ignoreInitial": true, + "ignorePermissionErrors": true, + "persistent": true, + }, }, ], "watchFiles": Array [], @@ -1099,7 +1246,14 @@ Object { "icons": true, }, "staticOptions": Object {}, - "watch": Object {}, + "watch": Object { + "alwaysStat": true, + "atomic": false, + "followSymlinks": false, + "ignoreInitial": true, + "ignorePermissionErrors": true, + "persistent": true, + }, }, ], "watchFiles": Array [], @@ -1146,7 +1300,14 @@ Object { "icons": true, }, "staticOptions": Object {}, - "watch": Object {}, + "watch": Object { + "alwaysStat": true, + "atomic": false, + "followSymlinks": false, + "ignoreInitial": true, + "ignorePermissionErrors": true, + "persistent": true, + }, }, ], "watchFiles": Array [], @@ -1193,7 +1354,14 @@ Object { "icons": true, }, "staticOptions": Object {}, - "watch": Object {}, + "watch": Object { + "alwaysStat": true, + "atomic": false, + "followSymlinks": false, + "ignoreInitial": true, + "ignorePermissionErrors": true, + "persistent": true, + }, }, ], "watchFiles": Array [], @@ -1240,7 +1408,14 @@ Object { "icons": true, }, "staticOptions": Object {}, - "watch": Object {}, + "watch": Object { + "alwaysStat": true, + "atomic": false, + "followSymlinks": false, + "ignoreInitial": true, + "ignorePermissionErrors": true, + "persistent": true, + }, }, ], "watchFiles": Array [], @@ -1287,7 +1462,14 @@ Object { "icons": true, }, "staticOptions": Object {}, - "watch": Object {}, + "watch": Object { + "alwaysStat": true, + "atomic": false, + "followSymlinks": false, + "ignoreInitial": true, + "ignorePermissionErrors": true, + "persistent": true, + }, }, ], "watchFiles": Array [], @@ -1334,7 +1516,14 @@ Object { "icons": true, }, "staticOptions": Object {}, - "watch": Object {}, + "watch": Object { + "alwaysStat": true, + "atomic": false, + "followSymlinks": false, + "ignoreInitial": true, + "ignorePermissionErrors": true, + "persistent": true, + }, }, ], "watchFiles": Array [], @@ -1383,6 +1572,12 @@ Object { "staticOptions": Object {}, "watch": Object { "aggregateTimeout": 300, + "alwaysStat": true, + "atomic": false, + "followSymlinks": false, + "ignoreInitial": true, + "ignorePermissionErrors": true, + "persistent": true, }, }, ], @@ -1431,6 +1626,13 @@ Object { }, "staticOptions": Object {}, "watch": Object { + "aggregateTimeout": 300, + "alwaysStat": true, + "atomic": false, + "followSymlinks": false, + "ignoreInitial": true, + "ignorePermissionErrors": true, + "persistent": true, "poll": 500, }, }, @@ -1481,6 +1683,12 @@ Object { "staticOptions": Object {}, "watch": Object { "aggregateTimeout": 300, + "alwaysStat": true, + "atomic": false, + "followSymlinks": false, + "ignoreInitial": true, + "ignorePermissionErrors": true, + "persistent": true, }, }, ], @@ -1530,6 +1738,12 @@ Object { "staticOptions": Object {}, "watch": Object { "aggregateTimeout": 300, + "alwaysStat": true, + "atomic": false, + "followSymlinks": false, + "ignoreInitial": true, + "ignorePermissionErrors": true, + "persistent": true, }, }, ], @@ -1577,7 +1791,14 @@ Object { "icons": true, }, "staticOptions": Object {}, - "watch": Object {}, + "watch": Object { + "alwaysStat": true, + "atomic": false, + "followSymlinks": false, + "ignoreInitial": true, + "ignorePermissionErrors": true, + "persistent": true, + }, }, Object { "directory": "/public", @@ -1588,7 +1809,14 @@ Object { "icons": true, }, "staticOptions": Object {}, - "watch": Object {}, + "watch": Object { + "alwaysStat": true, + "atomic": false, + "followSymlinks": false, + "ignoreInitial": true, + "ignorePermissionErrors": true, + "persistent": true, + }, }, ], "watchFiles": Array [], @@ -1635,7 +1863,14 @@ Object { "icons": true, }, "staticOptions": Object {}, - "watch": Object {}, + "watch": Object { + "alwaysStat": true, + "atomic": false, + "followSymlinks": false, + "ignoreInitial": true, + "ignorePermissionErrors": true, + "persistent": true, + }, }, Object { "directory": "/static/path2", @@ -1646,7 +1881,14 @@ Object { "icons": true, }, "staticOptions": Object {}, - "watch": Object {}, + "watch": Object { + "alwaysStat": true, + "atomic": false, + "followSymlinks": false, + "ignoreInitial": true, + "ignorePermissionErrors": true, + "persistent": true, + }, }, ], "watchFiles": Array [], @@ -1693,7 +1935,14 @@ Object { "icons": true, }, "staticOptions": Object {}, - "watch": Object {}, + "watch": Object { + "alwaysStat": true, + "atomic": false, + "followSymlinks": false, + "ignoreInitial": true, + "ignorePermissionErrors": true, + "persistent": true, + }, }, Object { "directory": "/public", @@ -1704,7 +1953,14 @@ Object { "icons": true, }, "staticOptions": Object {}, - "watch": Object {}, + "watch": Object { + "alwaysStat": true, + "atomic": false, + "followSymlinks": false, + "ignoreInitial": true, + "ignorePermissionErrors": true, + "persistent": true, + }, }, ], "watchFiles": Array [], @@ -1751,7 +2007,14 @@ Object { "icons": true, }, "staticOptions": Object {}, - "watch": Object {}, + "watch": Object { + "alwaysStat": true, + "atomic": false, + "followSymlinks": false, + "ignoreInitial": true, + "ignorePermissionErrors": true, + "persistent": true, + }, }, ], "watchFiles": Array [], @@ -1833,7 +2096,14 @@ Object { "icons": true, }, "staticOptions": Object {}, - "watch": Object {}, + "watch": Object { + "alwaysStat": true, + "atomic": false, + "followSymlinks": false, + "ignoreInitial": true, + "ignorePermissionErrors": true, + "persistent": true, + }, }, ], "watchFiles": Array [], @@ -1880,7 +2150,14 @@ Object { "icons": true, }, "staticOptions": Object {}, - "watch": Object {}, + "watch": Object { + "alwaysStat": true, + "atomic": false, + "followSymlinks": false, + "ignoreInitial": true, + "ignorePermissionErrors": true, + "persistent": true, + }, }, ], "watchFiles": Array [], @@ -1927,7 +2204,14 @@ Object { "icons": true, }, "staticOptions": Object {}, - "watch": Object {}, + "watch": Object { + "alwaysStat": true, + "atomic": false, + "followSymlinks": false, + "ignoreInitial": true, + "ignorePermissionErrors": true, + "persistent": true, + }, }, ], "watchFiles": Array [], @@ -1975,7 +2259,14 @@ Object { "icons": true, }, "staticOptions": Object {}, - "watch": Object {}, + "watch": Object { + "alwaysStat": true, + "atomic": false, + "followSymlinks": false, + "ignoreInitial": true, + "ignorePermissionErrors": true, + "persistent": true, + }, }, ], "watchFiles": Array [], @@ -2022,7 +2313,14 @@ Object { "icons": false, }, "staticOptions": Object {}, - "watch": Object {}, + "watch": Object { + "alwaysStat": true, + "atomic": false, + "followSymlinks": false, + "ignoreInitial": true, + "ignorePermissionErrors": true, + "persistent": true, + }, }, ], "watchFiles": Array [], @@ -2067,7 +2365,14 @@ Object { ], "serveIndex": false, "staticOptions": Object {}, - "watch": Object {}, + "watch": Object { + "alwaysStat": true, + "atomic": false, + "followSymlinks": false, + "ignoreInitial": true, + "ignorePermissionErrors": true, + "persistent": true, + }, }, ], "watchFiles": Array [], @@ -2114,7 +2419,14 @@ Object { "icons": true, }, "staticOptions": Object {}, - "watch": Object {}, + "watch": Object { + "alwaysStat": true, + "atomic": false, + "followSymlinks": false, + "ignoreInitial": true, + "ignorePermissionErrors": true, + "persistent": true, + }, }, ], "watchFiles": Array [], @@ -2162,6 +2474,12 @@ Object { }, "staticOptions": Object {}, "watch": Object { + "alwaysStat": true, + "atomic": false, + "followSymlinks": false, + "ignoreInitial": true, + "ignorePermissionErrors": true, + "persistent": true, "poll": 500, }, }, @@ -2257,7 +2575,14 @@ Object { "icons": true, }, "staticOptions": Object {}, - "watch": Object {}, + "watch": Object { + "alwaysStat": true, + "atomic": false, + "followSymlinks": false, + "ignoreInitial": true, + "ignorePermissionErrors": true, + "persistent": true, + }, }, ], "watchFiles": Array [], @@ -2307,7 +2632,14 @@ Object { "icons": true, }, "staticOptions": Object {}, - "watch": Object {}, + "watch": Object { + "alwaysStat": true, + "atomic": false, + "followSymlinks": false, + "ignoreInitial": true, + "ignorePermissionErrors": true, + "persistent": true, + }, }, ], "watchFiles": Array [], @@ -2354,7 +2686,14 @@ Object { "icons": true, }, "staticOptions": Object {}, - "watch": Object {}, + "watch": Object { + "alwaysStat": true, + "atomic": false, + "followSymlinks": false, + "ignoreInitial": true, + "ignorePermissionErrors": true, + "persistent": true, + }, }, ], "watchFiles": Array [], @@ -2401,7 +2740,14 @@ Object { "icons": true, }, "staticOptions": Object {}, - "watch": Object {}, + "watch": Object { + "alwaysStat": true, + "atomic": false, + "followSymlinks": false, + "ignoreInitial": true, + "ignorePermissionErrors": true, + "persistent": true, + }, }, ], "watchFiles": Array [], diff --git a/test/server/__snapshots__/Server.test.js.snap.webpack5 b/test/server/__snapshots__/Server.test.js.snap.webpack5 index d394c36fa9..d2238178cf 100644 --- a/test/server/__snapshots__/Server.test.js.snap.webpack5 +++ b/test/server/__snapshots__/Server.test.js.snap.webpack5 @@ -90,7 +90,14 @@ Object { "icons": true, }, "staticOptions": Object {}, - "watch": Object {}, + "watch": Object { + "alwaysStat": true, + "atomic": false, + "followSymlinks": false, + "ignoreInitial": true, + "ignorePermissionErrors": true, + "persistent": true, + }, }, ], "watchFiles": Array [], @@ -137,7 +144,14 @@ Object { "icons": true, }, "staticOptions": Object {}, - "watch": Object {}, + "watch": Object { + "alwaysStat": true, + "atomic": false, + "followSymlinks": false, + "ignoreInitial": true, + "ignorePermissionErrors": true, + "persistent": true, + }, }, ], "watchFiles": Array [], @@ -185,7 +199,14 @@ Object { "icons": true, }, "staticOptions": Object {}, - "watch": Object {}, + "watch": Object { + "alwaysStat": true, + "atomic": false, + "followSymlinks": false, + "ignoreInitial": true, + "ignorePermissionErrors": true, + "persistent": true, + }, }, ], "watchFiles": Array [], @@ -235,7 +256,14 @@ Object { "icons": true, }, "staticOptions": Object {}, - "watch": Object {}, + "watch": Object { + "alwaysStat": true, + "atomic": false, + "followSymlinks": false, + "ignoreInitial": true, + "ignorePermissionErrors": true, + "persistent": true, + }, }, ], "watchFiles": Array [], @@ -285,7 +313,14 @@ Object { "icons": true, }, "staticOptions": Object {}, - "watch": Object {}, + "watch": Object { + "alwaysStat": true, + "atomic": false, + "followSymlinks": false, + "ignoreInitial": true, + "ignorePermissionErrors": true, + "persistent": true, + }, }, ], "watchFiles": Array [], @@ -334,7 +369,14 @@ Object { "icons": true, }, "staticOptions": Object {}, - "watch": Object {}, + "watch": Object { + "alwaysStat": true, + "atomic": false, + "followSymlinks": false, + "ignoreInitial": true, + "ignorePermissionErrors": true, + "persistent": true, + }, }, ], "watchFiles": Array [], @@ -383,7 +425,14 @@ Object { "icons": true, }, "staticOptions": Object {}, - "watch": Object {}, + "watch": Object { + "alwaysStat": true, + "atomic": false, + "followSymlinks": false, + "ignoreInitial": true, + "ignorePermissionErrors": true, + "persistent": true, + }, }, ], "watchFiles": Array [], @@ -431,7 +480,14 @@ Object { "icons": true, }, "staticOptions": Object {}, - "watch": Object {}, + "watch": Object { + "alwaysStat": true, + "atomic": false, + "followSymlinks": false, + "ignoreInitial": true, + "ignorePermissionErrors": true, + "persistent": true, + }, }, ], "watchFiles": Array [], @@ -479,7 +535,14 @@ Object { "icons": true, }, "staticOptions": Object {}, - "watch": Object {}, + "watch": Object { + "alwaysStat": true, + "atomic": false, + "followSymlinks": false, + "ignoreInitial": true, + "ignorePermissionErrors": true, + "persistent": true, + }, }, ], "watchFiles": Array [], @@ -527,7 +590,14 @@ Object { "icons": true, }, "staticOptions": Object {}, - "watch": Object {}, + "watch": Object { + "alwaysStat": true, + "atomic": false, + "followSymlinks": false, + "ignoreInitial": true, + "ignorePermissionErrors": true, + "persistent": true, + }, }, ], "watchFiles": Array [], @@ -577,7 +647,14 @@ Object { "icons": true, }, "staticOptions": Object {}, - "watch": Object {}, + "watch": Object { + "alwaysStat": true, + "atomic": false, + "followSymlinks": false, + "ignoreInitial": true, + "ignorePermissionErrors": true, + "persistent": true, + }, }, ], "watchFiles": Array [], @@ -627,7 +704,14 @@ Object { "icons": true, }, "staticOptions": Object {}, - "watch": Object {}, + "watch": Object { + "alwaysStat": true, + "atomic": false, + "followSymlinks": false, + "ignoreInitial": true, + "ignorePermissionErrors": true, + "persistent": true, + }, }, ], "watchFiles": Array [], @@ -676,7 +760,14 @@ Object { "icons": true, }, "staticOptions": Object {}, - "watch": Object {}, + "watch": Object { + "alwaysStat": true, + "atomic": false, + "followSymlinks": false, + "ignoreInitial": true, + "ignorePermissionErrors": true, + "persistent": true, + }, }, ], "watchFiles": Array [], @@ -723,7 +814,14 @@ Object { "icons": true, }, "staticOptions": Object {}, - "watch": Object {}, + "watch": Object { + "alwaysStat": true, + "atomic": false, + "followSymlinks": false, + "ignoreInitial": true, + "ignorePermissionErrors": true, + "persistent": true, + }, }, ], "watchFiles": Array [], @@ -770,7 +868,14 @@ Object { "icons": true, }, "staticOptions": Object {}, - "watch": Object {}, + "watch": Object { + "alwaysStat": true, + "atomic": false, + "followSymlinks": false, + "ignoreInitial": true, + "ignorePermissionErrors": true, + "persistent": true, + }, }, ], "watchFiles": Array [], @@ -817,7 +922,14 @@ Object { "icons": true, }, "staticOptions": Object {}, - "watch": Object {}, + "watch": Object { + "alwaysStat": true, + "atomic": false, + "followSymlinks": false, + "ignoreInitial": true, + "ignorePermissionErrors": true, + "persistent": true, + }, }, ], "watchFiles": Array [], @@ -864,7 +976,14 @@ Object { "icons": true, }, "staticOptions": Object {}, - "watch": Object {}, + "watch": Object { + "alwaysStat": true, + "atomic": false, + "followSymlinks": false, + "ignoreInitial": true, + "ignorePermissionErrors": true, + "persistent": true, + }, }, ], "watchFiles": Array [], @@ -911,7 +1030,14 @@ Object { "icons": true, }, "staticOptions": Object {}, - "watch": Object {}, + "watch": Object { + "alwaysStat": true, + "atomic": false, + "followSymlinks": false, + "ignoreInitial": true, + "ignorePermissionErrors": true, + "persistent": true, + }, }, ], "watchFiles": Array [], @@ -958,7 +1084,14 @@ Object { "icons": true, }, "staticOptions": Object {}, - "watch": Object {}, + "watch": Object { + "alwaysStat": true, + "atomic": false, + "followSymlinks": false, + "ignoreInitial": true, + "ignorePermissionErrors": true, + "persistent": true, + }, }, ], "watchFiles": Array [], @@ -1005,7 +1138,14 @@ Object { "icons": true, }, "staticOptions": Object {}, - "watch": Object {}, + "watch": Object { + "alwaysStat": true, + "atomic": false, + "followSymlinks": false, + "ignoreInitial": true, + "ignorePermissionErrors": true, + "persistent": true, + }, }, ], "watchFiles": Array [], @@ -1052,7 +1192,14 @@ Object { "icons": true, }, "staticOptions": Object {}, - "watch": Object {}, + "watch": Object { + "alwaysStat": true, + "atomic": false, + "followSymlinks": false, + "ignoreInitial": true, + "ignorePermissionErrors": true, + "persistent": true, + }, }, ], "watchFiles": Array [], @@ -1099,7 +1246,14 @@ Object { "icons": true, }, "staticOptions": Object {}, - "watch": Object {}, + "watch": Object { + "alwaysStat": true, + "atomic": false, + "followSymlinks": false, + "ignoreInitial": true, + "ignorePermissionErrors": true, + "persistent": true, + }, }, ], "watchFiles": Array [], @@ -1146,7 +1300,14 @@ Object { "icons": true, }, "staticOptions": Object {}, - "watch": Object {}, + "watch": Object { + "alwaysStat": true, + "atomic": false, + "followSymlinks": false, + "ignoreInitial": true, + "ignorePermissionErrors": true, + "persistent": true, + }, }, ], "watchFiles": Array [], @@ -1193,7 +1354,14 @@ Object { "icons": true, }, "staticOptions": Object {}, - "watch": Object {}, + "watch": Object { + "alwaysStat": true, + "atomic": false, + "followSymlinks": false, + "ignoreInitial": true, + "ignorePermissionErrors": true, + "persistent": true, + }, }, ], "watchFiles": Array [], @@ -1240,7 +1408,14 @@ Object { "icons": true, }, "staticOptions": Object {}, - "watch": Object {}, + "watch": Object { + "alwaysStat": true, + "atomic": false, + "followSymlinks": false, + "ignoreInitial": true, + "ignorePermissionErrors": true, + "persistent": true, + }, }, ], "watchFiles": Array [], @@ -1287,7 +1462,14 @@ Object { "icons": true, }, "staticOptions": Object {}, - "watch": Object {}, + "watch": Object { + "alwaysStat": true, + "atomic": false, + "followSymlinks": false, + "ignoreInitial": true, + "ignorePermissionErrors": true, + "persistent": true, + }, }, ], "watchFiles": Array [], @@ -1334,7 +1516,14 @@ Object { "icons": true, }, "staticOptions": Object {}, - "watch": Object {}, + "watch": Object { + "alwaysStat": true, + "atomic": false, + "followSymlinks": false, + "ignoreInitial": true, + "ignorePermissionErrors": true, + "persistent": true, + }, }, ], "watchFiles": Array [], @@ -1383,6 +1572,12 @@ Object { "staticOptions": Object {}, "watch": Object { "aggregateTimeout": 300, + "alwaysStat": true, + "atomic": false, + "followSymlinks": false, + "ignoreInitial": true, + "ignorePermissionErrors": true, + "persistent": true, }, }, ], @@ -1431,6 +1626,13 @@ Object { }, "staticOptions": Object {}, "watch": Object { + "aggregateTimeout": 300, + "alwaysStat": true, + "atomic": false, + "followSymlinks": false, + "ignoreInitial": true, + "ignorePermissionErrors": true, + "persistent": true, "poll": 500, }, }, @@ -1481,6 +1683,12 @@ Object { "staticOptions": Object {}, "watch": Object { "aggregateTimeout": 300, + "alwaysStat": true, + "atomic": false, + "followSymlinks": false, + "ignoreInitial": true, + "ignorePermissionErrors": true, + "persistent": true, }, }, ], @@ -1530,6 +1738,12 @@ Object { "staticOptions": Object {}, "watch": Object { "aggregateTimeout": 300, + "alwaysStat": true, + "atomic": false, + "followSymlinks": false, + "ignoreInitial": true, + "ignorePermissionErrors": true, + "persistent": true, }, }, ], @@ -1577,7 +1791,14 @@ Object { "icons": true, }, "staticOptions": Object {}, - "watch": Object {}, + "watch": Object { + "alwaysStat": true, + "atomic": false, + "followSymlinks": false, + "ignoreInitial": true, + "ignorePermissionErrors": true, + "persistent": true, + }, }, Object { "directory": "/public", @@ -1588,7 +1809,14 @@ Object { "icons": true, }, "staticOptions": Object {}, - "watch": Object {}, + "watch": Object { + "alwaysStat": true, + "atomic": false, + "followSymlinks": false, + "ignoreInitial": true, + "ignorePermissionErrors": true, + "persistent": true, + }, }, ], "watchFiles": Array [], @@ -1635,7 +1863,14 @@ Object { "icons": true, }, "staticOptions": Object {}, - "watch": Object {}, + "watch": Object { + "alwaysStat": true, + "atomic": false, + "followSymlinks": false, + "ignoreInitial": true, + "ignorePermissionErrors": true, + "persistent": true, + }, }, Object { "directory": "/static/path2", @@ -1646,7 +1881,14 @@ Object { "icons": true, }, "staticOptions": Object {}, - "watch": Object {}, + "watch": Object { + "alwaysStat": true, + "atomic": false, + "followSymlinks": false, + "ignoreInitial": true, + "ignorePermissionErrors": true, + "persistent": true, + }, }, ], "watchFiles": Array [], @@ -1693,7 +1935,14 @@ Object { "icons": true, }, "staticOptions": Object {}, - "watch": Object {}, + "watch": Object { + "alwaysStat": true, + "atomic": false, + "followSymlinks": false, + "ignoreInitial": true, + "ignorePermissionErrors": true, + "persistent": true, + }, }, Object { "directory": "/public", @@ -1704,7 +1953,14 @@ Object { "icons": true, }, "staticOptions": Object {}, - "watch": Object {}, + "watch": Object { + "alwaysStat": true, + "atomic": false, + "followSymlinks": false, + "ignoreInitial": true, + "ignorePermissionErrors": true, + "persistent": true, + }, }, ], "watchFiles": Array [], @@ -1751,7 +2007,14 @@ Object { "icons": true, }, "staticOptions": Object {}, - "watch": Object {}, + "watch": Object { + "alwaysStat": true, + "atomic": false, + "followSymlinks": false, + "ignoreInitial": true, + "ignorePermissionErrors": true, + "persistent": true, + }, }, ], "watchFiles": Array [], @@ -1833,7 +2096,14 @@ Object { "icons": true, }, "staticOptions": Object {}, - "watch": Object {}, + "watch": Object { + "alwaysStat": true, + "atomic": false, + "followSymlinks": false, + "ignoreInitial": true, + "ignorePermissionErrors": true, + "persistent": true, + }, }, ], "watchFiles": Array [], @@ -1880,7 +2150,14 @@ Object { "icons": true, }, "staticOptions": Object {}, - "watch": Object {}, + "watch": Object { + "alwaysStat": true, + "atomic": false, + "followSymlinks": false, + "ignoreInitial": true, + "ignorePermissionErrors": true, + "persistent": true, + }, }, ], "watchFiles": Array [], @@ -1927,7 +2204,14 @@ Object { "icons": true, }, "staticOptions": Object {}, - "watch": Object {}, + "watch": Object { + "alwaysStat": true, + "atomic": false, + "followSymlinks": false, + "ignoreInitial": true, + "ignorePermissionErrors": true, + "persistent": true, + }, }, ], "watchFiles": Array [], @@ -1975,7 +2259,14 @@ Object { "icons": true, }, "staticOptions": Object {}, - "watch": Object {}, + "watch": Object { + "alwaysStat": true, + "atomic": false, + "followSymlinks": false, + "ignoreInitial": true, + "ignorePermissionErrors": true, + "persistent": true, + }, }, ], "watchFiles": Array [], @@ -2022,7 +2313,14 @@ Object { "icons": false, }, "staticOptions": Object {}, - "watch": Object {}, + "watch": Object { + "alwaysStat": true, + "atomic": false, + "followSymlinks": false, + "ignoreInitial": true, + "ignorePermissionErrors": true, + "persistent": true, + }, }, ], "watchFiles": Array [], @@ -2067,7 +2365,14 @@ Object { ], "serveIndex": false, "staticOptions": Object {}, - "watch": Object {}, + "watch": Object { + "alwaysStat": true, + "atomic": false, + "followSymlinks": false, + "ignoreInitial": true, + "ignorePermissionErrors": true, + "persistent": true, + }, }, ], "watchFiles": Array [], @@ -2114,7 +2419,14 @@ Object { "icons": true, }, "staticOptions": Object {}, - "watch": Object {}, + "watch": Object { + "alwaysStat": true, + "atomic": false, + "followSymlinks": false, + "ignoreInitial": true, + "ignorePermissionErrors": true, + "persistent": true, + }, }, ], "watchFiles": Array [], @@ -2162,6 +2474,12 @@ Object { }, "staticOptions": Object {}, "watch": Object { + "alwaysStat": true, + "atomic": false, + "followSymlinks": false, + "ignoreInitial": true, + "ignorePermissionErrors": true, + "persistent": true, "poll": 500, }, }, @@ -2257,7 +2575,14 @@ Object { "icons": true, }, "staticOptions": Object {}, - "watch": Object {}, + "watch": Object { + "alwaysStat": true, + "atomic": false, + "followSymlinks": false, + "ignoreInitial": true, + "ignorePermissionErrors": true, + "persistent": true, + }, }, ], "watchFiles": Array [], @@ -2307,7 +2632,14 @@ Object { "icons": true, }, "staticOptions": Object {}, - "watch": Object {}, + "watch": Object { + "alwaysStat": true, + "atomic": false, + "followSymlinks": false, + "ignoreInitial": true, + "ignorePermissionErrors": true, + "persistent": true, + }, }, ], "watchFiles": Array [], @@ -2354,7 +2686,14 @@ Object { "icons": true, }, "staticOptions": Object {}, - "watch": Object {}, + "watch": Object { + "alwaysStat": true, + "atomic": false, + "followSymlinks": false, + "ignoreInitial": true, + "ignorePermissionErrors": true, + "persistent": true, + }, }, ], "watchFiles": Array [], @@ -2401,7 +2740,14 @@ Object { "icons": true, }, "staticOptions": Object {}, - "watch": Object {}, + "watch": Object { + "alwaysStat": true, + "atomic": false, + "followSymlinks": false, + "ignoreInitial": true, + "ignorePermissionErrors": true, + "persistent": true, + }, }, ], "watchFiles": Array [], From 64994f5ac809571650d54be0b42907778b2ab0e9 Mon Sep 17 00:00:00 2001 From: Nitin Kumar Date: Sun, 14 Nov 2021 15:19:42 +0530 Subject: [PATCH 3/8] fix: do not pass `poll` option to `chokidar` --- lib/Server.js | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/lib/Server.js b/lib/Server.js index fc079f9073..773dcc22bc 100644 --- a/lib/Server.js +++ b/lib/Server.js @@ -2172,6 +2172,10 @@ class Server { interval, }; + if (finalWatchOptions.poll) { + delete finalWatchOptions.poll; + } + const chokidar = require("chokidar"); const watcher = chokidar.watch(watchPath, finalWatchOptions); From 36daa587cc7ec9f0bf3e8c24149a0bc0ec4c7a3a Mon Sep 17 00:00:00 2001 From: Nitin Kumar Date: Mon, 15 Nov 2021 15:37:59 +0530 Subject: [PATCH 4/8] test: add more cases --- .../watchFiles-option.test.js.snap.webpack4 | 56 +++++++++++++++++++ .../watchFiles-option.test.js.snap.webpack5 | 56 +++++++++++++++++++ test/server/watchFiles-option.test.js | 17 ++++++ 3 files changed, 129 insertions(+) diff --git a/test/server/__snapshots__/watchFiles-option.test.js.snap.webpack4 b/test/server/__snapshots__/watchFiles-option.test.js.snap.webpack4 index 783029c365..785a259628 100644 --- a/test/server/__snapshots__/watchFiles-option.test.js.snap.webpack4 +++ b/test/server/__snapshots__/watchFiles-option.test.js.snap.webpack4 @@ -1,5 +1,19 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP +exports[`'watchFiles' option should work with options {"interval":400,"poll":200} should pass correct options to chokidar config 1`] = ` +Object { + "alwaysStat": true, + "atomic": false, + "followSymlinks": false, + "ignoreInitial": true, + "ignorePermissionErrors": true, + "ignored": undefined, + "interval": 400, + "persistent": true, + "usePolling": true, +} +`; + exports[`'watchFiles' option should work with options {"poll":200} should pass correct options to chokidar config 1`] = ` Object { "alwaysStat": true, @@ -28,6 +42,34 @@ Object { } `; +exports[`'watchFiles' option should work with options {"usePolling":false,"interval":200,"poll":400} should pass correct options to chokidar config 1`] = ` +Object { + "alwaysStat": true, + "atomic": false, + "followSymlinks": false, + "ignoreInitial": true, + "ignorePermissionErrors": true, + "ignored": undefined, + "interval": 200, + "persistent": true, + "usePolling": false, +} +`; + +exports[`'watchFiles' option should work with options {"usePolling":false,"poll":200} should pass correct options to chokidar config 1`] = ` +Object { + "alwaysStat": true, + "atomic": false, + "followSymlinks": false, + "ignoreInitial": true, + "ignorePermissionErrors": true, + "ignored": undefined, + "interval": 200, + "persistent": true, + "usePolling": false, +} +`; + exports[`'watchFiles' option should work with options {"usePolling":false,"poll":true} should pass correct options to chokidar config 1`] = ` Object { "alwaysStat": true, @@ -70,6 +112,20 @@ Object { } `; +exports[`'watchFiles' option should work with options {"usePolling":true,"poll":200} should pass correct options to chokidar config 1`] = ` +Object { + "alwaysStat": true, + "atomic": false, + "followSymlinks": false, + "ignoreInitial": true, + "ignorePermissionErrors": true, + "ignored": undefined, + "interval": 200, + "persistent": true, + "usePolling": true, +} +`; + exports[`'watchFiles' option should work with options {"usePolling":true} should pass correct options to chokidar config 1`] = ` Object { "alwaysStat": true, diff --git a/test/server/__snapshots__/watchFiles-option.test.js.snap.webpack5 b/test/server/__snapshots__/watchFiles-option.test.js.snap.webpack5 index 783029c365..785a259628 100644 --- a/test/server/__snapshots__/watchFiles-option.test.js.snap.webpack5 +++ b/test/server/__snapshots__/watchFiles-option.test.js.snap.webpack5 @@ -1,5 +1,19 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP +exports[`'watchFiles' option should work with options {"interval":400,"poll":200} should pass correct options to chokidar config 1`] = ` +Object { + "alwaysStat": true, + "atomic": false, + "followSymlinks": false, + "ignoreInitial": true, + "ignorePermissionErrors": true, + "ignored": undefined, + "interval": 400, + "persistent": true, + "usePolling": true, +} +`; + exports[`'watchFiles' option should work with options {"poll":200} should pass correct options to chokidar config 1`] = ` Object { "alwaysStat": true, @@ -28,6 +42,34 @@ Object { } `; +exports[`'watchFiles' option should work with options {"usePolling":false,"interval":200,"poll":400} should pass correct options to chokidar config 1`] = ` +Object { + "alwaysStat": true, + "atomic": false, + "followSymlinks": false, + "ignoreInitial": true, + "ignorePermissionErrors": true, + "ignored": undefined, + "interval": 200, + "persistent": true, + "usePolling": false, +} +`; + +exports[`'watchFiles' option should work with options {"usePolling":false,"poll":200} should pass correct options to chokidar config 1`] = ` +Object { + "alwaysStat": true, + "atomic": false, + "followSymlinks": false, + "ignoreInitial": true, + "ignorePermissionErrors": true, + "ignored": undefined, + "interval": 200, + "persistent": true, + "usePolling": false, +} +`; + exports[`'watchFiles' option should work with options {"usePolling":false,"poll":true} should pass correct options to chokidar config 1`] = ` Object { "alwaysStat": true, @@ -70,6 +112,20 @@ Object { } `; +exports[`'watchFiles' option should work with options {"usePolling":true,"poll":200} should pass correct options to chokidar config 1`] = ` +Object { + "alwaysStat": true, + "atomic": false, + "followSymlinks": false, + "ignoreInitial": true, + "ignorePermissionErrors": true, + "ignored": undefined, + "interval": 200, + "persistent": true, + "usePolling": true, +} +`; + exports[`'watchFiles' option should work with options {"usePolling":true} should pass correct options to chokidar config 1`] = ` Object { "alwaysStat": true, diff --git a/test/server/watchFiles-option.test.js b/test/server/watchFiles-option.test.js index 7ec343bb57..7a16f89f45 100644 --- a/test/server/watchFiles-option.test.js +++ b/test/server/watchFiles-option.test.js @@ -327,18 +327,35 @@ describe("'watchFiles' option", () => { { usePolling: true, }, + { + usePolling: true, + poll: 200, + }, { usePolling: false, }, + { + usePolling: false, + poll: 200, + }, { usePolling: false, poll: true, }, + { + interval: 400, + poll: 200, + }, { usePolling: true, interval: 200, poll: 400, }, + { + usePolling: false, + interval: 200, + poll: 400, + }, ]; optionCases.forEach((optionCase) => { From e1b50e2a9d728e22c0907803051c347bc861e448 Mon Sep 17 00:00:00 2001 From: Nitin Kumar Date: Mon, 15 Nov 2021 16:23:20 +0530 Subject: [PATCH 5/8] refactor: normalize all watch options together --- lib/Server.js | 89 +++++----- .../Server.test.js.snap.webpack4 | 152 +++++++++++++++++- .../Server.test.js.snap.webpack5 | 152 +++++++++++++++++- 3 files changed, 346 insertions(+), 47 deletions(-) diff --git a/lib/Server.js b/lib/Server.js index 773dcc22bc..5ed22c9abb 100644 --- a/lib/Server.js +++ b/lib/Server.js @@ -444,16 +444,49 @@ class Server { const compilerOptions = this.getCompilerOptions(); // TODO remove `{}` after drop webpack v4 support - const watchOptions = compilerOptions.watchOptions || {}; - const defaultWatchOptions = { - ignoreInitial: true, - persistent: true, - followSymlinks: false, - atomic: false, - alwaysStat: true, - ignorePermissionErrors: true, - ...watchOptions, + const compilerWatchOptions = compilerOptions.watchOptions || {}; + + const getDefaultWatchOptions = (watchOptions = {}) => { + // duplicate the same massaging of options that watchpack performs + // https://github.com/webpack/watchpack/blob/master/lib/DirectoryWatcher.js#L49 + // this isn't an elegant solution, but we'll improve it in the future + const usePolling = + typeof watchOptions.usePolling !== "undefined" + ? watchOptions.usePolling + : Boolean(watchOptions.poll); + + const interval = + // eslint-disable-next-line no-nested-ternary + typeof watchOptions.interval !== "undefined" + ? watchOptions.interval + : typeof watchOptions.poll === "number" + ? watchOptions.poll + : // eslint-disable-next-line no-undefined + undefined; + + const finalWatchOptions = { + ignoreInitial: true, + persistent: true, + followSymlinks: false, + atomic: false, + alwaysStat: true, + ignorePermissionErrors: true, + ...compilerWatchOptions, + ...watchOptions, + ignored: watchOptions.ignored, + usePolling, + interval, + }; + + if (finalWatchOptions.poll) { + delete finalWatchOptions.poll; + } + + return finalWatchOptions; }; + + const defaultWatchOptions = getDefaultWatchOptions(); + const defaultOptionsForStatic = { directory: path.join(process.cwd(), "public"), staticOptions: {}, @@ -965,8 +998,7 @@ class Server { staticOption.watch = defaultOptionsForStatic.watch; } else if (typeof staticOption.watch === "object") { staticOption.watch = { - ...defaultOptionsForStatic.watch, - ...staticOption.watch, + ...getDefaultWatchOptions(staticOption.watch), }; } @@ -990,8 +1022,7 @@ class Server { { paths: options.watchFiles.paths, options: { - ...defaultWatchOptions, - ...(options.watchFiles.options || {}), + ...getDefaultWatchOptions(options.watchFiles.options || {}), }, }, ]; @@ -1004,8 +1035,7 @@ class Server { return { paths: item.paths, options: { - ...defaultWatchOptions, - ...(item.options || {}), + ...getDefaultWatchOptions(item.options || {}), }, }; }); @@ -2149,35 +2179,8 @@ class Server { } watchFiles(watchPath, watchOptions) { - // duplicate the same massaging of options that watchpack performs - // https://github.com/webpack/watchpack/blob/master/lib/DirectoryWatcher.js#L49 - // this isn't an elegant solution, but we'll improve it in the future - const usePolling = - typeof watchOptions.usePolling !== "undefined" - ? watchOptions.usePolling - : Boolean(watchOptions.poll); - const interval = - // eslint-disable-next-line no-nested-ternary - typeof watchOptions.interval !== "undefined" - ? watchOptions.interval - : typeof watchOptions.poll === "number" - ? watchOptions.poll - : // eslint-disable-next-line no-undefined - undefined; - - const finalWatchOptions = { - ...watchOptions, - ignored: watchOptions.ignored, - usePolling, - interval, - }; - - if (finalWatchOptions.poll) { - delete finalWatchOptions.poll; - } - const chokidar = require("chokidar"); - const watcher = chokidar.watch(watchPath, finalWatchOptions); + const watcher = chokidar.watch(watchPath, watchOptions); // disabling refreshing on changing the content if (this.options.liveReload) { diff --git a/test/server/__snapshots__/Server.test.js.snap.webpack4 b/test/server/__snapshots__/Server.test.js.snap.webpack4 index d2238178cf..a4ecb86a4f 100644 --- a/test/server/__snapshots__/Server.test.js.snap.webpack4 +++ b/test/server/__snapshots__/Server.test.js.snap.webpack4 @@ -96,7 +96,10 @@ Object { "followSymlinks": false, "ignoreInitial": true, "ignorePermissionErrors": true, + "ignored": undefined, + "interval": undefined, "persistent": true, + "usePolling": false, }, }, ], @@ -150,7 +153,10 @@ Object { "followSymlinks": false, "ignoreInitial": true, "ignorePermissionErrors": true, + "ignored": undefined, + "interval": undefined, "persistent": true, + "usePolling": false, }, }, ], @@ -205,7 +211,10 @@ Object { "followSymlinks": false, "ignoreInitial": true, "ignorePermissionErrors": true, + "ignored": undefined, + "interval": undefined, "persistent": true, + "usePolling": false, }, }, ], @@ -262,7 +271,10 @@ Object { "followSymlinks": false, "ignoreInitial": true, "ignorePermissionErrors": true, + "ignored": undefined, + "interval": undefined, "persistent": true, + "usePolling": false, }, }, ], @@ -319,7 +331,10 @@ Object { "followSymlinks": false, "ignoreInitial": true, "ignorePermissionErrors": true, + "ignored": undefined, + "interval": undefined, "persistent": true, + "usePolling": false, }, }, ], @@ -375,7 +390,10 @@ Object { "followSymlinks": false, "ignoreInitial": true, "ignorePermissionErrors": true, + "ignored": undefined, + "interval": undefined, "persistent": true, + "usePolling": false, }, }, ], @@ -431,7 +449,10 @@ Object { "followSymlinks": false, "ignoreInitial": true, "ignorePermissionErrors": true, + "ignored": undefined, + "interval": undefined, "persistent": true, + "usePolling": false, }, }, ], @@ -486,7 +507,10 @@ Object { "followSymlinks": false, "ignoreInitial": true, "ignorePermissionErrors": true, + "ignored": undefined, + "interval": undefined, "persistent": true, + "usePolling": false, }, }, ], @@ -541,7 +565,10 @@ Object { "followSymlinks": false, "ignoreInitial": true, "ignorePermissionErrors": true, + "ignored": undefined, + "interval": undefined, "persistent": true, + "usePolling": false, }, }, ], @@ -596,7 +623,10 @@ Object { "followSymlinks": false, "ignoreInitial": true, "ignorePermissionErrors": true, + "ignored": undefined, + "interval": undefined, "persistent": true, + "usePolling": false, }, }, ], @@ -653,7 +683,10 @@ Object { "followSymlinks": false, "ignoreInitial": true, "ignorePermissionErrors": true, + "ignored": undefined, + "interval": undefined, "persistent": true, + "usePolling": false, }, }, ], @@ -710,7 +743,10 @@ Object { "followSymlinks": false, "ignoreInitial": true, "ignorePermissionErrors": true, + "ignored": undefined, + "interval": undefined, "persistent": true, + "usePolling": false, }, }, ], @@ -766,7 +802,10 @@ Object { "followSymlinks": false, "ignoreInitial": true, "ignorePermissionErrors": true, + "ignored": undefined, + "interval": undefined, "persistent": true, + "usePolling": false, }, }, ], @@ -820,7 +859,10 @@ Object { "followSymlinks": false, "ignoreInitial": true, "ignorePermissionErrors": true, + "ignored": undefined, + "interval": undefined, "persistent": true, + "usePolling": false, }, }, ], @@ -874,7 +916,10 @@ Object { "followSymlinks": false, "ignoreInitial": true, "ignorePermissionErrors": true, + "ignored": undefined, + "interval": undefined, "persistent": true, + "usePolling": false, }, }, ], @@ -928,7 +973,10 @@ Object { "followSymlinks": false, "ignoreInitial": true, "ignorePermissionErrors": true, + "ignored": undefined, + "interval": undefined, "persistent": true, + "usePolling": false, }, }, ], @@ -982,7 +1030,10 @@ Object { "followSymlinks": false, "ignoreInitial": true, "ignorePermissionErrors": true, + "ignored": undefined, + "interval": undefined, "persistent": true, + "usePolling": false, }, }, ], @@ -1036,7 +1087,10 @@ Object { "followSymlinks": false, "ignoreInitial": true, "ignorePermissionErrors": true, + "ignored": undefined, + "interval": undefined, "persistent": true, + "usePolling": false, }, }, ], @@ -1090,7 +1144,10 @@ Object { "followSymlinks": false, "ignoreInitial": true, "ignorePermissionErrors": true, + "ignored": undefined, + "interval": undefined, "persistent": true, + "usePolling": false, }, }, ], @@ -1144,7 +1201,10 @@ Object { "followSymlinks": false, "ignoreInitial": true, "ignorePermissionErrors": true, + "ignored": undefined, + "interval": undefined, "persistent": true, + "usePolling": false, }, }, ], @@ -1198,7 +1258,10 @@ Object { "followSymlinks": false, "ignoreInitial": true, "ignorePermissionErrors": true, + "ignored": undefined, + "interval": undefined, "persistent": true, + "usePolling": false, }, }, ], @@ -1252,7 +1315,10 @@ Object { "followSymlinks": false, "ignoreInitial": true, "ignorePermissionErrors": true, + "ignored": undefined, + "interval": undefined, "persistent": true, + "usePolling": false, }, }, ], @@ -1306,7 +1372,10 @@ Object { "followSymlinks": false, "ignoreInitial": true, "ignorePermissionErrors": true, + "ignored": undefined, + "interval": undefined, "persistent": true, + "usePolling": false, }, }, ], @@ -1360,7 +1429,10 @@ Object { "followSymlinks": false, "ignoreInitial": true, "ignorePermissionErrors": true, + "ignored": undefined, + "interval": undefined, "persistent": true, + "usePolling": false, }, }, ], @@ -1414,7 +1486,10 @@ Object { "followSymlinks": false, "ignoreInitial": true, "ignorePermissionErrors": true, + "ignored": undefined, + "interval": undefined, "persistent": true, + "usePolling": false, }, }, ], @@ -1468,7 +1543,10 @@ Object { "followSymlinks": false, "ignoreInitial": true, "ignorePermissionErrors": true, + "ignored": undefined, + "interval": undefined, "persistent": true, + "usePolling": false, }, }, ], @@ -1522,7 +1600,10 @@ Object { "followSymlinks": false, "ignoreInitial": true, "ignorePermissionErrors": true, + "ignored": undefined, + "interval": undefined, "persistent": true, + "usePolling": false, }, }, ], @@ -1577,7 +1658,10 @@ Object { "followSymlinks": false, "ignoreInitial": true, "ignorePermissionErrors": true, + "ignored": undefined, + "interval": undefined, "persistent": true, + "usePolling": false, }, }, ], @@ -1632,8 +1716,10 @@ Object { "followSymlinks": false, "ignoreInitial": true, "ignorePermissionErrors": true, + "ignored": undefined, + "interval": 500, "persistent": true, - "poll": 500, + "usePolling": true, }, }, ], @@ -1688,7 +1774,10 @@ Object { "followSymlinks": false, "ignoreInitial": true, "ignorePermissionErrors": true, + "ignored": undefined, + "interval": undefined, "persistent": true, + "usePolling": false, }, }, ], @@ -1743,7 +1832,10 @@ Object { "followSymlinks": false, "ignoreInitial": true, "ignorePermissionErrors": true, + "ignored": undefined, + "interval": undefined, "persistent": true, + "usePolling": false, }, }, ], @@ -1797,7 +1889,10 @@ Object { "followSymlinks": false, "ignoreInitial": true, "ignorePermissionErrors": true, + "ignored": undefined, + "interval": undefined, "persistent": true, + "usePolling": false, }, }, Object { @@ -1815,7 +1910,10 @@ Object { "followSymlinks": false, "ignoreInitial": true, "ignorePermissionErrors": true, + "ignored": undefined, + "interval": undefined, "persistent": true, + "usePolling": false, }, }, ], @@ -1869,7 +1967,10 @@ Object { "followSymlinks": false, "ignoreInitial": true, "ignorePermissionErrors": true, + "ignored": undefined, + "interval": undefined, "persistent": true, + "usePolling": false, }, }, Object { @@ -1887,7 +1988,10 @@ Object { "followSymlinks": false, "ignoreInitial": true, "ignorePermissionErrors": true, + "ignored": undefined, + "interval": undefined, "persistent": true, + "usePolling": false, }, }, ], @@ -1941,7 +2045,10 @@ Object { "followSymlinks": false, "ignoreInitial": true, "ignorePermissionErrors": true, + "ignored": undefined, + "interval": undefined, "persistent": true, + "usePolling": false, }, }, Object { @@ -1959,7 +2066,10 @@ Object { "followSymlinks": false, "ignoreInitial": true, "ignorePermissionErrors": true, + "ignored": undefined, + "interval": undefined, "persistent": true, + "usePolling": false, }, }, ], @@ -2013,7 +2123,10 @@ Object { "followSymlinks": false, "ignoreInitial": true, "ignorePermissionErrors": true, + "ignored": undefined, + "interval": undefined, "persistent": true, + "usePolling": false, }, }, ], @@ -2102,7 +2215,10 @@ Object { "followSymlinks": false, "ignoreInitial": true, "ignorePermissionErrors": true, + "ignored": undefined, + "interval": undefined, "persistent": true, + "usePolling": false, }, }, ], @@ -2156,7 +2272,10 @@ Object { "followSymlinks": false, "ignoreInitial": true, "ignorePermissionErrors": true, + "ignored": undefined, + "interval": undefined, "persistent": true, + "usePolling": false, }, }, ], @@ -2210,7 +2329,10 @@ Object { "followSymlinks": false, "ignoreInitial": true, "ignorePermissionErrors": true, + "ignored": undefined, + "interval": undefined, "persistent": true, + "usePolling": false, }, }, ], @@ -2265,7 +2387,10 @@ Object { "followSymlinks": false, "ignoreInitial": true, "ignorePermissionErrors": true, + "ignored": undefined, + "interval": undefined, "persistent": true, + "usePolling": false, }, }, ], @@ -2319,7 +2444,10 @@ Object { "followSymlinks": false, "ignoreInitial": true, "ignorePermissionErrors": true, + "ignored": undefined, + "interval": undefined, "persistent": true, + "usePolling": false, }, }, ], @@ -2371,7 +2499,10 @@ Object { "followSymlinks": false, "ignoreInitial": true, "ignorePermissionErrors": true, + "ignored": undefined, + "interval": undefined, "persistent": true, + "usePolling": false, }, }, ], @@ -2425,7 +2556,10 @@ Object { "followSymlinks": false, "ignoreInitial": true, "ignorePermissionErrors": true, + "ignored": undefined, + "interval": undefined, "persistent": true, + "usePolling": false, }, }, ], @@ -2479,8 +2613,10 @@ Object { "followSymlinks": false, "ignoreInitial": true, "ignorePermissionErrors": true, + "ignored": undefined, + "interval": 500, "persistent": true, - "poll": 500, + "usePolling": true, }, }, ], @@ -2581,7 +2717,10 @@ Object { "followSymlinks": false, "ignoreInitial": true, "ignorePermissionErrors": true, + "ignored": undefined, + "interval": undefined, "persistent": true, + "usePolling": false, }, }, ], @@ -2638,7 +2777,10 @@ Object { "followSymlinks": false, "ignoreInitial": true, "ignorePermissionErrors": true, + "ignored": undefined, + "interval": undefined, "persistent": true, + "usePolling": false, }, }, ], @@ -2692,7 +2834,10 @@ Object { "followSymlinks": false, "ignoreInitial": true, "ignorePermissionErrors": true, + "ignored": undefined, + "interval": undefined, "persistent": true, + "usePolling": false, }, }, ], @@ -2746,7 +2891,10 @@ Object { "followSymlinks": false, "ignoreInitial": true, "ignorePermissionErrors": true, + "ignored": undefined, + "interval": undefined, "persistent": true, + "usePolling": false, }, }, ], diff --git a/test/server/__snapshots__/Server.test.js.snap.webpack5 b/test/server/__snapshots__/Server.test.js.snap.webpack5 index d2238178cf..a4ecb86a4f 100644 --- a/test/server/__snapshots__/Server.test.js.snap.webpack5 +++ b/test/server/__snapshots__/Server.test.js.snap.webpack5 @@ -96,7 +96,10 @@ Object { "followSymlinks": false, "ignoreInitial": true, "ignorePermissionErrors": true, + "ignored": undefined, + "interval": undefined, "persistent": true, + "usePolling": false, }, }, ], @@ -150,7 +153,10 @@ Object { "followSymlinks": false, "ignoreInitial": true, "ignorePermissionErrors": true, + "ignored": undefined, + "interval": undefined, "persistent": true, + "usePolling": false, }, }, ], @@ -205,7 +211,10 @@ Object { "followSymlinks": false, "ignoreInitial": true, "ignorePermissionErrors": true, + "ignored": undefined, + "interval": undefined, "persistent": true, + "usePolling": false, }, }, ], @@ -262,7 +271,10 @@ Object { "followSymlinks": false, "ignoreInitial": true, "ignorePermissionErrors": true, + "ignored": undefined, + "interval": undefined, "persistent": true, + "usePolling": false, }, }, ], @@ -319,7 +331,10 @@ Object { "followSymlinks": false, "ignoreInitial": true, "ignorePermissionErrors": true, + "ignored": undefined, + "interval": undefined, "persistent": true, + "usePolling": false, }, }, ], @@ -375,7 +390,10 @@ Object { "followSymlinks": false, "ignoreInitial": true, "ignorePermissionErrors": true, + "ignored": undefined, + "interval": undefined, "persistent": true, + "usePolling": false, }, }, ], @@ -431,7 +449,10 @@ Object { "followSymlinks": false, "ignoreInitial": true, "ignorePermissionErrors": true, + "ignored": undefined, + "interval": undefined, "persistent": true, + "usePolling": false, }, }, ], @@ -486,7 +507,10 @@ Object { "followSymlinks": false, "ignoreInitial": true, "ignorePermissionErrors": true, + "ignored": undefined, + "interval": undefined, "persistent": true, + "usePolling": false, }, }, ], @@ -541,7 +565,10 @@ Object { "followSymlinks": false, "ignoreInitial": true, "ignorePermissionErrors": true, + "ignored": undefined, + "interval": undefined, "persistent": true, + "usePolling": false, }, }, ], @@ -596,7 +623,10 @@ Object { "followSymlinks": false, "ignoreInitial": true, "ignorePermissionErrors": true, + "ignored": undefined, + "interval": undefined, "persistent": true, + "usePolling": false, }, }, ], @@ -653,7 +683,10 @@ Object { "followSymlinks": false, "ignoreInitial": true, "ignorePermissionErrors": true, + "ignored": undefined, + "interval": undefined, "persistent": true, + "usePolling": false, }, }, ], @@ -710,7 +743,10 @@ Object { "followSymlinks": false, "ignoreInitial": true, "ignorePermissionErrors": true, + "ignored": undefined, + "interval": undefined, "persistent": true, + "usePolling": false, }, }, ], @@ -766,7 +802,10 @@ Object { "followSymlinks": false, "ignoreInitial": true, "ignorePermissionErrors": true, + "ignored": undefined, + "interval": undefined, "persistent": true, + "usePolling": false, }, }, ], @@ -820,7 +859,10 @@ Object { "followSymlinks": false, "ignoreInitial": true, "ignorePermissionErrors": true, + "ignored": undefined, + "interval": undefined, "persistent": true, + "usePolling": false, }, }, ], @@ -874,7 +916,10 @@ Object { "followSymlinks": false, "ignoreInitial": true, "ignorePermissionErrors": true, + "ignored": undefined, + "interval": undefined, "persistent": true, + "usePolling": false, }, }, ], @@ -928,7 +973,10 @@ Object { "followSymlinks": false, "ignoreInitial": true, "ignorePermissionErrors": true, + "ignored": undefined, + "interval": undefined, "persistent": true, + "usePolling": false, }, }, ], @@ -982,7 +1030,10 @@ Object { "followSymlinks": false, "ignoreInitial": true, "ignorePermissionErrors": true, + "ignored": undefined, + "interval": undefined, "persistent": true, + "usePolling": false, }, }, ], @@ -1036,7 +1087,10 @@ Object { "followSymlinks": false, "ignoreInitial": true, "ignorePermissionErrors": true, + "ignored": undefined, + "interval": undefined, "persistent": true, + "usePolling": false, }, }, ], @@ -1090,7 +1144,10 @@ Object { "followSymlinks": false, "ignoreInitial": true, "ignorePermissionErrors": true, + "ignored": undefined, + "interval": undefined, "persistent": true, + "usePolling": false, }, }, ], @@ -1144,7 +1201,10 @@ Object { "followSymlinks": false, "ignoreInitial": true, "ignorePermissionErrors": true, + "ignored": undefined, + "interval": undefined, "persistent": true, + "usePolling": false, }, }, ], @@ -1198,7 +1258,10 @@ Object { "followSymlinks": false, "ignoreInitial": true, "ignorePermissionErrors": true, + "ignored": undefined, + "interval": undefined, "persistent": true, + "usePolling": false, }, }, ], @@ -1252,7 +1315,10 @@ Object { "followSymlinks": false, "ignoreInitial": true, "ignorePermissionErrors": true, + "ignored": undefined, + "interval": undefined, "persistent": true, + "usePolling": false, }, }, ], @@ -1306,7 +1372,10 @@ Object { "followSymlinks": false, "ignoreInitial": true, "ignorePermissionErrors": true, + "ignored": undefined, + "interval": undefined, "persistent": true, + "usePolling": false, }, }, ], @@ -1360,7 +1429,10 @@ Object { "followSymlinks": false, "ignoreInitial": true, "ignorePermissionErrors": true, + "ignored": undefined, + "interval": undefined, "persistent": true, + "usePolling": false, }, }, ], @@ -1414,7 +1486,10 @@ Object { "followSymlinks": false, "ignoreInitial": true, "ignorePermissionErrors": true, + "ignored": undefined, + "interval": undefined, "persistent": true, + "usePolling": false, }, }, ], @@ -1468,7 +1543,10 @@ Object { "followSymlinks": false, "ignoreInitial": true, "ignorePermissionErrors": true, + "ignored": undefined, + "interval": undefined, "persistent": true, + "usePolling": false, }, }, ], @@ -1522,7 +1600,10 @@ Object { "followSymlinks": false, "ignoreInitial": true, "ignorePermissionErrors": true, + "ignored": undefined, + "interval": undefined, "persistent": true, + "usePolling": false, }, }, ], @@ -1577,7 +1658,10 @@ Object { "followSymlinks": false, "ignoreInitial": true, "ignorePermissionErrors": true, + "ignored": undefined, + "interval": undefined, "persistent": true, + "usePolling": false, }, }, ], @@ -1632,8 +1716,10 @@ Object { "followSymlinks": false, "ignoreInitial": true, "ignorePermissionErrors": true, + "ignored": undefined, + "interval": 500, "persistent": true, - "poll": 500, + "usePolling": true, }, }, ], @@ -1688,7 +1774,10 @@ Object { "followSymlinks": false, "ignoreInitial": true, "ignorePermissionErrors": true, + "ignored": undefined, + "interval": undefined, "persistent": true, + "usePolling": false, }, }, ], @@ -1743,7 +1832,10 @@ Object { "followSymlinks": false, "ignoreInitial": true, "ignorePermissionErrors": true, + "ignored": undefined, + "interval": undefined, "persistent": true, + "usePolling": false, }, }, ], @@ -1797,7 +1889,10 @@ Object { "followSymlinks": false, "ignoreInitial": true, "ignorePermissionErrors": true, + "ignored": undefined, + "interval": undefined, "persistent": true, + "usePolling": false, }, }, Object { @@ -1815,7 +1910,10 @@ Object { "followSymlinks": false, "ignoreInitial": true, "ignorePermissionErrors": true, + "ignored": undefined, + "interval": undefined, "persistent": true, + "usePolling": false, }, }, ], @@ -1869,7 +1967,10 @@ Object { "followSymlinks": false, "ignoreInitial": true, "ignorePermissionErrors": true, + "ignored": undefined, + "interval": undefined, "persistent": true, + "usePolling": false, }, }, Object { @@ -1887,7 +1988,10 @@ Object { "followSymlinks": false, "ignoreInitial": true, "ignorePermissionErrors": true, + "ignored": undefined, + "interval": undefined, "persistent": true, + "usePolling": false, }, }, ], @@ -1941,7 +2045,10 @@ Object { "followSymlinks": false, "ignoreInitial": true, "ignorePermissionErrors": true, + "ignored": undefined, + "interval": undefined, "persistent": true, + "usePolling": false, }, }, Object { @@ -1959,7 +2066,10 @@ Object { "followSymlinks": false, "ignoreInitial": true, "ignorePermissionErrors": true, + "ignored": undefined, + "interval": undefined, "persistent": true, + "usePolling": false, }, }, ], @@ -2013,7 +2123,10 @@ Object { "followSymlinks": false, "ignoreInitial": true, "ignorePermissionErrors": true, + "ignored": undefined, + "interval": undefined, "persistent": true, + "usePolling": false, }, }, ], @@ -2102,7 +2215,10 @@ Object { "followSymlinks": false, "ignoreInitial": true, "ignorePermissionErrors": true, + "ignored": undefined, + "interval": undefined, "persistent": true, + "usePolling": false, }, }, ], @@ -2156,7 +2272,10 @@ Object { "followSymlinks": false, "ignoreInitial": true, "ignorePermissionErrors": true, + "ignored": undefined, + "interval": undefined, "persistent": true, + "usePolling": false, }, }, ], @@ -2210,7 +2329,10 @@ Object { "followSymlinks": false, "ignoreInitial": true, "ignorePermissionErrors": true, + "ignored": undefined, + "interval": undefined, "persistent": true, + "usePolling": false, }, }, ], @@ -2265,7 +2387,10 @@ Object { "followSymlinks": false, "ignoreInitial": true, "ignorePermissionErrors": true, + "ignored": undefined, + "interval": undefined, "persistent": true, + "usePolling": false, }, }, ], @@ -2319,7 +2444,10 @@ Object { "followSymlinks": false, "ignoreInitial": true, "ignorePermissionErrors": true, + "ignored": undefined, + "interval": undefined, "persistent": true, + "usePolling": false, }, }, ], @@ -2371,7 +2499,10 @@ Object { "followSymlinks": false, "ignoreInitial": true, "ignorePermissionErrors": true, + "ignored": undefined, + "interval": undefined, "persistent": true, + "usePolling": false, }, }, ], @@ -2425,7 +2556,10 @@ Object { "followSymlinks": false, "ignoreInitial": true, "ignorePermissionErrors": true, + "ignored": undefined, + "interval": undefined, "persistent": true, + "usePolling": false, }, }, ], @@ -2479,8 +2613,10 @@ Object { "followSymlinks": false, "ignoreInitial": true, "ignorePermissionErrors": true, + "ignored": undefined, + "interval": 500, "persistent": true, - "poll": 500, + "usePolling": true, }, }, ], @@ -2581,7 +2717,10 @@ Object { "followSymlinks": false, "ignoreInitial": true, "ignorePermissionErrors": true, + "ignored": undefined, + "interval": undefined, "persistent": true, + "usePolling": false, }, }, ], @@ -2638,7 +2777,10 @@ Object { "followSymlinks": false, "ignoreInitial": true, "ignorePermissionErrors": true, + "ignored": undefined, + "interval": undefined, "persistent": true, + "usePolling": false, }, }, ], @@ -2692,7 +2834,10 @@ Object { "followSymlinks": false, "ignoreInitial": true, "ignorePermissionErrors": true, + "ignored": undefined, + "interval": undefined, "persistent": true, + "usePolling": false, }, }, ], @@ -2746,7 +2891,10 @@ Object { "followSymlinks": false, "ignoreInitial": true, "ignorePermissionErrors": true, + "ignored": undefined, + "interval": undefined, "persistent": true, + "usePolling": false, }, }, ], From 6b328b47bac24ae0946ef2f7cdeadf916086f085 Mon Sep 17 00:00:00 2001 From: Nitin Kumar Date: Mon, 15 Nov 2021 16:47:57 +0530 Subject: [PATCH 6/8] refactor: code --- lib/Server.js | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/lib/Server.js b/lib/Server.js index 5ed22c9abb..30c68993d8 100644 --- a/lib/Server.js +++ b/lib/Server.js @@ -447,6 +447,10 @@ class Server { const compilerWatchOptions = compilerOptions.watchOptions || {}; const getDefaultWatchOptions = (watchOptions = {}) => { + watchOptions = { + ...compilerWatchOptions, + ...watchOptions, + }; // duplicate the same massaging of options that watchpack performs // https://github.com/webpack/watchpack/blob/master/lib/DirectoryWatcher.js#L49 // this isn't an elegant solution, but we'll improve it in the future @@ -464,6 +468,10 @@ class Server { : // eslint-disable-next-line no-undefined undefined; + if (watchOptions.poll) { + delete watchOptions.poll; + } + const finalWatchOptions = { ignoreInitial: true, persistent: true, @@ -471,17 +479,12 @@ class Server { atomic: false, alwaysStat: true, ignorePermissionErrors: true, - ...compilerWatchOptions, ...watchOptions, ignored: watchOptions.ignored, usePolling, interval, }; - if (finalWatchOptions.poll) { - delete finalWatchOptions.poll; - } - return finalWatchOptions; }; From 00cf35180ee773ed55b788f9263b59b32e632bd3 Mon Sep 17 00:00:00 2001 From: Nitin Kumar Date: Fri, 19 Nov 2021 17:20:25 +0530 Subject: [PATCH 7/8] refactor: code --- lib/Server.js | 11 ++--------- 1 file changed, 2 insertions(+), 9 deletions(-) diff --git a/lib/Server.js b/lib/Server.js index 30c68993d8..4220156c21 100644 --- a/lib/Server.js +++ b/lib/Server.js @@ -447,10 +447,6 @@ class Server { const compilerWatchOptions = compilerOptions.watchOptions || {}; const getDefaultWatchOptions = (watchOptions = {}) => { - watchOptions = { - ...compilerWatchOptions, - ...watchOptions, - }; // duplicate the same massaging of options that watchpack performs // https://github.com/webpack/watchpack/blob/master/lib/DirectoryWatcher.js#L49 // this isn't an elegant solution, but we'll improve it in the future @@ -468,17 +464,14 @@ class Server { : // eslint-disable-next-line no-undefined undefined; - if (watchOptions.poll) { - delete watchOptions.poll; - } - - const finalWatchOptions = { + const { poll, ...finalWatchOptions } = { ignoreInitial: true, persistent: true, followSymlinks: false, atomic: false, alwaysStat: true, ignorePermissionErrors: true, + ...compilerWatchOptions, ...watchOptions, ignored: watchOptions.ignored, usePolling, From ea12406a30f6e13777c68e35ac75bee24add1caa Mon Sep 17 00:00:00 2001 From: evilebottnawi Date: Thu, 25 Nov 2021 19:19:52 +0300 Subject: [PATCH 8/8] refactor: code --- lib/Server.js | 186 +++++++++++------- .../Server.test.js.snap.webpack4 | 4 - .../Server.test.js.snap.webpack5 | 4 - 3 files changed, 113 insertions(+), 81 deletions(-) diff --git a/lib/Server.js b/lib/Server.js index 4220156c21..2283993a1f 100644 --- a/lib/Server.js +++ b/lib/Server.js @@ -445,51 +445,124 @@ class Server { const compilerOptions = this.getCompilerOptions(); // TODO remove `{}` after drop webpack v4 support const compilerWatchOptions = compilerOptions.watchOptions || {}; + const getWatchOptions = (watchOptions = {}) => { + const getPolling = () => { + if (typeof watchOptions.usePolling !== "undefined") { + return watchOptions.usePolling; + } - const getDefaultWatchOptions = (watchOptions = {}) => { - // duplicate the same massaging of options that watchpack performs - // https://github.com/webpack/watchpack/blob/master/lib/DirectoryWatcher.js#L49 - // this isn't an elegant solution, but we'll improve it in the future - const usePolling = - typeof watchOptions.usePolling !== "undefined" - ? watchOptions.usePolling - : Boolean(watchOptions.poll); + if (typeof watchOptions.poll !== "undefined") { + return Boolean(watchOptions.poll); + } - const interval = - // eslint-disable-next-line no-nested-ternary - typeof watchOptions.interval !== "undefined" - ? watchOptions.interval - : typeof watchOptions.poll === "number" - ? watchOptions.poll - : // eslint-disable-next-line no-undefined - undefined; + if (typeof compilerWatchOptions.poll !== "undefined") { + return Boolean(compilerWatchOptions.poll); + } + + return false; + }; + const getInterval = () => { + if (typeof watchOptions.interval !== "undefined") { + return watchOptions.interval; + } + + if (typeof watchOptions.poll === "number") { + return watchOptions.poll; + } - const { poll, ...finalWatchOptions } = { + if (typeof compilerWatchOptions.poll === "number") { + return compilerWatchOptions.poll; + } + }; + + const usePolling = getPolling(); + const interval = getInterval(); + const { poll, ...rest } = watchOptions; + + return { ignoreInitial: true, persistent: true, followSymlinks: false, atomic: false, alwaysStat: true, ignorePermissionErrors: true, - ...compilerWatchOptions, - ...watchOptions, - ignored: watchOptions.ignored, + // Respect options from compiler watchOptions usePolling, interval, + ignored: watchOptions.ignored, + // TODO: we respect these options for all watch options and allow developers to pass them to chokidar, but chokidar doesn't have these options maybe we need revisit that in future + ...rest, }; - - return finalWatchOptions; }; + const getStaticItem = (optionsForStatic) => { + const getDefaultStaticOptions = () => { + return { + directory: path.join(process.cwd(), "public"), + staticOptions: {}, + publicPath: ["/"], + serveIndex: { icons: true }, + watch: getWatchOptions(), + }; + }; - const defaultWatchOptions = getDefaultWatchOptions(); + let item; - const defaultOptionsForStatic = { - directory: path.join(process.cwd(), "public"), - staticOptions: {}, - publicPath: ["/"], - serveIndex: { icons: true }, - // Respect options from compiler watchOptions - watch: defaultWatchOptions, + if (typeof optionsForStatic === "undefined") { + item = getDefaultStaticOptions(); + } else if (typeof optionsForStatic === "string") { + item = { + ...getDefaultStaticOptions(), + directory: optionsForStatic, + }; + } else { + const def = getDefaultStaticOptions(); + + item = { + directory: + typeof optionsForStatic.directory !== "undefined" + ? optionsForStatic.directory + : def.directory, + // TODO: do merge in the next major release + staticOptions: + typeof optionsForStatic.staticOptions !== "undefined" + ? optionsForStatic.staticOptions + : def.staticOptions, + publicPath: + typeof optionsForStatic.publicPath !== "undefined" + ? optionsForStatic.publicPath + : def.publicPath, + // TODO: do merge in the next major release + serveIndex: + // eslint-disable-next-line no-nested-ternary + typeof optionsForStatic.serveIndex !== "undefined" + ? typeof optionsForStatic.serveIndex === "boolean" && + optionsForStatic.serveIndex + ? def.serveIndex + : optionsForStatic.serveIndex + : def.serveIndex, + watch: + // eslint-disable-next-line no-nested-ternary + typeof optionsForStatic.watch !== "undefined" + ? // eslint-disable-next-line no-nested-ternary + typeof optionsForStatic.watch === "boolean" + ? optionsForStatic.watch + ? def.watch + : false + : getWatchOptions(optionsForStatic.watch) + : def.watch, + }; + } + + if (Server.isAbsoluteURL(item.directory)) { + throw new Error("Using a URL as static.directory is not supported"); + } + + // ensure that publicPath is an array + if (typeof item.publicPath === "string") { + item.publicPath = [item.publicPath]; + } + + return item; }; if (typeof options.allowedHosts === "undefined") { @@ -959,55 +1032,26 @@ class Server { } if (typeof options.static === "undefined") { - options.static = [defaultOptionsForStatic]; + options.static = [getStaticItem()]; } else if (typeof options.static === "boolean") { - options.static = options.static ? [defaultOptionsForStatic] : false; + options.static = options.static ? [getStaticItem()] : false; } else if (typeof options.static === "string") { - options.static = [ - { ...defaultOptionsForStatic, directory: options.static }, - ]; + options.static = [getStaticItem(options.static)]; } else if (Array.isArray(options.static)) { options.static = options.static.map((item) => { if (typeof item === "string") { - return { ...defaultOptionsForStatic, directory: item }; + return getStaticItem(item); } - return { ...defaultOptionsForStatic, ...item }; + return getStaticItem(item); }); } else { - options.static = [{ ...defaultOptionsForStatic, ...options.static }]; - } - - if (options.static) { - options.static.forEach((staticOption) => { - if (Server.isAbsoluteURL(staticOption.directory)) { - throw new Error("Using a URL as static.directory is not supported"); - } - - // ensure that publicPath is an array - if (typeof staticOption.publicPath === "string") { - staticOption.publicPath = [staticOption.publicPath]; - } - - // ensure that watch is an object if true - if (staticOption.watch === true) { - staticOption.watch = defaultOptionsForStatic.watch; - } else if (typeof staticOption.watch === "object") { - staticOption.watch = { - ...getDefaultWatchOptions(staticOption.watch), - }; - } - - // ensure that serveIndex is an object if true - if (staticOption.serveIndex === true) { - staticOption.serveIndex = defaultOptionsForStatic.serveIndex; - } - }); + options.static = [getStaticItem(options.static)]; } if (typeof options.watchFiles === "string") { options.watchFiles = [ - { paths: options.watchFiles, options: defaultWatchOptions }, + { paths: options.watchFiles, options: getWatchOptions() }, ]; } else if ( typeof options.watchFiles === "object" && @@ -1017,22 +1061,18 @@ class Server { options.watchFiles = [ { paths: options.watchFiles.paths, - options: { - ...getDefaultWatchOptions(options.watchFiles.options || {}), - }, + options: getWatchOptions(options.watchFiles.options || {}), }, ]; } else if (Array.isArray(options.watchFiles)) { options.watchFiles = options.watchFiles.map((item) => { if (typeof item === "string") { - return { paths: item, options: defaultWatchOptions }; + return { paths: item, options: getWatchOptions() }; } return { paths: item.paths, - options: { - ...getDefaultWatchOptions(item.options || {}), - }, + options: getWatchOptions(item.options || {}), }; }); } else { diff --git a/test/server/__snapshots__/Server.test.js.snap.webpack4 b/test/server/__snapshots__/Server.test.js.snap.webpack4 index a4ecb86a4f..c01dfba1c7 100644 --- a/test/server/__snapshots__/Server.test.js.snap.webpack4 +++ b/test/server/__snapshots__/Server.test.js.snap.webpack4 @@ -1652,7 +1652,6 @@ Object { }, "staticOptions": Object {}, "watch": Object { - "aggregateTimeout": 300, "alwaysStat": true, "atomic": false, "followSymlinks": false, @@ -1710,7 +1709,6 @@ Object { }, "staticOptions": Object {}, "watch": Object { - "aggregateTimeout": 300, "alwaysStat": true, "atomic": false, "followSymlinks": false, @@ -1768,7 +1766,6 @@ Object { }, "staticOptions": Object {}, "watch": Object { - "aggregateTimeout": 300, "alwaysStat": true, "atomic": false, "followSymlinks": false, @@ -1826,7 +1823,6 @@ Object { }, "staticOptions": Object {}, "watch": Object { - "aggregateTimeout": 300, "alwaysStat": true, "atomic": false, "followSymlinks": false, diff --git a/test/server/__snapshots__/Server.test.js.snap.webpack5 b/test/server/__snapshots__/Server.test.js.snap.webpack5 index a4ecb86a4f..c01dfba1c7 100644 --- a/test/server/__snapshots__/Server.test.js.snap.webpack5 +++ b/test/server/__snapshots__/Server.test.js.snap.webpack5 @@ -1652,7 +1652,6 @@ Object { }, "staticOptions": Object {}, "watch": Object { - "aggregateTimeout": 300, "alwaysStat": true, "atomic": false, "followSymlinks": false, @@ -1710,7 +1709,6 @@ Object { }, "staticOptions": Object {}, "watch": Object { - "aggregateTimeout": 300, "alwaysStat": true, "atomic": false, "followSymlinks": false, @@ -1768,7 +1766,6 @@ Object { }, "staticOptions": Object {}, "watch": Object { - "aggregateTimeout": 300, "alwaysStat": true, "atomic": false, "followSymlinks": false, @@ -1826,7 +1823,6 @@ Object { }, "staticOptions": Object {}, "watch": Object { - "aggregateTimeout": 300, "alwaysStat": true, "atomic": false, "followSymlinks": false,