driftdetect-core 0.1.3 → 0.3.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/dist/boundaries/boundary-store.d.ts +92 -0
- package/dist/boundaries/boundary-store.d.ts.map +1 -0
- package/dist/boundaries/boundary-store.js +458 -0
- package/dist/boundaries/boundary-store.js.map +1 -0
- package/dist/boundaries/index.d.ts +8 -0
- package/dist/boundaries/index.d.ts.map +1 -0
- package/dist/boundaries/index.js +8 -0
- package/dist/boundaries/index.js.map +1 -0
- package/dist/boundaries/types.d.ts +237 -0
- package/dist/boundaries/types.d.ts.map +1 -0
- package/dist/boundaries/types.js +8 -0
- package/dist/boundaries/types.js.map +1 -0
- package/dist/dna/ai-context.d.ts +10 -0
- package/dist/dna/ai-context.d.ts.map +1 -0
- package/dist/dna/ai-context.js +46 -0
- package/dist/dna/ai-context.js.map +1 -0
- package/dist/dna/dna-analyzer.d.ts +34 -0
- package/dist/dna/dna-analyzer.d.ts.map +1 -0
- package/dist/dna/dna-analyzer.js +110 -0
- package/dist/dna/dna-analyzer.js.map +1 -0
- package/dist/dna/dna-store.d.ts +13 -0
- package/dist/dna/dna-store.d.ts.map +1 -0
- package/dist/dna/dna-store.js +43 -0
- package/dist/dna/dna-store.js.map +1 -0
- package/dist/dna/gene-extractors/animation-approach.d.ts +15 -0
- package/dist/dna/gene-extractors/animation-approach.d.ts.map +1 -0
- package/dist/dna/gene-extractors/animation-approach.js +97 -0
- package/dist/dna/gene-extractors/animation-approach.js.map +1 -0
- package/dist/dna/gene-extractors/base-extractor.d.ts +53 -0
- package/dist/dna/gene-extractors/base-extractor.d.ts.map +1 -0
- package/dist/dna/gene-extractors/base-extractor.js +76 -0
- package/dist/dna/gene-extractors/base-extractor.js.map +1 -0
- package/dist/dna/gene-extractors/index.d.ts +16 -0
- package/dist/dna/gene-extractors/index.d.ts.map +1 -0
- package/dist/dna/gene-extractors/index.js +38 -0
- package/dist/dna/gene-extractors/index.js.map +1 -0
- package/dist/dna/gene-extractors/responsive-approach.d.ts +10 -0
- package/dist/dna/gene-extractors/responsive-approach.d.ts.map +1 -0
- package/dist/dna/gene-extractors/responsive-approach.js +30 -0
- package/dist/dna/gene-extractors/responsive-approach.js.map +1 -0
- package/dist/dna/gene-extractors/spacing-philosophy.d.ts +10 -0
- package/dist/dna/gene-extractors/spacing-philosophy.d.ts.map +1 -0
- package/dist/dna/gene-extractors/spacing-philosophy.js +30 -0
- package/dist/dna/gene-extractors/spacing-philosophy.js.map +1 -0
- package/dist/dna/gene-extractors/state-styling.d.ts +10 -0
- package/dist/dna/gene-extractors/state-styling.d.ts.map +1 -0
- package/dist/dna/gene-extractors/state-styling.js +29 -0
- package/dist/dna/gene-extractors/state-styling.js.map +1 -0
- package/dist/dna/gene-extractors/theming.d.ts +10 -0
- package/dist/dna/gene-extractors/theming.d.ts.map +1 -0
- package/dist/dna/gene-extractors/theming.js +30 -0
- package/dist/dna/gene-extractors/theming.js.map +1 -0
- package/dist/dna/gene-extractors/variant-handling.d.ts +13 -0
- package/dist/dna/gene-extractors/variant-handling.d.ts.map +1 -0
- package/dist/dna/gene-extractors/variant-handling.js +38 -0
- package/dist/dna/gene-extractors/variant-handling.js.map +1 -0
- package/dist/dna/health-calculator.d.ts +21 -0
- package/dist/dna/health-calculator.d.ts.map +1 -0
- package/dist/dna/health-calculator.js +113 -0
- package/dist/dna/health-calculator.js.map +1 -0
- package/dist/dna/index.d.ts +21 -0
- package/dist/dna/index.d.ts.map +1 -0
- package/dist/dna/index.js +19 -0
- package/dist/dna/index.js.map +1 -0
- package/dist/dna/mutation-detector.d.ts +10 -0
- package/dist/dna/mutation-detector.d.ts.map +1 -0
- package/dist/dna/mutation-detector.js +39 -0
- package/dist/dna/mutation-detector.js.map +1 -0
- package/dist/dna/playbook-generator.d.ts +6 -0
- package/dist/dna/playbook-generator.d.ts.map +1 -0
- package/dist/dna/playbook-generator.js +53 -0
- package/dist/dna/playbook-generator.js.map +1 -0
- package/dist/dna/types.d.ts +95 -0
- package/dist/dna/types.d.ts.map +1 -0
- package/dist/dna/types.js +8 -0
- package/dist/dna/types.js.map +1 -0
- package/dist/index.d.ts +7 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +10 -0
- package/dist/index.js.map +1 -1
- package/dist/parsers/parser-manager.d.ts.map +1 -1
- package/dist/parsers/parser-manager.js +2 -0
- package/dist/parsers/parser-manager.js.map +1 -1
- package/dist/parsers/tree-sitter/config.d.ts +82 -0
- package/dist/parsers/tree-sitter/config.d.ts.map +1 -0
- package/dist/parsers/tree-sitter/config.js +200 -0
- package/dist/parsers/tree-sitter/config.js.map +1 -0
- package/dist/parsers/tree-sitter/csharp-ast-converter.d.ts +64 -0
- package/dist/parsers/tree-sitter/csharp-ast-converter.d.ts.map +1 -0
- package/dist/parsers/tree-sitter/csharp-ast-converter.js +271 -0
- package/dist/parsers/tree-sitter/csharp-ast-converter.js.map +1 -0
- package/dist/parsers/tree-sitter/csharp-loader.d.ts +43 -0
- package/dist/parsers/tree-sitter/csharp-loader.d.ts.map +1 -0
- package/dist/parsers/tree-sitter/csharp-loader.js +146 -0
- package/dist/parsers/tree-sitter/csharp-loader.js.map +1 -0
- package/dist/parsers/tree-sitter/index.d.ts +26 -0
- package/dist/parsers/tree-sitter/index.d.ts.map +1 -0
- package/dist/parsers/tree-sitter/index.js +47 -0
- package/dist/parsers/tree-sitter/index.js.map +1 -0
- package/dist/parsers/tree-sitter/java/annotation-extractor.d.ts +79 -0
- package/dist/parsers/tree-sitter/java/annotation-extractor.d.ts.map +1 -0
- package/dist/parsers/tree-sitter/java/annotation-extractor.js +540 -0
- package/dist/parsers/tree-sitter/java/annotation-extractor.js.map +1 -0
- package/dist/parsers/tree-sitter/java/class-extractor.d.ts +40 -0
- package/dist/parsers/tree-sitter/java/class-extractor.d.ts.map +1 -0
- package/dist/parsers/tree-sitter/java/class-extractor.js +770 -0
- package/dist/parsers/tree-sitter/java/class-extractor.js.map +1 -0
- package/dist/parsers/tree-sitter/java/index.d.ts +14 -0
- package/dist/parsers/tree-sitter/java/index.d.ts.map +1 -0
- package/dist/parsers/tree-sitter/java/index.js +25 -0
- package/dist/parsers/tree-sitter/java/index.js.map +1 -0
- package/dist/parsers/tree-sitter/java/method-extractor.d.ts +88 -0
- package/dist/parsers/tree-sitter/java/method-extractor.d.ts.map +1 -0
- package/dist/parsers/tree-sitter/java/method-extractor.js +551 -0
- package/dist/parsers/tree-sitter/java/method-extractor.js.map +1 -0
- package/dist/parsers/tree-sitter/java/types.d.ts +545 -0
- package/dist/parsers/tree-sitter/java/types.d.ts.map +1 -0
- package/dist/parsers/tree-sitter/java/types.js +81 -0
- package/dist/parsers/tree-sitter/java/types.js.map +1 -0
- package/dist/parsers/tree-sitter/loader.d.ts +50 -0
- package/dist/parsers/tree-sitter/loader.d.ts.map +1 -0
- package/dist/parsers/tree-sitter/loader.js +156 -0
- package/dist/parsers/tree-sitter/loader.js.map +1 -0
- package/dist/parsers/tree-sitter/pydantic/config-extractor.d.ts +78 -0
- package/dist/parsers/tree-sitter/pydantic/config-extractor.d.ts.map +1 -0
- package/dist/parsers/tree-sitter/pydantic/config-extractor.js +278 -0
- package/dist/parsers/tree-sitter/pydantic/config-extractor.js.map +1 -0
- package/dist/parsers/tree-sitter/pydantic/constraint-parser.d.ts +84 -0
- package/dist/parsers/tree-sitter/pydantic/constraint-parser.d.ts.map +1 -0
- package/dist/parsers/tree-sitter/pydantic/constraint-parser.js +321 -0
- package/dist/parsers/tree-sitter/pydantic/constraint-parser.js.map +1 -0
- package/dist/parsers/tree-sitter/pydantic/field-extractor.d.ts +74 -0
- package/dist/parsers/tree-sitter/pydantic/field-extractor.d.ts.map +1 -0
- package/dist/parsers/tree-sitter/pydantic/field-extractor.js +285 -0
- package/dist/parsers/tree-sitter/pydantic/field-extractor.js.map +1 -0
- package/dist/parsers/tree-sitter/pydantic/index.d.ts +18 -0
- package/dist/parsers/tree-sitter/pydantic/index.d.ts.map +1 -0
- package/dist/parsers/tree-sitter/pydantic/index.js +23 -0
- package/dist/parsers/tree-sitter/pydantic/index.js.map +1 -0
- package/dist/parsers/tree-sitter/pydantic/inheritance-resolver.d.ts +70 -0
- package/dist/parsers/tree-sitter/pydantic/inheritance-resolver.d.ts.map +1 -0
- package/dist/parsers/tree-sitter/pydantic/inheritance-resolver.js +251 -0
- package/dist/parsers/tree-sitter/pydantic/inheritance-resolver.js.map +1 -0
- package/dist/parsers/tree-sitter/pydantic/pydantic-extractor.d.ts +102 -0
- package/dist/parsers/tree-sitter/pydantic/pydantic-extractor.d.ts.map +1 -0
- package/dist/parsers/tree-sitter/pydantic/pydantic-extractor.js +399 -0
- package/dist/parsers/tree-sitter/pydantic/pydantic-extractor.js.map +1 -0
- package/dist/parsers/tree-sitter/pydantic/type-resolver.d.ts +89 -0
- package/dist/parsers/tree-sitter/pydantic/type-resolver.d.ts.map +1 -0
- package/dist/parsers/tree-sitter/pydantic/type-resolver.js +426 -0
- package/dist/parsers/tree-sitter/pydantic/type-resolver.js.map +1 -0
- package/dist/parsers/tree-sitter/pydantic/types.d.ts +177 -0
- package/dist/parsers/tree-sitter/pydantic/types.d.ts.map +1 -0
- package/dist/parsers/tree-sitter/pydantic/types.js +139 -0
- package/dist/parsers/tree-sitter/pydantic/types.js.map +1 -0
- package/dist/parsers/tree-sitter/pydantic/validator-extractor.d.ts +88 -0
- package/dist/parsers/tree-sitter/pydantic/validator-extractor.d.ts.map +1 -0
- package/dist/parsers/tree-sitter/pydantic/validator-extractor.js +315 -0
- package/dist/parsers/tree-sitter/pydantic/validator-extractor.js.map +1 -0
- package/dist/parsers/tree-sitter/python-ast-converter.d.ts +140 -0
- package/dist/parsers/tree-sitter/python-ast-converter.d.ts.map +1 -0
- package/dist/parsers/tree-sitter/python-ast-converter.js +360 -0
- package/dist/parsers/tree-sitter/python-ast-converter.js.map +1 -0
- package/dist/parsers/tree-sitter/tree-sitter-csharp-parser.d.ts +465 -0
- package/dist/parsers/tree-sitter/tree-sitter-csharp-parser.d.ts.map +1 -0
- package/dist/parsers/tree-sitter/tree-sitter-csharp-parser.js +1146 -0
- package/dist/parsers/tree-sitter/tree-sitter-csharp-parser.js.map +1 -0
- package/dist/parsers/tree-sitter/tree-sitter-python-parser.d.ts +86 -0
- package/dist/parsers/tree-sitter/tree-sitter-python-parser.d.ts.map +1 -0
- package/dist/parsers/tree-sitter/tree-sitter-python-parser.js +177 -0
- package/dist/parsers/tree-sitter/tree-sitter-python-parser.js.map +1 -0
- package/dist/parsers/tree-sitter/types.d.ts +399 -0
- package/dist/parsers/tree-sitter/types.d.ts.map +1 -0
- package/dist/parsers/tree-sitter/types.js +20 -0
- package/dist/parsers/tree-sitter/types.js.map +1 -0
- package/dist/parsers/types.d.ts +1 -1
- package/dist/parsers/types.d.ts.map +1 -1
- package/dist/scanner/file-walker.d.ts.map +1 -1
- package/dist/scanner/file-walker.js +5 -0
- package/dist/scanner/file-walker.js.map +1 -1
- package/dist/store/history-store.d.ts +85 -269
- package/dist/store/history-store.d.ts.map +1 -1
- package/dist/store/history-store.js +272 -624
- package/dist/store/history-store.js.map +1 -1
- package/dist/types/index.d.ts +1 -0
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js +2 -0
- package/dist/types/index.js.map +1 -1
- package/dist/types/java-type-mapping.d.ts +79 -0
- package/dist/types/java-type-mapping.d.ts.map +1 -0
- package/dist/types/java-type-mapping.js +290 -0
- package/dist/types/java-type-mapping.js.map +1 -0
- package/package.json +7 -2
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Animation Approach Gene Extractor
|
|
3
|
+
*
|
|
4
|
+
* Detects how the codebase implements animations and transitions.
|
|
5
|
+
*/
|
|
6
|
+
import { BaseGeneExtractor } from './base-extractor.js';
|
|
7
|
+
export class AnimationApproachExtractor extends BaseGeneExtractor {
|
|
8
|
+
geneId = 'animation-approach';
|
|
9
|
+
geneName = 'Animation Approach';
|
|
10
|
+
geneDescription = 'How animations and transitions are implemented';
|
|
11
|
+
getAlleleDefinitions() {
|
|
12
|
+
return [
|
|
13
|
+
{
|
|
14
|
+
id: 'tailwind-transitions',
|
|
15
|
+
name: 'Tailwind Transitions',
|
|
16
|
+
description: 'Using Tailwind transition utilities',
|
|
17
|
+
patterns: [
|
|
18
|
+
/className\s*=\s*["'`][^"'`]*\btransition-/,
|
|
19
|
+
/className\s*=\s*["'`][^"'`]*\bduration-/,
|
|
20
|
+
/className\s*=\s*["'`][^"'`]*\bease-/,
|
|
21
|
+
/className\s*=\s*["'`][^"'`]*\banimate-/,
|
|
22
|
+
],
|
|
23
|
+
},
|
|
24
|
+
{
|
|
25
|
+
id: 'framer-motion',
|
|
26
|
+
name: 'Framer Motion',
|
|
27
|
+
description: 'Using Framer Motion library',
|
|
28
|
+
patterns: [/<motion\./, /useAnimation\s*\(/, /useSpring\s*\(/],
|
|
29
|
+
importPatterns: [/from\s+['"]framer-motion['"]/],
|
|
30
|
+
},
|
|
31
|
+
{
|
|
32
|
+
id: 'css-animations',
|
|
33
|
+
name: 'CSS Animations',
|
|
34
|
+
description: 'Using CSS @keyframes',
|
|
35
|
+
patterns: [/@keyframes\s+\w+/, /animation\s*:\s*\w+/],
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
id: 'css-transitions',
|
|
39
|
+
name: 'CSS Transitions',
|
|
40
|
+
description: 'Using CSS transition property',
|
|
41
|
+
patterns: [/transition\s*:\s*[^;]+;/, /transition-property\s*:/],
|
|
42
|
+
},
|
|
43
|
+
{
|
|
44
|
+
id: 'react-spring',
|
|
45
|
+
name: 'React Spring',
|
|
46
|
+
description: 'Using React Spring library',
|
|
47
|
+
patterns: [/useSpring\s*\(/, /animated\./],
|
|
48
|
+
importPatterns: [/from\s+['"]@react-spring/],
|
|
49
|
+
},
|
|
50
|
+
{
|
|
51
|
+
id: 'no-animation',
|
|
52
|
+
name: 'No Animation',
|
|
53
|
+
description: 'No animation patterns detected',
|
|
54
|
+
patterns: [],
|
|
55
|
+
},
|
|
56
|
+
];
|
|
57
|
+
}
|
|
58
|
+
extractFromFile(filePath, content, imports) {
|
|
59
|
+
const detectedAlleles = [];
|
|
60
|
+
const isComponent = this.isComponentFile(filePath, content);
|
|
61
|
+
for (const def of this.getAlleleDefinitions()) {
|
|
62
|
+
if (def.id === 'no-animation')
|
|
63
|
+
continue;
|
|
64
|
+
// Check import patterns
|
|
65
|
+
if (def.importPatterns) {
|
|
66
|
+
for (const importPattern of def.importPatterns) {
|
|
67
|
+
if (imports.some(imp => importPattern.test(imp))) {
|
|
68
|
+
detectedAlleles.push({
|
|
69
|
+
alleleId: def.id,
|
|
70
|
+
line: 1,
|
|
71
|
+
code: imports.find(imp => importPattern.test(imp)) ?? '',
|
|
72
|
+
confidence: 0.9,
|
|
73
|
+
});
|
|
74
|
+
break;
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
// Check content patterns
|
|
79
|
+
for (const pattern of def.patterns) {
|
|
80
|
+
const match = pattern.exec(content);
|
|
81
|
+
if (match) {
|
|
82
|
+
const ctx = this.extractContext(content, match.index);
|
|
83
|
+
detectedAlleles.push({
|
|
84
|
+
alleleId: def.id,
|
|
85
|
+
line: ctx.line,
|
|
86
|
+
code: ctx.code,
|
|
87
|
+
confidence: 0.8,
|
|
88
|
+
context: ctx.context,
|
|
89
|
+
});
|
|
90
|
+
break;
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
return { file: filePath, detectedAlleles, isComponent };
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
//# sourceMappingURL=animation-approach.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"animation-approach.js","sourceRoot":"","sources":["../../../src/dna/gene-extractors/animation-approach.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Base Gene Extractor
|
|
3
|
+
*/
|
|
4
|
+
import type { Gene, GeneId, AlleleId, AlleleExample } from '../types.js';
|
|
5
|
+
export interface AlleleDefinition {
|
|
6
|
+
id: AlleleId;
|
|
7
|
+
name: string;
|
|
8
|
+
description: string;
|
|
9
|
+
patterns: RegExp[];
|
|
10
|
+
keywords?: string[];
|
|
11
|
+
importPatterns?: RegExp[];
|
|
12
|
+
priority?: number;
|
|
13
|
+
}
|
|
14
|
+
export interface DetectedAllele {
|
|
15
|
+
alleleId: AlleleId;
|
|
16
|
+
line: number;
|
|
17
|
+
code: string;
|
|
18
|
+
confidence: number;
|
|
19
|
+
context?: string;
|
|
20
|
+
}
|
|
21
|
+
export interface FileExtractionResult {
|
|
22
|
+
file: string;
|
|
23
|
+
detectedAlleles: DetectedAllele[];
|
|
24
|
+
isComponent: boolean;
|
|
25
|
+
errors?: string[];
|
|
26
|
+
}
|
|
27
|
+
export interface AggregatedExtractionResult {
|
|
28
|
+
geneId: GeneId;
|
|
29
|
+
totalFiles: number;
|
|
30
|
+
componentFiles: number;
|
|
31
|
+
alleleCounts: Map<AlleleId, number>;
|
|
32
|
+
alleleFiles: Map<AlleleId, Set<string>>;
|
|
33
|
+
alleleExamples: Map<AlleleId, AlleleExample[]>;
|
|
34
|
+
errors: string[];
|
|
35
|
+
}
|
|
36
|
+
export declare abstract class BaseGeneExtractor {
|
|
37
|
+
abstract readonly geneId: GeneId;
|
|
38
|
+
abstract readonly geneName: string;
|
|
39
|
+
abstract readonly geneDescription: string;
|
|
40
|
+
abstract getAlleleDefinitions(): AlleleDefinition[];
|
|
41
|
+
abstract extractFromFile(fp: string, c: string, i: string[]): FileExtractionResult;
|
|
42
|
+
analyze(files: Map<string, string>): Promise<Gene>;
|
|
43
|
+
isComponentFile(fp: string, c: string): boolean;
|
|
44
|
+
extractImports(c: string): string[];
|
|
45
|
+
protected aggregateResults(files: Map<string, string>): AggregatedExtractionResult;
|
|
46
|
+
protected buildGene(a: AggregatedExtractionResult): Gene;
|
|
47
|
+
protected extractContext(c: string, mi: number): {
|
|
48
|
+
line: number;
|
|
49
|
+
code: string;
|
|
50
|
+
context: string;
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
//# sourceMappingURL=base-extractor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"base-extractor.d.ts","sourceRoot":"","sources":["../../../src/dna/gene-extractors/base-extractor.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,EAAU,QAAQ,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAEjF,MAAM,WAAW,gBAAgB;IAC/B,EAAE,EAAE,QAAQ,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,QAAQ,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,MAAM,CAAC;IACb,eAAe,EAAE,cAAc,EAAE,CAAC;IAClC,WAAW,EAAE,OAAO,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;CACnB;AAED,MAAM,WAAW,0BAA0B;IACzC,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,MAAM,CAAC;IACvB,YAAY,EAAE,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IACpC,WAAW,EAAE,GAAG,CAAC,QAAQ,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC;IACxC,cAAc,EAAE,GAAG,CAAC,QAAQ,EAAE,aAAa,EAAE,CAAC,CAAC;IAC/C,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAED,8BAAsB,iBAAiB;IACrC,QAAQ,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IACnC,QAAQ,CAAC,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IAC1C,QAAQ,CAAC,oBAAoB,IAAI,gBAAgB,EAAE;IACnD,QAAQ,CAAC,eAAe,CAAC,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,GAAG,oBAAoB;IAE5E,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAIxD,eAAe,CAAC,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,OAAO;IAK/C,cAAc,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE;IAInC,SAAS,CAAC,gBAAgB,CAAC,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,0BAA0B;IAyBlF,SAAS,CAAC,SAAS,CAAC,CAAC,EAAE,0BAA0B,GAAG,IAAI;IAmBxD,SAAS,CAAC,cAAc,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE;CAMjG"}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
export class BaseGeneExtractor {
|
|
2
|
+
async analyze(files) {
|
|
3
|
+
return this.buildGene(this.aggregateResults(files));
|
|
4
|
+
}
|
|
5
|
+
isComponentFile(fp, c) {
|
|
6
|
+
if (!['.tsx', '.jsx', '.vue', '.svelte'].some(e => fp.endsWith(e)))
|
|
7
|
+
return false;
|
|
8
|
+
return [/export\s+(default\s+)?function\s+\w+/, /<template>/].some(p => p.test(c));
|
|
9
|
+
}
|
|
10
|
+
extractImports(c) {
|
|
11
|
+
return c.match(/^import\s+.+$/gm) ?? [];
|
|
12
|
+
}
|
|
13
|
+
aggregateResults(files) {
|
|
14
|
+
const r = {
|
|
15
|
+
geneId: this.geneId, totalFiles: 0, componentFiles: 0,
|
|
16
|
+
alleleCounts: new Map(), alleleFiles: new Map(), alleleExamples: new Map(), errors: []
|
|
17
|
+
};
|
|
18
|
+
for (const d of this.getAlleleDefinitions()) {
|
|
19
|
+
r.alleleCounts.set(d.id, 0);
|
|
20
|
+
r.alleleFiles.set(d.id, new Set());
|
|
21
|
+
r.alleleExamples.set(d.id, []);
|
|
22
|
+
}
|
|
23
|
+
for (const [fp, c] of files) {
|
|
24
|
+
r.totalFiles++;
|
|
25
|
+
const imp = this.extractImports(c);
|
|
26
|
+
const ex = this.extractFromFile(fp, c, imp);
|
|
27
|
+
if (ex.isComponent)
|
|
28
|
+
r.componentFiles++;
|
|
29
|
+
for (const det of ex.detectedAlleles) {
|
|
30
|
+
r.alleleCounts.set(det.alleleId, (r.alleleCounts.get(det.alleleId) ?? 0) + 1);
|
|
31
|
+
r.alleleFiles.get(det.alleleId)?.add(fp);
|
|
32
|
+
const exs = r.alleleExamples.get(det.alleleId);
|
|
33
|
+
if (exs && exs.length < 5)
|
|
34
|
+
exs.push({ file: fp, line: det.line, code: det.code, context: det.context ?? '' });
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
return r;
|
|
38
|
+
}
|
|
39
|
+
buildGene(a) {
|
|
40
|
+
const alleles = [];
|
|
41
|
+
let tot = 0;
|
|
42
|
+
for (const c of a.alleleCounts.values())
|
|
43
|
+
tot += c;
|
|
44
|
+
for (const d of this.getAlleleDefinitions()) {
|
|
45
|
+
const cnt = a.alleleCounts.get(d.id) ?? 0;
|
|
46
|
+
const fs = a.alleleFiles.get(d.id) ?? new Set();
|
|
47
|
+
if (cnt > 0)
|
|
48
|
+
alleles.push({ id: d.id, name: d.name, description: d.description, frequency: tot > 0 ? cnt / tot : 0, fileCount: fs.size, pattern: d.patterns.map(p => p.source).join('|'), examples: a.alleleExamples.get(d.id) ?? [], isDominant: false });
|
|
49
|
+
}
|
|
50
|
+
alleles.sort((x, y) => y.frequency - x.frequency);
|
|
51
|
+
let dom = null;
|
|
52
|
+
const f = alleles[0];
|
|
53
|
+
if (f && f.frequency >= 0.3) {
|
|
54
|
+
dom = f;
|
|
55
|
+
f.isDominant = true;
|
|
56
|
+
}
|
|
57
|
+
const conf = f ? Math.round(f.frequency * 100) / 100 : 0;
|
|
58
|
+
const s = alleles[1];
|
|
59
|
+
const cons = alleles.length <= 1 ? 1 : Math.round(Math.min(1, 0.5 + ((f?.frequency ?? 0) - (s?.frequency ?? 0)) * 0.5) * 100) / 100;
|
|
60
|
+
return { id: this.geneId, name: this.geneName, description: this.geneDescription, dominant: dom, alleles, confidence: conf, consistency: cons, exemplars: dom ? Array.from(a.alleleFiles.get(dom.id) ?? []).slice(0, 5) : [] };
|
|
61
|
+
}
|
|
62
|
+
extractContext(c, mi) {
|
|
63
|
+
const ls = c.split('\n');
|
|
64
|
+
let idx = 0, ln = 1;
|
|
65
|
+
for (let i = 0; i < ls.length; i++) {
|
|
66
|
+
const l = ls[i];
|
|
67
|
+
if (l && idx + l.length >= mi) {
|
|
68
|
+
ln = i + 1;
|
|
69
|
+
break;
|
|
70
|
+
}
|
|
71
|
+
idx += (l?.length ?? 0) + 1;
|
|
72
|
+
}
|
|
73
|
+
return { line: ln, code: ls[ln - 1] ?? '', context: ls.slice(Math.max(0, ln - 3), Math.min(ls.length, ln + 2)).join('\n') };
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
//# sourceMappingURL=base-extractor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"base-extractor.js","sourceRoot":"","sources":["../../../src/dna/gene-extractors/base-extractor.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Gene Extractors Index
|
|
3
|
+
*/
|
|
4
|
+
export { BaseGeneExtractor } from './base-extractor.js';
|
|
5
|
+
export type { AlleleDefinition, FileExtractionResult, DetectedAllele, AggregatedExtractionResult } from './base-extractor.js';
|
|
6
|
+
export { VariantHandlingExtractor } from './variant-handling.js';
|
|
7
|
+
export { ResponsiveApproachExtractor } from './responsive-approach.js';
|
|
8
|
+
export { StateStylingExtractor } from './state-styling.js';
|
|
9
|
+
export { ThemingExtractor } from './theming.js';
|
|
10
|
+
export { SpacingPhilosophyExtractor } from './spacing-philosophy.js';
|
|
11
|
+
export { AnimationApproachExtractor } from './animation-approach.js';
|
|
12
|
+
import type { BaseGeneExtractor } from './base-extractor.js';
|
|
13
|
+
import type { GeneId } from '../types.js';
|
|
14
|
+
export declare function createAllGeneExtractors(): Map<GeneId, BaseGeneExtractor>;
|
|
15
|
+
export declare function createGeneExtractor(geneId: GeneId): BaseGeneExtractor | null;
|
|
16
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/dna/gene-extractors/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,YAAY,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,cAAc,EAAE,0BAA0B,EAAE,MAAM,qBAAqB,CAAC;AAE9H,OAAO,EAAE,wBAAwB,EAAE,MAAM,uBAAuB,CAAC;AACjE,OAAO,EAAE,2BAA2B,EAAE,MAAM,0BAA0B,CAAC;AACvE,OAAO,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAC3D,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,EAAE,0BAA0B,EAAE,MAAM,yBAAyB,CAAC;AACrE,OAAO,EAAE,0BAA0B,EAAE,MAAM,yBAAyB,CAAC;AAQrE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAE1C,wBAAgB,uBAAuB,IAAI,GAAG,CAAC,MAAM,EAAE,iBAAiB,CAAC,CASxE;AAED,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,iBAAiB,GAAG,IAAI,CAU5E"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Gene Extractors Index
|
|
3
|
+
*/
|
|
4
|
+
export { BaseGeneExtractor } from './base-extractor.js';
|
|
5
|
+
export { VariantHandlingExtractor } from './variant-handling.js';
|
|
6
|
+
export { ResponsiveApproachExtractor } from './responsive-approach.js';
|
|
7
|
+
export { StateStylingExtractor } from './state-styling.js';
|
|
8
|
+
export { ThemingExtractor } from './theming.js';
|
|
9
|
+
export { SpacingPhilosophyExtractor } from './spacing-philosophy.js';
|
|
10
|
+
export { AnimationApproachExtractor } from './animation-approach.js';
|
|
11
|
+
import { VariantHandlingExtractor } from './variant-handling.js';
|
|
12
|
+
import { ResponsiveApproachExtractor } from './responsive-approach.js';
|
|
13
|
+
import { StateStylingExtractor } from './state-styling.js';
|
|
14
|
+
import { ThemingExtractor } from './theming.js';
|
|
15
|
+
import { SpacingPhilosophyExtractor } from './spacing-philosophy.js';
|
|
16
|
+
import { AnimationApproachExtractor } from './animation-approach.js';
|
|
17
|
+
export function createAllGeneExtractors() {
|
|
18
|
+
const extractors = new Map();
|
|
19
|
+
extractors.set('variant-handling', new VariantHandlingExtractor());
|
|
20
|
+
extractors.set('responsive-approach', new ResponsiveApproachExtractor());
|
|
21
|
+
extractors.set('state-styling', new StateStylingExtractor());
|
|
22
|
+
extractors.set('theming', new ThemingExtractor());
|
|
23
|
+
extractors.set('spacing-philosophy', new SpacingPhilosophyExtractor());
|
|
24
|
+
extractors.set('animation-approach', new AnimationApproachExtractor());
|
|
25
|
+
return extractors;
|
|
26
|
+
}
|
|
27
|
+
export function createGeneExtractor(geneId) {
|
|
28
|
+
switch (geneId) {
|
|
29
|
+
case 'variant-handling': return new VariantHandlingExtractor();
|
|
30
|
+
case 'responsive-approach': return new ResponsiveApproachExtractor();
|
|
31
|
+
case 'state-styling': return new StateStylingExtractor();
|
|
32
|
+
case 'theming': return new ThemingExtractor();
|
|
33
|
+
case 'spacing-philosophy': return new SpacingPhilosophyExtractor();
|
|
34
|
+
case 'animation-approach': return new AnimationApproachExtractor();
|
|
35
|
+
default: return null;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/dna/gene-extractors/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAGxD,OAAO,EAAE,wBAAwB,EAAE,MAAM,uBAAuB,CAAC;AACjE,OAAO,EAAE,2BAA2B,EAAE,MAAM,0BAA0B,CAAC;AACvE,OAAO,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAC3D,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,EAAE,0BAA0B,EAAE,MAAM,yBAAyB,CAAC;AACrE,OAAO,EAAE,0BAA0B,EAAE,MAAM,yBAAyB,CAAC;AAErE,OAAO,EAAE,wBAAwB,EAAE,MAAM,uBAAuB,CAAC;AACjE,OAAO,EAAE,2BAA2B,EAAE,MAAM,0BAA0B,CAAC;AACvE,OAAO,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAC3D,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,EAAE,0BAA0B,EAAE,MAAM,yBAAyB,CAAC;AACrE,OAAO,EAAE,0BAA0B,EAAE,MAAM,yBAAyB,CAAC;AAIrE,MAAM,UAAU,uBAAuB;IACrC,MAAM,UAAU,GAAG,IAAI,GAAG,EAA6B,CAAC;IACxD,UAAU,CAAC,GAAG,CAAC,kBAAkB,EAAE,IAAI,wBAAwB,EAAE,CAAC,CAAC;IACnE,UAAU,CAAC,GAAG,CAAC,qBAAqB,EAAE,IAAI,2BAA2B,EAAE,CAAC,CAAC;IACzE,UAAU,CAAC,GAAG,CAAC,eAAe,EAAE,IAAI,qBAAqB,EAAE,CAAC,CAAC;IAC7D,UAAU,CAAC,GAAG,CAAC,SAAS,EAAE,IAAI,gBAAgB,EAAE,CAAC,CAAC;IAClD,UAAU,CAAC,GAAG,CAAC,oBAAoB,EAAE,IAAI,0BAA0B,EAAE,CAAC,CAAC;IACvE,UAAU,CAAC,GAAG,CAAC,oBAAoB,EAAE,IAAI,0BAA0B,EAAE,CAAC,CAAC;IACvE,OAAO,UAAU,CAAC;AACpB,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,MAAc;IAChD,QAAQ,MAAM,EAAE,CAAC;QACf,KAAK,kBAAkB,CAAC,CAAC,OAAO,IAAI,wBAAwB,EAAE,CAAC;QAC/D,KAAK,qBAAqB,CAAC,CAAC,OAAO,IAAI,2BAA2B,EAAE,CAAC;QACrE,KAAK,eAAe,CAAC,CAAC,OAAO,IAAI,qBAAqB,EAAE,CAAC;QACzD,KAAK,SAAS,CAAC,CAAC,OAAO,IAAI,gBAAgB,EAAE,CAAC;QAC9C,KAAK,oBAAoB,CAAC,CAAC,OAAO,IAAI,0BAA0B,EAAE,CAAC;QACnE,KAAK,oBAAoB,CAAC,CAAC,OAAO,IAAI,0BAA0B,EAAE,CAAC;QACnE,OAAO,CAAC,CAAC,OAAO,IAAI,CAAC;IACvB,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { BaseGeneExtractor, type AlleleDefinition, type FileExtractionResult } from './base-extractor.js';
|
|
2
|
+
import type { GeneId } from '../types.js';
|
|
3
|
+
export declare class ResponsiveApproachExtractor extends BaseGeneExtractor {
|
|
4
|
+
readonly geneId: GeneId;
|
|
5
|
+
readonly geneName = "Responsive Approach";
|
|
6
|
+
readonly geneDescription = "How responsive design is handled";
|
|
7
|
+
getAlleleDefinitions(): AlleleDefinition[];
|
|
8
|
+
extractFromFile(fp: string, c: string, _imp: string[]): FileExtractionResult;
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=responsive-approach.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"responsive-approach.d.ts","sourceRoot":"","sources":["../../../src/dna/gene-extractors/responsive-approach.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,KAAK,gBAAgB,EAAE,KAAK,oBAAoB,EAAuB,MAAM,qBAAqB,CAAC;AAC/H,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAE1C,qBAAa,2BAA4B,SAAQ,iBAAiB;IAChE,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAyB;IAChD,QAAQ,CAAC,QAAQ,yBAAyB;IAC1C,QAAQ,CAAC,eAAe,sCAAsC;IAE9D,oBAAoB,IAAI,gBAAgB,EAAE;IAU1C,eAAe,CAAC,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,oBAAoB;CAO7E"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { BaseGeneExtractor } from './base-extractor.js';
|
|
2
|
+
export class ResponsiveApproachExtractor extends BaseGeneExtractor {
|
|
3
|
+
geneId = 'responsive-approach';
|
|
4
|
+
geneName = 'Responsive Approach';
|
|
5
|
+
geneDescription = 'How responsive design is handled';
|
|
6
|
+
getAlleleDefinitions() {
|
|
7
|
+
return [
|
|
8
|
+
{ id: 'tailwind-mobile-first', name: 'Tailwind Mobile-First', description: 'sm:, md:, lg: breakpoints', patterns: [/className\s*=\s*["'`][^"'`]*\b(sm|md|lg|xl):/] },
|
|
9
|
+
{ id: 'tailwind-desktop-first', name: 'Tailwind Desktop-First', description: 'max-* variants', patterns: [/className\s*=\s*["'`][^"'`]*\bmax-(sm|md|lg):/] },
|
|
10
|
+
{ id: 'css-media-queries', name: 'CSS Media Queries', description: '@media queries', patterns: [/@media\s*\([^)]*width/] },
|
|
11
|
+
{ id: 'container-queries', name: 'Container Queries', description: '@container', patterns: [/@container/] },
|
|
12
|
+
{ id: 'js-responsive', name: 'JS Responsive', description: 'useMediaQuery hooks', patterns: [/useMediaQuery\s*\(/, /useBreakpoint\s*\(/] },
|
|
13
|
+
];
|
|
14
|
+
}
|
|
15
|
+
extractFromFile(fp, c, _imp) {
|
|
16
|
+
const det = [];
|
|
17
|
+
for (const d of this.getAlleleDefinitions()) {
|
|
18
|
+
for (const p of d.patterns) {
|
|
19
|
+
const m = p.exec(c);
|
|
20
|
+
if (m) {
|
|
21
|
+
const ctx = this.extractContext(c, m.index);
|
|
22
|
+
det.push({ alleleId: d.id, line: ctx.line, code: ctx.code, confidence: 0.8, context: ctx.context });
|
|
23
|
+
break;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
return { file: fp, detectedAlleles: det, isComponent: this.isComponentFile(fp, c) };
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=responsive-approach.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"responsive-approach.js","sourceRoot":"","sources":["../../../src/dna/gene-extractors/responsive-approach.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAyE,MAAM,qBAAqB,CAAC;AAG/H,MAAM,OAAO,2BAA4B,SAAQ,iBAAiB;IACvD,MAAM,GAAW,qBAAqB,CAAC;IACvC,QAAQ,GAAG,qBAAqB,CAAC;IACjC,eAAe,GAAG,kCAAkC,CAAC;IAE9D,oBAAoB;QAClB,OAAO;YACL,EAAE,EAAE,EAAE,uBAAuB,EAAE,IAAI,EAAE,uBAAuB,EAAE,WAAW,EAAE,2BAA2B,EAAE,QAAQ,EAAE,CAAC,8CAA8C,CAAC,EAAE;YACpK,EAAE,EAAE,EAAE,wBAAwB,EAAE,IAAI,EAAE,wBAAwB,EAAE,WAAW,EAAE,gBAAgB,EAAE,QAAQ,EAAE,CAAC,+CAA+C,CAAC,EAAE;YAC5J,EAAE,EAAE,EAAE,mBAAmB,EAAE,IAAI,EAAE,mBAAmB,EAAE,WAAW,EAAE,gBAAgB,EAAE,QAAQ,EAAE,CAAC,uBAAuB,CAAC,EAAE;YAC1H,EAAE,EAAE,EAAE,mBAAmB,EAAE,IAAI,EAAE,mBAAmB,EAAE,WAAW,EAAE,YAAY,EAAE,QAAQ,EAAE,CAAC,YAAY,CAAC,EAAE;YAC3G,EAAE,EAAE,EAAE,eAAe,EAAE,IAAI,EAAE,eAAe,EAAE,WAAW,EAAE,qBAAqB,EAAE,QAAQ,EAAE,CAAC,oBAAoB,EAAE,oBAAoB,CAAC,EAAE;SAC3I,CAAC;IACJ,CAAC;IAED,eAAe,CAAC,EAAU,EAAE,CAAS,EAAE,IAAc;QACnD,MAAM,GAAG,GAAqB,EAAE,CAAC;QACjC,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,oBAAoB,EAAE,EAAE,CAAC;YAC5C,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,CAAC;gBAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBAAC,IAAI,CAAC,EAAE,CAAC;oBAAC,MAAM,GAAG,GAAG,IAAI,CAAC,cAAc,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC;oBAAC,GAAG,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,UAAU,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;oBAAC,MAAM;gBAAC,CAAC;YAAC,CAAC;QAC1N,CAAC;QACD,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,eAAe,EAAE,GAAG,EAAE,WAAW,EAAE,IAAI,CAAC,eAAe,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC;IACtF,CAAC;CACF"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { BaseGeneExtractor, type AlleleDefinition, type FileExtractionResult } from './base-extractor.js';
|
|
2
|
+
import type { GeneId } from '../types.js';
|
|
3
|
+
export declare class SpacingPhilosophyExtractor extends BaseGeneExtractor {
|
|
4
|
+
readonly geneId: GeneId;
|
|
5
|
+
readonly geneName = "Spacing Philosophy";
|
|
6
|
+
readonly geneDescription = "How spacing is managed";
|
|
7
|
+
getAlleleDefinitions(): AlleleDefinition[];
|
|
8
|
+
extractFromFile(fp: string, c: string, _imp: string[]): FileExtractionResult;
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=spacing-philosophy.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"spacing-philosophy.d.ts","sourceRoot":"","sources":["../../../src/dna/gene-extractors/spacing-philosophy.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,KAAK,gBAAgB,EAAE,KAAK,oBAAoB,EAAuB,MAAM,qBAAqB,CAAC;AAC/H,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAE1C,qBAAa,0BAA2B,SAAQ,iBAAiB;IAC/D,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAwB;IAC/C,QAAQ,CAAC,QAAQ,wBAAwB;IACzC,QAAQ,CAAC,eAAe,4BAA4B;IAEpD,oBAAoB,IAAI,gBAAgB,EAAE;IAU1C,eAAe,CAAC,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,oBAAoB;CAO7E"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { BaseGeneExtractor } from './base-extractor.js';
|
|
2
|
+
export class SpacingPhilosophyExtractor extends BaseGeneExtractor {
|
|
3
|
+
geneId = 'spacing-philosophy';
|
|
4
|
+
geneName = 'Spacing Philosophy';
|
|
5
|
+
geneDescription = 'How spacing is managed';
|
|
6
|
+
getAlleleDefinitions() {
|
|
7
|
+
return [
|
|
8
|
+
{ id: 'tailwind-scale', name: 'Tailwind Scale', description: 'p-4, m-2, gap-6', patterns: [/className\s*=\s*["'`][^"'`]*\b[pm][trblxy]?-\d+/, /className\s*=\s*["'`][^"'`]*\bgap-\d+/] },
|
|
9
|
+
{ id: 'tailwind-arbitrary', name: 'Tailwind Arbitrary', description: 'p-[13px]', patterns: [/className\s*=\s*["'`][^"'`]*\b[pm][trblxy]?-\[\d+/] },
|
|
10
|
+
{ id: 'design-tokens', name: 'Design Tokens', description: 'var(--spacing-*)', patterns: [/var\s*\(\s*--spacing/] },
|
|
11
|
+
{ id: 'hardcoded', name: 'Hardcoded', description: 'padding: 16px', patterns: [/padding\s*:\s*\d+px/, /margin\s*:\s*\d+px/] },
|
|
12
|
+
{ id: 'spacing-components', name: 'Spacing Components', description: 'Stack, Box', patterns: [/<Stack\s+spacing/, /<Box\s+[pm]=/] },
|
|
13
|
+
];
|
|
14
|
+
}
|
|
15
|
+
extractFromFile(fp, c, _imp) {
|
|
16
|
+
const det = [];
|
|
17
|
+
for (const d of this.getAlleleDefinitions()) {
|
|
18
|
+
for (const p of d.patterns) {
|
|
19
|
+
const m = p.exec(c);
|
|
20
|
+
if (m) {
|
|
21
|
+
const ctx = this.extractContext(c, m.index);
|
|
22
|
+
det.push({ alleleId: d.id, line: ctx.line, code: ctx.code, confidence: 0.8, context: ctx.context });
|
|
23
|
+
break;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
return { file: fp, detectedAlleles: det, isComponent: this.isComponentFile(fp, c) };
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=spacing-philosophy.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"spacing-philosophy.js","sourceRoot":"","sources":["../../../src/dna/gene-extractors/spacing-philosophy.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAyE,MAAM,qBAAqB,CAAC;AAG/H,MAAM,OAAO,0BAA2B,SAAQ,iBAAiB;IACtD,MAAM,GAAW,oBAAoB,CAAC;IACtC,QAAQ,GAAG,oBAAoB,CAAC;IAChC,eAAe,GAAG,wBAAwB,CAAC;IAEpD,oBAAoB;QAClB,OAAO;YACL,EAAE,EAAE,EAAE,gBAAgB,EAAE,IAAI,EAAE,gBAAgB,EAAE,WAAW,EAAE,iBAAiB,EAAE,QAAQ,EAAE,CAAC,iDAAiD,EAAE,uCAAuC,CAAC,EAAE;YACxL,EAAE,EAAE,EAAE,oBAAoB,EAAE,IAAI,EAAE,oBAAoB,EAAE,WAAW,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC,mDAAmD,CAAC,EAAE;YAClJ,EAAE,EAAE,EAAE,eAAe,EAAE,IAAI,EAAE,eAAe,EAAE,WAAW,EAAE,kBAAkB,EAAE,QAAQ,EAAE,CAAC,sBAAsB,CAAC,EAAE;YACnH,EAAE,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,WAAW,EAAE,WAAW,EAAE,eAAe,EAAE,QAAQ,EAAE,CAAC,qBAAqB,EAAE,oBAAoB,CAAC,EAAE;YAC7H,EAAE,EAAE,EAAE,oBAAoB,EAAE,IAAI,EAAE,oBAAoB,EAAE,WAAW,EAAE,YAAY,EAAE,QAAQ,EAAE,CAAC,kBAAkB,EAAE,cAAc,CAAC,EAAE;SACpI,CAAC;IACJ,CAAC;IAED,eAAe,CAAC,EAAU,EAAE,CAAS,EAAE,IAAc;QACnD,MAAM,GAAG,GAAqB,EAAE,CAAC;QACjC,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,oBAAoB,EAAE,EAAE,CAAC;YAC5C,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,CAAC;gBAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBAAC,IAAI,CAAC,EAAE,CAAC;oBAAC,MAAM,GAAG,GAAG,IAAI,CAAC,cAAc,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC;oBAAC,GAAG,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,UAAU,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;oBAAC,MAAM;gBAAC,CAAC;YAAC,CAAC;QAC1N,CAAC;QACD,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,eAAe,EAAE,GAAG,EAAE,WAAW,EAAE,IAAI,CAAC,eAAe,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC;IACtF,CAAC;CACF"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { BaseGeneExtractor, type AlleleDefinition, type FileExtractionResult } from './base-extractor.js';
|
|
2
|
+
import type { GeneId } from '../types.js';
|
|
3
|
+
export declare class StateStylingExtractor extends BaseGeneExtractor {
|
|
4
|
+
readonly geneId: GeneId;
|
|
5
|
+
readonly geneName = "State Styling";
|
|
6
|
+
readonly geneDescription = "How interactive states are styled";
|
|
7
|
+
getAlleleDefinitions(): AlleleDefinition[];
|
|
8
|
+
extractFromFile(fp: string, c: string, _imp: string[]): FileExtractionResult;
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=state-styling.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"state-styling.d.ts","sourceRoot":"","sources":["../../../src/dna/gene-extractors/state-styling.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,KAAK,gBAAgB,EAAE,KAAK,oBAAoB,EAAuB,MAAM,qBAAqB,CAAC;AAC/H,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAE1C,qBAAa,qBAAsB,SAAQ,iBAAiB;IAC1D,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAmB;IAC1C,QAAQ,CAAC,QAAQ,mBAAmB;IACpC,QAAQ,CAAC,eAAe,uCAAuC;IAE/D,oBAAoB,IAAI,gBAAgB,EAAE;IAS1C,eAAe,CAAC,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,oBAAoB;CAO7E"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { BaseGeneExtractor } from './base-extractor.js';
|
|
2
|
+
export class StateStylingExtractor extends BaseGeneExtractor {
|
|
3
|
+
geneId = 'state-styling';
|
|
4
|
+
geneName = 'State Styling';
|
|
5
|
+
geneDescription = 'How interactive states are styled';
|
|
6
|
+
getAlleleDefinitions() {
|
|
7
|
+
return [
|
|
8
|
+
{ id: 'tailwind-variants', name: 'Tailwind State Variants', description: 'hover:, focus:, disabled:', patterns: [/className\s*=\s*["'`][^"'`]*\bhover:/, /className\s*=\s*["'`][^"'`]*\bfocus:/] },
|
|
9
|
+
{ id: 'css-pseudo', name: 'CSS Pseudo Classes', description: ':hover, :focus', patterns: [/:hover\s*\{/, /:focus\s*\{/] },
|
|
10
|
+
{ id: 'state-props', name: 'State Props', description: 'isHovered, isFocused', patterns: [/isHovered\s*[?&|]/, /isFocused\s*[?&|]/] },
|
|
11
|
+
{ id: 'data-state', name: 'Data State', description: 'data-state attributes', patterns: [/data-state\s*=/] },
|
|
12
|
+
];
|
|
13
|
+
}
|
|
14
|
+
extractFromFile(fp, c, _imp) {
|
|
15
|
+
const det = [];
|
|
16
|
+
for (const d of this.getAlleleDefinitions()) {
|
|
17
|
+
for (const p of d.patterns) {
|
|
18
|
+
const m = p.exec(c);
|
|
19
|
+
if (m) {
|
|
20
|
+
const ctx = this.extractContext(c, m.index);
|
|
21
|
+
det.push({ alleleId: d.id, line: ctx.line, code: ctx.code, confidence: 0.8, context: ctx.context });
|
|
22
|
+
break;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
return { file: fp, detectedAlleles: det, isComponent: this.isComponentFile(fp, c) };
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=state-styling.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"state-styling.js","sourceRoot":"","sources":["../../../src/dna/gene-extractors/state-styling.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAyE,MAAM,qBAAqB,CAAC;AAG/H,MAAM,OAAO,qBAAsB,SAAQ,iBAAiB;IACjD,MAAM,GAAW,eAAe,CAAC;IACjC,QAAQ,GAAG,eAAe,CAAC;IAC3B,eAAe,GAAG,mCAAmC,CAAC;IAE/D,oBAAoB;QAClB,OAAO;YACL,EAAE,EAAE,EAAE,mBAAmB,EAAE,IAAI,EAAE,yBAAyB,EAAE,WAAW,EAAE,2BAA2B,EAAE,QAAQ,EAAE,CAAC,sCAAsC,EAAE,sCAAsC,CAAC,EAAE;YAClM,EAAE,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,oBAAoB,EAAE,WAAW,EAAE,gBAAgB,EAAE,QAAQ,EAAE,CAAC,aAAa,EAAE,aAAa,CAAC,EAAE;YACzH,EAAE,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,aAAa,EAAE,WAAW,EAAE,sBAAsB,EAAE,QAAQ,EAAE,CAAC,mBAAmB,EAAE,mBAAmB,CAAC,EAAE;YACrI,EAAE,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,YAAY,EAAE,WAAW,EAAE,uBAAuB,EAAE,QAAQ,EAAE,CAAC,gBAAgB,CAAC,EAAE;SAC7G,CAAC;IACJ,CAAC;IAED,eAAe,CAAC,EAAU,EAAE,CAAS,EAAE,IAAc;QACnD,MAAM,GAAG,GAAqB,EAAE,CAAC;QACjC,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,oBAAoB,EAAE,EAAE,CAAC;YAC5C,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,CAAC;gBAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBAAC,IAAI,CAAC,EAAE,CAAC;oBAAC,MAAM,GAAG,GAAG,IAAI,CAAC,cAAc,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC;oBAAC,GAAG,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,UAAU,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;oBAAC,MAAM;gBAAC,CAAC;YAAC,CAAC;QAC1N,CAAC;QACD,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,eAAe,EAAE,GAAG,EAAE,WAAW,EAAE,IAAI,CAAC,eAAe,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC;IACtF,CAAC;CACF"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { BaseGeneExtractor, type AlleleDefinition, type FileExtractionResult } from './base-extractor.js';
|
|
2
|
+
import type { GeneId } from '../types.js';
|
|
3
|
+
export declare class ThemingExtractor extends BaseGeneExtractor {
|
|
4
|
+
readonly geneId: GeneId;
|
|
5
|
+
readonly geneName = "Theming";
|
|
6
|
+
readonly geneDescription = "How theming/dark mode is implemented";
|
|
7
|
+
getAlleleDefinitions(): AlleleDefinition[];
|
|
8
|
+
extractFromFile(fp: string, c: string, _imp: string[]): FileExtractionResult;
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=theming.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"theming.d.ts","sourceRoot":"","sources":["../../../src/dna/gene-extractors/theming.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,KAAK,gBAAgB,EAAE,KAAK,oBAAoB,EAAuB,MAAM,qBAAqB,CAAC;AAC/H,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAE1C,qBAAa,gBAAiB,SAAQ,iBAAiB;IACrD,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAa;IACpC,QAAQ,CAAC,QAAQ,aAAa;IAC9B,QAAQ,CAAC,eAAe,0CAA0C;IAElE,oBAAoB,IAAI,gBAAgB,EAAE;IAU1C,eAAe,CAAC,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,oBAAoB;CAO7E"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { BaseGeneExtractor } from './base-extractor.js';
|
|
2
|
+
export class ThemingExtractor extends BaseGeneExtractor {
|
|
3
|
+
geneId = 'theming';
|
|
4
|
+
geneName = 'Theming';
|
|
5
|
+
geneDescription = 'How theming/dark mode is implemented';
|
|
6
|
+
getAlleleDefinitions() {
|
|
7
|
+
return [
|
|
8
|
+
{ id: 'tailwind-dark', name: 'Tailwind Dark Mode', description: 'dark: prefix', patterns: [/className\s*=\s*["'`][^"'`]*\bdark:/] },
|
|
9
|
+
{ id: 'css-variables', name: 'CSS Variables', description: 'var(--*)', patterns: [/var\s*\(\s*--/] },
|
|
10
|
+
{ id: 'theme-context', name: 'Theme Context', description: 'useTheme/ThemeProvider', patterns: [/useTheme\s*\(/, /ThemeProvider/] },
|
|
11
|
+
{ id: 'styled-theming', name: 'Styled Theming', description: 'props.theme', patterns: [/props\.theme\./] },
|
|
12
|
+
{ id: 'data-theme', name: 'Data Theme', description: 'data-theme attribute', patterns: [/data-theme\s*=/] },
|
|
13
|
+
];
|
|
14
|
+
}
|
|
15
|
+
extractFromFile(fp, c, _imp) {
|
|
16
|
+
const det = [];
|
|
17
|
+
for (const d of this.getAlleleDefinitions()) {
|
|
18
|
+
for (const p of d.patterns) {
|
|
19
|
+
const m = p.exec(c);
|
|
20
|
+
if (m) {
|
|
21
|
+
const ctx = this.extractContext(c, m.index);
|
|
22
|
+
det.push({ alleleId: d.id, line: ctx.line, code: ctx.code, confidence: 0.8, context: ctx.context });
|
|
23
|
+
break;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
return { file: fp, detectedAlleles: det, isComponent: this.isComponentFile(fp, c) };
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=theming.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"theming.js","sourceRoot":"","sources":["../../../src/dna/gene-extractors/theming.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAyE,MAAM,qBAAqB,CAAC;AAG/H,MAAM,OAAO,gBAAiB,SAAQ,iBAAiB;IAC5C,MAAM,GAAW,SAAS,CAAC;IAC3B,QAAQ,GAAG,SAAS,CAAC;IACrB,eAAe,GAAG,sCAAsC,CAAC;IAElE,oBAAoB;QAClB,OAAO;YACL,EAAE,EAAE,EAAE,eAAe,EAAE,IAAI,EAAE,oBAAoB,EAAE,WAAW,EAAE,cAAc,EAAE,QAAQ,EAAE,CAAC,qCAAqC,CAAC,EAAE;YACnI,EAAE,EAAE,EAAE,eAAe,EAAE,IAAI,EAAE,eAAe,EAAE,WAAW,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC,eAAe,CAAC,EAAE;YACpG,EAAE,EAAE,EAAE,eAAe,EAAE,IAAI,EAAE,eAAe,EAAE,WAAW,EAAE,wBAAwB,EAAE,QAAQ,EAAE,CAAC,eAAe,EAAE,eAAe,CAAC,EAAE;YACnI,EAAE,EAAE,EAAE,gBAAgB,EAAE,IAAI,EAAE,gBAAgB,EAAE,WAAW,EAAE,aAAa,EAAE,QAAQ,EAAE,CAAC,gBAAgB,CAAC,EAAE;YAC1G,EAAE,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,YAAY,EAAE,WAAW,EAAE,sBAAsB,EAAE,QAAQ,EAAE,CAAC,gBAAgB,CAAC,EAAE;SAC5G,CAAC;IACJ,CAAC;IAED,eAAe,CAAC,EAAU,EAAE,CAAS,EAAE,IAAc;QACnD,MAAM,GAAG,GAAqB,EAAE,CAAC;QACjC,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,oBAAoB,EAAE,EAAE,CAAC;YAC5C,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,CAAC;gBAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBAAC,IAAI,CAAC,EAAE,CAAC;oBAAC,MAAM,GAAG,GAAG,IAAI,CAAC,cAAc,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC;oBAAC,GAAG,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,UAAU,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;oBAAC,MAAM;gBAAC,CAAC;YAAC,CAAC;QAC1N,CAAC;QACD,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,eAAe,EAAE,GAAG,EAAE,WAAW,EAAE,IAAI,CAAC,eAAe,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC;IACtF,CAAC;CACF"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Variant Handling Gene Extractor
|
|
3
|
+
*/
|
|
4
|
+
import { BaseGeneExtractor, type AlleleDefinition, type FileExtractionResult } from './base-extractor.js';
|
|
5
|
+
import type { GeneId } from '../types.js';
|
|
6
|
+
export declare class VariantHandlingExtractor extends BaseGeneExtractor {
|
|
7
|
+
readonly geneId: GeneId;
|
|
8
|
+
readonly geneName = "Variant Handling";
|
|
9
|
+
readonly geneDescription = "How component variants are implemented";
|
|
10
|
+
getAlleleDefinitions(): AlleleDefinition[];
|
|
11
|
+
extractFromFile(fp: string, c: string, imp: string[]): FileExtractionResult;
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=variant-handling.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"variant-handling.d.ts","sourceRoot":"","sources":["../../../src/dna/gene-extractors/variant-handling.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,iBAAiB,EAAE,KAAK,gBAAgB,EAAE,KAAK,oBAAoB,EAAuB,MAAM,qBAAqB,CAAC;AAC/H,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAE1C,qBAAa,wBAAyB,SAAQ,iBAAiB;IAC7D,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAsB;IAC7C,QAAQ,CAAC,QAAQ,sBAAsB;IACvC,QAAQ,CAAC,eAAe,4CAA4C;IAEpE,oBAAoB,IAAI,gBAAgB,EAAE;IAU1C,eAAe,CAAC,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,oBAAoB;CAS5E"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Variant Handling Gene Extractor
|
|
3
|
+
*/
|
|
4
|
+
import { BaseGeneExtractor } from './base-extractor.js';
|
|
5
|
+
export class VariantHandlingExtractor extends BaseGeneExtractor {
|
|
6
|
+
geneId = 'variant-handling';
|
|
7
|
+
geneName = 'Variant Handling';
|
|
8
|
+
geneDescription = 'How component variants are implemented';
|
|
9
|
+
getAlleleDefinitions() {
|
|
10
|
+
return [
|
|
11
|
+
{ id: 'classname-composition', name: 'className Composition', description: 'Using variant objects', patterns: [/const\s+variants\s*=\s*\{/, /className\s*=\s*\{?\s*variants\[/] },
|
|
12
|
+
{ id: 'cva', name: 'CVA', description: 'Class Variance Authority', patterns: [/cva\s*\(/], importPatterns: [/class-variance-authority/] },
|
|
13
|
+
{ id: 'conditional-classes', name: 'Conditional Classes', description: 'clsx/cn utilities', patterns: [/clsx\s*\(/, /\bcn\s*\(/] },
|
|
14
|
+
{ id: 'styled-variants', name: 'Styled Variants', description: 'styled-components', patterns: [/styled\.\w+`[^`]*\$\{props/] },
|
|
15
|
+
{ id: 'data-attributes', name: 'Data Attributes', description: 'data-variant', patterns: [/data-variant\s*=/] },
|
|
16
|
+
];
|
|
17
|
+
}
|
|
18
|
+
extractFromFile(fp, c, imp) {
|
|
19
|
+
const det = [];
|
|
20
|
+
const isComp = this.isComponentFile(fp, c);
|
|
21
|
+
for (const d of this.getAlleleDefinitions()) {
|
|
22
|
+
if (d.importPatterns?.some(p => imp.some(i => p.test(i)))) {
|
|
23
|
+
det.push({ alleleId: d.id, line: 1, code: '', confidence: 0.9 });
|
|
24
|
+
continue;
|
|
25
|
+
}
|
|
26
|
+
for (const p of d.patterns) {
|
|
27
|
+
const m = p.exec(c);
|
|
28
|
+
if (m) {
|
|
29
|
+
const ctx = this.extractContext(c, m.index);
|
|
30
|
+
det.push({ alleleId: d.id, line: ctx.line, code: ctx.code, confidence: 0.8, context: ctx.context });
|
|
31
|
+
break;
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
return { file: fp, detectedAlleles: det, isComponent: isComp };
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=variant-handling.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"variant-handling.js","sourceRoot":"","sources":["../../../src/dna/gene-extractors/variant-handling.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,iBAAiB,EAAyE,MAAM,qBAAqB,CAAC;AAG/H,MAAM,OAAO,wBAAyB,SAAQ,iBAAiB;IACpD,MAAM,GAAW,kBAAkB,CAAC;IACpC,QAAQ,GAAG,kBAAkB,CAAC;IAC9B,eAAe,GAAG,wCAAwC,CAAC;IAEpE,oBAAoB;QAClB,OAAO;YACL,EAAE,EAAE,EAAE,uBAAuB,EAAE,IAAI,EAAE,uBAAuB,EAAE,WAAW,EAAE,uBAAuB,EAAE,QAAQ,EAAE,CAAC,2BAA2B,EAAE,kCAAkC,CAAC,EAAE;YACjL,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,WAAW,EAAE,0BAA0B,EAAE,QAAQ,EAAE,CAAC,UAAU,CAAC,EAAE,cAAc,EAAE,CAAC,0BAA0B,CAAC,EAAE;YACzI,EAAE,EAAE,EAAE,qBAAqB,EAAE,IAAI,EAAE,qBAAqB,EAAE,WAAW,EAAE,mBAAmB,EAAE,QAAQ,EAAE,CAAC,WAAW,EAAE,WAAW,CAAC,EAAE;YAClI,EAAE,EAAE,EAAE,iBAAiB,EAAE,IAAI,EAAE,iBAAiB,EAAE,WAAW,EAAE,mBAAmB,EAAE,QAAQ,EAAE,CAAC,4BAA4B,CAAC,EAAE;YAC9H,EAAE,EAAE,EAAE,iBAAiB,EAAE,IAAI,EAAE,iBAAiB,EAAE,WAAW,EAAE,cAAc,EAAE,QAAQ,EAAE,CAAC,kBAAkB,CAAC,EAAE;SAChH,CAAC;IACJ,CAAC;IAED,eAAe,CAAC,EAAU,EAAE,CAAS,EAAE,GAAa;QAClD,MAAM,GAAG,GAAqB,EAAE,CAAC;QACjC,MAAM,MAAM,GAAG,IAAI,CAAC,eAAe,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;QAC3C,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,oBAAoB,EAAE,EAAE,CAAC;YAC5C,IAAI,CAAC,CAAC,cAAc,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;gBAAC,GAAG,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,UAAU,EAAE,GAAG,EAAE,CAAC,CAAC;gBAAC,SAAS;YAAC,CAAC;YAC1I,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,CAAC;gBAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBAAC,IAAI,CAAC,EAAE,CAAC;oBAAC,MAAM,GAAG,GAAG,IAAI,CAAC,cAAc,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC;oBAAC,GAAG,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,UAAU,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;oBAAC,MAAM;gBAAC,CAAC;YAAC,CAAC;QAC1N,CAAC;QACD,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,eAAe,EAAE,GAAG,EAAE,WAAW,EAAE,MAAM,EAAE,CAAC;IACjE,CAAC;CACF"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Health Calculator
|
|
3
|
+
*
|
|
4
|
+
* Calculates the health score and genetic diversity metrics for a DNA profile.
|
|
5
|
+
*/
|
|
6
|
+
import type { Gene, GeneId, Mutation, DNAThresholds } from './types.js';
|
|
7
|
+
export declare class HealthCalculator {
|
|
8
|
+
private readonly thresholds;
|
|
9
|
+
constructor(thresholds?: Partial<DNAThresholds>);
|
|
10
|
+
calculateHealthScore(genes: Record<GeneId, Gene>, mutations: Mutation[]): number;
|
|
11
|
+
calculateGeneticDiversity(genes: Record<GeneId, Gene>): number;
|
|
12
|
+
private calculateAverageConsistency;
|
|
13
|
+
private calculateAverageConfidence;
|
|
14
|
+
private calculateMutationPenalty;
|
|
15
|
+
private calculateDominantCoverage;
|
|
16
|
+
private calculateEntropy;
|
|
17
|
+
getHealthLevel(score: number): 'excellent' | 'good' | 'fair' | 'poor';
|
|
18
|
+
isWarning(score: number): boolean;
|
|
19
|
+
isCritical(score: number): boolean;
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=health-calculator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"health-calculator.d.ts","sourceRoot":"","sources":["../../src/dna/health-calculator.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAGxE,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAgB;gBAE/B,UAAU,GAAE,OAAO,CAAC,aAAa,CAAM;IAInD,oBAAoB,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,EAAE,SAAS,EAAE,QAAQ,EAAE,GAAG,MAAM;IAoBhF,yBAAyB,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,GAAG,MAAM;IAmB9D,OAAO,CAAC,2BAA2B;IAKnC,OAAO,CAAC,0BAA0B;IAKlC,OAAO,CAAC,wBAAwB;IAsBhC,OAAO,CAAC,yBAAyB;IAQjC,OAAO,CAAC,gBAAgB;IAQxB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,WAAW,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM;IAOrE,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO;IAIjC,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO;CAGnC"}
|