UNPKG

@re-shell/cli

Version:

Full-stack development platform uniting microservices and microfrontends. Build complete applications with .NET (ASP.NET Core Web API, Minimal API), Java (Spring Boot, Quarkus, Micronaut, Vert.x), Rust (Actix-Web, Warp, Rocket, Axum), Python (FastAPI, Dja

93 lines (92 loc) 2.66 kB
/** * Concurrent operation handling with rate limiting and resource management */ import { EventEmitter } from 'events'; interface OperationOptions { priority?: number; timeout?: number; retries?: number; retryDelay?: number; tags?: string[]; abortSignal?: AbortSignal; } interface OperationStats { total: number; pending: number; running: number; completed: number; failed: number; avgDuration: number; successRate: number; } export declare class ConcurrentOperationManager extends EventEmitter { private static instance; private queue; private running; private completed; private maxConcurrent; private rateLimitWindow; private maxOperationsPerWindow; private operationTimes; private constructor(); static getInstance(maxConcurrent?: number, rateLimitWindow?: number, maxOperationsPerWindow?: number): ConcurrentOperationManager; /** * Execute an operation with rate limiting and concurrency control */ execute<T>(operation: () => Promise<T>, options?: OperationOptions): Promise<T>; /** * Execute multiple operations concurrently with limits */ executeAll<T>(operations: Array<() => Promise<T>>, options?: OperationOptions): Promise<T[]>; /** * Execute operations with different strategies */ executeWithStrategy<T>(operations: Array<() => Promise<T>>, strategy?: 'all' | 'race' | 'allSettled', options?: OperationOptions): Promise<T[] | T | PromiseSettledResult<T>[]>; /** * Cancel operations by ID or tags */ cancel(idOrTags: string | string[]): number; /** * Get operation statistics */ getStats(): OperationStats; /** * Adjust concurrency limits */ setConcurrencyLimits(maxConcurrent?: number, rateLimitWindow?: number, maxOperationsPerWindow?: number): void; /** * Get current rate limiting status */ getRateLimitStatus(): { currentWindow: number; operationsInWindow: number; canExecute: boolean; nextSlotAvailable: number; }; /** * Add operation to queue with priority sorting */ private addToQueue; /** * Start processing operations from queue */ private startProcessing; /** * Process operations from queue */ private processQueue; /** * Execute a single operation */ private executeOperation; /** * Generate unique operation ID */ private generateId; /** * Setup cleanup and monitoring */ private setupCleanup; } export declare const concurrentOps: ConcurrentOperationManager; export {};