From ee79c5510b7442e193b083d3c28d0a2c80a41327 Mon Sep 17 00:00:00 2001 From: isaacs Date: Mon, 28 Sep 2020 11:16:40 -0700 Subject: [PATCH] Add 'fetch-timeout' config This gets passed down to dependencies as 'timeout', so that the HTTP request libraries will all get the right value. Fix: https://github.com/npm/cli/issues/1780 PR-URL: https://github.com/npm/cli/pull/1870 Credit: @isaacs Close: #1870 Reviewed-by: @nlf --- docs/content/using-npm/config.md | 7 +++++++ lib/utils/config.js | 2 ++ lib/utils/flat-options.js | 2 ++ tap-snapshots/test-lib-utils-config.js-TAP.test.js | 6 ++++++ tap-snapshots/test-lib-utils-flat-options.js-TAP.test.js | 1 + test/lib/utils/flat-options.js | 1 + 6 files changed, 19 insertions(+) diff --git a/docs/content/using-npm/config.md b/docs/content/using-npm/config.md index 2982e41dbbec7..eef83ab8a101c 100644 --- a/docs/content/using-npm/config.md +++ b/docs/content/using-npm/config.md @@ -470,6 +470,13 @@ packages. The "maxTimeout" config for the `retry` module to use when fetching packages. +#### fetch-timeout + +* Default: 300000 (5 minutes) +* Type: Number + +The maximum amount of time to wait for HTTP requests to complete. + #### fund * Default: true diff --git a/lib/utils/config.js b/lib/utils/config.js index 6dc0f75e44616..5fe14a722bb93 100644 --- a/lib/utils/config.js +++ b/lib/utils/config.js @@ -88,6 +88,7 @@ const defaults = { 'fetch-retry-factor': 10, 'fetch-retry-mintimeout': 10000, 'fetch-retry-maxtimeout': 60000, + 'fetch-timeout': 5 * 60 * 1000, git: 'git', 'git-tag-version': true, @@ -221,6 +222,7 @@ const types = { 'fetch-retry-factor': Number, 'fetch-retry-mintimeout': Number, 'fetch-retry-maxtimeout': Number, + 'fetch-timeout': Number, git: String, 'git-tag-version': Boolean, 'commit-hooks': Boolean, diff --git a/lib/utils/flat-options.js b/lib/utils/flat-options.js index d6decdbf79361..54ba22d6c8ffb 100644 --- a/lib/utils/flat-options.js +++ b/lib/utils/flat-options.js @@ -147,6 +147,8 @@ const flatOptions = npm => npm.flatOptions || Object.freeze({ minTimeout: npm.config.get('fetch-retry-mintimeout') }, + timeout: npm.config.get('fetch-timeout'), + force: npm.config.get('force'), formatPackageLock: npm.config.get('format-package-lock'), diff --git a/tap-snapshots/test-lib-utils-config.js-TAP.test.js b/tap-snapshots/test-lib-utils-config.js-TAP.test.js index 90030fef7fda3..a6f66273669ef 100644 --- a/tap-snapshots/test-lib-utils-config.js-TAP.test.js +++ b/tap-snapshots/test-lib-utils-config.js-TAP.test.js @@ -42,6 +42,7 @@ Object { "fetch-retry-factor": 10, "fetch-retry-maxtimeout": 60000, "fetch-retry-mintimeout": 10000, + "fetch-timeout": 300000, "force": false, "format-package-lock": true, "fund": true, @@ -339,6 +340,7 @@ Object { "fetch-retry-factor": "{Number TYPE}", "fetch-retry-maxtimeout": "{Number TYPE}", "fetch-retry-mintimeout": "{Number TYPE}", + "fetch-timeout": "{Number TYPE}", "force": "{Boolean TYPE}", "format-package-lock": "{Boolean TYPE}", "fund": "{Boolean TYPE}", @@ -554,6 +556,7 @@ Object { "fetch-retry-factor": 10, "fetch-retry-maxtimeout": 60000, "fetch-retry-mintimeout": 10000, + "fetch-timeout": 300000, "force": false, "format-package-lock": true, "fund": true, @@ -851,6 +854,7 @@ Object { "fetch-retry-factor": "{Number TYPE}", "fetch-retry-maxtimeout": "{Number TYPE}", "fetch-retry-mintimeout": "{Number TYPE}", + "fetch-timeout": "{Number TYPE}", "force": "{Boolean TYPE}", "format-package-lock": "{Boolean TYPE}", "fund": "{Boolean TYPE}", @@ -1066,6 +1070,7 @@ Object { "fetch-retry-factor": 10, "fetch-retry-maxtimeout": 60000, "fetch-retry-mintimeout": 10000, + "fetch-timeout": 300000, "force": false, "format-package-lock": true, "fund": true, @@ -1363,6 +1368,7 @@ Object { "fetch-retry-factor": "{Number TYPE}", "fetch-retry-maxtimeout": "{Number TYPE}", "fetch-retry-mintimeout": "{Number TYPE}", + "fetch-timeout": "{Number TYPE}", "force": "{Boolean TYPE}", "format-package-lock": "{Boolean TYPE}", "fund": "{Boolean TYPE}", diff --git a/tap-snapshots/test-lib-utils-flat-options.js-TAP.test.js b/tap-snapshots/test-lib-utils-flat-options.js-TAP.test.js index d9aa8e8b631f3..0e7b7c33e6c92 100644 --- a/tap-snapshots/test-lib-utils-flat-options.js-TAP.test.js +++ b/tap-snapshots/test-lib-utils-flat-options.js-TAP.test.js @@ -115,6 +115,7 @@ Object { "strictSSL": "strict-ssl", "tag": "tag", "tagVersionPrefix": "tag-version-prefix", + "timeout": "fetch-timeout", "tmp": "/tmp", "umask": 18, "unicode": undefined, diff --git a/test/lib/utils/flat-options.js b/test/lib/utils/flat-options.js index daade6663977b..162e698daf29e 100644 --- a/test/lib/utils/flat-options.js +++ b/test/lib/utils/flat-options.js @@ -73,6 +73,7 @@ class MockConfig { 'fetch-retry-factor': 'fetch-retry-factor', 'fetch-retry-mintimeout': 'fetch-retry-mintimeout', 'fetch-retry-maxtimeout': 'fetch-retry-maxtimeout', + 'fetch-timeout': 'fetch-timeout', force: 'force', 'format-package-lock': 'format-package-lock', fund: 'fund',