@buoy-design/cli 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 +21 -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/bootstrap.js +1 -1
- package/dist/commands/bootstrap.js.map +1 -1
- package/dist/commands/ci.d.ts +2 -2
- package/dist/commands/ci.d.ts.map +1 -1
- package/dist/commands/ci.js +107 -129
- package/dist/commands/ci.js.map +1 -1
- package/dist/commands/drift.d.ts +1 -1
- package/dist/commands/drift.d.ts.map +1 -1
- package/dist/commands/drift.js +68 -95
- package/dist/commands/drift.js.map +1 -1
- package/dist/commands/index.d.ts +9 -8
- package/dist/commands/index.d.ts.map +1 -1
- package/dist/commands/index.js +9 -8
- package/dist/commands/index.js.map +1 -1
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +61 -86
- 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 +59 -211
- 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 +79 -116
- package/dist/commands/status.js.map +1 -1
- package/dist/detect/frameworks.d.ts +6 -1
- package/dist/detect/frameworks.d.ts.map +1 -1
- package/dist/detect/frameworks.js +43 -69
- package/dist/detect/frameworks.js.map +1 -1
- package/dist/index.d.ts +3 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +7 -6
- package/dist/index.js.map +1 -1
- package/dist/integrations/github-formatter.d.ts +3 -0
- package/dist/integrations/github-formatter.d.ts.map +1 -0
- package/dist/integrations/github-formatter.js +69 -0
- package/dist/integrations/github-formatter.js.map +1 -0
- package/dist/integrations/github.d.ts +20 -0
- package/dist/integrations/github.d.ts.map +1 -0
- package/dist/integrations/github.js +69 -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/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/package.json +26 -17
- 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
package/dist/commands/scan.js
CHANGED
|
@@ -1,258 +1,106 @@
|
|
|
1
|
-
import { Command } from
|
|
2
|
-
import chalk from
|
|
3
|
-
import { loadConfig, getConfigPath } from
|
|
4
|
-
import { spinner, success, error, info, warning, header, keyValue, newline, setJsonMode } from
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
1
|
+
import { Command } from "commander";
|
|
2
|
+
import chalk from "chalk";
|
|
3
|
+
import { loadConfig, getConfigPath } from "../config/loader.js";
|
|
4
|
+
import { spinner, success, error, info, warning, header, keyValue, newline, setJsonMode, } from "../output/reporters.js";
|
|
5
|
+
import { formatComponentTable, formatTokenTable, } from "../output/formatters.js";
|
|
6
|
+
import { ScanOrchestrator } from "../scan/orchestrator.js";
|
|
7
7
|
export function createScanCommand() {
|
|
8
|
-
const cmd = new Command(
|
|
9
|
-
.description(
|
|
10
|
-
.option(
|
|
11
|
-
.option(
|
|
12
|
-
.option(
|
|
8
|
+
const cmd = new Command("scan")
|
|
9
|
+
.description("Scan sources for components and tokens")
|
|
10
|
+
.option("-s, --source <sources...>", "Specific sources to scan (react, vue, svelte, angular, tokens, etc.)")
|
|
11
|
+
.option("--json", "Output as JSON")
|
|
12
|
+
.option("-v, --verbose", "Verbose output")
|
|
13
13
|
.action(async (options) => {
|
|
14
14
|
// Set JSON mode before creating spinner to redirect spinner to stderr
|
|
15
15
|
if (options.json) {
|
|
16
16
|
setJsonMode(true);
|
|
17
17
|
}
|
|
18
|
-
const spin = spinner(
|
|
18
|
+
const spin = spinner("Loading configuration...");
|
|
19
19
|
try {
|
|
20
20
|
// Load config
|
|
21
21
|
const { config, configPath } = await loadConfig();
|
|
22
|
-
spin.text =
|
|
23
|
-
// Load discovered plugins from package.json
|
|
24
|
-
const plugins = await loadDiscoveredPlugins({ projectRoot: process.cwd() });
|
|
25
|
-
if (plugins.length > 0 && options.verbose) {
|
|
26
|
-
spin.stop();
|
|
27
|
-
console.log(chalk.dim(`Loaded ${plugins.length} plugin(s): ${plugins.map(p => p.metadata.name).join(', ')}`));
|
|
28
|
-
spin.start();
|
|
29
|
-
}
|
|
30
|
-
spin.text = 'Scanning sources...';
|
|
22
|
+
spin.text = "Scanning sources...";
|
|
31
23
|
if (options.verbose && configPath) {
|
|
32
24
|
spin.stop();
|
|
33
25
|
info(`Using config: ${configPath}`);
|
|
34
26
|
spin.start();
|
|
35
27
|
}
|
|
36
|
-
//
|
|
37
|
-
const
|
|
38
|
-
|
|
39
|
-
// JS Frameworks
|
|
40
|
-
if (config.sources.react?.enabled)
|
|
41
|
-
sourcesToScan.push('react');
|
|
42
|
-
if (config.sources.vue?.enabled)
|
|
43
|
-
sourcesToScan.push('vue');
|
|
44
|
-
if (config.sources.svelte?.enabled)
|
|
45
|
-
sourcesToScan.push('svelte');
|
|
46
|
-
if (config.sources.angular?.enabled)
|
|
47
|
-
sourcesToScan.push('angular');
|
|
48
|
-
if (config.sources.webcomponent?.enabled)
|
|
49
|
-
sourcesToScan.push('webcomponent');
|
|
50
|
-
// Templates
|
|
51
|
-
if (config.sources.templates?.enabled)
|
|
52
|
-
sourcesToScan.push('templates');
|
|
53
|
-
// Design tools
|
|
54
|
-
if (config.sources.figma?.enabled)
|
|
55
|
-
sourcesToScan.push('figma');
|
|
56
|
-
if (config.sources.storybook?.enabled)
|
|
57
|
-
sourcesToScan.push('storybook');
|
|
58
|
-
if (config.sources.tokens?.enabled)
|
|
59
|
-
sourcesToScan.push('tokens');
|
|
60
|
-
}
|
|
28
|
+
// Create orchestrator and determine sources
|
|
29
|
+
const orchestrator = new ScanOrchestrator(config);
|
|
30
|
+
const sourcesToScan = options.source || orchestrator.getEnabledSources();
|
|
61
31
|
if (sourcesToScan.length === 0) {
|
|
62
32
|
spin.stop();
|
|
63
33
|
// Check if config file even exists
|
|
64
34
|
const configExists = getConfigPath() !== null;
|
|
65
35
|
if (!configExists) {
|
|
66
|
-
error(
|
|
67
|
-
console.log(
|
|
68
|
-
info(
|
|
69
|
-
console.log(
|
|
70
|
-
info(
|
|
36
|
+
error("No configuration found");
|
|
37
|
+
console.log("");
|
|
38
|
+
info("Run " + chalk.cyan("buoy init") + " to set up your project");
|
|
39
|
+
console.log("");
|
|
40
|
+
info("This will auto-detect components, tokens, and more.");
|
|
71
41
|
}
|
|
72
42
|
else {
|
|
73
|
-
warning(
|
|
74
|
-
console.log(
|
|
75
|
-
info(
|
|
76
|
-
console.log(
|
|
77
|
-
info(
|
|
78
|
-
info(
|
|
79
|
-
info(
|
|
80
|
-
info(
|
|
81
|
-
console.log(
|
|
82
|
-
info(
|
|
83
|
-
info(
|
|
84
|
-
|
|
85
|
-
|
|
43
|
+
warning("No sources to scan");
|
|
44
|
+
console.log("");
|
|
45
|
+
info("Your config file has no sources enabled.");
|
|
46
|
+
console.log("");
|
|
47
|
+
info("This can happen if:");
|
|
48
|
+
info(" - Auto-detection found no components");
|
|
49
|
+
info(" - No token files (CSS variables, JSON tokens) were found");
|
|
50
|
+
info(" - This is not a frontend project");
|
|
51
|
+
console.log("");
|
|
52
|
+
info("To fix:");
|
|
53
|
+
info(" 1. Run " +
|
|
54
|
+
chalk.cyan("buoy bootstrap") +
|
|
55
|
+
" to extract tokens from existing code");
|
|
56
|
+
info(" 2. Run " +
|
|
57
|
+
chalk.cyan("buoy build") +
|
|
58
|
+
" to generate a design system with AI");
|
|
59
|
+
info(" 3. Or add paths manually to your config");
|
|
86
60
|
}
|
|
87
61
|
return;
|
|
88
62
|
}
|
|
89
|
-
//
|
|
90
|
-
const
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
};
|
|
96
|
-
// Scan each source
|
|
97
|
-
for (const source of sourcesToScan) {
|
|
98
|
-
spin.text = `Scanning ${source}...`;
|
|
99
|
-
try {
|
|
100
|
-
// Check if a plugin can handle this source type
|
|
101
|
-
const plugin = registry.getByDetection(source);
|
|
102
|
-
if (plugin && plugin.scan) {
|
|
103
|
-
// Use plugin scanner
|
|
104
|
-
if (options.verbose) {
|
|
105
|
-
spin.stop();
|
|
106
|
-
console.log(chalk.dim(` Using plugin "${plugin.metadata.name}" for ${source}`));
|
|
107
|
-
spin.start();
|
|
108
|
-
}
|
|
109
|
-
const sourceConfig = config.sources[source];
|
|
110
|
-
const pluginResult = await plugin.scan({
|
|
111
|
-
projectRoot: process.cwd(),
|
|
112
|
-
config: sourceConfig || {},
|
|
113
|
-
include: sourceConfig?.include,
|
|
114
|
-
exclude: sourceConfig?.exclude,
|
|
115
|
-
});
|
|
116
|
-
results.components.push(...pluginResult.components);
|
|
117
|
-
results.tokens.push(...pluginResult.tokens);
|
|
118
|
-
if (pluginResult.errors.length > 0) {
|
|
119
|
-
results.errors.push(...pluginResult.errors.map(e => `[${source}] ${e.file || ''}: ${e.message}`));
|
|
120
|
-
}
|
|
121
|
-
}
|
|
122
|
-
else {
|
|
123
|
-
// Fall back to bundled scanners
|
|
124
|
-
// React
|
|
125
|
-
if (source === 'react' && config.sources.react) {
|
|
126
|
-
const scanner = new ReactComponentScanner({
|
|
127
|
-
projectRoot: process.cwd(),
|
|
128
|
-
include: config.sources.react.include,
|
|
129
|
-
exclude: config.sources.react.exclude,
|
|
130
|
-
designSystemPackage: config.sources.react.designSystemPackage,
|
|
131
|
-
});
|
|
132
|
-
const scanResult = await scanner.scan();
|
|
133
|
-
results.components.push(...scanResult.items);
|
|
134
|
-
if (scanResult.errors.length > 0) {
|
|
135
|
-
results.errors.push(...scanResult.errors.map(e => `[${source}] ${e.file || ''}: ${e.message}`));
|
|
136
|
-
}
|
|
137
|
-
}
|
|
138
|
-
// Vue
|
|
139
|
-
if (source === 'vue' && config.sources.vue) {
|
|
140
|
-
const scanner = new VueComponentScanner({
|
|
141
|
-
projectRoot: process.cwd(),
|
|
142
|
-
include: config.sources.vue.include,
|
|
143
|
-
exclude: config.sources.vue.exclude,
|
|
144
|
-
});
|
|
145
|
-
const scanResult = await scanner.scan();
|
|
146
|
-
results.components.push(...scanResult.items);
|
|
147
|
-
if (scanResult.errors.length > 0) {
|
|
148
|
-
results.errors.push(...scanResult.errors.map(e => `[${source}] ${e.file || ''}: ${e.message}`));
|
|
149
|
-
}
|
|
150
|
-
}
|
|
151
|
-
// Svelte
|
|
152
|
-
if (source === 'svelte' && config.sources.svelte) {
|
|
153
|
-
const scanner = new SvelteComponentScanner({
|
|
154
|
-
projectRoot: process.cwd(),
|
|
155
|
-
include: config.sources.svelte.include,
|
|
156
|
-
exclude: config.sources.svelte.exclude,
|
|
157
|
-
});
|
|
158
|
-
const scanResult = await scanner.scan();
|
|
159
|
-
results.components.push(...scanResult.items);
|
|
160
|
-
if (scanResult.errors.length > 0) {
|
|
161
|
-
results.errors.push(...scanResult.errors.map(e => `[${source}] ${e.file || ''}: ${e.message}`));
|
|
162
|
-
}
|
|
163
|
-
}
|
|
164
|
-
// Angular
|
|
165
|
-
if (source === 'angular' && config.sources.angular) {
|
|
166
|
-
const scanner = new AngularComponentScanner({
|
|
167
|
-
projectRoot: process.cwd(),
|
|
168
|
-
include: config.sources.angular.include,
|
|
169
|
-
exclude: config.sources.angular.exclude,
|
|
170
|
-
});
|
|
171
|
-
const scanResult = await scanner.scan();
|
|
172
|
-
results.components.push(...scanResult.items);
|
|
173
|
-
if (scanResult.errors.length > 0) {
|
|
174
|
-
results.errors.push(...scanResult.errors.map(e => `[${source}] ${e.file || ''}: ${e.message}`));
|
|
175
|
-
}
|
|
176
|
-
}
|
|
177
|
-
// Web Components (Lit, Stencil)
|
|
178
|
-
if (source === 'webcomponent' && config.sources.webcomponent) {
|
|
179
|
-
const scanner = new WebComponentScanner({
|
|
180
|
-
projectRoot: process.cwd(),
|
|
181
|
-
include: config.sources.webcomponent.include,
|
|
182
|
-
exclude: config.sources.webcomponent.exclude,
|
|
183
|
-
framework: config.sources.webcomponent.framework,
|
|
184
|
-
});
|
|
185
|
-
const scanResult = await scanner.scan();
|
|
186
|
-
results.components.push(...scanResult.items);
|
|
187
|
-
if (scanResult.errors.length > 0) {
|
|
188
|
-
results.errors.push(...scanResult.errors.map(e => `[${source}] ${e.file || ''}: ${e.message}`));
|
|
189
|
-
}
|
|
190
|
-
}
|
|
191
|
-
// Templates (Blade, ERB, Twig, etc.)
|
|
192
|
-
if (source === 'templates' && config.sources.templates) {
|
|
193
|
-
const scanner = new TemplateScanner({
|
|
194
|
-
projectRoot: process.cwd(),
|
|
195
|
-
include: config.sources.templates.include,
|
|
196
|
-
exclude: config.sources.templates.exclude,
|
|
197
|
-
templateType: config.sources.templates.type,
|
|
198
|
-
});
|
|
199
|
-
const scanResult = await scanner.scan();
|
|
200
|
-
results.components.push(...scanResult.items);
|
|
201
|
-
if (scanResult.errors.length > 0) {
|
|
202
|
-
results.errors.push(...scanResult.errors.map(e => `[${source}] ${e.file || ''}: ${e.message}`));
|
|
203
|
-
}
|
|
204
|
-
}
|
|
205
|
-
// Tokens
|
|
206
|
-
if (source === 'tokens' && config.sources.tokens) {
|
|
207
|
-
const scanner = new TokenScanner({
|
|
208
|
-
projectRoot: process.cwd(),
|
|
209
|
-
files: config.sources.tokens.files,
|
|
210
|
-
cssVariablePrefix: config.sources.tokens.cssVariablePrefix,
|
|
211
|
-
});
|
|
212
|
-
const scanResult = await scanner.scan();
|
|
213
|
-
results.tokens.push(...scanResult.items);
|
|
214
|
-
if (scanResult.errors.length > 0) {
|
|
215
|
-
results.errors.push(...scanResult.errors.map(e => `[${source}] ${e.file || ''}: ${e.message}`));
|
|
216
|
-
}
|
|
217
|
-
}
|
|
218
|
-
// TODO: Add figma, storybook scanners
|
|
219
|
-
}
|
|
220
|
-
}
|
|
221
|
-
catch (err) {
|
|
222
|
-
const message = err instanceof Error ? err.message : String(err);
|
|
223
|
-
results.errors.push(`[${source}] ${message}`);
|
|
224
|
-
}
|
|
225
|
-
}
|
|
63
|
+
// Run the scan using orchestrator
|
|
64
|
+
const results = await orchestrator.scan({
|
|
65
|
+
sources: sourcesToScan,
|
|
66
|
+
onProgress: (msg) => {
|
|
67
|
+
spin.text = msg;
|
|
68
|
+
},
|
|
69
|
+
});
|
|
226
70
|
spin.stop();
|
|
227
71
|
// Output results
|
|
228
72
|
if (options.json) {
|
|
229
|
-
console.log(JSON.stringify(
|
|
73
|
+
console.log(JSON.stringify({
|
|
74
|
+
components: results.components,
|
|
75
|
+
tokens: results.tokens,
|
|
76
|
+
errors: results.errors.map((e) => `[${e.source}] ${e.file || ""}: ${e.message}`),
|
|
77
|
+
}, null, 2));
|
|
230
78
|
return;
|
|
231
79
|
}
|
|
232
|
-
header(
|
|
80
|
+
header("Scan Results");
|
|
233
81
|
newline();
|
|
234
|
-
keyValue(
|
|
235
|
-
keyValue(
|
|
236
|
-
keyValue(
|
|
82
|
+
keyValue("Components found", String(results.components.length));
|
|
83
|
+
keyValue("Tokens found", String(results.tokens.length));
|
|
84
|
+
keyValue("Errors", String(results.errors.length));
|
|
237
85
|
newline();
|
|
238
86
|
if (results.components.length > 0) {
|
|
239
|
-
header(
|
|
87
|
+
header("Components");
|
|
240
88
|
console.log(formatComponentTable(results.components));
|
|
241
89
|
newline();
|
|
242
90
|
}
|
|
243
91
|
if (results.tokens.length > 0) {
|
|
244
|
-
header(
|
|
92
|
+
header("Tokens");
|
|
245
93
|
console.log(formatTokenTable(results.tokens));
|
|
246
94
|
newline();
|
|
247
95
|
}
|
|
248
96
|
if (results.errors.length > 0) {
|
|
249
|
-
header(
|
|
97
|
+
header("Errors");
|
|
250
98
|
for (const err of results.errors) {
|
|
251
|
-
error(err);
|
|
99
|
+
error(`[${err.source}] ${err.file || ""}: ${err.message}`);
|
|
252
100
|
}
|
|
253
101
|
newline();
|
|
254
102
|
}
|
|
255
|
-
success(
|
|
103
|
+
success("Scan complete");
|
|
256
104
|
}
|
|
257
105
|
catch (err) {
|
|
258
106
|
spin.stop();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scan.js","sourceRoot":"","sources":["../../src/commands/scan.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"scan.js","sourceRoot":"","sources":["../../src/commands/scan.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../src/commands/status.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../src/commands/status.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAgBpC,wBAAgB,mBAAmB,IAAI,OAAO,CAuM7C"}
|
package/dist/commands/status.js
CHANGED
|
@@ -1,104 +1,46 @@
|
|
|
1
|
-
import { Command } from
|
|
2
|
-
import chalk from
|
|
3
|
-
import { loadConfig, getConfigPath } from
|
|
4
|
-
import { spinner, success, error, info, coverageGrid, setJsonMode, } from
|
|
5
|
-
import { ProjectDetector } from
|
|
1
|
+
import { Command } from "commander";
|
|
2
|
+
import chalk from "chalk";
|
|
3
|
+
import { loadConfig, getConfigPath } from "../config/loader.js";
|
|
4
|
+
import { spinner, success, error, info, coverageGrid, setJsonMode, } from "../output/reporters.js";
|
|
5
|
+
import { ProjectDetector } from "../detect/project-detector.js";
|
|
6
|
+
import { ScanOrchestrator } from "../scan/orchestrator.js";
|
|
6
7
|
export function createStatusCommand() {
|
|
7
|
-
const cmd = new Command(
|
|
8
|
-
.description(
|
|
9
|
-
.option(
|
|
10
|
-
.option(
|
|
8
|
+
const cmd = new Command("status")
|
|
9
|
+
.description("Show design system coverage at a glance")
|
|
10
|
+
.option("--json", "Output as JSON")
|
|
11
|
+
.option("-v, --verbose", "Verbose output")
|
|
11
12
|
.action(async (options) => {
|
|
12
13
|
// Set JSON mode before creating spinner to redirect spinner to stderr
|
|
13
14
|
if (options.json) {
|
|
14
15
|
setJsonMode(true);
|
|
15
16
|
}
|
|
16
|
-
const spin = spinner(
|
|
17
|
+
const spin = spinner("Analyzing design system coverage...");
|
|
17
18
|
try {
|
|
18
19
|
// Check if config exists
|
|
19
20
|
const configExists = getConfigPath() !== null;
|
|
20
21
|
if (!configExists) {
|
|
21
22
|
spin.stop();
|
|
22
|
-
error(
|
|
23
|
-
console.log(
|
|
24
|
-
info(
|
|
23
|
+
error("No configuration found");
|
|
24
|
+
console.log("");
|
|
25
|
+
info("Run buoy init to set up your project");
|
|
25
26
|
return;
|
|
26
27
|
}
|
|
27
28
|
const { config } = await loadConfig();
|
|
28
|
-
//
|
|
29
|
-
|
|
30
|
-
const
|
|
31
|
-
const components =
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
projectRoot: process.cwd(),
|
|
37
|
-
include: config.sources.react.include,
|
|
38
|
-
exclude: config.sources.react.exclude,
|
|
39
|
-
designSystemPackage: config.sources.react.designSystemPackage,
|
|
40
|
-
});
|
|
41
|
-
const result = await scanner.scan();
|
|
42
|
-
components.push(...result.items);
|
|
43
|
-
}
|
|
44
|
-
// Vue
|
|
45
|
-
if (config.sources.vue?.enabled) {
|
|
46
|
-
const scanner = new VueComponentScanner({
|
|
47
|
-
projectRoot: process.cwd(),
|
|
48
|
-
include: config.sources.vue.include,
|
|
49
|
-
exclude: config.sources.vue.exclude,
|
|
50
|
-
});
|
|
51
|
-
const result = await scanner.scan();
|
|
52
|
-
components.push(...result.items);
|
|
53
|
-
}
|
|
54
|
-
// Svelte
|
|
55
|
-
if (config.sources.svelte?.enabled) {
|
|
56
|
-
const scanner = new SvelteComponentScanner({
|
|
57
|
-
projectRoot: process.cwd(),
|
|
58
|
-
include: config.sources.svelte.include,
|
|
59
|
-
exclude: config.sources.svelte.exclude,
|
|
60
|
-
});
|
|
61
|
-
const result = await scanner.scan();
|
|
62
|
-
components.push(...result.items);
|
|
63
|
-
}
|
|
64
|
-
// Angular
|
|
65
|
-
if (config.sources.angular?.enabled) {
|
|
66
|
-
const scanner = new AngularComponentScanner({
|
|
67
|
-
projectRoot: process.cwd(),
|
|
68
|
-
include: config.sources.angular.include,
|
|
69
|
-
exclude: config.sources.angular.exclude,
|
|
70
|
-
});
|
|
71
|
-
const result = await scanner.scan();
|
|
72
|
-
components.push(...result.items);
|
|
73
|
-
}
|
|
74
|
-
// Web Components
|
|
75
|
-
if (config.sources.webcomponent?.enabled) {
|
|
76
|
-
const scanner = new WebComponentScanner({
|
|
77
|
-
projectRoot: process.cwd(),
|
|
78
|
-
include: config.sources.webcomponent.include,
|
|
79
|
-
exclude: config.sources.webcomponent.exclude,
|
|
80
|
-
framework: config.sources.webcomponent.framework,
|
|
81
|
-
});
|
|
82
|
-
const result = await scanner.scan();
|
|
83
|
-
components.push(...result.items);
|
|
84
|
-
}
|
|
85
|
-
// Templates
|
|
86
|
-
if (config.sources.templates?.enabled) {
|
|
87
|
-
const scanner = new TemplateScanner({
|
|
88
|
-
projectRoot: process.cwd(),
|
|
89
|
-
include: config.sources.templates.include,
|
|
90
|
-
exclude: config.sources.templates.exclude,
|
|
91
|
-
templateType: config.sources.templates.type,
|
|
92
|
-
});
|
|
93
|
-
const result = await scanner.scan();
|
|
94
|
-
components.push(...result.items);
|
|
95
|
-
}
|
|
29
|
+
// Scan components using orchestrator
|
|
30
|
+
spin.text = "Scanning components...";
|
|
31
|
+
const orchestrator = new ScanOrchestrator(config);
|
|
32
|
+
const { components } = await orchestrator.scanComponents({
|
|
33
|
+
onProgress: (msg) => {
|
|
34
|
+
spin.text = msg;
|
|
35
|
+
},
|
|
36
|
+
});
|
|
96
37
|
// Detect frameworks for sprawl check
|
|
97
|
-
spin.text =
|
|
38
|
+
spin.text = "Detecting frameworks...";
|
|
98
39
|
const detector = new ProjectDetector(process.cwd());
|
|
99
40
|
const projectInfo = await detector.detect();
|
|
100
41
|
// Run drift analysis
|
|
101
|
-
spin.text =
|
|
42
|
+
spin.text = "Analyzing drift...";
|
|
43
|
+
const { SemanticDiffEngine } = await import("@buoy-design/core/analysis");
|
|
102
44
|
const engine = new SemanticDiffEngine();
|
|
103
45
|
const diffResult = engine.analyzeComponents(components, {
|
|
104
46
|
checkDeprecated: true,
|
|
@@ -107,87 +49,108 @@ export function createStatusCommand() {
|
|
|
107
49
|
});
|
|
108
50
|
const drifts = [...diffResult.drifts];
|
|
109
51
|
// Check for framework sprawl
|
|
110
|
-
const sprawlSignal = engine.checkFrameworkSprawl(projectInfo.frameworks.map(f => ({
|
|
52
|
+
const sprawlSignal = engine.checkFrameworkSprawl(projectInfo.frameworks.map((f) => ({
|
|
53
|
+
name: f.name,
|
|
54
|
+
version: f.version,
|
|
55
|
+
})));
|
|
111
56
|
if (sprawlSignal) {
|
|
112
57
|
drifts.push(sprawlSignal);
|
|
113
58
|
}
|
|
114
59
|
// Calculate coverage stats
|
|
115
|
-
const driftingComponentIds = new Set(drifts.map(d => d.source.entityId));
|
|
60
|
+
const driftingComponentIds = new Set(drifts.map((d) => d.source.entityId));
|
|
116
61
|
const stats = {
|
|
117
|
-
aligned: components.filter(c => !driftingComponentIds.has(c.id))
|
|
62
|
+
aligned: components.filter((c) => !driftingComponentIds.has(c.id))
|
|
63
|
+
.length,
|
|
118
64
|
drifting: driftingComponentIds.size,
|
|
119
65
|
untracked: 0, // For future: components not yet analyzed
|
|
120
66
|
total: components.length,
|
|
121
67
|
};
|
|
122
68
|
spin.stop();
|
|
123
69
|
// Group components by status
|
|
124
|
-
const alignedComponents = components.filter(c => !driftingComponentIds.has(c.id));
|
|
125
|
-
const driftingComponentsList = components.filter(c => driftingComponentIds.has(c.id));
|
|
70
|
+
const alignedComponents = components.filter((c) => !driftingComponentIds.has(c.id));
|
|
71
|
+
const driftingComponentsList = components.filter((c) => driftingComponentIds.has(c.id));
|
|
126
72
|
// Output
|
|
127
73
|
if (options.json) {
|
|
128
74
|
console.log(JSON.stringify({
|
|
129
75
|
stats,
|
|
130
|
-
alignedPercent: stats.total > 0
|
|
131
|
-
|
|
76
|
+
alignedPercent: stats.total > 0
|
|
77
|
+
? Math.round((stats.aligned / stats.total) * 100)
|
|
78
|
+
: 0,
|
|
79
|
+
frameworks: projectInfo.frameworks.map((f) => ({
|
|
80
|
+
name: f.name,
|
|
81
|
+
version: f.version,
|
|
82
|
+
})),
|
|
132
83
|
frameworkSprawl: sprawlSignal !== null,
|
|
133
84
|
components: {
|
|
134
|
-
aligned: alignedComponents.map(c => ({
|
|
135
|
-
|
|
85
|
+
aligned: alignedComponents.map((c) => ({
|
|
86
|
+
id: c.id,
|
|
87
|
+
name: c.name,
|
|
88
|
+
path: "path" in c.source ? c.source.path : undefined,
|
|
89
|
+
})),
|
|
90
|
+
drifting: driftingComponentsList.map((c) => ({
|
|
91
|
+
id: c.id,
|
|
92
|
+
name: c.name,
|
|
93
|
+
path: "path" in c.source ? c.source.path : undefined,
|
|
94
|
+
})),
|
|
136
95
|
},
|
|
137
96
|
}, null, 2));
|
|
138
97
|
return;
|
|
139
98
|
}
|
|
140
99
|
if (stats.total === 0) {
|
|
141
|
-
info(
|
|
142
|
-
console.log(
|
|
143
|
-
info(
|
|
144
|
-
info(
|
|
145
|
-
|
|
146
|
-
|
|
100
|
+
info("No components found to analyze.");
|
|
101
|
+
console.log("");
|
|
102
|
+
info("Options:");
|
|
103
|
+
info(" - Run " +
|
|
104
|
+
chalk.cyan("buoy bootstrap") +
|
|
105
|
+
" to extract tokens from existing code");
|
|
106
|
+
info(" - Run " +
|
|
107
|
+
chalk.cyan("buoy build") +
|
|
108
|
+
" to generate a design system with AI");
|
|
109
|
+
info(" - Check your config has component paths configured");
|
|
147
110
|
return;
|
|
148
111
|
}
|
|
149
112
|
// Display framework sprawl warning if detected
|
|
150
113
|
if (sprawlSignal) {
|
|
151
|
-
console.log(
|
|
152
|
-
console.log(chalk.yellow.bold(
|
|
153
|
-
console.log(chalk.dim(
|
|
154
|
-
projectInfo.frameworks.forEach(f => {
|
|
155
|
-
const version = f.version !==
|
|
156
|
-
console.log(`
|
|
114
|
+
console.log("");
|
|
115
|
+
console.log(chalk.yellow.bold("Warning: Framework Sprawl Detected"));
|
|
116
|
+
console.log(chalk.dim(" Multiple UI frameworks in use:"));
|
|
117
|
+
projectInfo.frameworks.forEach((f) => {
|
|
118
|
+
const version = f.version !== "unknown" ? chalk.dim(` (${f.version})`) : "";
|
|
119
|
+
console.log(` - ${chalk.cyan(f.name)}${version}`);
|
|
157
120
|
});
|
|
158
|
-
console.log(
|
|
121
|
+
console.log("");
|
|
159
122
|
}
|
|
160
123
|
// Display the coverage grid
|
|
161
124
|
coverageGrid(stats);
|
|
162
125
|
// Display component lists
|
|
163
|
-
console.log(
|
|
126
|
+
console.log("");
|
|
164
127
|
if (driftingComponentsList.length > 0) {
|
|
165
|
-
console.log(
|
|
166
|
-
driftingComponentsList.forEach(c => {
|
|
128
|
+
console.log("\x1b[33mDrifting:\x1b[0m");
|
|
129
|
+
driftingComponentsList.forEach((c) => {
|
|
167
130
|
console.log(` ${c.name}`);
|
|
168
131
|
});
|
|
169
|
-
console.log(
|
|
132
|
+
console.log("");
|
|
170
133
|
}
|
|
171
134
|
if (alignedComponents.length > 0) {
|
|
172
|
-
console.log(
|
|
173
|
-
alignedComponents.forEach(c => {
|
|
135
|
+
console.log("\x1b[32mAligned:\x1b[0m");
|
|
136
|
+
alignedComponents.forEach((c) => {
|
|
174
137
|
console.log(` ${c.name}`);
|
|
175
138
|
});
|
|
176
|
-
console.log(
|
|
139
|
+
console.log("");
|
|
177
140
|
}
|
|
178
141
|
// Summary message
|
|
179
142
|
const alignedPct = Math.round((stats.aligned / stats.total) * 100);
|
|
180
143
|
if (alignedPct === 100) {
|
|
181
|
-
success(
|
|
144
|
+
success("Perfect alignment! No drift detected.");
|
|
182
145
|
}
|
|
183
146
|
else if (alignedPct >= 80) {
|
|
184
|
-
success(
|
|
147
|
+
success("Good alignment. Minor drift to review.");
|
|
185
148
|
}
|
|
186
149
|
else if (alignedPct >= 50) {
|
|
187
|
-
info(
|
|
150
|
+
info("Moderate alignment. Consider reviewing drifting components.");
|
|
188
151
|
}
|
|
189
152
|
else {
|
|
190
|
-
error(
|
|
153
|
+
error("Low alignment. Run buoy drift check for details.");
|
|
191
154
|
}
|
|
192
155
|
}
|
|
193
156
|
catch (err) {
|