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.
Files changed (193) hide show
  1. package/dist/boundaries/boundary-store.d.ts +92 -0
  2. package/dist/boundaries/boundary-store.d.ts.map +1 -0
  3. package/dist/boundaries/boundary-store.js +458 -0
  4. package/dist/boundaries/boundary-store.js.map +1 -0
  5. package/dist/boundaries/index.d.ts +8 -0
  6. package/dist/boundaries/index.d.ts.map +1 -0
  7. package/dist/boundaries/index.js +8 -0
  8. package/dist/boundaries/index.js.map +1 -0
  9. package/dist/boundaries/types.d.ts +237 -0
  10. package/dist/boundaries/types.d.ts.map +1 -0
  11. package/dist/boundaries/types.js +8 -0
  12. package/dist/boundaries/types.js.map +1 -0
  13. package/dist/dna/ai-context.d.ts +10 -0
  14. package/dist/dna/ai-context.d.ts.map +1 -0
  15. package/dist/dna/ai-context.js +46 -0
  16. package/dist/dna/ai-context.js.map +1 -0
  17. package/dist/dna/dna-analyzer.d.ts +34 -0
  18. package/dist/dna/dna-analyzer.d.ts.map +1 -0
  19. package/dist/dna/dna-analyzer.js +110 -0
  20. package/dist/dna/dna-analyzer.js.map +1 -0
  21. package/dist/dna/dna-store.d.ts +13 -0
  22. package/dist/dna/dna-store.d.ts.map +1 -0
  23. package/dist/dna/dna-store.js +43 -0
  24. package/dist/dna/dna-store.js.map +1 -0
  25. package/dist/dna/gene-extractors/animation-approach.d.ts +15 -0
  26. package/dist/dna/gene-extractors/animation-approach.d.ts.map +1 -0
  27. package/dist/dna/gene-extractors/animation-approach.js +97 -0
  28. package/dist/dna/gene-extractors/animation-approach.js.map +1 -0
  29. package/dist/dna/gene-extractors/base-extractor.d.ts +53 -0
  30. package/dist/dna/gene-extractors/base-extractor.d.ts.map +1 -0
  31. package/dist/dna/gene-extractors/base-extractor.js +76 -0
  32. package/dist/dna/gene-extractors/base-extractor.js.map +1 -0
  33. package/dist/dna/gene-extractors/index.d.ts +16 -0
  34. package/dist/dna/gene-extractors/index.d.ts.map +1 -0
  35. package/dist/dna/gene-extractors/index.js +38 -0
  36. package/dist/dna/gene-extractors/index.js.map +1 -0
  37. package/dist/dna/gene-extractors/responsive-approach.d.ts +10 -0
  38. package/dist/dna/gene-extractors/responsive-approach.d.ts.map +1 -0
  39. package/dist/dna/gene-extractors/responsive-approach.js +30 -0
  40. package/dist/dna/gene-extractors/responsive-approach.js.map +1 -0
  41. package/dist/dna/gene-extractors/spacing-philosophy.d.ts +10 -0
  42. package/dist/dna/gene-extractors/spacing-philosophy.d.ts.map +1 -0
  43. package/dist/dna/gene-extractors/spacing-philosophy.js +30 -0
  44. package/dist/dna/gene-extractors/spacing-philosophy.js.map +1 -0
  45. package/dist/dna/gene-extractors/state-styling.d.ts +10 -0
  46. package/dist/dna/gene-extractors/state-styling.d.ts.map +1 -0
  47. package/dist/dna/gene-extractors/state-styling.js +29 -0
  48. package/dist/dna/gene-extractors/state-styling.js.map +1 -0
  49. package/dist/dna/gene-extractors/theming.d.ts +10 -0
  50. package/dist/dna/gene-extractors/theming.d.ts.map +1 -0
  51. package/dist/dna/gene-extractors/theming.js +30 -0
  52. package/dist/dna/gene-extractors/theming.js.map +1 -0
  53. package/dist/dna/gene-extractors/variant-handling.d.ts +13 -0
  54. package/dist/dna/gene-extractors/variant-handling.d.ts.map +1 -0
  55. package/dist/dna/gene-extractors/variant-handling.js +38 -0
  56. package/dist/dna/gene-extractors/variant-handling.js.map +1 -0
  57. package/dist/dna/health-calculator.d.ts +21 -0
  58. package/dist/dna/health-calculator.d.ts.map +1 -0
  59. package/dist/dna/health-calculator.js +113 -0
  60. package/dist/dna/health-calculator.js.map +1 -0
  61. package/dist/dna/index.d.ts +21 -0
  62. package/dist/dna/index.d.ts.map +1 -0
  63. package/dist/dna/index.js +19 -0
  64. package/dist/dna/index.js.map +1 -0
  65. package/dist/dna/mutation-detector.d.ts +10 -0
  66. package/dist/dna/mutation-detector.d.ts.map +1 -0
  67. package/dist/dna/mutation-detector.js +39 -0
  68. package/dist/dna/mutation-detector.js.map +1 -0
  69. package/dist/dna/playbook-generator.d.ts +6 -0
  70. package/dist/dna/playbook-generator.d.ts.map +1 -0
  71. package/dist/dna/playbook-generator.js +53 -0
  72. package/dist/dna/playbook-generator.js.map +1 -0
  73. package/dist/dna/types.d.ts +95 -0
  74. package/dist/dna/types.d.ts.map +1 -0
  75. package/dist/dna/types.js +8 -0
  76. package/dist/dna/types.js.map +1 -0
  77. package/dist/index.d.ts +7 -0
  78. package/dist/index.d.ts.map +1 -1
  79. package/dist/index.js +10 -0
  80. package/dist/index.js.map +1 -1
  81. package/dist/parsers/parser-manager.d.ts.map +1 -1
  82. package/dist/parsers/parser-manager.js +2 -0
  83. package/dist/parsers/parser-manager.js.map +1 -1
  84. package/dist/parsers/tree-sitter/config.d.ts +82 -0
  85. package/dist/parsers/tree-sitter/config.d.ts.map +1 -0
  86. package/dist/parsers/tree-sitter/config.js +200 -0
  87. package/dist/parsers/tree-sitter/config.js.map +1 -0
  88. package/dist/parsers/tree-sitter/csharp-ast-converter.d.ts +64 -0
  89. package/dist/parsers/tree-sitter/csharp-ast-converter.d.ts.map +1 -0
  90. package/dist/parsers/tree-sitter/csharp-ast-converter.js +271 -0
  91. package/dist/parsers/tree-sitter/csharp-ast-converter.js.map +1 -0
  92. package/dist/parsers/tree-sitter/csharp-loader.d.ts +43 -0
  93. package/dist/parsers/tree-sitter/csharp-loader.d.ts.map +1 -0
  94. package/dist/parsers/tree-sitter/csharp-loader.js +146 -0
  95. package/dist/parsers/tree-sitter/csharp-loader.js.map +1 -0
  96. package/dist/parsers/tree-sitter/index.d.ts +26 -0
  97. package/dist/parsers/tree-sitter/index.d.ts.map +1 -0
  98. package/dist/parsers/tree-sitter/index.js +47 -0
  99. package/dist/parsers/tree-sitter/index.js.map +1 -0
  100. package/dist/parsers/tree-sitter/java/annotation-extractor.d.ts +79 -0
  101. package/dist/parsers/tree-sitter/java/annotation-extractor.d.ts.map +1 -0
  102. package/dist/parsers/tree-sitter/java/annotation-extractor.js +540 -0
  103. package/dist/parsers/tree-sitter/java/annotation-extractor.js.map +1 -0
  104. package/dist/parsers/tree-sitter/java/class-extractor.d.ts +40 -0
  105. package/dist/parsers/tree-sitter/java/class-extractor.d.ts.map +1 -0
  106. package/dist/parsers/tree-sitter/java/class-extractor.js +770 -0
  107. package/dist/parsers/tree-sitter/java/class-extractor.js.map +1 -0
  108. package/dist/parsers/tree-sitter/java/index.d.ts +14 -0
  109. package/dist/parsers/tree-sitter/java/index.d.ts.map +1 -0
  110. package/dist/parsers/tree-sitter/java/index.js +25 -0
  111. package/dist/parsers/tree-sitter/java/index.js.map +1 -0
  112. package/dist/parsers/tree-sitter/java/method-extractor.d.ts +88 -0
  113. package/dist/parsers/tree-sitter/java/method-extractor.d.ts.map +1 -0
  114. package/dist/parsers/tree-sitter/java/method-extractor.js +551 -0
  115. package/dist/parsers/tree-sitter/java/method-extractor.js.map +1 -0
  116. package/dist/parsers/tree-sitter/java/types.d.ts +545 -0
  117. package/dist/parsers/tree-sitter/java/types.d.ts.map +1 -0
  118. package/dist/parsers/tree-sitter/java/types.js +81 -0
  119. package/dist/parsers/tree-sitter/java/types.js.map +1 -0
  120. package/dist/parsers/tree-sitter/loader.d.ts +50 -0
  121. package/dist/parsers/tree-sitter/loader.d.ts.map +1 -0
  122. package/dist/parsers/tree-sitter/loader.js +156 -0
  123. package/dist/parsers/tree-sitter/loader.js.map +1 -0
  124. package/dist/parsers/tree-sitter/pydantic/config-extractor.d.ts +78 -0
  125. package/dist/parsers/tree-sitter/pydantic/config-extractor.d.ts.map +1 -0
  126. package/dist/parsers/tree-sitter/pydantic/config-extractor.js +278 -0
  127. package/dist/parsers/tree-sitter/pydantic/config-extractor.js.map +1 -0
  128. package/dist/parsers/tree-sitter/pydantic/constraint-parser.d.ts +84 -0
  129. package/dist/parsers/tree-sitter/pydantic/constraint-parser.d.ts.map +1 -0
  130. package/dist/parsers/tree-sitter/pydantic/constraint-parser.js +321 -0
  131. package/dist/parsers/tree-sitter/pydantic/constraint-parser.js.map +1 -0
  132. package/dist/parsers/tree-sitter/pydantic/field-extractor.d.ts +74 -0
  133. package/dist/parsers/tree-sitter/pydantic/field-extractor.d.ts.map +1 -0
  134. package/dist/parsers/tree-sitter/pydantic/field-extractor.js +285 -0
  135. package/dist/parsers/tree-sitter/pydantic/field-extractor.js.map +1 -0
  136. package/dist/parsers/tree-sitter/pydantic/index.d.ts +18 -0
  137. package/dist/parsers/tree-sitter/pydantic/index.d.ts.map +1 -0
  138. package/dist/parsers/tree-sitter/pydantic/index.js +23 -0
  139. package/dist/parsers/tree-sitter/pydantic/index.js.map +1 -0
  140. package/dist/parsers/tree-sitter/pydantic/inheritance-resolver.d.ts +70 -0
  141. package/dist/parsers/tree-sitter/pydantic/inheritance-resolver.d.ts.map +1 -0
  142. package/dist/parsers/tree-sitter/pydantic/inheritance-resolver.js +251 -0
  143. package/dist/parsers/tree-sitter/pydantic/inheritance-resolver.js.map +1 -0
  144. package/dist/parsers/tree-sitter/pydantic/pydantic-extractor.d.ts +102 -0
  145. package/dist/parsers/tree-sitter/pydantic/pydantic-extractor.d.ts.map +1 -0
  146. package/dist/parsers/tree-sitter/pydantic/pydantic-extractor.js +399 -0
  147. package/dist/parsers/tree-sitter/pydantic/pydantic-extractor.js.map +1 -0
  148. package/dist/parsers/tree-sitter/pydantic/type-resolver.d.ts +89 -0
  149. package/dist/parsers/tree-sitter/pydantic/type-resolver.d.ts.map +1 -0
  150. package/dist/parsers/tree-sitter/pydantic/type-resolver.js +426 -0
  151. package/dist/parsers/tree-sitter/pydantic/type-resolver.js.map +1 -0
  152. package/dist/parsers/tree-sitter/pydantic/types.d.ts +177 -0
  153. package/dist/parsers/tree-sitter/pydantic/types.d.ts.map +1 -0
  154. package/dist/parsers/tree-sitter/pydantic/types.js +139 -0
  155. package/dist/parsers/tree-sitter/pydantic/types.js.map +1 -0
  156. package/dist/parsers/tree-sitter/pydantic/validator-extractor.d.ts +88 -0
  157. package/dist/parsers/tree-sitter/pydantic/validator-extractor.d.ts.map +1 -0
  158. package/dist/parsers/tree-sitter/pydantic/validator-extractor.js +315 -0
  159. package/dist/parsers/tree-sitter/pydantic/validator-extractor.js.map +1 -0
  160. package/dist/parsers/tree-sitter/python-ast-converter.d.ts +140 -0
  161. package/dist/parsers/tree-sitter/python-ast-converter.d.ts.map +1 -0
  162. package/dist/parsers/tree-sitter/python-ast-converter.js +360 -0
  163. package/dist/parsers/tree-sitter/python-ast-converter.js.map +1 -0
  164. package/dist/parsers/tree-sitter/tree-sitter-csharp-parser.d.ts +465 -0
  165. package/dist/parsers/tree-sitter/tree-sitter-csharp-parser.d.ts.map +1 -0
  166. package/dist/parsers/tree-sitter/tree-sitter-csharp-parser.js +1146 -0
  167. package/dist/parsers/tree-sitter/tree-sitter-csharp-parser.js.map +1 -0
  168. package/dist/parsers/tree-sitter/tree-sitter-python-parser.d.ts +86 -0
  169. package/dist/parsers/tree-sitter/tree-sitter-python-parser.d.ts.map +1 -0
  170. package/dist/parsers/tree-sitter/tree-sitter-python-parser.js +177 -0
  171. package/dist/parsers/tree-sitter/tree-sitter-python-parser.js.map +1 -0
  172. package/dist/parsers/tree-sitter/types.d.ts +399 -0
  173. package/dist/parsers/tree-sitter/types.d.ts.map +1 -0
  174. package/dist/parsers/tree-sitter/types.js +20 -0
  175. package/dist/parsers/tree-sitter/types.js.map +1 -0
  176. package/dist/parsers/types.d.ts +1 -1
  177. package/dist/parsers/types.d.ts.map +1 -1
  178. package/dist/scanner/file-walker.d.ts.map +1 -1
  179. package/dist/scanner/file-walker.js +5 -0
  180. package/dist/scanner/file-walker.js.map +1 -1
  181. package/dist/store/history-store.d.ts +85 -269
  182. package/dist/store/history-store.d.ts.map +1 -1
  183. package/dist/store/history-store.js +272 -624
  184. package/dist/store/history-store.js.map +1 -1
  185. package/dist/types/index.d.ts +1 -0
  186. package/dist/types/index.d.ts.map +1 -1
  187. package/dist/types/index.js +2 -0
  188. package/dist/types/index.js.map +1 -1
  189. package/dist/types/java-type-mapping.d.ts +79 -0
  190. package/dist/types/java-type-mapping.d.ts.map +1 -0
  191. package/dist/types/java-type-mapping.js +290 -0
  192. package/dist/types/java-type-mapping.js.map +1 -0
  193. 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"}