@radpack/core
Advanced tools
Comparing version 1.0.4 to 1.0.5
@@ -6,3 +6,3 @@ "use strict"; | ||
}); | ||
exports.DEFAULT_TIMEOUT = exports.DEFAULT_DELAY = void 0; | ||
exports.DEFAULT_TIMEOUT = exports.DEFAULT_RETRIES = exports.DEFAULT_DELAY = void 0; | ||
const DEFAULT_TIMEOUT = 15000; // 15s | ||
@@ -13,2 +13,4 @@ | ||
exports.DEFAULT_DELAY = DEFAULT_DELAY; | ||
exports.DEFAULT_DELAY = DEFAULT_DELAY; | ||
const DEFAULT_RETRIES = 3; | ||
exports.DEFAULT_RETRIES = DEFAULT_RETRIES; |
@@ -10,2 +10,4 @@ "use strict"; | ||
var _abortController = _interopRequireDefault(require("abort-controller")); | ||
var _fetchFile = _interopRequireDefault(require("./fetch-file")); | ||
@@ -22,3 +24,3 @@ | ||
timeout = _constants.DEFAULT_TIMEOUT, | ||
retries = 0, | ||
retries = _constants.DEFAULT_RETRIES, | ||
...options | ||
@@ -30,9 +32,20 @@ } = {}) => { | ||
const retry = retries-- > 0 ? () => sleep(delay).then(() => smartFetch(url, { ...options, | ||
let signal = options.signal; | ||
let timeoutTimer; | ||
if (!signal && timeout > 0) { | ||
const controller = new _abortController.default(); | ||
signal = controller.signal; | ||
timeoutTimer = setTimeout(() => controller.abort(), timeout); | ||
timeoutTimer.unref(); | ||
} | ||
const retry = retries > 0 ? () => sleep(delay).then(() => smartFetch(url, { ...options, | ||
delay, | ||
retries | ||
timeout, | ||
retries: retries - 1 | ||
})) : false; | ||
return (0, _crossFetch.default)(url, { ...options, | ||
timeout | ||
}).then(res => !res.ok && res.status !== 304 && retry ? retry() : res, err => { | ||
signal | ||
}).finally(() => clearTimeout(timeoutTimer)).then(res => retry && !res.ok && res.status !== 304 ? retry() : res).catch(err => { | ||
if (retry) { | ||
@@ -39,0 +52,0 @@ return retry(); |
{ | ||
"name": "@radpack/core", | ||
"version": "1.0.4", | ||
"version": "1.0.5", | ||
"description": "Rapid Application Development Packaging Core", | ||
@@ -36,10 +36,11 @@ "main": "./lib/index.js", | ||
"dependencies": { | ||
"abort-controller": "^3.0.0", | ||
"cross-fetch": "^3.1.5" | ||
}, | ||
"devDependencies": { | ||
"@babel/cli": "^7.17.6", | ||
"@babel/cli": "^7.18.10", | ||
"@sinonjs/fake-timers": "^9.1.2", | ||
"rimraf": "^3.0.2" | ||
}, | ||
"license": "MIT", | ||
"gitHead": "bda826562880063765984d870a7365851635120e" | ||
"license": "MIT" | ||
} |
export const DEFAULT_TIMEOUT = 15000; // 15s | ||
export const DEFAULT_DELAY = 5000; // 5s | ||
export const DEFAULT_RETRIES = 3; |
import fetch from 'cross-fetch'; | ||
import AbortController from 'abort-controller'; | ||
import fetchFile from './fetch-file'; | ||
import { DEFAULT_DELAY, DEFAULT_TIMEOUT } from './constants'; | ||
import { DEFAULT_DELAY, DEFAULT_TIMEOUT, DEFAULT_RETRIES } from './constants'; | ||
const sleep = ms => new Promise(resolve => ms > 0 ? setTimeout(resolve, ms) : resolve()); | ||
const smartFetch = (url, { delay = DEFAULT_DELAY, timeout = DEFAULT_TIMEOUT, retries = 0, ...options } = {}) => { | ||
const smartFetch = (url, { delay = DEFAULT_DELAY, timeout = DEFAULT_TIMEOUT, retries = DEFAULT_RETRIES, ...options } = {}) => { | ||
if (url.startsWith('file:')) { | ||
return fetchFile(url); | ||
} | ||
const retry = retries-- > 0 | ||
? () => sleep(delay).then(() => smartFetch(url, { ...options, delay, retries })) | ||
let signal = options.signal; | ||
let timeoutTimer; | ||
if (!signal && timeout > 0) { | ||
const controller = new AbortController(); | ||
signal = controller.signal; | ||
timeoutTimer = setTimeout(() => controller.abort(), timeout); | ||
timeoutTimer.unref(); | ||
} | ||
const retry = retries > 0 | ||
? () => sleep(delay).then(() => smartFetch(url, { ...options, delay, timeout, retries: retries - 1 })) | ||
: false; | ||
return fetch(url, { ...options, timeout }).then(res => !res.ok && res.status !== 304 && retry ? retry() : res, err => { | ||
if (retry) { | ||
return retry(); | ||
} | ||
throw err; | ||
}); | ||
return fetch(url, { ...options, signal }) | ||
.finally(() => clearTimeout(timeoutTimer)) | ||
.then(res => retry && !res.ok && res.status !== 304 ? retry() : res) | ||
.catch(err => { | ||
if (retry) { | ||
return retry(); | ||
} | ||
throw err; | ||
}); | ||
}; | ||
@@ -21,0 +33,0 @@ |
1577
52415
2
3
55
+ Addedabort-controller@^3.0.0
+ Addedabort-controller@3.0.0(transitive)
+ Addedevent-target-shim@5.0.1(transitive)