file-routing-expressjs
Version:
A dependency-free, flexible, system-based file routing for Express.
1 lines • 1.99 kB
Source Map (JSON)
{"version":3,"sources":["../../src/plugins/retry.ts"],"sourcesContent":["import { Plugin, RetryConfig } from \"../types\";\n\nconst retryPlugin: Plugin<RetryConfig> = {\n name: \"retry\",\n\n validateConfig(config) {\n if (!config || config.attempts <= 0) {\n throw new Error(`[retry] \"attempts\" must be > 0`);\n }\n },\n\n wrap(handler, config) {\n return async (req, res, next) => {\n const attempts = config?.attempts ?? 1;\n const delay = config?.delay ?? 0;\n\n let lastError: any;\n\n for (let i = 0; i < attempts; i++) {\n try {\n return await handler(req, res, next);\n } catch (err) {\n lastError = err;\n\n const shouldRetry = config?.shouldRetry\n ? config.shouldRetry(err)\n : true;\n\n if (!shouldRetry || i === attempts - 1) {\n throw err;\n }\n\n if (delay > 0) {\n await new Promise(r => setTimeout(r, delay));\n }\n }\n }\n\n throw lastError;\n };\n }\n};\n\nexport default retryPlugin;"],"mappings":";;;;;;;;;;;;;;;;;;;;AAEA,MAAM,cAAmC;AAAA,EACrC,MAAM;AAAA,EAEN,eAAe,QAAQ;AACnB,QAAI,CAAC,UAAU,OAAO,YAAY,GAAG;AACjC,YAAM,IAAI,MAAM,gCAAgC;AAAA,IACpD;AAAA,EACJ;AAAA,EAEA,KAAK,SAAS,QAAQ;AAClB,WAAO,CAAO,KAAK,KAAK,SAAS;AAZzC;AAaY,YAAM,YAAW,sCAAQ,aAAR,YAAoB;AACrC,YAAM,SAAQ,sCAAQ,UAAR,YAAiB;AAE/B,UAAI;AAEJ,eAAS,IAAI,GAAG,IAAI,UAAU,KAAK;AAC/B,YAAI;AACA,iBAAO,MAAM,QAAQ,KAAK,KAAK,IAAI;AAAA,QACvC,SAAS,KAAK;AACV,sBAAY;AAEZ,gBAAM,eAAc,iCAAQ,eACtB,OAAO,YAAY,GAAG,IACtB;AAEN,cAAI,CAAC,eAAe,MAAM,WAAW,GAAG;AACpC,kBAAM;AAAA,UACV;AAEA,cAAI,QAAQ,GAAG;AACX,kBAAM,IAAI,QAAQ,OAAK,WAAW,GAAG,KAAK,CAAC;AAAA,UAC/C;AAAA,QACJ;AAAA,MACJ;AAEA,YAAM;AAAA,IACV;AAAA,EACJ;AACJ;AAEA,IAAO,gBAAQ;","names":[]}