file-routing-expressjs
Version:
A dependency-free, flexible, system-based file routing for Express.
56 lines • 1.65 kB
JavaScript
var __async = (__this, __arguments, generator) => {
return new Promise((resolve, reject) => {
var fulfilled = (value) => {
try {
step(generator.next(value));
} catch (e) {
reject(e);
}
};
var rejected = (value) => {
try {
step(generator.throw(value));
} catch (e) {
reject(e);
}
};
var step = (x) => x.done ? resolve(x.value) : Promise.resolve(x.value).then(fulfilled, rejected);
step((generator = generator.apply(__this, __arguments)).next());
});
};
const retryPlugin = {
name: "retry",
validateConfig(config) {
if (!config || config.attempts <= 0) {
throw new Error(`[retry] "attempts" must be > 0`);
}
},
wrap(handler, config) {
return (req, res, next) => __async(this, null, function* () {
var _a, _b;
const attempts = (_a = config == null ? void 0 : config.attempts) != null ? _a : 1;
const delay = (_b = config == null ? void 0 : config.delay) != null ? _b : 0;
let lastError;
for (let i = 0; i < attempts; i++) {
try {
return yield handler(req, res, next);
} catch (err) {
lastError = err;
const shouldRetry = (config == null ? void 0 : config.shouldRetry) ? config.shouldRetry(err) : true;
if (!shouldRetry || i === attempts - 1) {
throw err;
}
if (delay > 0) {
yield new Promise((r) => setTimeout(r, delay));
}
}
}
throw lastError;
});
}
};
var retry_default = retryPlugin;
export {
retry_default as default
};
//# sourceMappingURL=retry.mjs.map