@@ -24,7 +24,8 @@ export type Options = {
2424 intervalCap : number ; // The max number of runs in the given interval of time. [Experimental]
2525 keepAlive : boolean ; // {boolean} if it is true, use keepAlive for checking request [Experimental]
2626 userAgent : string ; // {String} a UserAgent,
27- maxRetryTime : number ; // (number) The max of waiting seconds for retry, if response returns `After-Retry` header.
27+ maxRetryTime : number ; // (number) The max of waiting seconds for retry. It is related to `retry` option. It does affect to `Retry-After` header.
28+ maxRetryAfterTime : number ; // (number) The max of waiting seconds for `Retry-After` header.
2829} ;
2930const DEFAULT_OPTIONS : Options = {
3031 checkRelative : true , // {boolean} `false` disables the checks for relative URIs.
@@ -38,7 +39,8 @@ const DEFAULT_OPTIONS: Options = {
3839 intervalCap : 8 , // The max number of runs in the given interval of time. [Experimental]
3940 keepAlive : false , // {boolean} if it is true, use keepAlive for checking request [Experimental]
4041 userAgent : "textlint-rule-no-dead-link/1.0" , // {String} a UserAgent,
41- maxRetryTime : 10 // (number) The max of waiting seconds for retry, if response returns `After-Retry` header.
42+ maxRetryTime : 10 , // (number) The max of waiting seconds for retry. It is related to `retry` option. It does affect to `Retry-After` header.
43+ maxRetryAfterTime : 90 // (number) The max of waiting seconds for `Retry-After` header.
4244} ;
4345
4446// Adopted from http://stackoverflow.com/a/3809435/951517
@@ -227,14 +229,21 @@ const createCheckAliveURL = (ruleOptions: Options) => {
227229
228230 // try to fetch again if not reach max retry count
229231 if ( currentRetryCount < maxRetryCount ) {
230- const retrySeconds = res . headers . get ( "Retry-After" ) ;
232+ const retryAfter = res . headers . get ( "Retry-After" ) ;
231233 // If the response has `Retry-After` header, prefer it
232- // else exponential retry: 0ms -> 100ms -> 200ms -> 400ms -> 800ms ...
233- const retryWaitTimeMs =
234- retrySeconds !== null ? Number ( retrySeconds ) * 1000 : currentRetryCount ** 2 * 100 ;
235- const maxRetryTimeMs = ruleOptions . maxRetryTime * 1000 ;
236- if ( retryWaitTimeMs <= maxRetryTimeMs ) {
237- await waitTimeMs ( retryWaitTimeMs ) ;
234+ if ( retryAfter ) {
235+ const retryAfterMs = Number ( retryAfter ) * 1000 ;
236+ const maxRetryAfterTimeMs = ruleOptions . maxRetryAfterTime * 1000 ;
237+ if ( retryAfterMs <= maxRetryAfterTimeMs ) {
238+ await waitTimeMs ( retryAfterMs ) ;
239+ }
240+ } else {
241+ // exponential retry: 0ms -> 100ms -> 200ms -> 400ms -> 800ms ...
242+ const retryWaitTimeMs = currentRetryCount ** 2 * 100 ;
243+ const maxRetryTimeMs = ruleOptions . maxRetryTime * 1000 ;
244+ if ( retryWaitTimeMs <= maxRetryTimeMs ) {
245+ await waitTimeMs ( retryWaitTimeMs ) ;
246+ }
238247 }
239248 return isAliveURI ( uri , "GET" , maxRetryCount , currentRetryCount + 1 ) ;
240249 }
0 commit comments