@stacksjs/bun-router 0.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE.md +21 -0
- package/README.md +397 -0
- package/bin/cli.ts +9 -0
- package/dist/auth.d.ts +77 -0
- package/dist/cache/lru-cache.d.ts +88 -0
- package/dist/cache/middleware-memoization.d.ts +101 -0
- package/dist/cache/route-cache-warmer.d.ts +125 -0
- package/dist/cache/sqlite-cache.d.ts +114 -0
- package/dist/cache/streaming-cache.d.ts +86 -0
- package/dist/chunk-r15a48wc.js +25448 -0
- package/dist/cli/colors.d.ts +12 -0
- package/dist/cli/index.d.ts +10 -0
- package/dist/cli/middleware.d.ts +31 -0
- package/dist/cli/openapi.d.ts +17 -0
- package/dist/cli/router.d.ts +15 -0
- package/dist/cli/routes.d.ts +30 -0
- package/dist/cli/utils.d.ts +68 -0
- package/dist/cli.d.ts +0 -0
- package/dist/cli.js +3195 -0
- package/dist/config.d.ts +274 -0
- package/dist/container/container.d.ts +141 -0
- package/dist/container/contextual-binding.d.ts +112 -0
- package/dist/container/decorators.d.ts +114 -0
- package/dist/container/service-provider.d.ts +221 -0
- package/dist/development/hot-reload.d.ts +129 -0
- package/dist/development/index.d.ts +144 -0
- package/dist/development/performance-profiler.d.ts +152 -0
- package/dist/development/route-debugger.d.ts +102 -0
- package/dist/development/route-inspector.d.ts +142 -0
- package/dist/development/typescript-utilities.d.ts +116 -0
- package/dist/docs.d.ts +10 -0
- package/dist/errors/circuit-breaker.d.ts +138 -0
- package/dist/errors/error-handler.d.ts +57 -0
- package/dist/errors/error-reporting.d.ts +135 -0
- package/dist/errors/exceptions.d.ts +178 -0
- package/dist/errors/graceful-degradation.d.ts +130 -0
- package/dist/errors/index.d.ts +6 -0
- package/dist/errors/router-errors.d.ts +97 -0
- package/dist/file-serving/static-files.d.ts +98 -0
- package/dist/index.d.ts +10 -0
- package/dist/index.js +13417 -0
- package/dist/middleware/auth.d.ts +34 -0
- package/dist/middleware/content_security_policy.d.ts +54 -0
- package/dist/middleware/cors.d.ts +5 -0
- package/dist/middleware/csrf.d.ts +7 -0
- package/dist/middleware/ddos_protection.d.ts +47 -0
- package/dist/middleware/file_security.d.ts +23 -0
- package/dist/middleware/file_upload.d.ts +41 -0
- package/dist/middleware/helmet.d.ts +54 -0
- package/dist/middleware/index.d.ts +55 -0
- package/dist/middleware/input_validation.d.ts +46 -0
- package/dist/middleware/json_body.d.ts +4 -0
- package/dist/middleware/performance_alerting.d.ts +88 -0
- package/dist/middleware/performance_dashboard.d.ts +97 -0
- package/dist/middleware/performance_monitor.d.ts +236 -0
- package/dist/middleware/pipeline.d.ts +90 -0
- package/dist/middleware/rate_limit.d.ts +33 -0
- package/dist/middleware/request_id.d.ts +4 -0
- package/dist/middleware/request_signing.d.ts +96 -0
- package/dist/middleware/request_tracer.d.ts +76 -0
- package/dist/middleware/response_cache.d.ts +90 -0
- package/dist/middleware/security.d.ts +70 -0
- package/dist/middleware/security_suite.d.ts +46 -0
- package/dist/middleware/session.d.ts +7 -0
- package/dist/model-binding/index.d.ts +17 -0
- package/dist/model-binding/model-middleware.d.ts +80 -0
- package/dist/model-binding/model-registry.d.ts +125 -0
- package/dist/model-binding.d.ts +123 -0
- package/dist/model-resolver-factory.d.ts +31 -0
- package/dist/observability/correlation.d.ts +131 -0
- package/dist/observability/health-checks.d.ts +129 -0
- package/dist/observability/index.d.ts +92 -0
- package/dist/observability/integration.d.ts +112 -0
- package/dist/observability/metrics.d.ts +135 -0
- package/dist/observability/tracing.d.ts +112 -0
- package/dist/optimization/bun-utilities.d.ts +106 -0
- package/dist/query-builder-integration.d.ts +24 -0
- package/dist/request/enhanced-request.d.ts +143 -0
- package/dist/request/macros.d.ts +267 -0
- package/dist/response/macros.d.ts +207 -0
- package/dist/response/response-factory.d.ts +93 -0
- package/dist/router/file-based-routing.d.ts +40 -0
- package/dist/router/file-streaming.d.ts +6 -0
- package/dist/router/fluent-router.d.ts +179 -0
- package/dist/router/fluent-routing.d.ts +198 -0
- package/dist/router/group-organization.d.ts +5 -0
- package/dist/router/handler-resolver.d.ts +13 -0
- package/dist/router/http-methods.d.ts +10 -0
- package/dist/router/index.d.ts +114 -0
- package/dist/router/middleware-integration.d.ts +86 -0
- package/dist/router/middleware.d.ts +5 -0
- package/dist/router/model-binding.d.ts +7 -0
- package/dist/router/optimized-route-matching.d.ts +6 -0
- package/dist/router/route-building.d.ts +5 -0
- package/dist/router/route-compiler.d.ts +67 -0
- package/dist/router/route-matching.d.ts +5 -0
- package/dist/router/route-trie.d.ts +69 -0
- package/dist/router/router.d.ts +133 -0
- package/dist/router/server.d.ts +5 -0
- package/dist/router/validation-integration.d.ts +116 -0
- package/dist/router/view-rendering.d.ts +5 -0
- package/dist/router/websocket.d.ts +5 -0
- package/dist/routing/route-caching.d.ts +105 -0
- package/dist/routing/route-throttling.d.ts +112 -0
- package/dist/routing/subdomain-routing.d.ts +159 -0
- package/dist/streaming/index.d.ts +15 -0
- package/dist/streaming/sse-handler.d.ts +81 -0
- package/dist/streaming/stream-handler.d.ts +81 -0
- package/dist/testing/auth-testing.d.ts +107 -0
- package/dist/testing/file-upload-testing.d.ts +139 -0
- package/dist/testing/index.d.ts +10 -0
- package/dist/testing/middleware-testing.d.ts +99 -0
- package/dist/testing/model-binding-testing.d.ts +132 -0
- package/dist/testing/performance-testing.d.ts +202 -0
- package/dist/testing/test-client.d.ts +58 -0
- package/dist/testing/test-request.d.ts +43 -0
- package/dist/testing/test-response.d.ts +45 -0
- package/dist/testing/types.d.ts +206 -0
- package/dist/testing/websocket-testing.d.ts +170 -0
- package/dist/types/controller-types.d.ts +303 -0
- package/dist/types/core.d.ts +526 -0
- package/dist/types/middleware-types.d.ts +315 -0
- package/dist/types/request-response-augmentation.d.ts +373 -0
- package/dist/types/route-inference.d.ts +287 -0
- package/dist/types.d.ts +1620 -0
- package/dist/utils/index.d.ts +1 -0
- package/dist/utils/query-preservation.d.ts +31 -0
- package/dist/utils.d.ts +69 -0
- package/dist/validation/validator.d.ts +169 -0
- package/dist/websocket/clustering.d.ts +114 -0
- package/package.json +81 -0
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
import type { LRUCache } from './lru-cache';
|
|
2
|
+
import type { StreamingCache } from './streaming-cache';
|
|
3
|
+
/**
|
|
4
|
+
* Factory functions for creating route cache warmers
|
|
5
|
+
*/
|
|
6
|
+
export declare const createRouteCacheWarmer: {
|
|
7
|
+
/**
|
|
8
|
+
* Create warmer for development environment
|
|
9
|
+
*/
|
|
10
|
+
development: (routeCache: LRUCache<any>, streamingCache?: StreamingCache) => any;
|
|
11
|
+
/**
|
|
12
|
+
* Create warmer for production environment
|
|
13
|
+
*/
|
|
14
|
+
production: (routeCache: LRUCache<any>, streamingCache?: StreamingCache) => any;
|
|
15
|
+
/**
|
|
16
|
+
* Create warmer with custom configuration
|
|
17
|
+
*/
|
|
18
|
+
custom: ( config: WarmupConfig, routeCache: LRUCache<any>, streamingCache?: StreamingCache, ) => any
|
|
19
|
+
};
|
|
20
|
+
/**
|
|
21
|
+
* Route cache warming system for pre-populating caches with common routes
|
|
22
|
+
*/
|
|
23
|
+
export declare interface WarmupRoute {
|
|
24
|
+
path: string
|
|
25
|
+
method: string
|
|
26
|
+
priority: number
|
|
27
|
+
frequency: number
|
|
28
|
+
params?: Record<string, string>
|
|
29
|
+
query?: Record<string, string>
|
|
30
|
+
headers?: Record<string, string>
|
|
31
|
+
warmupData?: any
|
|
32
|
+
}
|
|
33
|
+
export declare interface AnalyticsRoute {
|
|
34
|
+
path: string
|
|
35
|
+
method: string
|
|
36
|
+
frequency: number
|
|
37
|
+
}
|
|
38
|
+
export declare interface RecentRoute {
|
|
39
|
+
path: string
|
|
40
|
+
method: string
|
|
41
|
+
timestamp: number
|
|
42
|
+
}
|
|
43
|
+
export declare interface PrecomputeRoute {
|
|
44
|
+
path: string
|
|
45
|
+
method: string
|
|
46
|
+
computeFunction: () => Promise<any>
|
|
47
|
+
cacheKey?: string
|
|
48
|
+
ttl?: number
|
|
49
|
+
}
|
|
50
|
+
export declare interface UserSegment {
|
|
51
|
+
segment: string
|
|
52
|
+
commonRoutes: string[]
|
|
53
|
+
priority: number
|
|
54
|
+
}
|
|
55
|
+
export declare interface TimeRange {
|
|
56
|
+
start: number
|
|
57
|
+
end: number
|
|
58
|
+
}
|
|
59
|
+
export declare interface TimeBasedPattern {
|
|
60
|
+
timeRange: TimeRange
|
|
61
|
+
routes: string[]
|
|
62
|
+
priority: number
|
|
63
|
+
}
|
|
64
|
+
export declare interface GeographicPattern {
|
|
65
|
+
region: string
|
|
66
|
+
routes: string[]
|
|
67
|
+
priority: number
|
|
68
|
+
}
|
|
69
|
+
export declare interface IntelligentWarmupPatterns {
|
|
70
|
+
userSegments?: UserSegment[]
|
|
71
|
+
timeBasedPatterns?: TimeBasedPattern[]
|
|
72
|
+
geographicPatterns?: GeographicPattern[]
|
|
73
|
+
}
|
|
74
|
+
export declare interface WarmupConfig {
|
|
75
|
+
enabled: boolean
|
|
76
|
+
maxConcurrency: number
|
|
77
|
+
warmupTimeout: number
|
|
78
|
+
retryAttempts: number
|
|
79
|
+
retryDelay: number
|
|
80
|
+
scheduleInterval?: number
|
|
81
|
+
priorityThreshold: number
|
|
82
|
+
}
|
|
83
|
+
export declare interface WarmupStats {
|
|
84
|
+
totalRoutes: number
|
|
85
|
+
successfulWarmups: number
|
|
86
|
+
failedWarmups: number
|
|
87
|
+
averageWarmupTime: number
|
|
88
|
+
lastWarmupTime: number
|
|
89
|
+
cacheHitRateImprovement: number
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Route cache warmer for pre-populating caches with frequently accessed routes
|
|
93
|
+
*/
|
|
94
|
+
export declare class RouteCacheWarmer {
|
|
95
|
+
private routes: WarmupRoute[];
|
|
96
|
+
private routeCache: LRUCache<any>;
|
|
97
|
+
private streamingCache?: StreamingCache;
|
|
98
|
+
private stats: WarmupStats;
|
|
99
|
+
private warmupTimer?: Timer;
|
|
100
|
+
private config: WarmupConfig;
|
|
101
|
+
constructor(config: WarmupConfig, routeCache: LRUCache<any>, streamingCache?: StreamingCache);
|
|
102
|
+
registerRoutes(routes: WarmupRoute[]): void;
|
|
103
|
+
registerRoute(route: WarmupRoute): void;
|
|
104
|
+
warmCache(options?: {
|
|
105
|
+
routes?: string[] // Specific routes to warm (by path)
|
|
106
|
+
maxRoutes?: number // Maximum number of routes to warm
|
|
107
|
+
skipLowPriority?: boolean
|
|
108
|
+
}): Promise<WarmupStats>;
|
|
109
|
+
warmFromAnalytics(analytics: {
|
|
110
|
+
topRoutes: AnalyticsRoute[]
|
|
111
|
+
recentRoutes: RecentRoute[]
|
|
112
|
+
}): Promise<void>;
|
|
113
|
+
precomputeRoutes(routes: PrecomputeRoute[]): Promise<number>;
|
|
114
|
+
intelligentWarmup(patterns: IntelligentWarmupPatterns): Promise<void>;
|
|
115
|
+
getStats(): WarmupStats;
|
|
116
|
+
resetStats(): void;
|
|
117
|
+
stop(): void;
|
|
118
|
+
private warmRoutesWithConcurrency(routes: WarmupRoute[]): Promise<{
|
|
119
|
+
successful: number
|
|
120
|
+
failed: number
|
|
121
|
+
}>;
|
|
122
|
+
private warmSingleRoute(route: WarmupRoute): Promise<void>;
|
|
123
|
+
private buildRouteUrl(route: WarmupRoute): string;
|
|
124
|
+
private schedulePeriodicWarmup(): void;
|
|
125
|
+
}
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
import { Database } from 'bun:sqlite';
|
|
2
|
+
/**
|
|
3
|
+
* Cache middleware factory
|
|
4
|
+
*/
|
|
5
|
+
export declare function createSQLiteCacheMiddleware(cache: SQLiteCache, options?: {
|
|
6
|
+
keyGenerator?: (request: Request) => string
|
|
7
|
+
ttl?: number
|
|
8
|
+
skipMethods?: string[]
|
|
9
|
+
skipPaths?: string[]
|
|
10
|
+
skipHeaders?: string[]
|
|
11
|
+
}): void;
|
|
12
|
+
/**
|
|
13
|
+
* SQLite cache helpers
|
|
14
|
+
*/
|
|
15
|
+
export declare const SQLiteCacheHelpers: {
|
|
16
|
+
/**
|
|
17
|
+
* Create session cache
|
|
18
|
+
*/
|
|
19
|
+
createSessionCache: (cache: SQLiteCache) => unknown;
|
|
20
|
+
/**
|
|
21
|
+
* Create rate limiting cache
|
|
22
|
+
*/
|
|
23
|
+
createRateLimitCache: (cache: SQLiteCache) => unknown;
|
|
24
|
+
/**
|
|
25
|
+
* Create query result cache
|
|
26
|
+
*/
|
|
27
|
+
createQueryCache: (cache: SQLiteCache) => unknown
|
|
28
|
+
};
|
|
29
|
+
export declare interface SQLiteCacheConfig {
|
|
30
|
+
filename?: string
|
|
31
|
+
memory?: boolean
|
|
32
|
+
wal?: boolean
|
|
33
|
+
synchronous?: 'OFF' | 'NORMAL' | 'FULL'
|
|
34
|
+
journalMode?: 'DELETE' | 'TRUNCATE' | 'PERSIST' | 'MEMORY' | 'WAL' | 'OFF'
|
|
35
|
+
cacheSize?: number
|
|
36
|
+
pageSize?: number
|
|
37
|
+
maxSize?: number
|
|
38
|
+
defaultTTL?: number
|
|
39
|
+
cleanupInterval?: number
|
|
40
|
+
compression?: boolean
|
|
41
|
+
}
|
|
42
|
+
export declare interface CacheEntry {
|
|
43
|
+
key: string
|
|
44
|
+
value: string
|
|
45
|
+
expires: number
|
|
46
|
+
created: number
|
|
47
|
+
accessed: number
|
|
48
|
+
hits: number
|
|
49
|
+
size: number
|
|
50
|
+
compressed: boolean
|
|
51
|
+
}
|
|
52
|
+
export declare interface CacheStats {
|
|
53
|
+
totalEntries: number
|
|
54
|
+
totalSize: number
|
|
55
|
+
hitRate: number
|
|
56
|
+
missRate: number
|
|
57
|
+
evictions: number
|
|
58
|
+
compressionRatio: number
|
|
59
|
+
averageAccessTime: number
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* High-performance SQLite-based cache
|
|
63
|
+
*/
|
|
64
|
+
export declare class SQLiteCache {
|
|
65
|
+
private db: Database;
|
|
66
|
+
private config: Required<SQLiteCacheConfig>;
|
|
67
|
+
private stats: CacheStats;
|
|
68
|
+
private cleanupTimer?: Timer;
|
|
69
|
+
private preparedStatements: {
|
|
70
|
+
get: any
|
|
71
|
+
set: any
|
|
72
|
+
delete: any
|
|
73
|
+
exists: any
|
|
74
|
+
clear: any
|
|
75
|
+
cleanup: any
|
|
76
|
+
stats: any
|
|
77
|
+
touch: any
|
|
78
|
+
};
|
|
79
|
+
constructor(config?: SQLiteCacheConfig);
|
|
80
|
+
get<T = any>(key: string): T | null;
|
|
81
|
+
set<T = any>(key: string, value: T, ttl?: number): boolean;
|
|
82
|
+
delete(key: string): boolean;
|
|
83
|
+
has(key: string): boolean;
|
|
84
|
+
clear(): boolean;
|
|
85
|
+
getStats(): CacheStats;
|
|
86
|
+
keys(pattern?: string): string[];
|
|
87
|
+
mget<T = any>(keys: string[]): Record<string, T | null>;
|
|
88
|
+
mset<T = any>(entries: Record<string, T>, ttl?: number): boolean;
|
|
89
|
+
increment(key: string, delta?: number, ttl?: number): number | null;
|
|
90
|
+
decrement(key: string, delta?: number, ttl?: number): number | null;
|
|
91
|
+
setnx<T = any>(key: string, value: T, ttl?: number): boolean;
|
|
92
|
+
getdel<T = any>(key: string): T | null;
|
|
93
|
+
expire(key: string, ttl: number): boolean;
|
|
94
|
+
ttl(key: string): number;
|
|
95
|
+
cleanup(): number;
|
|
96
|
+
close(): void;
|
|
97
|
+
private initializeDatabase(): void;
|
|
98
|
+
private prepareStatements(): void;
|
|
99
|
+
private startCleanupTimer(): void;
|
|
100
|
+
private evictIfNeeded(newEntrySize: number): void;
|
|
101
|
+
private updateCacheStats(): void;
|
|
102
|
+
private updateStats(operation: 'hit' | 'miss' | 'set', responseTime: number): void;
|
|
103
|
+
private compress(value: string): string | null;
|
|
104
|
+
private decompress(value: string): string;
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* SQLite cache factory
|
|
108
|
+
*/
|
|
109
|
+
export declare class SQLiteCacheFactory {
|
|
110
|
+
static createMemoryCache(config?: Partial<SQLiteCacheConfig>): SQLiteCache;
|
|
111
|
+
static createPersistentCache(filename: string, config?: Partial<SQLiteCacheConfig>): SQLiteCache;
|
|
112
|
+
static createHighPerformanceCache(config?: Partial<SQLiteCacheConfig>): SQLiteCache;
|
|
113
|
+
static createDevelopmentCache(config?: Partial<SQLiteCacheConfig>): SQLiteCache;
|
|
114
|
+
}
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
import { LRUCache } from './lru-cache';
|
|
2
|
+
import type { LRUCacheOptions } from './lru-cache';
|
|
3
|
+
/**
|
|
4
|
+
* Factory functions for creating streaming caches with common configurations
|
|
5
|
+
*/
|
|
6
|
+
export declare const createStreamingCache: {
|
|
7
|
+
/**
|
|
8
|
+
* Create cache optimized for API responses
|
|
9
|
+
*/
|
|
10
|
+
api: (maxSize: number?) => any;
|
|
11
|
+
/**
|
|
12
|
+
* Create cache optimized for static assets
|
|
13
|
+
*/
|
|
14
|
+
assets: (maxSize: number?) => any;
|
|
15
|
+
/**
|
|
16
|
+
* Create cache optimized for HTML pages
|
|
17
|
+
*/
|
|
18
|
+
pages: (maxSize: number?) => any;
|
|
19
|
+
/**
|
|
20
|
+
* Create custom configured streaming cache
|
|
21
|
+
*/
|
|
22
|
+
custom: (options: StreamingCacheOptions) => any
|
|
23
|
+
};
|
|
24
|
+
/**
|
|
25
|
+
* Response streaming cache for large responses
|
|
26
|
+
* Optimized for handling large payloads with memory-efficient streaming
|
|
27
|
+
*/
|
|
28
|
+
export declare interface StreamingCacheOptions extends Omit<LRUCacheOptions, 'maxSize'> {
|
|
29
|
+
maxSize: number
|
|
30
|
+
maxResponseSize: number
|
|
31
|
+
chunkSize: number
|
|
32
|
+
compressionEnabled: boolean
|
|
33
|
+
compressionThreshold: number
|
|
34
|
+
}
|
|
35
|
+
export declare interface CachedResponse {
|
|
36
|
+
status: number
|
|
37
|
+
statusText: string
|
|
38
|
+
headers: Record<string, string>
|
|
39
|
+
body: Uint8Array | null
|
|
40
|
+
compressed: boolean
|
|
41
|
+
originalSize: number
|
|
42
|
+
timestamp: number
|
|
43
|
+
etag?: string
|
|
44
|
+
}
|
|
45
|
+
export declare interface StreamingCacheStats {
|
|
46
|
+
totalResponses: number
|
|
47
|
+
totalSize: number
|
|
48
|
+
compressionRatio: number
|
|
49
|
+
averageResponseSize: number
|
|
50
|
+
largestResponse: number
|
|
51
|
+
streamingHits: number
|
|
52
|
+
streamingMisses: number
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* High-performance streaming cache for large HTTP responses
|
|
56
|
+
*/
|
|
57
|
+
export declare class StreamingCache {
|
|
58
|
+
private cache: LRUCache<CachedResponse>;
|
|
59
|
+
private stats: StreamingCacheStats;
|
|
60
|
+
private options: StreamingCacheOptions;
|
|
61
|
+
constructor(options: StreamingCacheOptions);
|
|
62
|
+
cacheResponse(key: string, response: Response, options?: {
|
|
63
|
+
ttl?: number
|
|
64
|
+
forceCache?: boolean
|
|
65
|
+
generateETag?: boolean
|
|
66
|
+
}): Promise<void>;
|
|
67
|
+
getStreamingResponse(key: string): Promise<Response | null>;
|
|
68
|
+
shouldCache(response: Response): boolean;
|
|
69
|
+
warmCache(routes: Array<{
|
|
70
|
+
key: string
|
|
71
|
+
url: string
|
|
72
|
+
method?: string
|
|
73
|
+
headers?: Record<string, string>
|
|
74
|
+
}>): Promise<number>;
|
|
75
|
+
createConditionalResponse(key: string, ifNoneMatch?: string): Response | null;
|
|
76
|
+
getStats(): StreamingCacheStats & { lruStats: any };
|
|
77
|
+
clear(): void;
|
|
78
|
+
prune(): number;
|
|
79
|
+
private createStreamingResponse(body: Uint8Array, cachedResponse: CachedResponse, headers: Headers): Response;
|
|
80
|
+
private extractHeaders(response: Response): Record<string, string>;
|
|
81
|
+
private compressData(data: Uint8Array): Promise<Uint8Array>;
|
|
82
|
+
private decompressData(data: Uint8Array): Promise<Uint8Array>;
|
|
83
|
+
private generateETag(data: Uint8Array): Promise<string>;
|
|
84
|
+
private updateStatsOnCache(originalSize: number, compressedSize: number): void;
|
|
85
|
+
private updateStatsOnEviction(cachedResponse: CachedResponse): void;
|
|
86
|
+
}
|