@buoy-design/core 0.1.0 → 0.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/analysis/audit.d.ts +47 -0
- package/dist/analysis/audit.d.ts.map +1 -0
- package/dist/analysis/audit.js +168 -0
- package/dist/analysis/audit.js.map +1 -0
- package/dist/analysis/config.d.ts +66 -0
- package/dist/analysis/config.d.ts.map +1 -0
- package/dist/analysis/config.js +68 -0
- package/dist/analysis/config.js.map +1 -0
- package/dist/analysis/index.d.ts +5 -1
- package/dist/analysis/index.d.ts.map +1 -1
- package/dist/analysis/index.js +9 -1
- package/dist/analysis/index.js.map +1 -1
- package/dist/analysis/semantic-diff.d.ts +50 -4
- package/dist/analysis/semantic-diff.d.ts.map +1 -1
- package/dist/analysis/semantic-diff.js +454 -212
- package/dist/analysis/semantic-diff.js.map +1 -1
- package/dist/analysis/string-utils.d.ts +18 -0
- package/dist/analysis/string-utils.d.ts.map +1 -0
- package/dist/analysis/string-utils.js +47 -0
- package/dist/analysis/string-utils.js.map +1 -0
- package/dist/analysis/token-suggestions.d.ts +66 -0
- package/dist/analysis/token-suggestions.d.ts.map +1 -0
- package/dist/analysis/token-suggestions.js +270 -0
- package/dist/analysis/token-suggestions.js.map +1 -0
- package/dist/extraction/css-parser.d.ts +51 -0
- package/dist/extraction/css-parser.d.ts.map +1 -0
- package/dist/extraction/css-parser.js +303 -0
- package/dist/extraction/css-parser.js.map +1 -0
- package/dist/extraction/index.d.ts +2 -0
- package/dist/extraction/index.d.ts.map +1 -0
- package/dist/extraction/index.js +2 -0
- package/dist/extraction/index.js.map +1 -0
- package/dist/graph/builder.d.ts +118 -0
- package/dist/graph/builder.d.ts.map +1 -0
- package/dist/graph/builder.js +328 -0
- package/dist/graph/builder.js.map +1 -0
- package/dist/graph/collectors/git.d.ts +90 -0
- package/dist/graph/collectors/git.d.ts.map +1 -0
- package/dist/graph/collectors/git.js +253 -0
- package/dist/graph/collectors/git.js.map +1 -0
- package/dist/graph/collectors/imports.d.ts +55 -0
- package/dist/graph/collectors/imports.d.ts.map +1 -0
- package/dist/graph/collectors/imports.js +230 -0
- package/dist/graph/collectors/imports.js.map +1 -0
- package/dist/graph/collectors/index.d.ts +9 -0
- package/dist/graph/collectors/index.d.ts.map +1 -0
- package/dist/graph/collectors/index.js +12 -0
- package/dist/graph/collectors/index.js.map +1 -0
- package/dist/graph/collectors/usages.d.ts +68 -0
- package/dist/graph/collectors/usages.d.ts.map +1 -0
- package/dist/graph/collectors/usages.js +244 -0
- package/dist/graph/collectors/usages.js.map +1 -0
- package/dist/graph/index.d.ts +11 -0
- package/dist/graph/index.d.ts.map +1 -0
- package/dist/graph/index.js +29 -0
- package/dist/graph/index.js.map +1 -0
- package/dist/graph/queries.d.ts +81 -0
- package/dist/graph/queries.d.ts.map +1 -0
- package/dist/graph/queries.js +379 -0
- package/dist/graph/queries.js.map +1 -0
- package/dist/graph/types.d.ts +135 -0
- package/dist/graph/types.d.ts.map +1 -0
- package/dist/graph/types.js +8 -0
- package/dist/graph/types.js.map +1 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +8 -0
- package/dist/index.js.map +1 -1
- package/dist/models/drift.d.ts +15 -18
- package/dist/models/drift.d.ts.map +1 -1
- package/dist/models/drift.js +83 -58
- package/dist/models/drift.js.map +1 -1
- package/dist/models/index.d.ts +4 -4
- package/dist/models/index.d.ts.map +1 -1
- package/dist/models/index.js +2 -2
- package/dist/models/index.js.map +1 -1
- package/dist/models/token.d.ts +57 -0
- package/dist/models/token.d.ts.map +1 -1
- package/dist/models/token.js +9 -0
- package/dist/models/token.js.map +1 -1
- package/dist/tokenization/generator.d.ts +49 -0
- package/dist/tokenization/generator.d.ts.map +1 -0
- package/dist/tokenization/generator.js +886 -0
- package/dist/tokenization/generator.js.map +1 -0
- package/dist/tokenization/index.d.ts +2 -0
- package/dist/tokenization/index.d.ts.map +1 -0
- package/dist/tokenization/index.js +2 -0
- package/dist/tokenization/index.js.map +1 -0
- package/dist/tokens/comparison.d.ts +30 -0
- package/dist/tokens/comparison.d.ts.map +1 -0
- package/dist/tokens/comparison.js +142 -0
- package/dist/tokens/comparison.js.map +1 -0
- package/dist/tokens/index.d.ts +3 -0
- package/dist/tokens/index.d.ts.map +1 -0
- package/dist/tokens/index.js +5 -0
- package/dist/tokens/index.js.map +1 -0
- package/dist/tokens/parser.d.ts +11 -0
- package/dist/tokens/parser.d.ts.map +1 -0
- package/dist/tokens/parser.js +268 -0
- package/dist/tokens/parser.js.map +1 -0
- package/package.json +15 -3
- package/dist/analysis/semantic-diff.test.d.ts +0 -2
- package/dist/analysis/semantic-diff.test.d.ts.map +0 -1
- package/dist/analysis/semantic-diff.test.js +0 -188
- package/dist/analysis/semantic-diff.test.js.map +0 -1
- package/dist/models/component.test.d.ts +0 -2
- package/dist/models/component.test.d.ts.map +0 -1
- package/dist/models/component.test.js +0 -55
- package/dist/models/component.test.js.map +0 -1
- package/dist/models/drift.test.d.ts +0 -2
- package/dist/models/drift.test.d.ts.map +0 -1
- package/dist/models/drift.test.js +0 -38
- package/dist/models/drift.test.js.map +0 -1
- package/dist/models/token.test.d.ts +0 -2
- package/dist/models/token.test.d.ts.map +0 -1
- package/dist/models/token.test.js +0 -168
- package/dist/models/token.test.js.map +0 -1
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
export interface AuditValue {
|
|
2
|
+
category: 'color' | 'spacing' | 'typography' | 'radius';
|
|
3
|
+
value: string;
|
|
4
|
+
file: string;
|
|
5
|
+
line: number;
|
|
6
|
+
}
|
|
7
|
+
export interface CategoryStats {
|
|
8
|
+
uniqueCount: number;
|
|
9
|
+
totalUsages: number;
|
|
10
|
+
mostCommon: Array<{
|
|
11
|
+
value: string;
|
|
12
|
+
count: number;
|
|
13
|
+
}>;
|
|
14
|
+
}
|
|
15
|
+
export interface FileIssue {
|
|
16
|
+
file: string;
|
|
17
|
+
issueCount: number;
|
|
18
|
+
}
|
|
19
|
+
export interface CloseMatch {
|
|
20
|
+
value: string;
|
|
21
|
+
closeTo: string;
|
|
22
|
+
distance: number;
|
|
23
|
+
}
|
|
24
|
+
export interface AuditReport {
|
|
25
|
+
categories: Record<string, CategoryStats>;
|
|
26
|
+
worstFiles: FileIssue[];
|
|
27
|
+
totals: {
|
|
28
|
+
uniqueValues: number;
|
|
29
|
+
totalUsages: number;
|
|
30
|
+
filesAffected: number;
|
|
31
|
+
};
|
|
32
|
+
closeMatches: CloseMatch[];
|
|
33
|
+
score: number;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Generate an audit report from extracted values
|
|
37
|
+
*/
|
|
38
|
+
export declare function generateAuditReport(values: AuditValue[]): AuditReport;
|
|
39
|
+
/**
|
|
40
|
+
* Find values that are close to design tokens (likely typos)
|
|
41
|
+
*/
|
|
42
|
+
export declare function findCloseMatches(foundValues: string[], designTokens: string[], category: 'color' | 'spacing' | 'typography' | 'radius'): CloseMatch[];
|
|
43
|
+
/**
|
|
44
|
+
* Calculate health score (0-100) from audit report
|
|
45
|
+
*/
|
|
46
|
+
export declare function calculateHealthScore(report: AuditReport): number;
|
|
47
|
+
//# sourceMappingURL=audit.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"audit.d.ts","sourceRoot":"","sources":["../../src/analysis/audit.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,UAAU;IACzB,QAAQ,EAAE,OAAO,GAAG,SAAS,GAAG,YAAY,GAAG,QAAQ,CAAC;IACxD,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,aAAa;IAC5B,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,KAAK,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACrD;AAED,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,WAAW;IAC1B,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;IAC1C,UAAU,EAAE,SAAS,EAAE,CAAC;IACxB,MAAM,EAAE;QACN,YAAY,EAAE,MAAM,CAAC;QACrB,WAAW,EAAE,MAAM,CAAC;QACpB,aAAa,EAAE,MAAM,CAAC;KACvB,CAAC;IACF,YAAY,EAAE,UAAU,EAAE,CAAC;IAC3B,KAAK,EAAE,MAAM,CAAC;CACf;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,UAAU,EAAE,GAAG,WAAW,CAoErE;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAC9B,WAAW,EAAE,MAAM,EAAE,EACrB,YAAY,EAAE,MAAM,EAAE,EACtB,QAAQ,EAAE,OAAO,GAAG,SAAS,GAAG,YAAY,GAAG,QAAQ,GACtD,UAAU,EAAE,CAoCd;AA0DD;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,WAAW,GAAG,MAAM,CA6BhE"}
|
|
@@ -0,0 +1,168 @@
|
|
|
1
|
+
// Audit report generation - analyzes codebase for design system health
|
|
2
|
+
/**
|
|
3
|
+
* Generate an audit report from extracted values
|
|
4
|
+
*/
|
|
5
|
+
export function generateAuditReport(values) {
|
|
6
|
+
if (values.length === 0) {
|
|
7
|
+
return {
|
|
8
|
+
categories: {},
|
|
9
|
+
worstFiles: [],
|
|
10
|
+
totals: { uniqueValues: 0, totalUsages: 0, filesAffected: 0 },
|
|
11
|
+
closeMatches: [],
|
|
12
|
+
score: 100,
|
|
13
|
+
};
|
|
14
|
+
}
|
|
15
|
+
// Group by category
|
|
16
|
+
const byCategory = new Map();
|
|
17
|
+
const byFile = new Map();
|
|
18
|
+
const allFiles = new Set();
|
|
19
|
+
for (const v of values) {
|
|
20
|
+
// Category stats
|
|
21
|
+
if (!byCategory.has(v.category)) {
|
|
22
|
+
byCategory.set(v.category, new Map());
|
|
23
|
+
}
|
|
24
|
+
const catMap = byCategory.get(v.category);
|
|
25
|
+
catMap.set(v.value, (catMap.get(v.value) || 0) + 1);
|
|
26
|
+
// File stats
|
|
27
|
+
byFile.set(v.file, (byFile.get(v.file) || 0) + 1);
|
|
28
|
+
allFiles.add(v.file);
|
|
29
|
+
}
|
|
30
|
+
// Build category stats
|
|
31
|
+
const categories = {};
|
|
32
|
+
let totalUnique = 0;
|
|
33
|
+
for (const [category, valueMap] of byCategory) {
|
|
34
|
+
const entries = [...valueMap.entries()];
|
|
35
|
+
const uniqueCount = entries.length;
|
|
36
|
+
const totalUsages = entries.reduce((sum, [, count]) => sum + count, 0);
|
|
37
|
+
// Sort by count descending for mostCommon
|
|
38
|
+
const mostCommon = entries
|
|
39
|
+
.map(([value, count]) => ({ value, count }))
|
|
40
|
+
.sort((a, b) => b.count - a.count)
|
|
41
|
+
.slice(0, 10);
|
|
42
|
+
categories[category] = { uniqueCount, totalUsages, mostCommon };
|
|
43
|
+
totalUnique += uniqueCount;
|
|
44
|
+
}
|
|
45
|
+
// Build worst files list
|
|
46
|
+
const worstFiles = [...byFile.entries()]
|
|
47
|
+
.map(([file, issueCount]) => ({ file, issueCount }))
|
|
48
|
+
.sort((a, b) => b.issueCount - a.issueCount)
|
|
49
|
+
.slice(0, 10);
|
|
50
|
+
const report = {
|
|
51
|
+
categories,
|
|
52
|
+
worstFiles,
|
|
53
|
+
totals: {
|
|
54
|
+
uniqueValues: totalUnique,
|
|
55
|
+
totalUsages: values.length,
|
|
56
|
+
filesAffected: allFiles.size,
|
|
57
|
+
},
|
|
58
|
+
closeMatches: [],
|
|
59
|
+
score: 0,
|
|
60
|
+
};
|
|
61
|
+
report.score = calculateHealthScore(report);
|
|
62
|
+
return report;
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Find values that are close to design tokens (likely typos)
|
|
66
|
+
*/
|
|
67
|
+
export function findCloseMatches(foundValues, designTokens, category) {
|
|
68
|
+
const matches = [];
|
|
69
|
+
const tokenSet = new Set(designTokens.map((t) => t.toLowerCase()));
|
|
70
|
+
for (const value of foundValues) {
|
|
71
|
+
const valueLower = value.toLowerCase();
|
|
72
|
+
// Skip exact matches
|
|
73
|
+
if (tokenSet.has(valueLower)) {
|
|
74
|
+
continue;
|
|
75
|
+
}
|
|
76
|
+
// Find closest token
|
|
77
|
+
let closestToken = null;
|
|
78
|
+
let closestDistance = Infinity;
|
|
79
|
+
for (const token of designTokens) {
|
|
80
|
+
const distance = getDistance(value, token, category);
|
|
81
|
+
if (distance < closestDistance && distance > 0) {
|
|
82
|
+
closestDistance = distance;
|
|
83
|
+
closestToken = token;
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
// Only include if close enough (threshold depends on category)
|
|
87
|
+
const threshold = category === 'color' ? 5 : 2;
|
|
88
|
+
if (closestToken && closestDistance <= threshold) {
|
|
89
|
+
matches.push({
|
|
90
|
+
value,
|
|
91
|
+
closeTo: closestToken,
|
|
92
|
+
distance: closestDistance,
|
|
93
|
+
});
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
return matches;
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Calculate distance between two values
|
|
100
|
+
*/
|
|
101
|
+
function getDistance(a, b, category) {
|
|
102
|
+
if (category === 'color') {
|
|
103
|
+
return colorDistance(a, b);
|
|
104
|
+
}
|
|
105
|
+
if (category === 'spacing' || category === 'radius') {
|
|
106
|
+
return numericDistance(a, b);
|
|
107
|
+
}
|
|
108
|
+
// For typography, use simple string comparison
|
|
109
|
+
return a.toLowerCase() === b.toLowerCase() ? 0 : Infinity;
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* Calculate color distance (simple hex comparison)
|
|
113
|
+
*/
|
|
114
|
+
function colorDistance(a, b) {
|
|
115
|
+
const hexA = a.replace('#', '').toLowerCase();
|
|
116
|
+
const hexB = b.replace('#', '').toLowerCase();
|
|
117
|
+
if (hexA.length !== 6 || hexB.length !== 6) {
|
|
118
|
+
return Infinity;
|
|
119
|
+
}
|
|
120
|
+
// Count differing characters
|
|
121
|
+
let diff = 0;
|
|
122
|
+
for (let i = 0; i < 6; i++) {
|
|
123
|
+
if (hexA[i] !== hexB[i]) {
|
|
124
|
+
diff++;
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
return diff;
|
|
128
|
+
}
|
|
129
|
+
/**
|
|
130
|
+
* Calculate numeric distance for spacing/radius
|
|
131
|
+
*/
|
|
132
|
+
function numericDistance(a, b) {
|
|
133
|
+
const numA = parseFloat(a);
|
|
134
|
+
const numB = parseFloat(b);
|
|
135
|
+
if (isNaN(numA) || isNaN(numB)) {
|
|
136
|
+
return Infinity;
|
|
137
|
+
}
|
|
138
|
+
return Math.abs(numA - numB);
|
|
139
|
+
}
|
|
140
|
+
/**
|
|
141
|
+
* Calculate health score (0-100) from audit report
|
|
142
|
+
*/
|
|
143
|
+
export function calculateHealthScore(report) {
|
|
144
|
+
// Perfect score if no issues
|
|
145
|
+
if (report.totals.uniqueValues === 0) {
|
|
146
|
+
return 100;
|
|
147
|
+
}
|
|
148
|
+
let score = 100;
|
|
149
|
+
// Penalize for too many unique values
|
|
150
|
+
// Expect roughly: colors ~12, spacing ~8, typography ~6, radius ~4 = ~30 total
|
|
151
|
+
const expectedMaxUnique = 30;
|
|
152
|
+
const uniqueRatio = report.totals.uniqueValues / expectedMaxUnique;
|
|
153
|
+
if (uniqueRatio > 1) {
|
|
154
|
+
// Heavy penalty for exceeding expected unique values
|
|
155
|
+
// 50 unique = ratio 1.67, penalty = 0.67 * 80 = 53
|
|
156
|
+
score -= Math.min(80, (uniqueRatio - 1) * 80);
|
|
157
|
+
}
|
|
158
|
+
// Penalize for close matches (typos) - 6 points each
|
|
159
|
+
score -= report.closeMatches.length * 6;
|
|
160
|
+
// Penalize for concentration in worst files
|
|
161
|
+
const worstFile = report.worstFiles[0];
|
|
162
|
+
if (worstFile && worstFile.issueCount > 20) {
|
|
163
|
+
score -= Math.min(20, (worstFile.issueCount - 20) * 0.5);
|
|
164
|
+
}
|
|
165
|
+
// Clamp to 0-100
|
|
166
|
+
return Math.max(0, Math.min(100, Math.round(score)));
|
|
167
|
+
}
|
|
168
|
+
//# sourceMappingURL=audit.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"audit.js","sourceRoot":"","sources":["../../src/analysis/audit.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Configuration constants for semantic analysis and drift detection.
|
|
3
|
+
* These values control various thresholds and weights used in the analysis engine.
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* Component matching thresholds
|
|
7
|
+
*/
|
|
8
|
+
export declare const MATCHING_CONFIG: {
|
|
9
|
+
/** Minimum confidence score (0-1) for component matching */
|
|
10
|
+
readonly minMatchConfidence: 0.7;
|
|
11
|
+
/** Threshold above which a match is considered "similar" vs "partial" */
|
|
12
|
+
readonly similarMatchThreshold: 0.9;
|
|
13
|
+
/** Weights for component similarity calculation */
|
|
14
|
+
readonly similarityWeights: {
|
|
15
|
+
readonly name: 0.4;
|
|
16
|
+
readonly props: 0.3;
|
|
17
|
+
readonly variants: 0.2;
|
|
18
|
+
readonly dependencies: 0.1;
|
|
19
|
+
};
|
|
20
|
+
};
|
|
21
|
+
/**
|
|
22
|
+
* Naming pattern analysis thresholds
|
|
23
|
+
*/
|
|
24
|
+
export declare const NAMING_CONFIG: {
|
|
25
|
+
/**
|
|
26
|
+
* Minimum ratio (0-1) of components using a pattern to consider it "dominant"
|
|
27
|
+
* Used for naming convention detection
|
|
28
|
+
*/
|
|
29
|
+
readonly dominantPatternThreshold: 0.6;
|
|
30
|
+
/**
|
|
31
|
+
* Minimum ratio (0-1) of prop usage to consider a naming convention established
|
|
32
|
+
* Used for prop naming consistency checks
|
|
33
|
+
*/
|
|
34
|
+
readonly establishedConventionThreshold: 0.7;
|
|
35
|
+
/**
|
|
36
|
+
* Minimum count OR percentage of total to be considered an outlier
|
|
37
|
+
* Used to determine when to report naming inconsistencies
|
|
38
|
+
*/
|
|
39
|
+
readonly outlierMinCount: 3;
|
|
40
|
+
readonly outlierMinPercentage: 0.1;
|
|
41
|
+
};
|
|
42
|
+
/**
|
|
43
|
+
* Token suggestion thresholds
|
|
44
|
+
*/
|
|
45
|
+
export declare const TOKEN_SUGGESTION_CONFIG: {
|
|
46
|
+
/** Minimum similarity (0-1) for color token suggestions */
|
|
47
|
+
readonly colorSimilarityThreshold: 0.8;
|
|
48
|
+
/** Minimum similarity (0-1) for spacing token suggestions */
|
|
49
|
+
readonly spacingSimilarityThreshold: 0.9;
|
|
50
|
+
/** Default number of suggestions to return */
|
|
51
|
+
readonly maxSuggestions: 3;
|
|
52
|
+
/** Base font size in pixels (for rem/em conversions) */
|
|
53
|
+
readonly baseFontSizePx: 16;
|
|
54
|
+
};
|
|
55
|
+
/**
|
|
56
|
+
* Scanner configuration defaults
|
|
57
|
+
*/
|
|
58
|
+
export declare const SCANNER_CONFIG: {
|
|
59
|
+
/** Default concurrency for parallel file processing */
|
|
60
|
+
readonly defaultConcurrency: 10;
|
|
61
|
+
};
|
|
62
|
+
/**
|
|
63
|
+
* Get the outlier threshold based on total count
|
|
64
|
+
*/
|
|
65
|
+
export declare function getOutlierThreshold(total: number): number;
|
|
66
|
+
//# sourceMappingURL=config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/analysis/config.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;GAEG;AACH,eAAO,MAAM,eAAe;IAC1B,4DAA4D;;IAG5D,yEAAyE;;IAGzE,mDAAmD;;;;;;;CAO3C,CAAC;AAEX;;GAEG;AACH,eAAO,MAAM,aAAa;IACxB;;;OAGG;;IAGH;;;OAGG;;IAGH;;;OAGG;;;CAGK,CAAC;AAEX;;GAEG;AACH,eAAO,MAAM,uBAAuB;IAClC,2DAA2D;;IAG3D,6DAA6D;;IAG7D,8CAA8C;;IAG9C,wDAAwD;;CAEhD,CAAC;AAEX;;GAEG;AACH,eAAO,MAAM,cAAc;IACzB,uDAAuD;;CAE/C,CAAC;AAEX;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAKzD"}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Configuration constants for semantic analysis and drift detection.
|
|
3
|
+
* These values control various thresholds and weights used in the analysis engine.
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* Component matching thresholds
|
|
7
|
+
*/
|
|
8
|
+
export const MATCHING_CONFIG = {
|
|
9
|
+
/** Minimum confidence score (0-1) for component matching */
|
|
10
|
+
minMatchConfidence: 0.7,
|
|
11
|
+
/** Threshold above which a match is considered "similar" vs "partial" */
|
|
12
|
+
similarMatchThreshold: 0.9,
|
|
13
|
+
/** Weights for component similarity calculation */
|
|
14
|
+
similarityWeights: {
|
|
15
|
+
name: 0.4,
|
|
16
|
+
props: 0.3,
|
|
17
|
+
variants: 0.2,
|
|
18
|
+
dependencies: 0.1,
|
|
19
|
+
},
|
|
20
|
+
};
|
|
21
|
+
/**
|
|
22
|
+
* Naming pattern analysis thresholds
|
|
23
|
+
*/
|
|
24
|
+
export const NAMING_CONFIG = {
|
|
25
|
+
/**
|
|
26
|
+
* Minimum ratio (0-1) of components using a pattern to consider it "dominant"
|
|
27
|
+
* Used for naming convention detection
|
|
28
|
+
*/
|
|
29
|
+
dominantPatternThreshold: 0.6,
|
|
30
|
+
/**
|
|
31
|
+
* Minimum ratio (0-1) of prop usage to consider a naming convention established
|
|
32
|
+
* Used for prop naming consistency checks
|
|
33
|
+
*/
|
|
34
|
+
establishedConventionThreshold: 0.7,
|
|
35
|
+
/**
|
|
36
|
+
* Minimum count OR percentage of total to be considered an outlier
|
|
37
|
+
* Used to determine when to report naming inconsistencies
|
|
38
|
+
*/
|
|
39
|
+
outlierMinCount: 3,
|
|
40
|
+
outlierMinPercentage: 0.1,
|
|
41
|
+
};
|
|
42
|
+
/**
|
|
43
|
+
* Token suggestion thresholds
|
|
44
|
+
*/
|
|
45
|
+
export const TOKEN_SUGGESTION_CONFIG = {
|
|
46
|
+
/** Minimum similarity (0-1) for color token suggestions */
|
|
47
|
+
colorSimilarityThreshold: 0.8,
|
|
48
|
+
/** Minimum similarity (0-1) for spacing token suggestions */
|
|
49
|
+
spacingSimilarityThreshold: 0.9,
|
|
50
|
+
/** Default number of suggestions to return */
|
|
51
|
+
maxSuggestions: 3,
|
|
52
|
+
/** Base font size in pixels (for rem/em conversions) */
|
|
53
|
+
baseFontSizePx: 16,
|
|
54
|
+
};
|
|
55
|
+
/**
|
|
56
|
+
* Scanner configuration defaults
|
|
57
|
+
*/
|
|
58
|
+
export const SCANNER_CONFIG = {
|
|
59
|
+
/** Default concurrency for parallel file processing */
|
|
60
|
+
defaultConcurrency: 10,
|
|
61
|
+
};
|
|
62
|
+
/**
|
|
63
|
+
* Get the outlier threshold based on total count
|
|
64
|
+
*/
|
|
65
|
+
export function getOutlierThreshold(total) {
|
|
66
|
+
return Math.max(NAMING_CONFIG.outlierMinCount, total * NAMING_CONFIG.outlierMinPercentage);
|
|
67
|
+
}
|
|
68
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/analysis/config.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;GAEG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG;IAC7B,4DAA4D;IAC5D,kBAAkB,EAAE,GAAG;IAEvB,yEAAyE;IACzE,qBAAqB,EAAE,GAAG;IAE1B,mDAAmD;IACnD,iBAAiB,EAAE;QACjB,IAAI,EAAE,GAAG;QACT,KAAK,EAAE,GAAG;QACV,QAAQ,EAAE,GAAG;QACb,YAAY,EAAE,GAAG;KAClB;CACO,CAAC;AAEX;;GAEG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG;IAC3B;;;OAGG;IACH,wBAAwB,EAAE,GAAG;IAE7B;;;OAGG;IACH,8BAA8B,EAAE,GAAG;IAEnC;;;OAGG;IACH,eAAe,EAAE,CAAC;IAClB,oBAAoB,EAAE,GAAG;CACjB,CAAC;AAEX;;GAEG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAG;IACrC,2DAA2D;IAC3D,wBAAwB,EAAE,GAAG;IAE7B,6DAA6D;IAC7D,0BAA0B,EAAE,GAAG;IAE/B,8CAA8C;IAC9C,cAAc,EAAE,CAAC;IAEjB,wDAAwD;IACxD,cAAc,EAAE,EAAE;CACV,CAAC;AAEX;;GAEG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG;IAC5B,uDAAuD;IACvD,kBAAkB,EAAE,EAAE;CACd,CAAC;AAEX;;GAEG;AACH,MAAM,UAAU,mBAAmB,CAAC,KAAa;IAC/C,OAAO,IAAI,CAAC,GAAG,CACb,aAAa,CAAC,eAAe,EAC7B,KAAK,GAAG,aAAa,CAAC,oBAAoB,CAC3C,CAAC;AACJ,CAAC"}
|
package/dist/analysis/index.d.ts
CHANGED
|
@@ -1,2 +1,6 @@
|
|
|
1
|
-
export { SemanticDiffEngine, type ComponentMatch, type ComponentDifference, type SemanticDiffResult, type TokenDiffResult, type DiffOptions, type AnalysisOptions, } from
|
|
1
|
+
export { SemanticDiffEngine, type ComponentMatch, type ComponentDifference, type SemanticDiffResult, type TokenDiffResult, type DiffOptions, type AnalysisOptions, } from "./semantic-diff.js";
|
|
2
|
+
export { TokenSuggestionService, type TokenSuggestion, } from "./token-suggestions.js";
|
|
3
|
+
export { stringSimilarity, levenshteinDistance, normalizeForComparison, } from "./string-utils.js";
|
|
4
|
+
export { MATCHING_CONFIG, NAMING_CONFIG, TOKEN_SUGGESTION_CONFIG, SCANNER_CONFIG, getOutlierThreshold, } from "./config.js";
|
|
5
|
+
export { generateAuditReport, findCloseMatches, calculateHealthScore, type AuditValue, type AuditReport, type CategoryStats, type FileIssue, type CloseMatch, } from "./audit.js";
|
|
2
6
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/analysis/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,kBAAkB,EAClB,KAAK,cAAc,EACnB,KAAK,mBAAmB,EACxB,KAAK,kBAAkB,EACvB,KAAK,eAAe,EACpB,KAAK,WAAW,EAChB,KAAK,eAAe,GACrB,MAAM,oBAAoB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/analysis/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,kBAAkB,EAClB,KAAK,cAAc,EACnB,KAAK,mBAAmB,EACxB,KAAK,kBAAkB,EACvB,KAAK,eAAe,EACpB,KAAK,WAAW,EAChB,KAAK,eAAe,GACrB,MAAM,oBAAoB,CAAC;AAG5B,OAAO,EACL,sBAAsB,EACtB,KAAK,eAAe,GACrB,MAAM,wBAAwB,CAAC;AAGhC,OAAO,EACL,gBAAgB,EAChB,mBAAmB,EACnB,sBAAsB,GACvB,MAAM,mBAAmB,CAAC;AAG3B,OAAO,EACL,eAAe,EACf,aAAa,EACb,uBAAuB,EACvB,cAAc,EACd,mBAAmB,GACpB,MAAM,aAAa,CAAC;AAGrB,OAAO,EACL,mBAAmB,EACnB,gBAAgB,EAChB,oBAAoB,EACpB,KAAK,UAAU,EACf,KAAK,WAAW,EAChB,KAAK,aAAa,EAClB,KAAK,SAAS,EACd,KAAK,UAAU,GAChB,MAAM,YAAY,CAAC"}
|
package/dist/analysis/index.js
CHANGED
|
@@ -1,2 +1,10 @@
|
|
|
1
|
-
export { SemanticDiffEngine, } from
|
|
1
|
+
export { SemanticDiffEngine, } from "./semantic-diff.js";
|
|
2
|
+
// Token suggestion utilities
|
|
3
|
+
export { TokenSuggestionService, } from "./token-suggestions.js";
|
|
4
|
+
// String utilities
|
|
5
|
+
export { stringSimilarity, levenshteinDistance, normalizeForComparison, } from "./string-utils.js";
|
|
6
|
+
// Analysis configuration
|
|
7
|
+
export { MATCHING_CONFIG, NAMING_CONFIG, TOKEN_SUGGESTION_CONFIG, SCANNER_CONFIG, getOutlierThreshold, } from "./config.js";
|
|
8
|
+
// Audit report
|
|
9
|
+
export { generateAuditReport, findCloseMatches, calculateHealthScore, } from "./audit.js";
|
|
2
10
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/analysis/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,kBAAkB,GAOnB,MAAM,oBAAoB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/analysis/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,kBAAkB,GAOnB,MAAM,oBAAoB,CAAC;AAE5B,6BAA6B;AAC7B,OAAO,EACL,sBAAsB,GAEvB,MAAM,wBAAwB,CAAC;AAEhC,mBAAmB;AACnB,OAAO,EACL,gBAAgB,EAChB,mBAAmB,EACnB,sBAAsB,GACvB,MAAM,mBAAmB,CAAC;AAE3B,yBAAyB;AACzB,OAAO,EACL,eAAe,EACf,aAAa,EACb,uBAAuB,EACvB,cAAc,EACd,mBAAmB,GACpB,MAAM,aAAa,CAAC;AAErB,eAAe;AACf,OAAO,EACL,mBAAmB,EACnB,gBAAgB,EAChB,oBAAoB,GAMrB,MAAM,YAAY,CAAC"}
|
|
@@ -1,9 +1,11 @@
|
|
|
1
|
-
import type { Component, DesignToken, DriftSignal, Severity } from
|
|
1
|
+
import type { Component, DesignToken, DriftSignal, Severity } from "../models/index.js";
|
|
2
|
+
import { type TokenSuggestion } from "./token-suggestions.js";
|
|
3
|
+
export type { TokenSuggestion } from "./token-suggestions.js";
|
|
2
4
|
export interface ComponentMatch {
|
|
3
5
|
source: Component;
|
|
4
6
|
target: Component;
|
|
5
7
|
confidence: number;
|
|
6
|
-
matchType:
|
|
8
|
+
matchType: "exact" | "similar" | "partial";
|
|
7
9
|
differences: ComponentDifference[];
|
|
8
10
|
}
|
|
9
11
|
export interface ComponentDifference {
|
|
@@ -40,18 +42,36 @@ export interface AnalysisOptions {
|
|
|
40
42
|
components?: RegExp;
|
|
41
43
|
tokens?: RegExp;
|
|
42
44
|
};
|
|
45
|
+
/** Available design tokens to suggest as replacements for hardcoded values */
|
|
46
|
+
availableTokens?: DesignToken[];
|
|
43
47
|
}
|
|
44
48
|
export interface FrameworkInfo {
|
|
45
49
|
name: string;
|
|
46
50
|
version: string;
|
|
47
51
|
}
|
|
48
52
|
export declare class SemanticDiffEngine {
|
|
53
|
+
private nameCache;
|
|
54
|
+
private componentMetadataCache;
|
|
55
|
+
private tokenSuggestionService;
|
|
56
|
+
/**
|
|
57
|
+
* Cached version of normalizeComponentName to avoid repeated string operations
|
|
58
|
+
*/
|
|
59
|
+
private cachedNormalizeName;
|
|
60
|
+
/**
|
|
61
|
+
* Get pre-computed component metadata for faster similarity calculations
|
|
62
|
+
*/
|
|
63
|
+
private getComponentMetadata;
|
|
64
|
+
/**
|
|
65
|
+
* Clear caches to prevent memory leaks between operations
|
|
66
|
+
*/
|
|
67
|
+
private clearCaches;
|
|
49
68
|
/**
|
|
50
69
|
* Check for framework sprawl - multiple UI frameworks in one codebase
|
|
51
70
|
*/
|
|
52
71
|
checkFrameworkSprawl(frameworks: FrameworkInfo[]): DriftSignal | null;
|
|
53
72
|
/**
|
|
54
73
|
* Compare components from different sources (e.g., React vs Figma)
|
|
74
|
+
* Optimized with Map-based indexing for O(n+m) instead of O(n×m)
|
|
55
75
|
*/
|
|
56
76
|
compareComponents(sourceComponents: Component[], targetComponents: Component[], options?: DiffOptions): SemanticDiffResult;
|
|
57
77
|
/**
|
|
@@ -82,19 +102,45 @@ export declare class SemanticDiffEngine {
|
|
|
82
102
|
private checkPropNamingConsistency;
|
|
83
103
|
private findDominantPropPattern;
|
|
84
104
|
/**
|
|
85
|
-
* Detect potential duplicate components based on similar names
|
|
105
|
+
* Detect potential duplicate components based on similar names.
|
|
106
|
+
* Only flags true duplicates like Button vs ButtonNew or Card vs CardLegacy.
|
|
107
|
+
* Does NOT flag compound components like Button vs ButtonGroup or Card vs CardHeader.
|
|
86
108
|
*/
|
|
87
109
|
private detectPotentialDuplicates;
|
|
110
|
+
/**
|
|
111
|
+
* Extract the base name from a component name, stripping version suffixes.
|
|
112
|
+
* Returns whether the name had a version suffix (indicating potential duplicate).
|
|
113
|
+
*/
|
|
114
|
+
private extractBaseName;
|
|
88
115
|
private createMatch;
|
|
89
116
|
private findBestMatch;
|
|
90
117
|
private calculateSimilarity;
|
|
91
118
|
private stringSimilarity;
|
|
92
|
-
private levenshteinDistance;
|
|
93
119
|
private findDifferences;
|
|
94
120
|
private generateComponentDrifts;
|
|
95
121
|
private componentToDriftSource;
|
|
96
122
|
private tokenToDriftSource;
|
|
97
123
|
private getHighestSeverity;
|
|
98
124
|
private checkAccessibility;
|
|
125
|
+
/**
|
|
126
|
+
* Find token suggestions for a hardcoded color value
|
|
127
|
+
* Delegates to TokenSuggestionService
|
|
128
|
+
*/
|
|
129
|
+
findColorTokenSuggestions(hardcodedValue: string, tokens: DesignToken[], maxSuggestions?: number): TokenSuggestion[];
|
|
130
|
+
/**
|
|
131
|
+
* Find token suggestions for a hardcoded spacing value
|
|
132
|
+
* Delegates to TokenSuggestionService
|
|
133
|
+
*/
|
|
134
|
+
findSpacingTokenSuggestions(hardcodedValue: string, tokens: DesignToken[], maxSuggestions?: number): TokenSuggestion[];
|
|
135
|
+
/**
|
|
136
|
+
* Generate actionable suggestions for hardcoded values
|
|
137
|
+
* Delegates to TokenSuggestionService
|
|
138
|
+
*/
|
|
139
|
+
generateTokenSuggestions(hardcodedValues: Array<{
|
|
140
|
+
type: string;
|
|
141
|
+
value: string;
|
|
142
|
+
property: string;
|
|
143
|
+
location: string;
|
|
144
|
+
}>, tokens: DesignToken[]): Map<string, TokenSuggestion[]>;
|
|
99
145
|
}
|
|
100
146
|
//# sourceMappingURL=semantic-diff.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"semantic-diff.d.ts","sourceRoot":"","sources":["../../src/analysis/semantic-diff.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,SAAS,EACT,WAAW,EACX,WAAW,EACX,QAAQ,EAET,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"semantic-diff.d.ts","sourceRoot":"","sources":["../../src/analysis/semantic-diff.ts"],"names":[],"mappings":"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"}
|