@buoy-design/cli 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/commands/audit.d.ts +3 -0
- package/dist/commands/audit.d.ts.map +1 -0
- package/dist/commands/audit.js +235 -0
- package/dist/commands/audit.js.map +1 -0
- package/dist/commands/baseline.d.ts +39 -0
- package/dist/commands/baseline.d.ts.map +1 -0
- package/dist/commands/baseline.js +298 -0
- package/dist/commands/baseline.js.map +1 -0
- package/dist/commands/check.d.ts +16 -0
- package/dist/commands/check.d.ts.map +1 -0
- package/dist/commands/check.js +168 -0
- package/dist/commands/check.js.map +1 -0
- package/dist/commands/ci.d.ts +2 -2
- package/dist/commands/ci.d.ts.map +1 -1
- package/dist/commands/ci.js +124 -142
- package/dist/commands/ci.js.map +1 -1
- package/dist/commands/compare.d.ts +3 -0
- package/dist/commands/compare.d.ts.map +1 -0
- package/dist/commands/compare.js +170 -0
- package/dist/commands/compare.js.map +1 -0
- package/dist/commands/drift.d.ts +1 -1
- package/dist/commands/drift.d.ts.map +1 -1
- package/dist/commands/drift.js +79 -121
- package/dist/commands/drift.js.map +1 -1
- package/dist/commands/explain.d.ts +3 -0
- package/dist/commands/explain.d.ts.map +1 -0
- package/dist/commands/explain.js +212 -0
- package/dist/commands/explain.js.map +1 -0
- package/dist/commands/graph.d.ts +3 -0
- package/dist/commands/graph.d.ts.map +1 -0
- package/dist/commands/graph.js +430 -0
- package/dist/commands/graph.js.map +1 -0
- package/dist/commands/index.d.ts +14 -8
- package/dist/commands/index.d.ts.map +1 -1
- package/dist/commands/index.js +14 -8
- package/dist/commands/index.js.map +1 -1
- package/dist/commands/init.d.ts +1 -1
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +404 -237
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/plugins.d.ts.map +1 -1
- package/dist/commands/plugins.js +32 -41
- package/dist/commands/plugins.js.map +1 -1
- package/dist/commands/scan.d.ts +1 -1
- package/dist/commands/scan.d.ts.map +1 -1
- package/dist/commands/scan.js +107 -219
- package/dist/commands/scan.js.map +1 -1
- package/dist/commands/status.d.ts +1 -1
- package/dist/commands/status.d.ts.map +1 -1
- package/dist/commands/status.js +114 -122
- package/dist/commands/status.js.map +1 -1
- package/dist/commands/tokens.d.ts +3 -0
- package/dist/commands/tokens.d.ts.map +1 -0
- package/dist/commands/tokens.js +261 -0
- package/dist/commands/tokens.js.map +1 -0
- package/dist/config/auto-detect.d.ts +21 -0
- package/dist/config/auto-detect.d.ts.map +1 -0
- package/dist/config/auto-detect.js +278 -0
- package/dist/config/auto-detect.js.map +1 -0
- package/dist/config/loader.d.ts.map +1 -1
- package/dist/config/loader.js +17 -0
- package/dist/config/loader.js.map +1 -1
- package/dist/config/schema.d.ts +63 -63
- package/dist/config/schema.d.ts.map +1 -1
- package/dist/config/schema.js +20 -2
- package/dist/config/schema.js.map +1 -1
- package/dist/constants.d.ts +36 -0
- package/dist/constants.d.ts.map +1 -0
- package/dist/constants.js +37 -0
- package/dist/constants.js.map +1 -0
- package/dist/detect/frameworks.d.ts +11 -2
- package/dist/detect/frameworks.d.ts.map +1 -1
- package/dist/detect/frameworks.js +78 -78
- package/dist/detect/frameworks.js.map +1 -1
- package/dist/detect/index.d.ts +1 -0
- package/dist/detect/index.d.ts.map +1 -1
- package/dist/detect/index.js +3 -0
- package/dist/detect/index.js.map +1 -1
- package/dist/detect/monorepo-patterns.d.ts +54 -0
- package/dist/detect/monorepo-patterns.d.ts.map +1 -0
- package/dist/detect/monorepo-patterns.js +209 -0
- package/dist/detect/monorepo-patterns.js.map +1 -0
- package/dist/detect/project-detector.d.ts +1 -1
- package/dist/detect/project-detector.d.ts.map +1 -1
- package/dist/detect/project-detector.js +132 -0
- package/dist/detect/project-detector.js.map +1 -1
- package/dist/explain/agents.d.ts +31 -0
- package/dist/explain/agents.d.ts.map +1 -0
- package/dist/explain/agents.js +507 -0
- package/dist/explain/agents.js.map +1 -0
- package/dist/hooks/index.d.ts +26 -0
- package/dist/hooks/index.d.ts.map +1 -0
- package/dist/hooks/index.js +283 -0
- package/dist/hooks/index.js.map +1 -0
- package/dist/index.d.ts +3 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +13 -7
- package/dist/index.js.map +1 -1
- package/dist/integrations/github-formatter.d.ts +55 -0
- package/dist/integrations/github-formatter.d.ts.map +1 -0
- package/dist/integrations/github-formatter.js +391 -0
- package/dist/integrations/github-formatter.js.map +1 -0
- package/dist/integrations/github.d.ts +95 -0
- package/dist/integrations/github.d.ts.map +1 -0
- package/dist/integrations/github.js +281 -0
- package/dist/integrations/github.js.map +1 -0
- package/dist/integrations/index.d.ts +4 -0
- package/dist/integrations/index.d.ts.map +1 -0
- package/dist/integrations/index.js +4 -0
- package/dist/integrations/index.js.map +1 -0
- package/dist/output/formatters.d.ts.map +1 -1
- package/dist/output/formatters.js +5 -10
- package/dist/output/formatters.js.map +1 -1
- package/dist/scan/orchestrator.d.ts +76 -0
- package/dist/scan/orchestrator.d.ts.map +1 -0
- package/dist/scan/orchestrator.js +247 -0
- package/dist/scan/orchestrator.js.map +1 -0
- package/dist/services/ai-analysis.d.ts +54 -0
- package/dist/services/ai-analysis.d.ts.map +1 -0
- package/dist/services/ai-analysis.js +239 -0
- package/dist/services/ai-analysis.js.map +1 -0
- package/dist/services/drift-analysis.d.ts +77 -0
- package/dist/services/drift-analysis.d.ts.map +1 -0
- package/dist/services/drift-analysis.js +145 -0
- package/dist/services/drift-analysis.js.map +1 -0
- package/package.json +17 -5
- package/dist/commands/__tests__/ci.test.d.ts +0 -2
- package/dist/commands/__tests__/ci.test.d.ts.map +0 -1
- package/dist/commands/__tests__/ci.test.js +0 -33
- package/dist/commands/__tests__/ci.test.js.map +0 -1
- package/dist/commands/bootstrap.d.ts +0 -3
- package/dist/commands/bootstrap.d.ts.map +0 -1
- package/dist/commands/bootstrap.js +0 -458
- package/dist/commands/bootstrap.js.map +0 -1
- package/dist/plugins/index.d.ts +0 -3
- package/dist/plugins/index.d.ts.map +0 -1
- package/dist/plugins/index.js +0 -3
- package/dist/plugins/index.js.map +0 -1
- package/dist/plugins/loader.d.ts +0 -11
- package/dist/plugins/loader.d.ts.map +0 -1
- package/dist/plugins/loader.js +0 -77
- package/dist/plugins/loader.js.map +0 -1
- package/dist/plugins/registry.d.ts +0 -15
- package/dist/plugins/registry.d.ts.map +0 -1
- package/dist/plugins/registry.js +0 -32
- package/dist/plugins/registry.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"audit.d.ts","sourceRoot":"","sources":["../../src/commands/audit.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAqBpC,wBAAgB,kBAAkB,IAAI,OAAO,CAqI5C"}
|
|
@@ -0,0 +1,235 @@
|
|
|
1
|
+
import { Command } from 'commander';
|
|
2
|
+
import chalk from 'chalk';
|
|
3
|
+
import { glob } from 'glob';
|
|
4
|
+
import { readFile } from 'fs/promises';
|
|
5
|
+
import { spinner, error, header, keyValue, newline, setJsonMode, } from '../output/reporters.js';
|
|
6
|
+
import { generateAuditReport, findCloseMatches, } from '@buoy-design/core';
|
|
7
|
+
import { extractStyles, extractCssFileStyles } from '@buoy-design/scanners';
|
|
8
|
+
import { parseCssValues } from '@buoy-design/core';
|
|
9
|
+
export function createAuditCommand() {
|
|
10
|
+
const cmd = new Command('audit')
|
|
11
|
+
.description('Audit your codebase for design system health')
|
|
12
|
+
.option('--json', 'Output as JSON')
|
|
13
|
+
.option('--tokens <path>', 'Path to design tokens file for close-match detection')
|
|
14
|
+
.action(async (options) => {
|
|
15
|
+
if (options.json) {
|
|
16
|
+
setJsonMode(true);
|
|
17
|
+
}
|
|
18
|
+
const spin = spinner('Scanning codebase...');
|
|
19
|
+
try {
|
|
20
|
+
const cwd = process.cwd();
|
|
21
|
+
// Find all source files
|
|
22
|
+
spin.text = 'Finding source files...';
|
|
23
|
+
const patterns = [
|
|
24
|
+
'**/*.tsx',
|
|
25
|
+
'**/*.jsx',
|
|
26
|
+
'**/*.vue',
|
|
27
|
+
'**/*.svelte',
|
|
28
|
+
'**/*.css',
|
|
29
|
+
'**/*.scss',
|
|
30
|
+
];
|
|
31
|
+
const ignore = [
|
|
32
|
+
'**/node_modules/**',
|
|
33
|
+
'**/dist/**',
|
|
34
|
+
'**/build/**',
|
|
35
|
+
'**/*.min.css',
|
|
36
|
+
'**/*.test.*',
|
|
37
|
+
'**/*.spec.*',
|
|
38
|
+
'**/*.stories.*',
|
|
39
|
+
];
|
|
40
|
+
const files = [];
|
|
41
|
+
for (const pattern of patterns) {
|
|
42
|
+
const matches = await glob(pattern, { cwd, ignore, absolute: true });
|
|
43
|
+
files.push(...matches);
|
|
44
|
+
}
|
|
45
|
+
if (files.length === 0) {
|
|
46
|
+
spin.stop();
|
|
47
|
+
error('No source files found');
|
|
48
|
+
return;
|
|
49
|
+
}
|
|
50
|
+
// Extract values from all files
|
|
51
|
+
spin.text = `Scanning ${files.length} files...`;
|
|
52
|
+
const extractedValues = [];
|
|
53
|
+
for (const filePath of files) {
|
|
54
|
+
try {
|
|
55
|
+
const content = await readFile(filePath, 'utf-8');
|
|
56
|
+
const relativePath = filePath.replace(cwd + '/', '');
|
|
57
|
+
// Determine file type
|
|
58
|
+
const ext = filePath.split('.').pop()?.toLowerCase();
|
|
59
|
+
const isCss = ext === 'css' || ext === 'scss';
|
|
60
|
+
const styles = isCss
|
|
61
|
+
? extractCssFileStyles(content)
|
|
62
|
+
: extractStyles(content, ext === 'vue' ? 'vue' : ext === 'svelte' ? 'svelte' : 'react');
|
|
63
|
+
for (const style of styles) {
|
|
64
|
+
const { values } = parseCssValues(style.css);
|
|
65
|
+
for (const v of values) {
|
|
66
|
+
extractedValues.push({
|
|
67
|
+
category: mapCategory(v.property),
|
|
68
|
+
value: v.value,
|
|
69
|
+
file: relativePath,
|
|
70
|
+
line: 1, // Line info not available from style extraction
|
|
71
|
+
});
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
catch {
|
|
76
|
+
// Skip files that can't be processed
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
spin.stop();
|
|
80
|
+
if (extractedValues.length === 0) {
|
|
81
|
+
console.log(chalk.green('✓ No hardcoded design values found!'));
|
|
82
|
+
console.log(chalk.dim('Your codebase appears to be using design tokens correctly.'));
|
|
83
|
+
return;
|
|
84
|
+
}
|
|
85
|
+
// Generate report
|
|
86
|
+
const report = generateAuditReport(extractedValues);
|
|
87
|
+
// Load design tokens for close-match detection if provided
|
|
88
|
+
if (options.tokens) {
|
|
89
|
+
try {
|
|
90
|
+
const tokenContent = await readFile(options.tokens, 'utf-8');
|
|
91
|
+
const tokenData = JSON.parse(tokenContent);
|
|
92
|
+
// Extract token values and find close matches
|
|
93
|
+
const colorTokens = extractTokenValues(tokenData, 'color');
|
|
94
|
+
const spacingTokens = extractTokenValues(tokenData, 'spacing');
|
|
95
|
+
const colorValues = extractedValues
|
|
96
|
+
.filter((v) => v.category === 'color')
|
|
97
|
+
.map((v) => v.value);
|
|
98
|
+
const spacingValues = extractedValues
|
|
99
|
+
.filter((v) => v.category === 'spacing')
|
|
100
|
+
.map((v) => v.value);
|
|
101
|
+
report.closeMatches = [
|
|
102
|
+
...findCloseMatches(colorValues, colorTokens, 'color'),
|
|
103
|
+
...findCloseMatches(spacingValues, spacingTokens, 'spacing'),
|
|
104
|
+
];
|
|
105
|
+
}
|
|
106
|
+
catch {
|
|
107
|
+
// Ignore token loading errors
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
// Output
|
|
111
|
+
if (options.json) {
|
|
112
|
+
console.log(JSON.stringify(report, null, 2));
|
|
113
|
+
return;
|
|
114
|
+
}
|
|
115
|
+
printReport(report);
|
|
116
|
+
}
|
|
117
|
+
catch (err) {
|
|
118
|
+
spin.stop();
|
|
119
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
120
|
+
error(`Audit failed: ${message}`);
|
|
121
|
+
process.exit(1);
|
|
122
|
+
}
|
|
123
|
+
});
|
|
124
|
+
return cmd;
|
|
125
|
+
}
|
|
126
|
+
function mapCategory(property) {
|
|
127
|
+
const colorProps = ['color', 'background', 'background-color', 'border-color', 'fill', 'stroke'];
|
|
128
|
+
const spacingProps = ['padding', 'margin', 'gap', 'top', 'right', 'bottom', 'left', 'width', 'height'];
|
|
129
|
+
const radiusProps = ['border-radius'];
|
|
130
|
+
const typographyProps = ['font-size', 'line-height', 'font-weight', 'font-family'];
|
|
131
|
+
const propLower = property.toLowerCase();
|
|
132
|
+
if (colorProps.some((p) => propLower.includes(p)))
|
|
133
|
+
return 'color';
|
|
134
|
+
if (radiusProps.some((p) => propLower.includes(p)))
|
|
135
|
+
return 'radius';
|
|
136
|
+
if (typographyProps.some((p) => propLower.includes(p)))
|
|
137
|
+
return 'typography';
|
|
138
|
+
if (spacingProps.some((p) => propLower.includes(p)))
|
|
139
|
+
return 'spacing';
|
|
140
|
+
return 'spacing'; // Default
|
|
141
|
+
}
|
|
142
|
+
function extractTokenValues(tokenData, _category) {
|
|
143
|
+
const values = [];
|
|
144
|
+
function traverse(obj) {
|
|
145
|
+
if (typeof obj !== 'object' || obj === null)
|
|
146
|
+
return;
|
|
147
|
+
for (const [key, value] of Object.entries(obj)) {
|
|
148
|
+
if (key === '$value' || key === 'value') {
|
|
149
|
+
if (typeof value === 'string') {
|
|
150
|
+
values.push(value);
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
else if (typeof value === 'object') {
|
|
154
|
+
traverse(value);
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
traverse(tokenData);
|
|
159
|
+
return values;
|
|
160
|
+
}
|
|
161
|
+
function printReport(report) {
|
|
162
|
+
newline();
|
|
163
|
+
header('Design System Health Report');
|
|
164
|
+
newline();
|
|
165
|
+
// Score with color coding
|
|
166
|
+
const scoreColor = report.score >= 80 ? chalk.green :
|
|
167
|
+
report.score >= 50 ? chalk.yellow :
|
|
168
|
+
chalk.red;
|
|
169
|
+
const scoreLabel = report.score >= 80 ? 'Good' :
|
|
170
|
+
report.score >= 50 ? 'Fair' :
|
|
171
|
+
report.score < 30 ? 'Poor' : 'Needs Work';
|
|
172
|
+
console.log(`Overall Score: ${scoreColor.bold(`${report.score}/100`)} (${scoreLabel})`);
|
|
173
|
+
newline();
|
|
174
|
+
// Category breakdown
|
|
175
|
+
for (const [category, stats] of Object.entries(report.categories)) {
|
|
176
|
+
const expected = getExpectedCount(category);
|
|
177
|
+
const drift = stats.uniqueCount - expected;
|
|
178
|
+
const driftColor = drift > 5 ? chalk.red : drift > 0 ? chalk.yellow : chalk.green;
|
|
179
|
+
console.log(chalk.bold(capitalize(category)));
|
|
180
|
+
keyValue(' Found', `${stats.uniqueCount} unique values`);
|
|
181
|
+
keyValue(' Expected', `~${expected}`);
|
|
182
|
+
if (drift > 0) {
|
|
183
|
+
keyValue(' Drift', driftColor(`+${drift} extra values`));
|
|
184
|
+
}
|
|
185
|
+
// Most common unlisted
|
|
186
|
+
if (stats.mostCommon.length > 0) {
|
|
187
|
+
console.log(chalk.dim(' Most common:'));
|
|
188
|
+
for (const { value, count } of stats.mostCommon.slice(0, 3)) {
|
|
189
|
+
console.log(chalk.dim(` ${value} (${count} usages)`));
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
newline();
|
|
193
|
+
}
|
|
194
|
+
// Close matches (typos)
|
|
195
|
+
if (report.closeMatches.length > 0) {
|
|
196
|
+
console.log(chalk.bold.yellow('Possible Typos'));
|
|
197
|
+
for (const match of report.closeMatches.slice(0, 5)) {
|
|
198
|
+
console.log(` ${chalk.yellow('⚠')} ${match.value} → close to ${chalk.cyan(match.closeTo)}`);
|
|
199
|
+
}
|
|
200
|
+
if (report.closeMatches.length > 5) {
|
|
201
|
+
console.log(chalk.dim(` ... and ${report.closeMatches.length - 5} more`));
|
|
202
|
+
}
|
|
203
|
+
newline();
|
|
204
|
+
}
|
|
205
|
+
// Worst files
|
|
206
|
+
if (report.worstFiles.length > 0) {
|
|
207
|
+
console.log(chalk.bold('Worst Offenders'));
|
|
208
|
+
for (const { file, issueCount } of report.worstFiles.slice(0, 5)) {
|
|
209
|
+
console.log(` ${chalk.red(issueCount.toString().padStart(3))} issues ${file}`);
|
|
210
|
+
}
|
|
211
|
+
newline();
|
|
212
|
+
}
|
|
213
|
+
// Summary
|
|
214
|
+
console.log(chalk.dim('─'.repeat(50)));
|
|
215
|
+
keyValue('Total unique values', String(report.totals.uniqueValues));
|
|
216
|
+
keyValue('Total usages', String(report.totals.totalUsages));
|
|
217
|
+
keyValue('Files affected', String(report.totals.filesAffected));
|
|
218
|
+
newline();
|
|
219
|
+
if (report.score < 50) {
|
|
220
|
+
console.log(chalk.yellow('Run `buoy drift check` for detailed fixes.'));
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
function getExpectedCount(category) {
|
|
224
|
+
const expected = {
|
|
225
|
+
color: 12,
|
|
226
|
+
spacing: 8,
|
|
227
|
+
typography: 6,
|
|
228
|
+
radius: 4,
|
|
229
|
+
};
|
|
230
|
+
return expected[category] || 10;
|
|
231
|
+
}
|
|
232
|
+
function capitalize(str) {
|
|
233
|
+
return str.charAt(0).toUpperCase() + str.slice(1);
|
|
234
|
+
}
|
|
235
|
+
//# sourceMappingURL=audit.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"audit.js","sourceRoot":"","sources":["../../src/commands/audit.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { Command } from "commander";
|
|
2
|
+
import type { DriftSignal } from "@buoy-design/core";
|
|
3
|
+
export interface Baseline {
|
|
4
|
+
version: 1;
|
|
5
|
+
createdAt: string;
|
|
6
|
+
updatedAt: string;
|
|
7
|
+
driftIds: string[];
|
|
8
|
+
summary: {
|
|
9
|
+
critical: number;
|
|
10
|
+
warning: number;
|
|
11
|
+
info: number;
|
|
12
|
+
total: number;
|
|
13
|
+
};
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Get the path to the baseline file
|
|
17
|
+
*/
|
|
18
|
+
export declare function getBaselinePath(projectRoot?: string): string;
|
|
19
|
+
/**
|
|
20
|
+
* Load existing baseline or return null if none exists
|
|
21
|
+
*/
|
|
22
|
+
export declare function loadBaseline(projectRoot?: string): Promise<Baseline | null>;
|
|
23
|
+
/**
|
|
24
|
+
* Save baseline to disk
|
|
25
|
+
*/
|
|
26
|
+
export declare function saveBaseline(baseline: Baseline, projectRoot?: string): Promise<void>;
|
|
27
|
+
/**
|
|
28
|
+
* Create baseline from current drift signals
|
|
29
|
+
*/
|
|
30
|
+
export declare function createBaseline(drifts: DriftSignal[]): Baseline;
|
|
31
|
+
/**
|
|
32
|
+
* Filter out baselined drifts from results
|
|
33
|
+
*/
|
|
34
|
+
export declare function filterBaseline(drifts: DriftSignal[], baseline: Baseline | null): {
|
|
35
|
+
newDrifts: DriftSignal[];
|
|
36
|
+
baselinedCount: number;
|
|
37
|
+
};
|
|
38
|
+
export declare function createBaselineCommand(): Command;
|
|
39
|
+
//# sourceMappingURL=baseline.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"baseline.d.ts","sourceRoot":"","sources":["../../src/commands/baseline.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAiBpC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAKrD,MAAM,WAAW,QAAQ;IACvB,OAAO,EAAE,CAAC,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,OAAO,EAAE;QACP,QAAQ,EAAE,MAAM,CAAC;QACjB,OAAO,EAAE,MAAM,CAAC;QAChB,IAAI,EAAE,MAAM,CAAC;QACb,KAAK,EAAE,MAAM,CAAC;KACf,CAAC;CACH;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,WAAW,GAAE,MAAsB,GAAG,MAAM,CAE3E;AAED;;GAEG;AACH,wBAAsB,YAAY,CAChC,WAAW,GAAE,MAAsB,GAClC,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC,CAc1B;AAED;;GAEG;AACH,wBAAsB,YAAY,CAChC,QAAQ,EAAE,QAAQ,EAClB,WAAW,GAAE,MAAsB,GAClC,OAAO,CAAC,IAAI,CAAC,CAUf;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,WAAW,EAAE,GAAG,QAAQ,CAe9D;AAED;;GAEG;AACH,wBAAgB,cAAc,CAC5B,MAAM,EAAE,WAAW,EAAE,EACrB,QAAQ,EAAE,QAAQ,GAAG,IAAI,GACxB;IACD,SAAS,EAAE,WAAW,EAAE,CAAC;IACzB,cAAc,EAAE,MAAM,CAAC;CACxB,CAUA;AAED,wBAAgB,qBAAqB,IAAI,OAAO,CA4R/C"}
|
|
@@ -0,0 +1,298 @@
|
|
|
1
|
+
import { Command } from "commander";
|
|
2
|
+
import { readFile, writeFile, mkdir } from "fs/promises";
|
|
3
|
+
import { existsSync } from "fs";
|
|
4
|
+
import { join, dirname } from "path";
|
|
5
|
+
import { loadConfig } from "../config/loader.js";
|
|
6
|
+
import { spinner, success, error, info, warning, header, keyValue, newline, setJsonMode, } from "../output/reporters.js";
|
|
7
|
+
import { formatJson } from "../output/formatters.js";
|
|
8
|
+
const BASELINE_DIR = ".buoy";
|
|
9
|
+
const BASELINE_FILE = "baseline.json";
|
|
10
|
+
/**
|
|
11
|
+
* Get the path to the baseline file
|
|
12
|
+
*/
|
|
13
|
+
export function getBaselinePath(projectRoot = process.cwd()) {
|
|
14
|
+
return join(projectRoot, BASELINE_DIR, BASELINE_FILE);
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Load existing baseline or return null if none exists
|
|
18
|
+
*/
|
|
19
|
+
export async function loadBaseline(projectRoot = process.cwd()) {
|
|
20
|
+
const baselinePath = getBaselinePath(projectRoot);
|
|
21
|
+
if (!existsSync(baselinePath)) {
|
|
22
|
+
return null;
|
|
23
|
+
}
|
|
24
|
+
try {
|
|
25
|
+
const content = await readFile(baselinePath, "utf-8");
|
|
26
|
+
const baseline = JSON.parse(content);
|
|
27
|
+
return baseline;
|
|
28
|
+
}
|
|
29
|
+
catch {
|
|
30
|
+
return null;
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Save baseline to disk
|
|
35
|
+
*/
|
|
36
|
+
export async function saveBaseline(baseline, projectRoot = process.cwd()) {
|
|
37
|
+
const baselinePath = getBaselinePath(projectRoot);
|
|
38
|
+
const baselineDir = dirname(baselinePath);
|
|
39
|
+
// Ensure directory exists
|
|
40
|
+
if (!existsSync(baselineDir)) {
|
|
41
|
+
await mkdir(baselineDir, { recursive: true });
|
|
42
|
+
}
|
|
43
|
+
await writeFile(baselinePath, JSON.stringify(baseline, null, 2), "utf-8");
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Create baseline from current drift signals
|
|
47
|
+
*/
|
|
48
|
+
export function createBaseline(drifts) {
|
|
49
|
+
const now = new Date().toISOString();
|
|
50
|
+
return {
|
|
51
|
+
version: 1,
|
|
52
|
+
createdAt: now,
|
|
53
|
+
updatedAt: now,
|
|
54
|
+
driftIds: drifts.map((d) => d.id),
|
|
55
|
+
summary: {
|
|
56
|
+
critical: drifts.filter((d) => d.severity === "critical").length,
|
|
57
|
+
warning: drifts.filter((d) => d.severity === "warning").length,
|
|
58
|
+
info: drifts.filter((d) => d.severity === "info").length,
|
|
59
|
+
total: drifts.length,
|
|
60
|
+
},
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Filter out baselined drifts from results
|
|
65
|
+
*/
|
|
66
|
+
export function filterBaseline(drifts, baseline) {
|
|
67
|
+
if (!baseline) {
|
|
68
|
+
return { newDrifts: drifts, baselinedCount: 0 };
|
|
69
|
+
}
|
|
70
|
+
const baselineSet = new Set(baseline.driftIds);
|
|
71
|
+
const newDrifts = drifts.filter((d) => !baselineSet.has(d.id));
|
|
72
|
+
const baselinedCount = drifts.length - newDrifts.length;
|
|
73
|
+
return { newDrifts, baselinedCount };
|
|
74
|
+
}
|
|
75
|
+
export function createBaselineCommand() {
|
|
76
|
+
const cmd = new Command("baseline").description("Manage drift baseline for existing projects");
|
|
77
|
+
// baseline create
|
|
78
|
+
cmd
|
|
79
|
+
.command("create")
|
|
80
|
+
.description("Create baseline from current drift signals (hides existing issues)")
|
|
81
|
+
.option("--json", "Output as JSON")
|
|
82
|
+
.option("-f, --force", "Overwrite existing baseline without prompting")
|
|
83
|
+
.action(async (options) => {
|
|
84
|
+
if (options.json) {
|
|
85
|
+
setJsonMode(true);
|
|
86
|
+
}
|
|
87
|
+
const spin = spinner("Loading configuration...");
|
|
88
|
+
try {
|
|
89
|
+
const { config } = await loadConfig();
|
|
90
|
+
// Check for existing baseline
|
|
91
|
+
const existingBaseline = await loadBaseline();
|
|
92
|
+
if (existingBaseline && !options.force) {
|
|
93
|
+
spin.stop();
|
|
94
|
+
warning(`Baseline already exists with ${existingBaseline.summary.total} drifts.`);
|
|
95
|
+
info('Use --force to overwrite, or "buoy baseline update" to add new drifts.');
|
|
96
|
+
return;
|
|
97
|
+
}
|
|
98
|
+
spin.text = "Scanning for current drift...";
|
|
99
|
+
// Import required modules
|
|
100
|
+
const { ReactComponentScanner } = await import("@buoy-design/scanners/git");
|
|
101
|
+
const { SemanticDiffEngine } = await import("@buoy-design/core/analysis");
|
|
102
|
+
// Scan components
|
|
103
|
+
const components = [];
|
|
104
|
+
if (config.sources.react?.enabled) {
|
|
105
|
+
spin.text = "Scanning React components...";
|
|
106
|
+
const scanner = new ReactComponentScanner({
|
|
107
|
+
projectRoot: process.cwd(),
|
|
108
|
+
include: config.sources.react.include,
|
|
109
|
+
exclude: config.sources.react.exclude,
|
|
110
|
+
designSystemPackage: config.sources.react.designSystemPackage,
|
|
111
|
+
});
|
|
112
|
+
const result = await scanner.scan();
|
|
113
|
+
components.push(...result.items);
|
|
114
|
+
}
|
|
115
|
+
spin.text = "Analyzing drift...";
|
|
116
|
+
// Run analysis
|
|
117
|
+
const engine = new SemanticDiffEngine();
|
|
118
|
+
const diffResult = engine.analyzeComponents(components, {
|
|
119
|
+
checkDeprecated: true,
|
|
120
|
+
checkNaming: true,
|
|
121
|
+
checkDocumentation: true,
|
|
122
|
+
});
|
|
123
|
+
const drifts = diffResult.drifts;
|
|
124
|
+
// Create and save baseline
|
|
125
|
+
const baseline = createBaseline(drifts);
|
|
126
|
+
await saveBaseline(baseline);
|
|
127
|
+
spin.stop();
|
|
128
|
+
if (options.json) {
|
|
129
|
+
console.log(formatJson({
|
|
130
|
+
action: "created",
|
|
131
|
+
baseline,
|
|
132
|
+
}));
|
|
133
|
+
return;
|
|
134
|
+
}
|
|
135
|
+
header("Baseline Created");
|
|
136
|
+
newline();
|
|
137
|
+
keyValue("Total drifts baselined", String(baseline.summary.total));
|
|
138
|
+
keyValue("Critical", String(baseline.summary.critical));
|
|
139
|
+
keyValue("Warning", String(baseline.summary.warning));
|
|
140
|
+
keyValue("Info", String(baseline.summary.info));
|
|
141
|
+
newline();
|
|
142
|
+
success(`Baseline saved to ${BASELINE_DIR}/${BASELINE_FILE}`);
|
|
143
|
+
info("Future drift checks will only show NEW issues not in this baseline.");
|
|
144
|
+
info("Tip: Add .buoy/ to .gitignore or commit it to share with your team.");
|
|
145
|
+
}
|
|
146
|
+
catch (err) {
|
|
147
|
+
spin.stop();
|
|
148
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
149
|
+
error(`Failed to create baseline: ${message}`);
|
|
150
|
+
process.exit(1);
|
|
151
|
+
}
|
|
152
|
+
});
|
|
153
|
+
// baseline show
|
|
154
|
+
cmd
|
|
155
|
+
.command("show")
|
|
156
|
+
.description("Show current baseline status")
|
|
157
|
+
.option("--json", "Output as JSON")
|
|
158
|
+
.action(async (options) => {
|
|
159
|
+
if (options.json) {
|
|
160
|
+
setJsonMode(true);
|
|
161
|
+
}
|
|
162
|
+
try {
|
|
163
|
+
const baseline = await loadBaseline();
|
|
164
|
+
if (options.json) {
|
|
165
|
+
console.log(formatJson({ baseline }));
|
|
166
|
+
return;
|
|
167
|
+
}
|
|
168
|
+
if (!baseline) {
|
|
169
|
+
info("No baseline exists for this project.");
|
|
170
|
+
info('Run "buoy baseline create" to establish a baseline.');
|
|
171
|
+
return;
|
|
172
|
+
}
|
|
173
|
+
header("Current Baseline");
|
|
174
|
+
newline();
|
|
175
|
+
keyValue("Created", baseline.createdAt);
|
|
176
|
+
keyValue("Updated", baseline.updatedAt);
|
|
177
|
+
keyValue("Total drifts", String(baseline.summary.total));
|
|
178
|
+
keyValue("Critical", String(baseline.summary.critical));
|
|
179
|
+
keyValue("Warning", String(baseline.summary.warning));
|
|
180
|
+
keyValue("Info", String(baseline.summary.info));
|
|
181
|
+
newline();
|
|
182
|
+
info(`Baseline file: ${getBaselinePath()}`);
|
|
183
|
+
}
|
|
184
|
+
catch (err) {
|
|
185
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
186
|
+
error(`Failed to read baseline: ${message}`);
|
|
187
|
+
process.exit(1);
|
|
188
|
+
}
|
|
189
|
+
});
|
|
190
|
+
// baseline update
|
|
191
|
+
cmd
|
|
192
|
+
.command("update")
|
|
193
|
+
.description("Update baseline to include current drift signals")
|
|
194
|
+
.option("--json", "Output as JSON")
|
|
195
|
+
.action(async (options) => {
|
|
196
|
+
if (options.json) {
|
|
197
|
+
setJsonMode(true);
|
|
198
|
+
}
|
|
199
|
+
const spin = spinner("Loading configuration...");
|
|
200
|
+
try {
|
|
201
|
+
const { config } = await loadConfig();
|
|
202
|
+
const existingBaseline = await loadBaseline();
|
|
203
|
+
spin.text = "Scanning for current drift...";
|
|
204
|
+
// Import required modules
|
|
205
|
+
const { ReactComponentScanner } = await import("@buoy-design/scanners/git");
|
|
206
|
+
const { SemanticDiffEngine } = await import("@buoy-design/core/analysis");
|
|
207
|
+
// Scan components
|
|
208
|
+
const components = [];
|
|
209
|
+
if (config.sources.react?.enabled) {
|
|
210
|
+
spin.text = "Scanning React components...";
|
|
211
|
+
const scanner = new ReactComponentScanner({
|
|
212
|
+
projectRoot: process.cwd(),
|
|
213
|
+
include: config.sources.react.include,
|
|
214
|
+
exclude: config.sources.react.exclude,
|
|
215
|
+
designSystemPackage: config.sources.react.designSystemPackage,
|
|
216
|
+
});
|
|
217
|
+
const result = await scanner.scan();
|
|
218
|
+
components.push(...result.items);
|
|
219
|
+
}
|
|
220
|
+
spin.text = "Analyzing drift...";
|
|
221
|
+
// Run analysis
|
|
222
|
+
const engine = new SemanticDiffEngine();
|
|
223
|
+
const diffResult = engine.analyzeComponents(components, {
|
|
224
|
+
checkDeprecated: true,
|
|
225
|
+
checkNaming: true,
|
|
226
|
+
checkDocumentation: true,
|
|
227
|
+
});
|
|
228
|
+
const drifts = diffResult.drifts;
|
|
229
|
+
// Create updated baseline
|
|
230
|
+
const baseline = createBaseline(drifts);
|
|
231
|
+
if (existingBaseline) {
|
|
232
|
+
baseline.createdAt = existingBaseline.createdAt;
|
|
233
|
+
}
|
|
234
|
+
await saveBaseline(baseline);
|
|
235
|
+
spin.stop();
|
|
236
|
+
const added = existingBaseline
|
|
237
|
+
? baseline.summary.total - existingBaseline.summary.total
|
|
238
|
+
: baseline.summary.total;
|
|
239
|
+
if (options.json) {
|
|
240
|
+
console.log(formatJson({
|
|
241
|
+
action: "updated",
|
|
242
|
+
baseline,
|
|
243
|
+
added,
|
|
244
|
+
}));
|
|
245
|
+
return;
|
|
246
|
+
}
|
|
247
|
+
header("Baseline Updated");
|
|
248
|
+
newline();
|
|
249
|
+
keyValue("Total drifts", String(baseline.summary.total));
|
|
250
|
+
if (existingBaseline) {
|
|
251
|
+
keyValue("Added to baseline", String(Math.max(0, added)));
|
|
252
|
+
}
|
|
253
|
+
newline();
|
|
254
|
+
success("Baseline updated successfully.");
|
|
255
|
+
}
|
|
256
|
+
catch (err) {
|
|
257
|
+
spin.stop();
|
|
258
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
259
|
+
error(`Failed to update baseline: ${message}`);
|
|
260
|
+
process.exit(1);
|
|
261
|
+
}
|
|
262
|
+
});
|
|
263
|
+
// baseline clear
|
|
264
|
+
cmd
|
|
265
|
+
.command("clear")
|
|
266
|
+
.description("Remove baseline (show all drift signals again)")
|
|
267
|
+
.option("--json", "Output as JSON")
|
|
268
|
+
.action(async (options) => {
|
|
269
|
+
if (options.json) {
|
|
270
|
+
setJsonMode(true);
|
|
271
|
+
}
|
|
272
|
+
try {
|
|
273
|
+
const { unlink } = await import("fs/promises");
|
|
274
|
+
const baselinePath = getBaselinePath();
|
|
275
|
+
if (!existsSync(baselinePath)) {
|
|
276
|
+
if (options.json) {
|
|
277
|
+
console.log(formatJson({ action: "cleared", existed: false }));
|
|
278
|
+
return;
|
|
279
|
+
}
|
|
280
|
+
info("No baseline exists.");
|
|
281
|
+
return;
|
|
282
|
+
}
|
|
283
|
+
await unlink(baselinePath);
|
|
284
|
+
if (options.json) {
|
|
285
|
+
console.log(formatJson({ action: "cleared", existed: true }));
|
|
286
|
+
return;
|
|
287
|
+
}
|
|
288
|
+
success("Baseline cleared. All drift signals will now be shown.");
|
|
289
|
+
}
|
|
290
|
+
catch (err) {
|
|
291
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
292
|
+
error(`Failed to clear baseline: ${message}`);
|
|
293
|
+
process.exit(1);
|
|
294
|
+
}
|
|
295
|
+
});
|
|
296
|
+
return cmd;
|
|
297
|
+
}
|
|
298
|
+
//# sourceMappingURL=baseline.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"baseline.js","sourceRoot":"","sources":["../../src/commands/baseline.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { Command } from "commander";
|
|
2
|
+
import type { DriftSignal } from "@buoy-design/core";
|
|
3
|
+
/**
|
|
4
|
+
* Get list of staged files from git
|
|
5
|
+
*/
|
|
6
|
+
export declare function getStagedFiles(): string[];
|
|
7
|
+
/**
|
|
8
|
+
* Filter files to only include scannable extensions
|
|
9
|
+
*/
|
|
10
|
+
export declare function filterScannableFiles(files: string[]): string[];
|
|
11
|
+
/**
|
|
12
|
+
* Check if a drift signal is from a staged file
|
|
13
|
+
*/
|
|
14
|
+
export declare function isFromStagedFile(drift: DriftSignal, stagedFiles: string[]): boolean;
|
|
15
|
+
export declare function createCheckCommand(): Command;
|
|
16
|
+
//# sourceMappingURL=check.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"check.d.ts","sourceRoot":"","sources":["../../src/commands/check.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,OAAO,KAAK,EAAE,WAAW,EAAY,MAAM,mBAAmB,CAAC;AAQ/D;;GAEG;AACH,wBAAgB,cAAc,IAAI,MAAM,EAAE,CAgBzC;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,CA4B9D;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,EAAE,GAAG,OAAO,CAgBnF;AAED,wBAAgB,kBAAkB,IAAI,OAAO,CAwH5C"}
|