ts-web-scraper
Version: 
A powerful web scraper for both static and client-side rendered sites using only Bun native APIs
112 lines • 3.13 kB
TypeScript
/**
 * Create a monitored function wrapper
 */
export declare function monitored<T extends (...args: any[]) => any>(name: string, fn: T, monitor: PerformanceMonitor): T;
/**
 * Performance decorator
 */
export declare function measure(name?: string): (target: any, propertyKey: string, descriptor: PropertyDescriptor) => PropertyDescriptor;
/**
 * Format bytes to human readable
 */
export declare function formatBytes(bytes: number): string;
/**
 * Format duration to human readable
 */
export declare function formatDuration(ms: number): string;
/**
 * Create a report from metrics
 */
export declare function createReport(monitor: PerformanceMonitor): string;
/**
 * Performance Monitoring
 *
 * Track and analyze scraping performance
 * Uses ONLY Bun native APIs - no external dependencies!
 */
export declare interface PerformanceMetric {
  name: string
  value: number
  unit: string
  timestamp: Date
  tags?: Record<string, string>
}
export declare interface RequestMetrics {
  url: string
  method: string
  statusCode?: number
  duration: number
  size?: number
  cached?: boolean
  retries?: number
  error?: string
  timestamp: Date
}
export declare interface ScrapeMetrics {
  url: string
  totalDuration: number
  fetchDuration: number
  parseDuration: number
  extractionDuration: number
  itemsExtracted: number
  bytesDownloaded: number
  cached: boolean
  retries: number
  error?: string
  timestamp: Date
}
export declare interface MetricsSummary {
  totalRequests: number
  successfulRequests: number
  failedRequests: number
  averageDuration: number
  totalDuration: number
  minDuration: number
  maxDuration: number
  p50Duration: number
  p95Duration: number
  p99Duration: number
  averageSize: number
  totalSize: number
  cacheHitRate: number
  errorRate: number
}
/**
 * Performance monitor
 */
export declare class PerformanceMonitor {
  private metrics: PerformanceMetric[];
  private requestMetrics: RequestMetrics[];
  private scrapeMetrics: ScrapeMetrics[];
  private timers: Map<string, number>;
  private options?: {
    maxMetrics?: number
    flushInterval?: number
    onFlush?: (metrics: PerformanceMetric[]) => void | Promise<void>
  };
  constructor(options?: {
    maxMetrics?: number
    flushInterval?: number
    onFlush?: (metrics: PerformanceMetric[]) => void | Promise<void>
  });
  startTimer(name: string): void;
  endTimer(name: string, tags?: Record<string, string>): number;
  recordMetric(metric: PerformanceMetric): void;
  recordRequest(metrics: RequestMetrics): void;
  recordScrape(metrics: ScrapeMetrics): void;
  getMetrics(): PerformanceMetric[];
  getRequestMetrics(): RequestMetrics[];
  getScrapeMetrics(): ScrapeMetrics[];
  getSummary(): MetricsSummary;
  getMetricsByName(name: string): PerformanceMetric[];
  getMetricsByTag(key: string, value: string): PerformanceMetric[];
  percentile(name: string, p: number): number;
  average(name: string): number;
  min(name: string): number;
  max(name: string): number;
  clear(): void;
  flush(): Promise<void>;
  export(): string;
  save(filepath: string): Promise<void>;
  load(filepath: string): Promise<void>;
}