@stackguide/mcp-server 2.4.0 → 3.1.0
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/README.md +82 -16
- package/dist/config/healthWeights.d.ts +87 -0
- package/dist/config/healthWeights.d.ts.map +1 -0
- package/dist/config/healthWeights.js +238 -0
- package/dist/config/healthWeights.js.map +1 -0
- package/dist/config/types.d.ts +150 -0
- package/dist/config/types.d.ts.map +1 -1
- package/dist/config/types.js.map +1 -1
- package/dist/handlers/generate.d.ts +6 -0
- package/dist/handlers/generate.d.ts.map +1 -1
- package/dist/handlers/generate.js +81 -5
- package/dist/handlers/generate.js.map +1 -1
- package/dist/handlers/health.d.ts +7 -0
- package/dist/handlers/health.d.ts.map +1 -1
- package/dist/handlers/health.js +151 -69
- package/dist/handlers/health.js.map +1 -1
- package/dist/handlers/review.d.ts +12 -0
- package/dist/handlers/review.d.ts.map +1 -1
- package/dist/handlers/review.js +220 -21
- package/dist/handlers/review.js.map +1 -1
- package/dist/services/analysisCache.d.ts +110 -0
- package/dist/services/analysisCache.d.ts.map +1 -0
- package/dist/services/analysisCache.js +233 -0
- package/dist/services/analysisCache.js.map +1 -0
- package/dist/services/astAnalyzer.d.ts +21 -0
- package/dist/services/astAnalyzer.d.ts.map +1 -0
- package/dist/services/astAnalyzer.js +593 -0
- package/dist/services/astAnalyzer.js.map +1 -0
- package/dist/services/codeAnalyzer.d.ts +109 -30
- package/dist/services/codeAnalyzer.d.ts.map +1 -1
- package/dist/services/codeAnalyzer.js +519 -36
- package/dist/services/codeAnalyzer.js.map +1 -1
- package/dist/services/conventionDetector.d.ts +40 -0
- package/dist/services/conventionDetector.d.ts.map +1 -0
- package/dist/services/conventionDetector.js +465 -0
- package/dist/services/conventionDetector.js.map +1 -0
- package/dist/services/cursorDirectory.d.ts +29 -2
- package/dist/services/cursorDirectory.d.ts.map +1 -1
- package/dist/services/cursorDirectory.js +260 -9
- package/dist/services/cursorDirectory.js.map +1 -1
- package/dist/utils/validation.d.ts +2 -2
- package/package.json +2 -1
package/dist/handlers/review.js
CHANGED
|
@@ -1,17 +1,147 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Review handler - code review against active rules
|
|
3
3
|
* Phase 3: Real code analysis with pattern matching
|
|
4
|
+
*
|
|
5
|
+
* Improvements:
|
|
6
|
+
* - Removed file limit (was 50, now unlimited)
|
|
7
|
+
* - Parallel file analysis with batching
|
|
8
|
+
* - Respects .gitignore patterns
|
|
9
|
+
* - Configurable scan depth (default 10)
|
|
10
|
+
* - Incremental mode using git diff
|
|
11
|
+
* - Analysis caching by file hash
|
|
4
12
|
*/
|
|
5
13
|
import * as rulesProvider from '../resources/rulesProvider.js';
|
|
6
14
|
import * as knowledgeProvider from '../resources/knowledgeProvider.js';
|
|
7
15
|
import * as autoDetect from '../services/autoDetect.js';
|
|
8
|
-
import { analyzeCode,
|
|
16
|
+
import { analyzeCode, formatAnalysisReport } from '../services/codeAnalyzer.js';
|
|
17
|
+
import { AnalysisCacheManager } from '../services/analysisCache.js';
|
|
9
18
|
import { jsonResponse, textResponse } from './types.js';
|
|
10
19
|
import { logger } from '../utils/logger.js';
|
|
20
|
+
// Default ignore patterns (in addition to .gitignore)
|
|
21
|
+
const DEFAULT_IGNORE_PATTERNS = [
|
|
22
|
+
'node_modules',
|
|
23
|
+
'__pycache__',
|
|
24
|
+
'venv',
|
|
25
|
+
'.venv',
|
|
26
|
+
'dist',
|
|
27
|
+
'build',
|
|
28
|
+
'vendor',
|
|
29
|
+
'.git',
|
|
30
|
+
'.next',
|
|
31
|
+
'.nuxt',
|
|
32
|
+
'coverage',
|
|
33
|
+
'.cache',
|
|
34
|
+
'tmp',
|
|
35
|
+
'temp',
|
|
36
|
+
'.turbo',
|
|
37
|
+
'out',
|
|
38
|
+
'.output',
|
|
39
|
+
];
|
|
40
|
+
/**
|
|
41
|
+
* Parse .gitignore file and return patterns
|
|
42
|
+
*/
|
|
43
|
+
function parseGitignore(projectPath) {
|
|
44
|
+
const fs = require('fs');
|
|
45
|
+
const path = require('path');
|
|
46
|
+
const gitignorePath = path.join(projectPath, '.gitignore');
|
|
47
|
+
if (!fs.existsSync(gitignorePath)) {
|
|
48
|
+
return [];
|
|
49
|
+
}
|
|
50
|
+
try {
|
|
51
|
+
const content = fs.readFileSync(gitignorePath, 'utf-8');
|
|
52
|
+
return content
|
|
53
|
+
.split('\n')
|
|
54
|
+
.map((line) => line.trim())
|
|
55
|
+
.filter((line) => line && !line.startsWith('#'));
|
|
56
|
+
}
|
|
57
|
+
catch {
|
|
58
|
+
return [];
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Check if a path should be ignored
|
|
63
|
+
*/
|
|
64
|
+
function shouldIgnore(relativePath, ignorePatterns) {
|
|
65
|
+
const parts = relativePath.split('/');
|
|
66
|
+
for (const pattern of ignorePatterns) {
|
|
67
|
+
// Simple pattern matching
|
|
68
|
+
if (pattern.startsWith('/')) {
|
|
69
|
+
// Root-relative pattern
|
|
70
|
+
if (relativePath.startsWith(pattern.slice(1)))
|
|
71
|
+
return true;
|
|
72
|
+
}
|
|
73
|
+
else if (pattern.endsWith('/')) {
|
|
74
|
+
// Directory pattern
|
|
75
|
+
const dir = pattern.slice(0, -1);
|
|
76
|
+
if (parts.includes(dir))
|
|
77
|
+
return true;
|
|
78
|
+
}
|
|
79
|
+
else if (pattern.includes('*')) {
|
|
80
|
+
// Glob pattern (simple)
|
|
81
|
+
const regex = new RegExp('^' + pattern.replace(/\*/g, '.*') + '$');
|
|
82
|
+
if (parts.some(p => regex.test(p)))
|
|
83
|
+
return true;
|
|
84
|
+
}
|
|
85
|
+
else {
|
|
86
|
+
// Simple name match
|
|
87
|
+
if (parts.includes(pattern))
|
|
88
|
+
return true;
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
return false;
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Get list of changed files from git
|
|
95
|
+
*/
|
|
96
|
+
async function getChangedFiles(projectPath) {
|
|
97
|
+
const { exec } = require('child_process');
|
|
98
|
+
const { promisify } = require('util');
|
|
99
|
+
const execAsync = promisify(exec);
|
|
100
|
+
try {
|
|
101
|
+
// Get both staged and unstaged changes
|
|
102
|
+
const { stdout } = await execAsync('git diff --name-only HEAD && git diff --name-only --cached', { cwd: projectPath });
|
|
103
|
+
return [...new Set(stdout.trim().split('\n').filter(Boolean))];
|
|
104
|
+
}
|
|
105
|
+
catch {
|
|
106
|
+
logger.debug('Git not available or not a git repository');
|
|
107
|
+
return [];
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* Analyze files in parallel batches
|
|
112
|
+
*/
|
|
113
|
+
async function analyzeFilesParallel(files, focus, cacheManager, batchSize = 10) {
|
|
114
|
+
const results = [];
|
|
115
|
+
let cacheHits = 0;
|
|
116
|
+
let cacheMisses = 0;
|
|
117
|
+
for (let i = 0; i < files.length; i += batchSize) {
|
|
118
|
+
const batch = files.slice(i, i + batchSize);
|
|
119
|
+
const batchResults = await Promise.all(batch.map(async (file) => {
|
|
120
|
+
// Check cache first
|
|
121
|
+
if (cacheManager) {
|
|
122
|
+
const cached = cacheManager.get(file.path, file.content);
|
|
123
|
+
if (cached) {
|
|
124
|
+
cacheHits++;
|
|
125
|
+
return cached;
|
|
126
|
+
}
|
|
127
|
+
cacheMisses++;
|
|
128
|
+
}
|
|
129
|
+
// Analyze file
|
|
130
|
+
const result = analyzeCode(file.path, file.content, focus);
|
|
131
|
+
// Store in cache
|
|
132
|
+
if (cacheManager) {
|
|
133
|
+
cacheManager.set(file.path, file.content, result);
|
|
134
|
+
}
|
|
135
|
+
return result;
|
|
136
|
+
}));
|
|
137
|
+
results.push(...batchResults);
|
|
138
|
+
}
|
|
139
|
+
return { files: results, cacheHits, cacheMisses };
|
|
140
|
+
}
|
|
11
141
|
export async function handleReview(args, state) {
|
|
12
|
-
const { file, url, project: reviewProject, focus = 'all' } = args;
|
|
142
|
+
const { file, url, project: reviewProject, focus = 'all', incremental = false, maxDepth = 10, maxFiles, useCache = true } = args;
|
|
13
143
|
const focusValue = focus;
|
|
14
|
-
logger.debug('Review requested', { file, url, reviewProject, focus });
|
|
144
|
+
logger.debug('Review requested', { file, url, reviewProject, focus, incremental, maxDepth });
|
|
15
145
|
// Auto-detect if not configured
|
|
16
146
|
if (!state.activeProjectType) {
|
|
17
147
|
const detection = autoDetect.detectProjectType(process.cwd());
|
|
@@ -28,28 +158,66 @@ export async function handleReview(args, state) {
|
|
|
28
158
|
const fs = await import('fs');
|
|
29
159
|
const path = await import('path');
|
|
30
160
|
const projectPath = process.cwd();
|
|
161
|
+
// Initialize cache if enabled
|
|
162
|
+
const cacheManager = useCache ? new AnalysisCacheManager(projectPath) : null;
|
|
163
|
+
// Parse .gitignore patterns
|
|
164
|
+
const gitignorePatterns = parseGitignore(projectPath);
|
|
165
|
+
const allIgnorePatterns = [...DEFAULT_IGNORE_PATTERNS, ...gitignorePatterns];
|
|
166
|
+
// Get changed files if incremental mode
|
|
167
|
+
let changedFiles = null;
|
|
168
|
+
if (incremental) {
|
|
169
|
+
changedFiles = await getChangedFiles(projectPath);
|
|
170
|
+
if (changedFiles.length === 0) {
|
|
171
|
+
return jsonResponse({
|
|
172
|
+
type: 'project-review',
|
|
173
|
+
projectType: state.activeProjectType,
|
|
174
|
+
focus: focusValue,
|
|
175
|
+
message: 'No changed files found. Run without incremental:true to analyze all files.',
|
|
176
|
+
filesAnalyzed: 0
|
|
177
|
+
});
|
|
178
|
+
}
|
|
179
|
+
logger.debug('Incremental mode: analyzing changed files', { count: changedFiles.length });
|
|
180
|
+
}
|
|
31
181
|
const filesToAnalyze = [];
|
|
32
182
|
const exts = ['.ts', '.tsx', '.js', '.jsx', '.py', '.go', '.rs', '.rb', '.php'];
|
|
183
|
+
let skippedByIgnore = 0;
|
|
184
|
+
let skippedBySize = 0;
|
|
33
185
|
function scan(dir, depth = 0) {
|
|
34
|
-
if (depth >
|
|
186
|
+
if (depth > maxDepth)
|
|
187
|
+
return;
|
|
188
|
+
if (maxFiles && filesToAnalyze.length >= maxFiles)
|
|
35
189
|
return;
|
|
36
190
|
try {
|
|
37
191
|
const items = fs.readdirSync(dir);
|
|
38
192
|
for (const item of items) {
|
|
39
|
-
if (
|
|
193
|
+
if (maxFiles && filesToAnalyze.length >= maxFiles)
|
|
194
|
+
return;
|
|
195
|
+
if (item.startsWith('.'))
|
|
40
196
|
continue;
|
|
41
197
|
const full = path.join(dir, item);
|
|
198
|
+
const relativePath = path.relative(projectPath, full);
|
|
199
|
+
// Check ignore patterns
|
|
200
|
+
if (shouldIgnore(relativePath, allIgnorePatterns)) {
|
|
201
|
+
skippedByIgnore++;
|
|
202
|
+
continue;
|
|
203
|
+
}
|
|
42
204
|
const stat = fs.statSync(full);
|
|
43
205
|
if (stat.isDirectory()) {
|
|
44
206
|
scan(full, depth + 1);
|
|
45
207
|
}
|
|
46
|
-
else if (exts.some(e => item.endsWith(e))
|
|
208
|
+
else if (exts.some(e => item.endsWith(e))) {
|
|
209
|
+
// Check file size (skip files > 100KB)
|
|
210
|
+
if (stat.size > 100000) {
|
|
211
|
+
skippedBySize++;
|
|
212
|
+
continue;
|
|
213
|
+
}
|
|
214
|
+
// In incremental mode, only analyze changed files
|
|
215
|
+
if (changedFiles && !changedFiles.includes(relativePath)) {
|
|
216
|
+
continue;
|
|
217
|
+
}
|
|
47
218
|
try {
|
|
48
219
|
const content = fs.readFileSync(full, 'utf-8');
|
|
49
|
-
filesToAnalyze.push({
|
|
50
|
-
path: path.relative(projectPath, full),
|
|
51
|
-
content
|
|
52
|
-
});
|
|
220
|
+
filesToAnalyze.push({ path: relativePath, content });
|
|
53
221
|
}
|
|
54
222
|
catch { /* ignore unreadable files */ }
|
|
55
223
|
}
|
|
@@ -58,26 +226,54 @@ export async function handleReview(args, state) {
|
|
|
58
226
|
catch { /* ignore */ }
|
|
59
227
|
}
|
|
60
228
|
scan(projectPath);
|
|
61
|
-
//
|
|
62
|
-
const
|
|
63
|
-
const
|
|
229
|
+
// Analyze files in parallel with caching
|
|
230
|
+
const startTime = Date.now();
|
|
231
|
+
const { files: analysisResults, cacheHits, cacheMisses } = await analyzeFilesParallel(filesToAnalyze, focusValue, cacheManager);
|
|
232
|
+
// Save cache
|
|
233
|
+
if (cacheManager) {
|
|
234
|
+
cacheManager.save();
|
|
235
|
+
}
|
|
236
|
+
const analysisTime = Date.now() - startTime;
|
|
237
|
+
// Aggregate results
|
|
238
|
+
const overall = {
|
|
239
|
+
totalFiles: analysisResults.length,
|
|
240
|
+
averageScore: analysisResults.length > 0
|
|
241
|
+
? Math.round(analysisResults.reduce((sum, r) => sum + r.score, 0) / analysisResults.length)
|
|
242
|
+
: 100,
|
|
243
|
+
summary: {
|
|
244
|
+
errors: analysisResults.reduce((sum, r) => sum + r.summary.errors, 0),
|
|
245
|
+
warnings: analysisResults.reduce((sum, r) => sum + r.summary.warnings, 0),
|
|
246
|
+
info: analysisResults.reduce((sum, r) => sum + r.summary.info, 0),
|
|
247
|
+
suggestions: analysisResults.reduce((sum, r) => sum + r.summary.suggestions, 0),
|
|
248
|
+
}
|
|
249
|
+
};
|
|
64
250
|
// Format report
|
|
65
251
|
const report = [];
|
|
66
252
|
report.push(`# Project Review Report`);
|
|
67
253
|
report.push(`**Project Type:** ${state.activeProjectType || 'auto-detected'}`);
|
|
68
254
|
report.push(`**Focus:** ${focusValue}`);
|
|
69
|
-
report.push(`**Files Analyzed:** ${
|
|
255
|
+
report.push(`**Files Analyzed:** ${overall.totalFiles}`);
|
|
256
|
+
if (incremental) {
|
|
257
|
+
report.push(`**Mode:** Incremental (changed files only)`);
|
|
258
|
+
}
|
|
259
|
+
report.push(`**Analysis Time:** ${analysisTime}ms`);
|
|
260
|
+
if (useCache) {
|
|
261
|
+
report.push(`**Cache:** ${cacheHits} hits, ${cacheMisses} misses`);
|
|
262
|
+
}
|
|
263
|
+
if (skippedByIgnore > 0 || skippedBySize > 0) {
|
|
264
|
+
report.push(`**Skipped:** ${skippedByIgnore} by ignore patterns, ${skippedBySize} by size limit`);
|
|
265
|
+
}
|
|
70
266
|
report.push('');
|
|
71
|
-
report.push(`## Overall Score: ${
|
|
267
|
+
report.push(`## Overall Score: ${overall.averageScore}/100`);
|
|
72
268
|
report.push('');
|
|
73
269
|
report.push('### Summary');
|
|
74
|
-
report.push(`- 🔴 Errors: ${
|
|
75
|
-
report.push(`- 🟡 Warnings: ${
|
|
76
|
-
report.push(`- 🔵 Info: ${
|
|
77
|
-
report.push(`- 💡 Suggestions: ${
|
|
270
|
+
report.push(`- 🔴 Errors: ${overall.summary.errors}`);
|
|
271
|
+
report.push(`- 🟡 Warnings: ${overall.summary.warnings}`);
|
|
272
|
+
report.push(`- 🔵 Info: ${overall.summary.info}`);
|
|
273
|
+
report.push(`- 💡 Suggestions: ${overall.summary.suggestions}`);
|
|
78
274
|
report.push('');
|
|
79
275
|
// Top issues by file (only files with issues)
|
|
80
|
-
const filesWithIssues =
|
|
276
|
+
const filesWithIssues = analysisResults
|
|
81
277
|
.filter(f => f.issues.length > 0)
|
|
82
278
|
.sort((a, b) => b.issues.length - a.issues.length)
|
|
83
279
|
.slice(0, 10);
|
|
@@ -106,8 +302,11 @@ export async function handleReview(args, state) {
|
|
|
106
302
|
type: 'project-review',
|
|
107
303
|
projectType: state.activeProjectType,
|
|
108
304
|
focus: focusValue,
|
|
109
|
-
analysis:
|
|
305
|
+
analysis: overall,
|
|
110
306
|
filesWithIssues: filesWithIssues.length,
|
|
307
|
+
analysisTime: `${analysisTime}ms`,
|
|
308
|
+
cache: useCache ? { hits: cacheHits, misses: cacheMisses } : undefined,
|
|
309
|
+
incremental,
|
|
111
310
|
report: report.join('\n')
|
|
112
311
|
});
|
|
113
312
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"review.js","sourceRoot":"","sources":["../../src/handlers/review.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"review.js","sourceRoot":"","sources":["../../src/handlers/review.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Analysis Cache Service
|
|
3
|
+
* Caches code analysis results by file hash to avoid re-analyzing unchanged files
|
|
4
|
+
*/
|
|
5
|
+
import { AnalysisResult } from './codeAnalyzer.js';
|
|
6
|
+
interface CacheEntry {
|
|
7
|
+
hash: string;
|
|
8
|
+
result: AnalysisResult;
|
|
9
|
+
timestamp: number;
|
|
10
|
+
version: string;
|
|
11
|
+
}
|
|
12
|
+
interface CacheStore {
|
|
13
|
+
version: string;
|
|
14
|
+
entries: Record<string, CacheEntry>;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Compute SHA256 hash of file content
|
|
18
|
+
*/
|
|
19
|
+
export declare function computeFileHash(content: string): string;
|
|
20
|
+
/**
|
|
21
|
+
* Get cache directory path for a project
|
|
22
|
+
*/
|
|
23
|
+
export declare function getCacheDir(projectPath: string): string;
|
|
24
|
+
/**
|
|
25
|
+
* Get cache file path for a project
|
|
26
|
+
*/
|
|
27
|
+
export declare function getCacheFilePath(projectPath: string): string;
|
|
28
|
+
/**
|
|
29
|
+
* Load cache from disk
|
|
30
|
+
*/
|
|
31
|
+
export declare function loadCache(projectPath: string): CacheStore;
|
|
32
|
+
/**
|
|
33
|
+
* Save cache to disk
|
|
34
|
+
*/
|
|
35
|
+
export declare function saveCache(projectPath: string, cache: CacheStore): void;
|
|
36
|
+
/**
|
|
37
|
+
* Create empty cache store
|
|
38
|
+
*/
|
|
39
|
+
export declare function createEmptyCache(): CacheStore;
|
|
40
|
+
/**
|
|
41
|
+
* Clean expired entries from cache
|
|
42
|
+
*/
|
|
43
|
+
export declare function cleanExpiredEntries(cache: CacheStore): CacheStore;
|
|
44
|
+
/**
|
|
45
|
+
* Get cached analysis result if valid
|
|
46
|
+
*/
|
|
47
|
+
export declare function getCachedResult(cache: CacheStore, filePath: string, content: string): AnalysisResult | null;
|
|
48
|
+
/**
|
|
49
|
+
* Store analysis result in cache
|
|
50
|
+
*/
|
|
51
|
+
export declare function setCachedResult(cache: CacheStore, filePath: string, content: string, result: AnalysisResult): void;
|
|
52
|
+
/**
|
|
53
|
+
* Invalidate cache entry for a file
|
|
54
|
+
*/
|
|
55
|
+
export declare function invalidateCacheEntry(cache: CacheStore, filePath: string): void;
|
|
56
|
+
/**
|
|
57
|
+
* Clear all cache entries
|
|
58
|
+
*/
|
|
59
|
+
export declare function clearCache(projectPath: string): void;
|
|
60
|
+
/**
|
|
61
|
+
* Get cache statistics
|
|
62
|
+
*/
|
|
63
|
+
export declare function getCacheStats(cache: CacheStore): {
|
|
64
|
+
totalEntries: number;
|
|
65
|
+
validEntries: number;
|
|
66
|
+
expiredEntries: number;
|
|
67
|
+
oldestEntry: number | null;
|
|
68
|
+
newestEntry: number | null;
|
|
69
|
+
};
|
|
70
|
+
/**
|
|
71
|
+
* AnalysisCacheManager - High-level API for managing analysis cache
|
|
72
|
+
*/
|
|
73
|
+
export declare class AnalysisCacheManager {
|
|
74
|
+
private projectPath;
|
|
75
|
+
private cache;
|
|
76
|
+
private dirty;
|
|
77
|
+
constructor(projectPath: string);
|
|
78
|
+
/**
|
|
79
|
+
* Get cached result or null if not found/invalid
|
|
80
|
+
*/
|
|
81
|
+
get(filePath: string, content: string): AnalysisResult | null;
|
|
82
|
+
/**
|
|
83
|
+
* Store result in cache
|
|
84
|
+
*/
|
|
85
|
+
set(filePath: string, content: string, result: AnalysisResult): void;
|
|
86
|
+
/**
|
|
87
|
+
* Invalidate a specific file
|
|
88
|
+
*/
|
|
89
|
+
invalidate(filePath: string): void;
|
|
90
|
+
/**
|
|
91
|
+
* Save cache to disk if modified
|
|
92
|
+
*/
|
|
93
|
+
save(): void;
|
|
94
|
+
/**
|
|
95
|
+
* Get cache statistics
|
|
96
|
+
*/
|
|
97
|
+
getStats(): {
|
|
98
|
+
totalEntries: number;
|
|
99
|
+
validEntries: number;
|
|
100
|
+
expiredEntries: number;
|
|
101
|
+
oldestEntry: number | null;
|
|
102
|
+
newestEntry: number | null;
|
|
103
|
+
};
|
|
104
|
+
/**
|
|
105
|
+
* Clear all cache
|
|
106
|
+
*/
|
|
107
|
+
clear(): void;
|
|
108
|
+
}
|
|
109
|
+
export {};
|
|
110
|
+
//# sourceMappingURL=analysisCache.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"analysisCache.d.ts","sourceRoot":"","sources":["../../src/services/analysisCache.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAGnD,UAAU,UAAU;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,cAAc,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,UAAU,UAAU;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;CACrC;AAOD;;GAEG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAEvD;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAEvD;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAE5D;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,WAAW,EAAE,MAAM,GAAG,UAAU,CAqBzD;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,GAAG,IAAI,CAkBtE;AAED;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,UAAU,CAK7C;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,UAAU,GAAG,UAAU,CAcjE;AAED;;GAEG;AACH,wBAAgB,eAAe,CAC7B,KAAK,EAAE,UAAU,EACjB,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,GACd,cAAc,GAAG,IAAI,CAiBvB;AAED;;GAEG;AACH,wBAAgB,eAAe,CAC7B,KAAK,EAAE,UAAU,EACjB,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,cAAc,GACrB,IAAI,CAON;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI,CAE9E;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAWpD;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,UAAU,GAAG;IAChD,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE,MAAM,CAAC;IACvB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;CAC5B,CA6BA;AAED;;GAEG;AACH,qBAAa,oBAAoB;IAC/B,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,KAAK,CAAa;IAC1B,OAAO,CAAC,KAAK,CAAkB;gBAEnB,WAAW,EAAE,MAAM;IAK/B;;OAEG;IACH,GAAG,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,cAAc,GAAG,IAAI;IAI7D;;OAEG;IACH,GAAG,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,cAAc,GAAG,IAAI;IAKpE;;OAEG;IACH,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAKlC;;OAEG;IACH,IAAI,IAAI,IAAI;IAOZ;;OAEG;IACH,QAAQ;sBArFM,MAAM;sBACN,MAAM;wBACJ,MAAM;qBACT,MAAM,GAAG,IAAI;qBACb,MAAM,GAAG,IAAI;;IAqF1B;;OAEG;IACH,KAAK,IAAI,IAAI;CAKd"}
|