codebase-context 1.0.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/LICENSE +21 -0
- package/README.md +74 -0
- package/dist/analyzers/angular/index.d.ts +44 -0
- package/dist/analyzers/angular/index.d.ts.map +1 -0
- package/dist/analyzers/angular/index.js +922 -0
- package/dist/analyzers/angular/index.js.map +1 -0
- package/dist/analyzers/generic/index.d.ts +23 -0
- package/dist/analyzers/generic/index.d.ts.map +1 -0
- package/dist/analyzers/generic/index.js +354 -0
- package/dist/analyzers/generic/index.js.map +1 -0
- package/dist/core/analyzer-registry.d.ts +36 -0
- package/dist/core/analyzer-registry.d.ts.map +1 -0
- package/dist/core/analyzer-registry.js +78 -0
- package/dist/core/analyzer-registry.js.map +1 -0
- package/dist/core/file-watcher.d.ts +63 -0
- package/dist/core/file-watcher.d.ts.map +1 -0
- package/dist/core/file-watcher.js +210 -0
- package/dist/core/file-watcher.js.map +1 -0
- package/dist/core/indexer.d.ts +29 -0
- package/dist/core/indexer.d.ts.map +1 -0
- package/dist/core/indexer.js +507 -0
- package/dist/core/indexer.js.map +1 -0
- package/dist/core/search.d.ts +31 -0
- package/dist/core/search.d.ts.map +1 -0
- package/dist/core/search.js +307 -0
- package/dist/core/search.js.map +1 -0
- package/dist/embeddings/index.d.ts +5 -0
- package/dist/embeddings/index.d.ts.map +1 -0
- package/dist/embeddings/index.js +33 -0
- package/dist/embeddings/index.js.map +1 -0
- package/dist/embeddings/openai.d.ts +19 -0
- package/dist/embeddings/openai.d.ts.map +1 -0
- package/dist/embeddings/openai.js +59 -0
- package/dist/embeddings/openai.js.map +1 -0
- package/dist/embeddings/transformers.d.ts +17 -0
- package/dist/embeddings/transformers.d.ts.map +1 -0
- package/dist/embeddings/transformers.js +83 -0
- package/dist/embeddings/transformers.js.map +1 -0
- package/dist/embeddings/types.d.ts +20 -0
- package/dist/embeddings/types.d.ts.map +1 -0
- package/dist/embeddings/types.js +9 -0
- package/dist/embeddings/types.js.map +1 -0
- package/dist/index.d.ts +41 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +790 -0
- package/dist/index.js.map +1 -0
- package/dist/lib.d.ts +58 -0
- package/dist/lib.d.ts.map +1 -0
- package/dist/lib.js +81 -0
- package/dist/lib.js.map +1 -0
- package/dist/storage/index.d.ts +12 -0
- package/dist/storage/index.d.ts.map +1 -0
- package/dist/storage/index.js +18 -0
- package/dist/storage/index.js.map +1 -0
- package/dist/storage/lancedb.d.ts +24 -0
- package/dist/storage/lancedb.d.ts.map +1 -0
- package/dist/storage/lancedb.js +197 -0
- package/dist/storage/lancedb.js.map +1 -0
- package/dist/storage/types.d.ts +45 -0
- package/dist/storage/types.d.ts.map +1 -0
- package/dist/storage/types.js +8 -0
- package/dist/storage/types.js.map +1 -0
- package/dist/types/index.d.ts +367 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +6 -0
- package/dist/types/index.js.map +1 -0
- package/dist/utils/chunking.d.ts +23 -0
- package/dist/utils/chunking.d.ts.map +1 -0
- package/dist/utils/chunking.js +226 -0
- package/dist/utils/chunking.js.map +1 -0
- package/dist/utils/language-detection.d.ts +29 -0
- package/dist/utils/language-detection.d.ts.map +1 -0
- package/dist/utils/language-detection.js +127 -0
- package/dist/utils/language-detection.js.map +1 -0
- package/dist/utils/pattern-detector.d.ts +41 -0
- package/dist/utils/pattern-detector.d.ts.map +1 -0
- package/dist/utils/pattern-detector.js +101 -0
- package/dist/utils/pattern-detector.js.map +1 -0
- package/dist/utils/usage-tracker.d.ts +120 -0
- package/dist/utils/usage-tracker.d.ts.map +1 -0
- package/dist/utils/usage-tracker.js +336 -0
- package/dist/utils/usage-tracker.js.map +1 -0
- package/package.json +98 -0
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Language Detection Utilities
|
|
3
|
+
* Determines file types and languages based on extension and content
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* Detect language from file path
|
|
7
|
+
*/
|
|
8
|
+
export declare function detectLanguage(filePath: string): string;
|
|
9
|
+
/**
|
|
10
|
+
* Check if a file is a code file
|
|
11
|
+
*/
|
|
12
|
+
export declare function isCodeFile(filePath: string): boolean;
|
|
13
|
+
/**
|
|
14
|
+
* Check if a file is binary
|
|
15
|
+
*/
|
|
16
|
+
export declare function isBinaryFile(filePath: string): boolean;
|
|
17
|
+
/**
|
|
18
|
+
* Check if file is a test file
|
|
19
|
+
*/
|
|
20
|
+
export declare function isTestFile(filePath: string): boolean;
|
|
21
|
+
/**
|
|
22
|
+
* Check if file is a style guide or documentation
|
|
23
|
+
*/
|
|
24
|
+
export declare function isDocumentationFile(filePath: string): boolean;
|
|
25
|
+
/**
|
|
26
|
+
* Get all supported extensions
|
|
27
|
+
*/
|
|
28
|
+
export declare function getSupportedExtensions(): string[];
|
|
29
|
+
//# sourceMappingURL=language-detection.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"language-detection.d.ts","sourceRoot":"","sources":["../../src/utils/language-detection.ts"],"names":[],"mappings":"AAAA;;;GAGG;AA+EH;;GAEG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAGvD;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAGpD;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAGtD;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CASpD;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAc7D;AAED;;GAEG;AACH,wBAAgB,sBAAsB,IAAI,MAAM,EAAE,CAEjD"}
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Language Detection Utilities
|
|
3
|
+
* Determines file types and languages based on extension and content
|
|
4
|
+
*/
|
|
5
|
+
import path from 'path';
|
|
6
|
+
// Map of file extensions to languages
|
|
7
|
+
const extensionToLanguage = {
|
|
8
|
+
// JavaScript/TypeScript
|
|
9
|
+
'.js': 'javascript',
|
|
10
|
+
'.mjs': 'javascript',
|
|
11
|
+
'.cjs': 'javascript',
|
|
12
|
+
'.jsx': 'javascriptreact',
|
|
13
|
+
'.ts': 'typescript',
|
|
14
|
+
'.tsx': 'typescriptreact',
|
|
15
|
+
'.mts': 'typescript',
|
|
16
|
+
'.cts': 'typescript',
|
|
17
|
+
// Web
|
|
18
|
+
'.html': 'html',
|
|
19
|
+
'.htm': 'html',
|
|
20
|
+
'.css': 'css',
|
|
21
|
+
'.scss': 'scss',
|
|
22
|
+
'.sass': 'sass',
|
|
23
|
+
'.less': 'less',
|
|
24
|
+
// Data/Config
|
|
25
|
+
'.json': 'json',
|
|
26
|
+
'.jsonc': 'jsonc',
|
|
27
|
+
'.yaml': 'yaml',
|
|
28
|
+
'.yml': 'yaml',
|
|
29
|
+
'.toml': 'toml',
|
|
30
|
+
'.xml': 'xml',
|
|
31
|
+
// Markdown
|
|
32
|
+
'.md': 'markdown',
|
|
33
|
+
'.mdx': 'mdx',
|
|
34
|
+
// Other
|
|
35
|
+
'.graphql': 'graphql',
|
|
36
|
+
'.gql': 'graphql',
|
|
37
|
+
'.sql': 'sql',
|
|
38
|
+
'.sh': 'shellscript',
|
|
39
|
+
'.bash': 'shellscript',
|
|
40
|
+
'.zsh': 'shellscript',
|
|
41
|
+
'.ps1': 'powershell',
|
|
42
|
+
'.py': 'python',
|
|
43
|
+
'.rb': 'ruby',
|
|
44
|
+
'.java': 'java',
|
|
45
|
+
'.go': 'go',
|
|
46
|
+
'.rs': 'rust',
|
|
47
|
+
'.c': 'c',
|
|
48
|
+
'.cpp': 'cpp',
|
|
49
|
+
'.h': 'c',
|
|
50
|
+
'.hpp': 'cpp',
|
|
51
|
+
};
|
|
52
|
+
// Binary file extensions to skip
|
|
53
|
+
const binaryExtensions = new Set([
|
|
54
|
+
'.png', '.jpg', '.jpeg', '.gif', '.ico', '.svg', '.webp', '.bmp',
|
|
55
|
+
'.woff', '.woff2', '.ttf', '.eot', '.otf',
|
|
56
|
+
'.mp3', '.mp4', '.wav', '.avi', '.mov', '.webm',
|
|
57
|
+
'.pdf', '.doc', '.docx', '.xls', '.xlsx', '.ppt', '.pptx',
|
|
58
|
+
'.zip', '.tar', '.gz', '.rar', '.7z',
|
|
59
|
+
'.exe', '.dll', '.so', '.dylib',
|
|
60
|
+
'.lock', '.map',
|
|
61
|
+
]);
|
|
62
|
+
// Code file extensions
|
|
63
|
+
const codeExtensions = new Set([
|
|
64
|
+
'.js', '.mjs', '.cjs', '.jsx',
|
|
65
|
+
'.ts', '.tsx', '.mts', '.cts',
|
|
66
|
+
'.html', '.htm',
|
|
67
|
+
'.css', '.scss', '.sass', '.less',
|
|
68
|
+
'.json', '.jsonc',
|
|
69
|
+
'.yaml', '.yml',
|
|
70
|
+
'.md', '.mdx',
|
|
71
|
+
'.graphql', '.gql',
|
|
72
|
+
'.py', '.rb', '.java', '.go', '.rs', '.c', '.cpp', '.h', '.hpp',
|
|
73
|
+
]);
|
|
74
|
+
/**
|
|
75
|
+
* Detect language from file path
|
|
76
|
+
*/
|
|
77
|
+
export function detectLanguage(filePath) {
|
|
78
|
+
const ext = path.extname(filePath).toLowerCase();
|
|
79
|
+
return extensionToLanguage[ext] || 'plaintext';
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Check if a file is a code file
|
|
83
|
+
*/
|
|
84
|
+
export function isCodeFile(filePath) {
|
|
85
|
+
const ext = path.extname(filePath).toLowerCase();
|
|
86
|
+
return codeExtensions.has(ext);
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Check if a file is binary
|
|
90
|
+
*/
|
|
91
|
+
export function isBinaryFile(filePath) {
|
|
92
|
+
const ext = path.extname(filePath).toLowerCase();
|
|
93
|
+
return binaryExtensions.has(ext);
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Check if file is a test file
|
|
97
|
+
*/
|
|
98
|
+
export function isTestFile(filePath) {
|
|
99
|
+
const lowerPath = filePath.toLowerCase();
|
|
100
|
+
return (lowerPath.includes('.spec.') ||
|
|
101
|
+
lowerPath.includes('.test.') ||
|
|
102
|
+
lowerPath.includes('__tests__') ||
|
|
103
|
+
lowerPath.includes('/test/') ||
|
|
104
|
+
lowerPath.includes('/tests/'));
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Check if file is a style guide or documentation
|
|
108
|
+
*/
|
|
109
|
+
export function isDocumentationFile(filePath) {
|
|
110
|
+
const lowerPath = filePath.toLowerCase();
|
|
111
|
+
const fileName = path.basename(lowerPath);
|
|
112
|
+
return (fileName === 'readme.md' ||
|
|
113
|
+
fileName === 'contributing.md' ||
|
|
114
|
+
fileName === 'changelog.md' ||
|
|
115
|
+
fileName === 'license.md' ||
|
|
116
|
+
fileName === 'style_guide.md' ||
|
|
117
|
+
fileName === 'style-guide.md' ||
|
|
118
|
+
fileName === 'architecture.md' ||
|
|
119
|
+
lowerPath.includes('/docs/'));
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* Get all supported extensions
|
|
123
|
+
*/
|
|
124
|
+
export function getSupportedExtensions() {
|
|
125
|
+
return Array.from(codeExtensions);
|
|
126
|
+
}
|
|
127
|
+
//# sourceMappingURL=language-detection.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"language-detection.js","sourceRoot":"","sources":["../../src/utils/language-detection.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pattern detection and team alignment utilities for Phase 1.5
|
|
3
|
+
*/
|
|
4
|
+
export interface TeamPatterns {
|
|
5
|
+
dependencyInjection?: PatternConsensus;
|
|
6
|
+
stateManagement?: PatternConsensus;
|
|
7
|
+
componentInputs?: PatternConsensus;
|
|
8
|
+
[key: string]: PatternConsensus | undefined;
|
|
9
|
+
}
|
|
10
|
+
export interface PatternConsensus {
|
|
11
|
+
primary: {
|
|
12
|
+
name: string;
|
|
13
|
+
count: number;
|
|
14
|
+
frequency: string;
|
|
15
|
+
};
|
|
16
|
+
alternatives?: Array<{
|
|
17
|
+
name: string;
|
|
18
|
+
count: number;
|
|
19
|
+
frequency: string;
|
|
20
|
+
}>;
|
|
21
|
+
}
|
|
22
|
+
export interface CodebaseIntelligence {
|
|
23
|
+
libraryUsage: Record<string, any>;
|
|
24
|
+
patterns: TeamPatterns;
|
|
25
|
+
generatedAt: string;
|
|
26
|
+
}
|
|
27
|
+
export declare class PatternDetector {
|
|
28
|
+
private intelligence;
|
|
29
|
+
private rootPath;
|
|
30
|
+
constructor(rootPath: string);
|
|
31
|
+
loadIntelligence(): Promise<void>;
|
|
32
|
+
/**
|
|
33
|
+
* Detect patterns in code chunk content
|
|
34
|
+
*/
|
|
35
|
+
detectPatterns(content: string, componentType?: string): string[];
|
|
36
|
+
/**
|
|
37
|
+
* Calculate team alignment percentage based on detected patterns
|
|
38
|
+
*/
|
|
39
|
+
calculateTeamAlignment(detectedPatterns: string[]): string;
|
|
40
|
+
}
|
|
41
|
+
//# sourceMappingURL=pattern-detector.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pattern-detector.d.ts","sourceRoot":"","sources":["../../src/utils/pattern-detector.ts"],"names":[],"mappings":"AAAA;;GAEG;AAKH,MAAM,WAAW,YAAY;IACzB,mBAAmB,CAAC,EAAE,gBAAgB,CAAC;IACvC,eAAe,CAAC,EAAE,gBAAgB,CAAC;IACnC,eAAe,CAAC,EAAE,gBAAgB,CAAC;IACnC,CAAC,GAAG,EAAE,MAAM,GAAG,gBAAgB,GAAG,SAAS,CAAC;CAC/C;AAED,MAAM,WAAW,gBAAgB;IAC7B,OAAO,EAAE;QACL,IAAI,EAAE,MAAM,CAAC;QACb,KAAK,EAAE,MAAM,CAAC;QACd,SAAS,EAAE,MAAM,CAAC;KACrB,CAAC;IACF,YAAY,CAAC,EAAE,KAAK,CAAC;QACjB,IAAI,EAAE,MAAM,CAAC;QACb,KAAK,EAAE,MAAM,CAAC;QACd,SAAS,EAAE,MAAM,CAAC;KACrB,CAAC,CAAC;CACN;AAED,MAAM,WAAW,oBAAoB;IACjC,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAClC,QAAQ,EAAE,YAAY,CAAC;IACvB,WAAW,EAAE,MAAM,CAAC;CACvB;AAED,qBAAa,eAAe;IACxB,OAAO,CAAC,YAAY,CAAqC;IACzD,OAAO,CAAC,QAAQ,CAAS;gBAEb,QAAQ,EAAE,MAAM;IAItB,gBAAgB,IAAI,OAAO,CAAC,IAAI,CAAC;IAWvC;;OAEG;IACH,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,aAAa,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE;IAoCjE;;OAEG;IACH,sBAAsB,CAAC,gBAAgB,EAAE,MAAM,EAAE,GAAG,MAAM;CA2C7D"}
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pattern detection and team alignment utilities for Phase 1.5
|
|
3
|
+
*/
|
|
4
|
+
import path from 'path';
|
|
5
|
+
import { promises as fs } from 'fs';
|
|
6
|
+
export class PatternDetector {
|
|
7
|
+
intelligence = null;
|
|
8
|
+
rootPath;
|
|
9
|
+
constructor(rootPath) {
|
|
10
|
+
this.rootPath = rootPath;
|
|
11
|
+
}
|
|
12
|
+
async loadIntelligence() {
|
|
13
|
+
try {
|
|
14
|
+
const intelligencePath = path.join(this.rootPath, '.codebase-intelligence.json');
|
|
15
|
+
const content = await fs.readFile(intelligencePath, 'utf-8');
|
|
16
|
+
this.intelligence = JSON.parse(content);
|
|
17
|
+
}
|
|
18
|
+
catch (error) {
|
|
19
|
+
console.warn('No codebase intelligence file found');
|
|
20
|
+
this.intelligence = null;
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Detect patterns in code chunk content
|
|
25
|
+
*/
|
|
26
|
+
detectPatterns(content, componentType) {
|
|
27
|
+
const patterns = [];
|
|
28
|
+
// DI patterns
|
|
29
|
+
if (content.includes('inject(')) {
|
|
30
|
+
patterns.push('inject() DI');
|
|
31
|
+
}
|
|
32
|
+
else if (content.match(/constructor\s*\(/)) {
|
|
33
|
+
patterns.push('constructor injection');
|
|
34
|
+
}
|
|
35
|
+
// State management
|
|
36
|
+
if (content.includes('signal(') || content.includes('signal<')) {
|
|
37
|
+
patterns.push('Signals');
|
|
38
|
+
}
|
|
39
|
+
if (content.includes('BehaviorSubject') || content.includes('Subject<')) {
|
|
40
|
+
patterns.push('RxJS');
|
|
41
|
+
}
|
|
42
|
+
// Lifecycle
|
|
43
|
+
if (content.includes('OnDestroy') && content.includes('destroyed$')) {
|
|
44
|
+
patterns.push('OnDestroy cleanup');
|
|
45
|
+
}
|
|
46
|
+
// Component patterns
|
|
47
|
+
if (componentType === 'component') {
|
|
48
|
+
if (content.includes('standalone: true')) {
|
|
49
|
+
patterns.push('standalone component');
|
|
50
|
+
}
|
|
51
|
+
if (content.includes('OnPush')) {
|
|
52
|
+
patterns.push('OnPush strategy');
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
return patterns;
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Calculate team alignment percentage based on detected patterns
|
|
59
|
+
*/
|
|
60
|
+
calculateTeamAlignment(detectedPatterns) {
|
|
61
|
+
if (!this.intelligence || !this.intelligence.patterns) {
|
|
62
|
+
return 'unknown';
|
|
63
|
+
}
|
|
64
|
+
let matchScore = 0;
|
|
65
|
+
let totalChecks = 0;
|
|
66
|
+
// Check DI alignment
|
|
67
|
+
if (detectedPatterns.includes('inject() DI')) {
|
|
68
|
+
const diPattern = this.intelligence.patterns.dependencyInjection;
|
|
69
|
+
if (diPattern?.primary.name === 'inject() function') {
|
|
70
|
+
matchScore += parseInt(diPattern.primary.frequency) || 0;
|
|
71
|
+
}
|
|
72
|
+
totalChecks++;
|
|
73
|
+
}
|
|
74
|
+
else if (detectedPatterns.includes('constructor injection')) {
|
|
75
|
+
totalChecks++;
|
|
76
|
+
// Low score for non-consensus pattern
|
|
77
|
+
matchScore += 5;
|
|
78
|
+
}
|
|
79
|
+
// Check state management alignment
|
|
80
|
+
if (detectedPatterns.includes('Signals')) {
|
|
81
|
+
const statePattern = this.intelligence.patterns.stateManagement;
|
|
82
|
+
if (statePattern?.primary.name === 'Angular Signals') {
|
|
83
|
+
matchScore += parseInt(statePattern.primary.frequency) || 0;
|
|
84
|
+
}
|
|
85
|
+
totalChecks++;
|
|
86
|
+
}
|
|
87
|
+
else if (detectedPatterns.includes('RxJS')) {
|
|
88
|
+
const statePattern = this.intelligence.patterns.stateManagement;
|
|
89
|
+
if (statePattern?.alternatives?.[0]?.name === 'RxJS Subjects') {
|
|
90
|
+
matchScore += parseInt(statePattern.alternatives[0].frequency) || 0;
|
|
91
|
+
}
|
|
92
|
+
totalChecks++;
|
|
93
|
+
}
|
|
94
|
+
if (totalChecks === 0) {
|
|
95
|
+
return 'no patterns detected';
|
|
96
|
+
}
|
|
97
|
+
const avgAlignment = Math.round(matchScore / totalChecks);
|
|
98
|
+
return `${avgAlignment}% match`;
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
//# sourceMappingURL=pattern-detector.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pattern-detector.js","sourceRoot":"","sources":["../../src/utils/pattern-detector.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Library Usage Tracker & Pattern Detector
|
|
3
|
+
* Tracks what libraries are used and detects common coding patterns
|
|
4
|
+
*/
|
|
5
|
+
export interface LibraryUsageStats {
|
|
6
|
+
[libraryPath: string]: {
|
|
7
|
+
count: number;
|
|
8
|
+
examples: string[];
|
|
9
|
+
};
|
|
10
|
+
}
|
|
11
|
+
export interface PatternUsageStats {
|
|
12
|
+
[patternName: string]: {
|
|
13
|
+
primary: {
|
|
14
|
+
name: string;
|
|
15
|
+
count: number;
|
|
16
|
+
frequency: string;
|
|
17
|
+
examples: string[];
|
|
18
|
+
canonicalExample?: {
|
|
19
|
+
file: string;
|
|
20
|
+
snippet: string;
|
|
21
|
+
};
|
|
22
|
+
};
|
|
23
|
+
alsoDetected?: Array<{
|
|
24
|
+
name: string;
|
|
25
|
+
count: number;
|
|
26
|
+
frequency: string;
|
|
27
|
+
}>;
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
export interface ImportUsage {
|
|
31
|
+
file: string;
|
|
32
|
+
line: number;
|
|
33
|
+
}
|
|
34
|
+
export interface ComponentUsageInfo {
|
|
35
|
+
definedIn?: string;
|
|
36
|
+
usedIn: ImportUsage[];
|
|
37
|
+
usageCount: number;
|
|
38
|
+
}
|
|
39
|
+
export declare class ImportGraph {
|
|
40
|
+
private usages;
|
|
41
|
+
private exports;
|
|
42
|
+
trackImport(importSource: string, importingFile: string, line?: number): void;
|
|
43
|
+
trackExport(filePath: string, exportName: string): void;
|
|
44
|
+
private normalizeSource;
|
|
45
|
+
private toRelativePath;
|
|
46
|
+
/**
|
|
47
|
+
* Find all files that import a given source
|
|
48
|
+
* This is "Find Usages" - the key value
|
|
49
|
+
*/
|
|
50
|
+
getUsages(importSource: string): ComponentUsageInfo;
|
|
51
|
+
/**
|
|
52
|
+
* Get full usage stats for all tracked imports
|
|
53
|
+
*/
|
|
54
|
+
getAllUsages(): Record<string, ComponentUsageInfo>;
|
|
55
|
+
/**
|
|
56
|
+
* Get top N most-used imports
|
|
57
|
+
*/
|
|
58
|
+
getTopUsed(n?: number): Array<{
|
|
59
|
+
source: string;
|
|
60
|
+
count: number;
|
|
61
|
+
}>;
|
|
62
|
+
}
|
|
63
|
+
export declare class LibraryUsageTracker {
|
|
64
|
+
private usage;
|
|
65
|
+
track(importSource: string, filePath: string, line?: number): void;
|
|
66
|
+
private normalizeImportSource;
|
|
67
|
+
getStats(): LibraryUsageStats;
|
|
68
|
+
getTopLibraries(n?: number): Array<[string, number]>;
|
|
69
|
+
}
|
|
70
|
+
interface TestFrameworkConfig {
|
|
71
|
+
name: string;
|
|
72
|
+
type: 'unit' | 'e2e';
|
|
73
|
+
indicators: string[];
|
|
74
|
+
priority: number;
|
|
75
|
+
}
|
|
76
|
+
export interface GoldenFile {
|
|
77
|
+
file: string;
|
|
78
|
+
score: number;
|
|
79
|
+
patterns: {
|
|
80
|
+
inject: boolean;
|
|
81
|
+
signals: boolean;
|
|
82
|
+
computed: boolean;
|
|
83
|
+
effect: boolean;
|
|
84
|
+
standalone: boolean;
|
|
85
|
+
signalInputs: boolean;
|
|
86
|
+
};
|
|
87
|
+
}
|
|
88
|
+
export declare class PatternDetector {
|
|
89
|
+
private patterns;
|
|
90
|
+
private canonicalExamples;
|
|
91
|
+
private goldenFiles;
|
|
92
|
+
private testFrameworkConfigs;
|
|
93
|
+
constructor(customConfigs?: TestFrameworkConfig[]);
|
|
94
|
+
track(category: string, patternName: string, example?: {
|
|
95
|
+
file: string;
|
|
96
|
+
snippet: string;
|
|
97
|
+
}): void;
|
|
98
|
+
/**
|
|
99
|
+
* Track a file as a potential "Golden File" - a file that demonstrates multiple modern patterns
|
|
100
|
+
*/
|
|
101
|
+
trackGoldenFile(file: string, score: number, patterns: GoldenFile['patterns']): void;
|
|
102
|
+
/**
|
|
103
|
+
* Get top N Golden Files - files that best demonstrate all modern patterns together
|
|
104
|
+
*/
|
|
105
|
+
getGoldenFiles(n?: number): GoldenFile[];
|
|
106
|
+
getConsensus(category: string): PatternUsageStats[string] | null;
|
|
107
|
+
getAllPatterns(): PatternUsageStats;
|
|
108
|
+
/**
|
|
109
|
+
* Detect test framework from content using config-driven matching
|
|
110
|
+
* Returns detected framework with confidence based on priority scoring
|
|
111
|
+
*/
|
|
112
|
+
private detectTestFramework;
|
|
113
|
+
/**
|
|
114
|
+
* Detect patterns from code - FRAMEWORK-AGNOSTIC
|
|
115
|
+
* Framework-specific patterns should be detected by framework analyzers
|
|
116
|
+
*/
|
|
117
|
+
detectFromCode(content: string, filePath: string): void;
|
|
118
|
+
}
|
|
119
|
+
export {};
|
|
120
|
+
//# sourceMappingURL=usage-tracker.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"usage-tracker.d.ts","sourceRoot":"","sources":["../../src/utils/usage-tracker.ts"],"names":[],"mappings":"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"}
|