UNPKG

supamend

Version:

Pluggable DevSecOps Security Scanner with 10+ scanners and multiple reporting channels

51 lines 1.85 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.ErrorRecoveryManager = exports.FileSystemErrorRecovery = exports.NetworkErrorRecovery = void 0; class NetworkErrorRecovery { canRecover(error) { return error.message.includes('network') || error.message.includes('timeout') || error.message.includes('ECONNREFUSED'); } async recover(error, context) { // Wait and retry with exponential backoff const delay = Math.min(1000 * Math.pow(2, context.attempt || 0), 10000); await new Promise(resolve => setTimeout(resolve, delay)); return context.retry(); } } exports.NetworkErrorRecovery = NetworkErrorRecovery; class FileSystemErrorRecovery { canRecover(error) { return error.message.includes('ENOENT') || error.message.includes('permission denied'); } async recover(error, context) { if (error.message.includes('ENOENT')) { // Try to create missing directories const fs = require('fs-extra'); await fs.ensureDir(context.directory); return context.retry(); } throw error; // Cannot recover from permission errors } } exports.FileSystemErrorRecovery = FileSystemErrorRecovery; class ErrorRecoveryManager { constructor() { this.strategies = [ new NetworkErrorRecovery(), new FileSystemErrorRecovery() ]; } async attemptRecovery(error, context) { for (const strategy of this.strategies) { if (strategy.canRecover(error)) { return await strategy.recover(error, context); } } throw error; // No recovery strategy found } } exports.ErrorRecoveryManager = ErrorRecoveryManager; //# sourceMappingURL=error-recovery.js.map