@buoy-design/core 0.1.0 → 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2024 Buoy
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -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"}
@@ -1,2 +1,5 @@
1
- export { SemanticDiffEngine, type ComponentMatch, type ComponentDifference, type SemanticDiffResult, type TokenDiffResult, type DiffOptions, type AnalysisOptions, } from './semantic-diff.js';
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";
2
5
  //# 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"}
@@ -1,2 +1,8 @@
1
- export { SemanticDiffEngine, } from './semantic-diff.js';
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";
2
8
  //# 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"}
@@ -1,9 +1,11 @@
1
- import type { Component, DesignToken, DriftSignal, Severity } from '../models/index.js';
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: 'exact' | 'similar' | 'partial';
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":"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"}
1
+ {"version":3,"file":"semantic-diff.d.ts","sourceRoot":"","sources":["../../src/analysis/semantic-diff.ts"],"names":[],"mappings":"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"}