@trentapps/manager-protocol 1.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 +21 -0
- package/README.md +446 -0
- package/dist/analyzers/ArchitectureDetector.d.ts +44 -0
- package/dist/analyzers/ArchitectureDetector.d.ts.map +1 -0
- package/dist/analyzers/ArchitectureDetector.js +218 -0
- package/dist/analyzers/ArchitectureDetector.js.map +1 -0
- package/dist/analyzers/CSSAnalyzer.d.ts +104 -0
- package/dist/analyzers/CSSAnalyzer.d.ts.map +1 -0
- package/dist/analyzers/CSSAnalyzer.js +578 -0
- package/dist/analyzers/CSSAnalyzer.js.map +1 -0
- package/dist/analyzers/index.d.ts +5 -0
- package/dist/analyzers/index.d.ts.map +1 -0
- package/dist/analyzers/index.js +5 -0
- package/dist/analyzers/index.js.map +1 -0
- package/dist/cli.d.ts +8 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +174 -0
- package/dist/cli.js.map +1 -0
- package/dist/design-system/index.d.ts +6 -0
- package/dist/design-system/index.d.ts.map +1 -0
- package/dist/design-system/index.js +6 -0
- package/dist/design-system/index.js.map +1 -0
- package/dist/design-system/tokens.d.ts +106 -0
- package/dist/design-system/tokens.d.ts.map +1 -0
- package/dist/design-system/tokens.js +554 -0
- package/dist/design-system/tokens.js.map +1 -0
- package/dist/engine/AppMonitor.d.ts +162 -0
- package/dist/engine/AppMonitor.d.ts.map +1 -0
- package/dist/engine/AppMonitor.js +754 -0
- package/dist/engine/AppMonitor.js.map +1 -0
- package/dist/engine/AuditLogger.d.ts +138 -0
- package/dist/engine/AuditLogger.d.ts.map +1 -0
- package/dist/engine/AuditLogger.js +448 -0
- package/dist/engine/AuditLogger.js.map +1 -0
- package/dist/engine/GitHubApprovalManager.d.ts +106 -0
- package/dist/engine/GitHubApprovalManager.d.ts.map +1 -0
- package/dist/engine/GitHubApprovalManager.js +315 -0
- package/dist/engine/GitHubApprovalManager.js.map +1 -0
- package/dist/engine/RateLimiter.d.ts +79 -0
- package/dist/engine/RateLimiter.d.ts.map +1 -0
- package/dist/engine/RateLimiter.js +232 -0
- package/dist/engine/RateLimiter.js.map +1 -0
- package/dist/engine/RulesEngine.d.ts +77 -0
- package/dist/engine/RulesEngine.d.ts.map +1 -0
- package/dist/engine/RulesEngine.js +400 -0
- package/dist/engine/RulesEngine.js.map +1 -0
- package/dist/engine/TaskManager.d.ts +173 -0
- package/dist/engine/TaskManager.d.ts.map +1 -0
- package/dist/engine/TaskManager.js +678 -0
- package/dist/engine/TaskManager.js.map +1 -0
- package/dist/engine/index.d.ts +9 -0
- package/dist/engine/index.d.ts.map +1 -0
- package/dist/engine/index.js +9 -0
- package/dist/engine/index.js.map +1 -0
- package/dist/index.d.ts +21 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +29 -0
- package/dist/index.js.map +1 -0
- package/dist/rules/architecture.d.ts +9 -0
- package/dist/rules/architecture.d.ts.map +1 -0
- package/dist/rules/architecture.js +322 -0
- package/dist/rules/architecture.js.map +1 -0
- package/dist/rules/azure.d.ts +7 -0
- package/dist/rules/azure.d.ts.map +1 -0
- package/dist/rules/azure.js +138 -0
- package/dist/rules/azure.js.map +1 -0
- package/dist/rules/compliance.d.ts +9 -0
- package/dist/rules/compliance.d.ts.map +1 -0
- package/dist/rules/compliance.js +304 -0
- package/dist/rules/compliance.js.map +1 -0
- package/dist/rules/css.d.ts +10 -0
- package/dist/rules/css.d.ts.map +1 -0
- package/dist/rules/css.js +1239 -0
- package/dist/rules/css.js.map +1 -0
- package/dist/rules/flask.d.ts +7 -0
- package/dist/rules/flask.d.ts.map +1 -0
- package/dist/rules/flask.js +155 -0
- package/dist/rules/flask.js.map +1 -0
- package/dist/rules/index.d.ts +607 -0
- package/dist/rules/index.d.ts.map +1 -0
- package/dist/rules/index.js +401 -0
- package/dist/rules/index.js.map +1 -0
- package/dist/rules/ml-ai.d.ts +7 -0
- package/dist/rules/ml-ai.d.ts.map +1 -0
- package/dist/rules/ml-ai.js +150 -0
- package/dist/rules/ml-ai.js.map +1 -0
- package/dist/rules/operational.d.ts +9 -0
- package/dist/rules/operational.d.ts.map +1 -0
- package/dist/rules/operational.js +318 -0
- package/dist/rules/operational.js.map +1 -0
- package/dist/rules/security.d.ts +9 -0
- package/dist/rules/security.d.ts.map +1 -0
- package/dist/rules/security.js +287 -0
- package/dist/rules/security.js.map +1 -0
- package/dist/rules/storage.d.ts +7 -0
- package/dist/rules/storage.d.ts.map +1 -0
- package/dist/rules/storage.js +134 -0
- package/dist/rules/storage.js.map +1 -0
- package/dist/rules/stripe.d.ts +7 -0
- package/dist/rules/stripe.d.ts.map +1 -0
- package/dist/rules/stripe.js +140 -0
- package/dist/rules/stripe.js.map +1 -0
- package/dist/rules/testing.d.ts +7 -0
- package/dist/rules/testing.d.ts.map +1 -0
- package/dist/rules/testing.js +135 -0
- package/dist/rules/testing.js.map +1 -0
- package/dist/rules/ux.d.ts +9 -0
- package/dist/rules/ux.d.ts.map +1 -0
- package/dist/rules/ux.js +280 -0
- package/dist/rules/ux.js.map +1 -0
- package/dist/rules/websocket.d.ts +7 -0
- package/dist/rules/websocket.d.ts.map +1 -0
- package/dist/rules/websocket.js +136 -0
- package/dist/rules/websocket.js.map +1 -0
- package/dist/server.d.ts +49 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +2330 -0
- package/dist/server.js.map +1 -0
- package/dist/supervisor/AgentSupervisor.d.ts +235 -0
- package/dist/supervisor/AgentSupervisor.d.ts.map +1 -0
- package/dist/supervisor/AgentSupervisor.js +596 -0
- package/dist/supervisor/AgentSupervisor.js.map +1 -0
- package/dist/supervisor/ManagedServerRegistry.d.ts +48 -0
- package/dist/supervisor/ManagedServerRegistry.d.ts.map +1 -0
- package/dist/supervisor/ManagedServerRegistry.js +145 -0
- package/dist/supervisor/ManagedServerRegistry.js.map +1 -0
- package/dist/supervisor/ProjectTracker.d.ts +188 -0
- package/dist/supervisor/ProjectTracker.d.ts.map +1 -0
- package/dist/supervisor/ProjectTracker.js +617 -0
- package/dist/supervisor/ProjectTracker.js.map +1 -0
- package/dist/supervisor/index.d.ts +6 -0
- package/dist/supervisor/index.d.ts.map +1 -0
- package/dist/supervisor/index.js +6 -0
- package/dist/supervisor/index.js.map +1 -0
- package/dist/types/index.d.ts +1176 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +391 -0
- package/dist/types/index.js.map +1 -0
- package/dist/utils/errors.d.ts +86 -0
- package/dist/utils/errors.d.ts.map +1 -0
- package/dist/utils/errors.js +171 -0
- package/dist/utils/errors.js.map +1 -0
- package/dist/utils/index.d.ts +5 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +5 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/shell.d.ts +22 -0
- package/dist/utils/shell.d.ts.map +1 -0
- package/dist/utils/shell.js +29 -0
- package/dist/utils/shell.js.map +1 -0
- package/package.json +63 -0
|
@@ -0,0 +1,578 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Enterprise Agent Supervisor - CSS Analyzer
|
|
3
|
+
*
|
|
4
|
+
* Analyzes CSS rules for optimization, deduplication, and best practices.
|
|
5
|
+
*/
|
|
6
|
+
import { suggestToken, getRecommendedTokens } from '../design-system/index.js';
|
|
7
|
+
/**
|
|
8
|
+
* Common CSS property patterns that should be variables
|
|
9
|
+
*/
|
|
10
|
+
const VARIABLE_CANDIDATES = [
|
|
11
|
+
{ pattern: /^#[0-9a-fA-F]{3,8}$/, type: 'color', varPrefix: '--color-' },
|
|
12
|
+
{ pattern: /^rgb\(|^rgba\(|^hsl\(|^hsla\(/, type: 'color', varPrefix: '--color-' },
|
|
13
|
+
{ pattern: /^\d+px$/, type: 'spacing', varPrefix: '--spacing-', minValue: 8 },
|
|
14
|
+
{ pattern: /^\d+rem$/, type: 'spacing', varPrefix: '--spacing-' },
|
|
15
|
+
{ pattern: /^(\d+(\.\d+)?)(px|rem|em)$/, type: 'font-size', varPrefix: '--font-size-' },
|
|
16
|
+
{ pattern: /^\d{3}$/, type: 'font-weight', varPrefix: '--font-weight-' },
|
|
17
|
+
{ pattern: /^(\d+(\.\d+)?)(s|ms)$/, type: 'duration', varPrefix: '--duration-' },
|
|
18
|
+
{ pattern: /^cubic-bezier\(/, type: 'easing', varPrefix: '--easing-' }
|
|
19
|
+
];
|
|
20
|
+
/**
|
|
21
|
+
* Properties that commonly indicate global/reusable styles
|
|
22
|
+
*/
|
|
23
|
+
const GLOBAL_PROPERTY_INDICATORS = [
|
|
24
|
+
'font-family',
|
|
25
|
+
'color',
|
|
26
|
+
'background-color',
|
|
27
|
+
'border-radius',
|
|
28
|
+
'box-shadow',
|
|
29
|
+
'transition',
|
|
30
|
+
'animation'
|
|
31
|
+
];
|
|
32
|
+
export class CSSAnalyzer {
|
|
33
|
+
knownUtilityClasses = new Set();
|
|
34
|
+
constructor() {
|
|
35
|
+
this.initializeKnownPatterns();
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Main analysis entry point
|
|
39
|
+
*/
|
|
40
|
+
analyze(context) {
|
|
41
|
+
const ruleId = this.generateRuleId(context.newRule);
|
|
42
|
+
const suggestions = [];
|
|
43
|
+
const duplicates = [];
|
|
44
|
+
const removableCandidates = [];
|
|
45
|
+
let riskScore = 0;
|
|
46
|
+
// 1. Check for duplicates/similar rules
|
|
47
|
+
const duplicateCheck = this.findDuplicates(context.newRule, context.existingRules || []);
|
|
48
|
+
duplicates.push(...duplicateCheck.duplicates);
|
|
49
|
+
suggestions.push(...duplicateCheck.suggestions);
|
|
50
|
+
riskScore += duplicateCheck.duplicates.length * 10;
|
|
51
|
+
// 2. Check if should be externalized
|
|
52
|
+
const externalizeCheck = this.checkExternalization(context);
|
|
53
|
+
suggestions.push(...externalizeCheck.suggestions);
|
|
54
|
+
if (externalizeCheck.shouldExternalize)
|
|
55
|
+
riskScore += 15;
|
|
56
|
+
// 3. Check if should be global
|
|
57
|
+
const globalCheck = this.checkGlobalCandidate(context);
|
|
58
|
+
suggestions.push(...globalCheck.suggestions);
|
|
59
|
+
if (globalCheck.shouldMakeGlobal)
|
|
60
|
+
riskScore += 10;
|
|
61
|
+
// 4. Check for variable candidates
|
|
62
|
+
const variableCheck = this.checkVariableCandidates(context.newRule);
|
|
63
|
+
suggestions.push(...variableCheck.suggestions);
|
|
64
|
+
riskScore += variableCheck.suggestions.length * 5;
|
|
65
|
+
// 5. Check for utility class opportunities
|
|
66
|
+
if (context.hasStyleSystem) {
|
|
67
|
+
const utilityCheck = this.checkUtilityOpportunities(context);
|
|
68
|
+
suggestions.push(...utilityCheck.suggestions);
|
|
69
|
+
}
|
|
70
|
+
// 6. Check specificity issues
|
|
71
|
+
const specificityCheck = this.checkSpecificity(context.newRule);
|
|
72
|
+
suggestions.push(...specificityCheck.suggestions);
|
|
73
|
+
riskScore += specificityCheck.riskContribution;
|
|
74
|
+
// 7. Check naming conventions
|
|
75
|
+
const namingCheck = this.checkNamingConvention(context.newRule, context.framework);
|
|
76
|
+
suggestions.push(...namingCheck.suggestions);
|
|
77
|
+
// 8. Find removable candidates
|
|
78
|
+
if (context.existingRules) {
|
|
79
|
+
removableCandidates.push(...this.findRemovableCandidates(context.newRule, context.existingRules));
|
|
80
|
+
}
|
|
81
|
+
// Generate summary
|
|
82
|
+
const summary = this.generateSummary(context.newRule, suggestions, duplicates, externalizeCheck.shouldExternalize, globalCheck.shouldMakeGlobal);
|
|
83
|
+
return {
|
|
84
|
+
ruleId,
|
|
85
|
+
newRule: context.newRule,
|
|
86
|
+
shouldExternalize: externalizeCheck.shouldExternalize,
|
|
87
|
+
shouldMakeGlobal: globalCheck.shouldMakeGlobal,
|
|
88
|
+
duplicates,
|
|
89
|
+
suggestions: this.prioritizeSuggestions(suggestions),
|
|
90
|
+
removableCandidates,
|
|
91
|
+
riskScore: Math.min(100, riskScore),
|
|
92
|
+
summary
|
|
93
|
+
};
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Find duplicate or similar CSS rules
|
|
97
|
+
*/
|
|
98
|
+
findDuplicates(newRule, existingRules) {
|
|
99
|
+
const duplicates = [];
|
|
100
|
+
const suggestions = [];
|
|
101
|
+
for (const existing of existingRules) {
|
|
102
|
+
// Exact property match
|
|
103
|
+
const similarity = this.calculateSimilarity(newRule.properties, existing.properties);
|
|
104
|
+
if (similarity === 1) {
|
|
105
|
+
duplicates.push(existing);
|
|
106
|
+
suggestions.push({
|
|
107
|
+
type: 'use_existing',
|
|
108
|
+
severity: 'error',
|
|
109
|
+
message: `Identical CSS properties already exist in "${existing.selector}"`,
|
|
110
|
+
details: `Found at ${existing.source}${existing.file ? `: ${existing.file}` : ''}${existing.line ? `:${existing.line}` : ''}`,
|
|
111
|
+
existingRule: existing,
|
|
112
|
+
suggestedAction: `Use existing class "${existing.selector}" instead of creating new rule`,
|
|
113
|
+
codeExample: `class="${existing.selector.replace('.', '')}"`
|
|
114
|
+
});
|
|
115
|
+
}
|
|
116
|
+
else if (similarity >= 0.7) {
|
|
117
|
+
suggestions.push({
|
|
118
|
+
type: 'consolidate',
|
|
119
|
+
severity: 'warning',
|
|
120
|
+
message: `Similar CSS properties (${Math.round(similarity * 100)}% match) found in "${existing.selector}"`,
|
|
121
|
+
details: 'Consider consolidating these rules to reduce CSS bundle size',
|
|
122
|
+
existingRule: existing,
|
|
123
|
+
suggestedAction: 'Extend the existing rule or create a shared base class'
|
|
124
|
+
});
|
|
125
|
+
}
|
|
126
|
+
// Check for same selector different properties
|
|
127
|
+
if (existing.selector === newRule.selector && similarity < 1) {
|
|
128
|
+
suggestions.push({
|
|
129
|
+
type: 'consolidate',
|
|
130
|
+
severity: 'warning',
|
|
131
|
+
message: `Selector "${newRule.selector}" already exists with different properties`,
|
|
132
|
+
details: 'Multiple rules with same selector can cause specificity conflicts',
|
|
133
|
+
existingRule: existing,
|
|
134
|
+
suggestedAction: 'Merge properties into single rule or use more specific selectors'
|
|
135
|
+
});
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
return { duplicates, suggestions };
|
|
139
|
+
}
|
|
140
|
+
/**
|
|
141
|
+
* Check if CSS should be externalized
|
|
142
|
+
*/
|
|
143
|
+
checkExternalization(context) {
|
|
144
|
+
const suggestions = [];
|
|
145
|
+
let shouldExternalize = false;
|
|
146
|
+
// Inline styles should almost always be externalized
|
|
147
|
+
if (context.newRule.source === 'inline') {
|
|
148
|
+
shouldExternalize = true;
|
|
149
|
+
suggestions.push({
|
|
150
|
+
type: 'externalize',
|
|
151
|
+
severity: 'warning',
|
|
152
|
+
message: 'Inline styles should be moved to external stylesheet',
|
|
153
|
+
details: 'Inline styles hurt cacheability, increase HTML size, and make maintenance difficult',
|
|
154
|
+
suggestedAction: 'Create a class in your stylesheet and apply it to the element',
|
|
155
|
+
codeExample: this.generateExternalizeExample(context.newRule, context.componentName)
|
|
156
|
+
});
|
|
157
|
+
}
|
|
158
|
+
// Style tags with many rules should be external
|
|
159
|
+
if (context.newRule.source === 'style_tag') {
|
|
160
|
+
const propertyCount = Object.keys(context.newRule.properties).length;
|
|
161
|
+
if (propertyCount > 5) {
|
|
162
|
+
shouldExternalize = true;
|
|
163
|
+
suggestions.push({
|
|
164
|
+
type: 'externalize',
|
|
165
|
+
severity: 'info',
|
|
166
|
+
message: 'Complex style rules (>5 properties) benefit from external stylesheets',
|
|
167
|
+
details: 'External stylesheets enable better caching, minification, and tooling support',
|
|
168
|
+
suggestedAction: `Move to ${context.globalStylesFile || 'styles.css'}`
|
|
169
|
+
});
|
|
170
|
+
}
|
|
171
|
+
// Reusable patterns should be external
|
|
172
|
+
if (this.isReusablePattern(context.newRule)) {
|
|
173
|
+
shouldExternalize = true;
|
|
174
|
+
suggestions.push({
|
|
175
|
+
type: 'externalize',
|
|
176
|
+
severity: 'suggestion',
|
|
177
|
+
message: 'This appears to be a reusable pattern',
|
|
178
|
+
details: 'Reusable CSS patterns should be in external files for consistency',
|
|
179
|
+
suggestedAction: 'Move to shared stylesheet or component library'
|
|
180
|
+
});
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
return { shouldExternalize, suggestions };
|
|
184
|
+
}
|
|
185
|
+
/**
|
|
186
|
+
* Check if CSS should be made global
|
|
187
|
+
*/
|
|
188
|
+
checkGlobalCandidate(context) {
|
|
189
|
+
const suggestions = [];
|
|
190
|
+
let shouldMakeGlobal = false;
|
|
191
|
+
const properties = Object.keys(context.newRule.properties);
|
|
192
|
+
// Check for global property indicators
|
|
193
|
+
const globalIndicators = properties.filter(p => GLOBAL_PROPERTY_INDICATORS.includes(p));
|
|
194
|
+
if (globalIndicators.length >= 2) {
|
|
195
|
+
shouldMakeGlobal = true;
|
|
196
|
+
suggestions.push({
|
|
197
|
+
type: 'make_global',
|
|
198
|
+
severity: 'suggestion',
|
|
199
|
+
message: `Rule contains commonly global properties: ${globalIndicators.join(', ')}`,
|
|
200
|
+
details: 'These properties often indicate design system tokens that should be global',
|
|
201
|
+
suggestedAction: 'Consider adding to global styles or design system'
|
|
202
|
+
});
|
|
203
|
+
}
|
|
204
|
+
// Typography rules should typically be global
|
|
205
|
+
if (this.isTypographyRule(context.newRule)) {
|
|
206
|
+
shouldMakeGlobal = true;
|
|
207
|
+
suggestions.push({
|
|
208
|
+
type: 'make_global',
|
|
209
|
+
severity: 'suggestion',
|
|
210
|
+
message: 'Typography styles should be defined globally for consistency',
|
|
211
|
+
details: 'Consistent typography improves design cohesion and accessibility',
|
|
212
|
+
suggestedAction: 'Add to typography section in global styles'
|
|
213
|
+
});
|
|
214
|
+
}
|
|
215
|
+
// Button-like patterns should be global
|
|
216
|
+
if (this.isButtonPattern(context.newRule)) {
|
|
217
|
+
shouldMakeGlobal = true;
|
|
218
|
+
suggestions.push({
|
|
219
|
+
type: 'make_global',
|
|
220
|
+
severity: 'suggestion',
|
|
221
|
+
message: 'Button/interactive styles should be global components',
|
|
222
|
+
details: 'Consistent interactive elements improve UX and accessibility',
|
|
223
|
+
suggestedAction: 'Create a reusable button component/class'
|
|
224
|
+
});
|
|
225
|
+
}
|
|
226
|
+
return { shouldMakeGlobal, suggestions };
|
|
227
|
+
}
|
|
228
|
+
/**
|
|
229
|
+
* Check for CSS variable candidates using design system tokens
|
|
230
|
+
*/
|
|
231
|
+
checkVariableCandidates(rule) {
|
|
232
|
+
const suggestions = [];
|
|
233
|
+
for (const [property, value] of Object.entries(rule.properties)) {
|
|
234
|
+
// First, try to find an exact or close match from the design system
|
|
235
|
+
const tokenSuggestion = suggestToken(value, property);
|
|
236
|
+
if (tokenSuggestion && tokenSuggestion.confidence >= 0.7) {
|
|
237
|
+
const { token, confidence } = tokenSuggestion;
|
|
238
|
+
const confidencePercent = Math.round(confidence * 100);
|
|
239
|
+
suggestions.push({
|
|
240
|
+
type: 'use_variable',
|
|
241
|
+
severity: confidence >= 0.95 ? 'warning' : 'info',
|
|
242
|
+
message: `${property}: ${value} should use design token var(${token.name})`,
|
|
243
|
+
details: confidence >= 0.95
|
|
244
|
+
? `Exact match found: "${token.description}" - Use design system token for consistency`
|
|
245
|
+
: `Close match (${confidencePercent}%): "${token.description}" - Consider using design system token`,
|
|
246
|
+
suggestedAction: `Replace with var(${token.name})`,
|
|
247
|
+
codeExample: `${property}: var(${token.name}); /* ${token.description} */`
|
|
248
|
+
});
|
|
249
|
+
continue;
|
|
250
|
+
}
|
|
251
|
+
// Fall back to generic variable suggestions for unmatched values
|
|
252
|
+
for (const candidate of VARIABLE_CANDIDATES) {
|
|
253
|
+
if (candidate.pattern.test(value)) {
|
|
254
|
+
// Skip small values for spacing
|
|
255
|
+
if (candidate.type === 'spacing' && candidate.minValue) {
|
|
256
|
+
const numValue = parseInt(value);
|
|
257
|
+
if (numValue < candidate.minValue)
|
|
258
|
+
continue;
|
|
259
|
+
}
|
|
260
|
+
// Map candidate type to token category
|
|
261
|
+
const tokenCategory = this.mapTypeToTokenCategory(candidate.type);
|
|
262
|
+
const recommendedTokens = tokenCategory ? getRecommendedTokens(tokenCategory) : [];
|
|
263
|
+
const tokenList = recommendedTokens.slice(0, 3).map(t => t.name).join(', ');
|
|
264
|
+
suggestions.push({
|
|
265
|
+
type: 'use_variable',
|
|
266
|
+
severity: 'info',
|
|
267
|
+
message: `${property}: ${value} should use a CSS variable`,
|
|
268
|
+
details: recommendedTokens.length > 0
|
|
269
|
+
? `Available ${candidate.type} tokens: ${tokenList}`
|
|
270
|
+
: `${candidate.type} values should be defined as CSS custom properties for consistency`,
|
|
271
|
+
suggestedAction: recommendedTokens.length > 0
|
|
272
|
+
? `Consider design tokens: ${tokenList}`
|
|
273
|
+
: `Replace with var(${candidate.varPrefix}xxx)`,
|
|
274
|
+
codeExample: recommendedTokens.length > 0
|
|
275
|
+
? `${property}: var(${recommendedTokens[0].name}); /* ${recommendedTokens[0].description} */`
|
|
276
|
+
: `${property}: var(${candidate.varPrefix}primary);`
|
|
277
|
+
});
|
|
278
|
+
break;
|
|
279
|
+
}
|
|
280
|
+
}
|
|
281
|
+
}
|
|
282
|
+
return { suggestions };
|
|
283
|
+
}
|
|
284
|
+
/**
|
|
285
|
+
* Check for utility class opportunities
|
|
286
|
+
*/
|
|
287
|
+
checkUtilityOpportunities(context) {
|
|
288
|
+
const suggestions = [];
|
|
289
|
+
const properties = context.newRule.properties;
|
|
290
|
+
// Common utility mappings
|
|
291
|
+
const utilityMappings = {
|
|
292
|
+
'display': (v) => v === 'flex' ? 'flex' : v === 'grid' ? 'grid' : v === 'none' ? 'hidden' : null,
|
|
293
|
+
'flex-direction': (v) => v === 'column' ? 'flex-col' : v === 'row' ? 'flex-row' : null,
|
|
294
|
+
'justify-content': (v) => `justify-${v.replace('flex-', '').replace('space-', '')}`,
|
|
295
|
+
'align-items': (v) => `items-${v.replace('flex-', '')}`,
|
|
296
|
+
'text-align': (v) => `text-${v}`,
|
|
297
|
+
'font-weight': (v) => `font-${this.getFontWeightName(v)}`,
|
|
298
|
+
'position': (v) => v,
|
|
299
|
+
'overflow': (v) => `overflow-${v}`,
|
|
300
|
+
'cursor': (v) => `cursor-${v}`
|
|
301
|
+
};
|
|
302
|
+
for (const [property, value] of Object.entries(properties)) {
|
|
303
|
+
if (utilityMappings[property]) {
|
|
304
|
+
const utilityClass = utilityMappings[property](value);
|
|
305
|
+
if (utilityClass) {
|
|
306
|
+
suggestions.push({
|
|
307
|
+
type: 'use_utility',
|
|
308
|
+
severity: 'suggestion',
|
|
309
|
+
message: `"${property}: ${value}" can be replaced with utility class`,
|
|
310
|
+
details: `Using ${context.styleSystemName || 'utility'} classes reduces custom CSS`,
|
|
311
|
+
suggestedAction: `Use class="${utilityClass}" instead`,
|
|
312
|
+
codeExample: `<div class="${utilityClass}">...</div>`
|
|
313
|
+
});
|
|
314
|
+
}
|
|
315
|
+
}
|
|
316
|
+
}
|
|
317
|
+
return { suggestions };
|
|
318
|
+
}
|
|
319
|
+
/**
|
|
320
|
+
* Check CSS specificity issues
|
|
321
|
+
*/
|
|
322
|
+
checkSpecificity(rule) {
|
|
323
|
+
const suggestions = [];
|
|
324
|
+
let riskContribution = 0;
|
|
325
|
+
const specificity = this.calculateSpecificity(rule.selector);
|
|
326
|
+
// ID selectors
|
|
327
|
+
if (specificity.ids > 0) {
|
|
328
|
+
suggestions.push({
|
|
329
|
+
type: 'specificity_warning',
|
|
330
|
+
severity: 'warning',
|
|
331
|
+
message: 'Avoid ID selectors in CSS',
|
|
332
|
+
details: 'ID selectors have high specificity making overrides difficult',
|
|
333
|
+
suggestedAction: 'Use class selectors instead of IDs'
|
|
334
|
+
});
|
|
335
|
+
riskContribution += 15;
|
|
336
|
+
}
|
|
337
|
+
// Deeply nested selectors
|
|
338
|
+
if (specificity.depth > 3) {
|
|
339
|
+
suggestions.push({
|
|
340
|
+
type: 'specificity_warning',
|
|
341
|
+
severity: 'warning',
|
|
342
|
+
message: `Deep selector nesting (${specificity.depth} levels)`,
|
|
343
|
+
details: 'Deeply nested selectors are brittle and hard to override',
|
|
344
|
+
suggestedAction: 'Use BEM or flat class naming instead'
|
|
345
|
+
});
|
|
346
|
+
riskContribution += 10;
|
|
347
|
+
}
|
|
348
|
+
// !important
|
|
349
|
+
const hasImportant = Object.values(rule.properties).some(v => v.includes('!important'));
|
|
350
|
+
if (hasImportant) {
|
|
351
|
+
suggestions.push({
|
|
352
|
+
type: 'specificity_warning',
|
|
353
|
+
severity: 'error',
|
|
354
|
+
message: 'Avoid !important declarations',
|
|
355
|
+
details: '!important creates specificity problems and indicates architecture issues',
|
|
356
|
+
suggestedAction: 'Refactor CSS to avoid needing !important'
|
|
357
|
+
});
|
|
358
|
+
riskContribution += 25;
|
|
359
|
+
}
|
|
360
|
+
return { suggestions, riskContribution };
|
|
361
|
+
}
|
|
362
|
+
/**
|
|
363
|
+
* Check naming convention
|
|
364
|
+
*/
|
|
365
|
+
checkNamingConvention(rule, framework) {
|
|
366
|
+
const suggestions = [];
|
|
367
|
+
const selector = rule.selector;
|
|
368
|
+
// Check for meaningful names
|
|
369
|
+
if (/^\.[a-z]$/.test(selector) || /^\.(div|span|container)\d*$/.test(selector)) {
|
|
370
|
+
suggestions.push({
|
|
371
|
+
type: 'naming_convention',
|
|
372
|
+
severity: 'warning',
|
|
373
|
+
message: 'Use descriptive class names',
|
|
374
|
+
details: 'Generic names like "div1" or single letters are hard to understand',
|
|
375
|
+
suggestedAction: 'Use semantic names that describe purpose (e.g., .card-header)'
|
|
376
|
+
});
|
|
377
|
+
}
|
|
378
|
+
// BEM recommendation for complex selectors
|
|
379
|
+
if (selector.includes(' ') && !selector.includes('__') && !selector.includes('--')) {
|
|
380
|
+
suggestions.push({
|
|
381
|
+
type: 'naming_convention',
|
|
382
|
+
severity: 'info',
|
|
383
|
+
message: 'Consider using BEM naming convention',
|
|
384
|
+
details: 'BEM (Block__Element--Modifier) creates clear relationships',
|
|
385
|
+
suggestedAction: 'Rename using BEM: .block__element--modifier',
|
|
386
|
+
codeExample: this.suggestBEMName(selector)
|
|
387
|
+
});
|
|
388
|
+
}
|
|
389
|
+
// Framework-specific conventions
|
|
390
|
+
if (framework === 'react' && selector.includes('_')) {
|
|
391
|
+
suggestions.push({
|
|
392
|
+
type: 'naming_convention',
|
|
393
|
+
severity: 'info',
|
|
394
|
+
message: 'React typically uses camelCase for CSS Modules',
|
|
395
|
+
details: 'CSS Modules work better with camelCase class names',
|
|
396
|
+
suggestedAction: 'Use camelCase: .cardHeader instead of .card_header'
|
|
397
|
+
});
|
|
398
|
+
}
|
|
399
|
+
return { suggestions };
|
|
400
|
+
}
|
|
401
|
+
/**
|
|
402
|
+
* Find CSS rules that can be safely removed
|
|
403
|
+
*/
|
|
404
|
+
findRemovableCandidates(newRule, existingRules) {
|
|
405
|
+
const removable = [];
|
|
406
|
+
for (const existing of existingRules) {
|
|
407
|
+
// If new rule completely overrides existing
|
|
408
|
+
if (this.completelyOverrides(newRule, existing)) {
|
|
409
|
+
removable.push(existing);
|
|
410
|
+
}
|
|
411
|
+
// Dead selectors (would need DOM analysis in real implementation)
|
|
412
|
+
if (this.isLikelyUnused(existing)) {
|
|
413
|
+
removable.push(existing);
|
|
414
|
+
}
|
|
415
|
+
}
|
|
416
|
+
return removable;
|
|
417
|
+
}
|
|
418
|
+
// ============================================================================
|
|
419
|
+
// HELPER METHODS
|
|
420
|
+
// ============================================================================
|
|
421
|
+
generateRuleId(rule) {
|
|
422
|
+
const hash = this.simpleHash(rule.selector + JSON.stringify(rule.properties));
|
|
423
|
+
return `css-${hash}`;
|
|
424
|
+
}
|
|
425
|
+
simpleHash(str) {
|
|
426
|
+
let hash = 0;
|
|
427
|
+
for (let i = 0; i < str.length; i++) {
|
|
428
|
+
const char = str.charCodeAt(i);
|
|
429
|
+
hash = ((hash << 5) - hash) + char;
|
|
430
|
+
hash = hash & hash;
|
|
431
|
+
}
|
|
432
|
+
return Math.abs(hash).toString(16).substring(0, 8);
|
|
433
|
+
}
|
|
434
|
+
calculateSimilarity(props1, props2) {
|
|
435
|
+
const keys1 = Object.keys(props1);
|
|
436
|
+
const keys2 = Object.keys(props2);
|
|
437
|
+
const allKeys = new Set([...keys1, ...keys2]);
|
|
438
|
+
if (allKeys.size === 0)
|
|
439
|
+
return 0;
|
|
440
|
+
let matches = 0;
|
|
441
|
+
for (const key of allKeys) {
|
|
442
|
+
if (props1[key] === props2[key]) {
|
|
443
|
+
matches++;
|
|
444
|
+
}
|
|
445
|
+
}
|
|
446
|
+
return matches / allKeys.size;
|
|
447
|
+
}
|
|
448
|
+
calculateSpecificity(selector) {
|
|
449
|
+
const ids = (selector.match(/#/g) || []).length;
|
|
450
|
+
const classes = (selector.match(/\./g) || []).length;
|
|
451
|
+
const elements = (selector.match(/^[a-z]+|[\s>+~][a-z]+/gi) || []).length;
|
|
452
|
+
const depth = selector.split(/[\s>+~]/).length;
|
|
453
|
+
return { ids, classes, elements, depth };
|
|
454
|
+
}
|
|
455
|
+
isReusablePattern(rule) {
|
|
456
|
+
const props = Object.keys(rule.properties);
|
|
457
|
+
// Button patterns
|
|
458
|
+
if (props.includes('padding') && props.includes('border-radius') &&
|
|
459
|
+
(props.includes('background') || props.includes('background-color'))) {
|
|
460
|
+
return true;
|
|
461
|
+
}
|
|
462
|
+
// Card patterns
|
|
463
|
+
if (props.includes('box-shadow') && props.includes('border-radius') &&
|
|
464
|
+
props.includes('padding')) {
|
|
465
|
+
return true;
|
|
466
|
+
}
|
|
467
|
+
return false;
|
|
468
|
+
}
|
|
469
|
+
isTypographyRule(rule) {
|
|
470
|
+
const typographyProps = ['font-family', 'font-size', 'font-weight', 'line-height', 'letter-spacing'];
|
|
471
|
+
const props = Object.keys(rule.properties);
|
|
472
|
+
const typographyCount = props.filter(p => typographyProps.includes(p)).length;
|
|
473
|
+
return typographyCount >= 2;
|
|
474
|
+
}
|
|
475
|
+
isButtonPattern(rule) {
|
|
476
|
+
const props = Object.keys(rule.properties);
|
|
477
|
+
const buttonIndicators = ['cursor', 'background', 'border', 'padding', 'border-radius'];
|
|
478
|
+
const matchCount = props.filter(p => buttonIndicators.some(b => p.includes(b))).length;
|
|
479
|
+
return matchCount >= 3 && rule.properties['cursor'] === 'pointer';
|
|
480
|
+
}
|
|
481
|
+
generateExternalizeExample(rule, componentName) {
|
|
482
|
+
const className = componentName
|
|
483
|
+
? `${componentName.toLowerCase()}-style`
|
|
484
|
+
: 'custom-class';
|
|
485
|
+
const cssProps = Object.entries(rule.properties)
|
|
486
|
+
.map(([k, v]) => ` ${k}: ${v};`)
|
|
487
|
+
.join('\n');
|
|
488
|
+
return `.${className} {\n${cssProps}\n}`;
|
|
489
|
+
}
|
|
490
|
+
getFontWeightName(value) {
|
|
491
|
+
const weights = {
|
|
492
|
+
'100': 'thin', '200': 'extralight', '300': 'light',
|
|
493
|
+
'400': 'normal', '500': 'medium', '600': 'semibold',
|
|
494
|
+
'700': 'bold', '800': 'extrabold', '900': 'black'
|
|
495
|
+
};
|
|
496
|
+
return weights[value] || value;
|
|
497
|
+
}
|
|
498
|
+
suggestBEMName(selector) {
|
|
499
|
+
const parts = selector.trim().split(/\s+/);
|
|
500
|
+
if (parts.length >= 2) {
|
|
501
|
+
const block = parts[0].replace('.', '');
|
|
502
|
+
const element = parts[parts.length - 1].replace('.', '');
|
|
503
|
+
return `.${block}__${element}`;
|
|
504
|
+
}
|
|
505
|
+
return selector;
|
|
506
|
+
}
|
|
507
|
+
completelyOverrides(newRule, existing) {
|
|
508
|
+
if (newRule.selector !== existing.selector)
|
|
509
|
+
return false;
|
|
510
|
+
const existingProps = Object.keys(existing.properties);
|
|
511
|
+
const newProps = Object.keys(newRule.properties);
|
|
512
|
+
return existingProps.every(prop => newProps.includes(prop));
|
|
513
|
+
}
|
|
514
|
+
isLikelyUnused(rule) {
|
|
515
|
+
// Heuristics for likely unused rules
|
|
516
|
+
const selector = rule.selector;
|
|
517
|
+
// Very specific selectors that might be stale
|
|
518
|
+
if (selector.includes('[data-v-') || selector.includes('[_ngcontent-')) {
|
|
519
|
+
return true; // Likely framework-generated and orphaned
|
|
520
|
+
}
|
|
521
|
+
return false;
|
|
522
|
+
}
|
|
523
|
+
prioritizeSuggestions(suggestions) {
|
|
524
|
+
const severityOrder = { error: 0, warning: 1, info: 2, suggestion: 3 };
|
|
525
|
+
return suggestions.sort((a, b) => severityOrder[a.severity] - severityOrder[b.severity]);
|
|
526
|
+
}
|
|
527
|
+
generateSummary(_rule, suggestions, duplicates, shouldExternalize, shouldMakeGlobal) {
|
|
528
|
+
const parts = [];
|
|
529
|
+
if (duplicates.length > 0) {
|
|
530
|
+
parts.push(`Found ${duplicates.length} duplicate rule(s)`);
|
|
531
|
+
}
|
|
532
|
+
if (shouldExternalize) {
|
|
533
|
+
parts.push('Should be moved to external stylesheet');
|
|
534
|
+
}
|
|
535
|
+
if (shouldMakeGlobal) {
|
|
536
|
+
parts.push('Consider making global');
|
|
537
|
+
}
|
|
538
|
+
const errors = suggestions.filter(s => s.severity === 'error').length;
|
|
539
|
+
const warnings = suggestions.filter(s => s.severity === 'warning').length;
|
|
540
|
+
if (errors > 0) {
|
|
541
|
+
parts.push(`${errors} error(s)`);
|
|
542
|
+
}
|
|
543
|
+
if (warnings > 0) {
|
|
544
|
+
parts.push(`${warnings} warning(s)`);
|
|
545
|
+
}
|
|
546
|
+
if (parts.length === 0) {
|
|
547
|
+
return 'CSS rule looks good';
|
|
548
|
+
}
|
|
549
|
+
return parts.join('. ') + '.';
|
|
550
|
+
}
|
|
551
|
+
initializeKnownPatterns() {
|
|
552
|
+
// Add common utility classes
|
|
553
|
+
const utilities = [
|
|
554
|
+
'flex', 'grid', 'hidden', 'block', 'inline', 'inline-block',
|
|
555
|
+
'relative', 'absolute', 'fixed', 'sticky',
|
|
556
|
+
'text-center', 'text-left', 'text-right',
|
|
557
|
+
'font-bold', 'font-normal', 'font-medium'
|
|
558
|
+
];
|
|
559
|
+
utilities.forEach(u => this.knownUtilityClasses.add(u));
|
|
560
|
+
}
|
|
561
|
+
/**
|
|
562
|
+
* Map VARIABLE_CANDIDATES types to design token categories
|
|
563
|
+
*/
|
|
564
|
+
mapTypeToTokenCategory(candidateType) {
|
|
565
|
+
const mapping = {
|
|
566
|
+
'color': 'color',
|
|
567
|
+
'spacing': 'spacing',
|
|
568
|
+
'font-size': 'font-size',
|
|
569
|
+
'font-weight': 'color', // No direct match in token categories
|
|
570
|
+
'duration': 'transition',
|
|
571
|
+
'easing': 'transition'
|
|
572
|
+
};
|
|
573
|
+
return mapping[candidateType] || null;
|
|
574
|
+
}
|
|
575
|
+
}
|
|
576
|
+
// Export singleton
|
|
577
|
+
export const cssAnalyzer = new CSSAnalyzer();
|
|
578
|
+
//# sourceMappingURL=CSSAnalyzer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CSSAnalyzer.js","sourceRoot":"","sources":["../../src/analyzers/CSSAnalyzer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/analyzers/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EACL,WAAW,EACX,WAAW,EACX,KAAK,OAAO,EACZ,KAAK,kBAAkB,EACvB,KAAK,aAAa,EAClB,KAAK,iBAAiB,EACvB,MAAM,kBAAkB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/analyzers/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EACL,WAAW,EACX,WAAW,EAKZ,MAAM,kBAAkB,CAAC"}
|
package/dist/cli.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AACA;;;;GAIG"}
|