@buoy-design/cli 0.1.0
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/bin.d.ts +3 -0
- package/dist/bin.d.ts.map +1 -0
- package/dist/bin.js +5 -0
- package/dist/bin.js.map +1 -0
- package/dist/commands/__tests__/ci.test.d.ts +2 -0
- package/dist/commands/__tests__/ci.test.d.ts.map +1 -0
- package/dist/commands/__tests__/ci.test.js +33 -0
- package/dist/commands/__tests__/ci.test.js.map +1 -0
- package/dist/commands/bootstrap.d.ts +3 -0
- package/dist/commands/bootstrap.d.ts.map +1 -0
- package/dist/commands/bootstrap.js +458 -0
- package/dist/commands/bootstrap.js.map +1 -0
- package/dist/commands/build.d.ts +3 -0
- package/dist/commands/build.d.ts.map +1 -0
- package/dist/commands/build.js +314 -0
- package/dist/commands/build.js.map +1 -0
- package/dist/commands/ci.d.ts +24 -0
- package/dist/commands/ci.d.ts.map +1 -0
- package/dist/commands/ci.js +273 -0
- package/dist/commands/ci.js.map +1 -0
- package/dist/commands/ci.logic.d.ts +20 -0
- package/dist/commands/ci.logic.d.ts.map +1 -0
- package/dist/commands/ci.logic.js +28 -0
- package/dist/commands/ci.logic.js.map +1 -0
- package/dist/commands/drift.d.ts +3 -0
- package/dist/commands/drift.d.ts.map +1 -0
- package/dist/commands/drift.js +178 -0
- package/dist/commands/drift.js.map +1 -0
- package/dist/commands/index.d.ts +9 -0
- package/dist/commands/index.d.ts.map +1 -0
- package/dist/commands/index.js +9 -0
- package/dist/commands/index.js.map +1 -0
- package/dist/commands/init.d.ts +3 -0
- package/dist/commands/init.d.ts.map +1 -0
- package/dist/commands/init.js +490 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/plugins.d.ts +3 -0
- package/dist/commands/plugins.d.ts.map +1 -0
- package/dist/commands/plugins.js +72 -0
- package/dist/commands/plugins.js.map +1 -0
- package/dist/commands/scan.d.ts +3 -0
- package/dist/commands/scan.d.ts.map +1 -0
- package/dist/commands/scan.js +266 -0
- package/dist/commands/scan.js.map +1 -0
- package/dist/commands/status.d.ts +3 -0
- package/dist/commands/status.d.ts.map +1 -0
- package/dist/commands/status.js +205 -0
- package/dist/commands/status.js.map +1 -0
- package/dist/config/index.d.ts +3 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/index.js +3 -0
- package/dist/config/index.js.map +1 -0
- package/dist/config/loader.d.ts +8 -0
- package/dist/config/loader.d.ts.map +1 -0
- package/dist/config/loader.js +67 -0
- package/dist/config/loader.js.map +1 -0
- package/dist/config/schema.d.ts +1040 -0
- package/dist/config/schema.d.ts.map +1 -0
- package/dist/config/schema.js +116 -0
- package/dist/config/schema.js.map +1 -0
- package/dist/detect/frameworks.d.ts +18 -0
- package/dist/detect/frameworks.d.ts.map +1 -0
- package/dist/detect/frameworks.js +168 -0
- package/dist/detect/frameworks.js.map +1 -0
- package/dist/detect/index.d.ts +3 -0
- package/dist/detect/index.d.ts.map +1 -0
- package/dist/detect/index.js +3 -0
- package/dist/detect/index.js.map +1 -0
- package/dist/detect/project-detector.d.ts +61 -0
- package/dist/detect/project-detector.d.ts.map +1 -0
- package/dist/detect/project-detector.js +849 -0
- package/dist/detect/project-detector.js.map +1 -0
- package/dist/index.d.ts +5 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +22 -0
- package/dist/index.js.map +1 -0
- package/dist/output/formatters.d.ts +21 -0
- package/dist/output/formatters.d.ts.map +1 -0
- package/dist/output/formatters.js +421 -0
- package/dist/output/formatters.js.map +1 -0
- package/dist/output/index.d.ts +3 -0
- package/dist/output/index.d.ts.map +1 -0
- package/dist/output/index.js +3 -0
- package/dist/output/index.js.map +1 -0
- package/dist/output/reporters.d.ts +23 -0
- package/dist/output/reporters.d.ts.map +1 -0
- package/dist/output/reporters.js +147 -0
- package/dist/output/reporters.js.map +1 -0
- package/dist/plugins/index.d.ts +3 -0
- package/dist/plugins/index.d.ts.map +1 -0
- package/dist/plugins/index.js +3 -0
- package/dist/plugins/index.js.map +1 -0
- package/dist/plugins/loader.d.ts +11 -0
- package/dist/plugins/loader.d.ts.map +1 -0
- package/dist/plugins/loader.js +77 -0
- package/dist/plugins/loader.js.map +1 -0
- package/dist/plugins/registry.d.ts +15 -0
- package/dist/plugins/registry.d.ts.map +1 -0
- package/dist/plugins/registry.js +32 -0
- package/dist/plugins/registry.js.map +1 -0
- package/package.json +48 -0
package/dist/bin.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bin.d.ts","sourceRoot":"","sources":["../src/bin.ts"],"names":[],"mappings":""}
|
package/dist/bin.js
ADDED
package/dist/bin.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bin.js","sourceRoot":"","sources":["../src/bin.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAEvC,MAAM,GAAG,GAAG,SAAS,EAAE,CAAC;AACxB,GAAG,CAAC,KAAK,EAAE,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ci.test.d.ts","sourceRoot":"","sources":["../../../src/commands/__tests__/ci.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
// apps/cli/src/commands/__tests__/ci.test.ts
|
|
2
|
+
import { describe, it, expect } from 'vitest';
|
|
3
|
+
// Import the function we want to test
|
|
4
|
+
// Note: We'll need to export buildCIOutput for testing
|
|
5
|
+
// For now, test the output structure
|
|
6
|
+
describe('buoy ci', () => {
|
|
7
|
+
describe('exit codes', () => {
|
|
8
|
+
it('should exit 0 when no drift found', () => {
|
|
9
|
+
// Placeholder - would need to mock config and scanners
|
|
10
|
+
expect(true).toBe(true);
|
|
11
|
+
});
|
|
12
|
+
it('should exit 1 when critical drift found and fail-on=critical', () => {
|
|
13
|
+
expect(true).toBe(true);
|
|
14
|
+
});
|
|
15
|
+
it('should exit 0 when warning drift found and fail-on=critical', () => {
|
|
16
|
+
expect(true).toBe(true);
|
|
17
|
+
});
|
|
18
|
+
it('should exit 1 when warning drift found and fail-on=warning', () => {
|
|
19
|
+
expect(true).toBe(true);
|
|
20
|
+
});
|
|
21
|
+
it('should exit 0 when fail-on=none regardless of drift', () => {
|
|
22
|
+
expect(true).toBe(true);
|
|
23
|
+
});
|
|
24
|
+
});
|
|
25
|
+
describe('output format', () => {
|
|
26
|
+
it('should output valid JSON with required fields', () => {
|
|
27
|
+
const expectedFields = ['version', 'timestamp', 'summary', 'topIssues', 'exitCode'];
|
|
28
|
+
// Placeholder
|
|
29
|
+
expect(expectedFields.length).toBe(5);
|
|
30
|
+
});
|
|
31
|
+
});
|
|
32
|
+
});
|
|
33
|
+
//# sourceMappingURL=ci.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ci.test.js","sourceRoot":"","sources":["../../../src/commands/__tests__/ci.test.ts"],"names":[],"mappings":"AAAA,6CAA6C;AAC7C,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAE9C,sCAAsC;AACtC,uDAAuD;AACvD,qCAAqC;AAErC,QAAQ,CAAC,SAAS,EAAE,GAAG,EAAE;IACvB,QAAQ,CAAC,YAAY,EAAE,GAAG,EAAE;QAC1B,EAAE,CAAC,mCAAmC,EAAE,GAAG,EAAE;YAC3C,uDAAuD;YACvD,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC1B,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,8DAA8D,EAAE,GAAG,EAAE;YACtE,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC1B,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,6DAA6D,EAAE,GAAG,EAAE;YACrE,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC1B,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,4DAA4D,EAAE,GAAG,EAAE;YACpE,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC1B,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,qDAAqD,EAAE,GAAG,EAAE;YAC7D,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC1B,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,eAAe,EAAE,GAAG,EAAE;QAC7B,EAAE,CAAC,+CAA+C,EAAE,GAAG,EAAE;YACvD,MAAM,cAAc,GAAG,CAAC,SAAS,EAAE,WAAW,EAAE,SAAS,EAAE,WAAW,EAAE,UAAU,CAAC,CAAC;YACpF,cAAc;YACd,MAAM,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACxC,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bootstrap.d.ts","sourceRoot":"","sources":["../../src/commands/bootstrap.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAqCpC,wBAAgB,sBAAsB,IAAI,OAAO,CA4KhD"}
|
|
@@ -0,0 +1,458 @@
|
|
|
1
|
+
import { Command } from 'commander';
|
|
2
|
+
import { writeFileSync, readFileSync } from 'fs';
|
|
3
|
+
import { resolve, relative } from 'path';
|
|
4
|
+
import chalk from 'chalk';
|
|
5
|
+
import { glob } from 'glob';
|
|
6
|
+
import { loadConfig, getConfigPath } from '../config/loader.js';
|
|
7
|
+
import { spinner, success, error, info, header, newline, warning } from '../output/reporters.js';
|
|
8
|
+
import { detectFrameworks } from '../detect/frameworks.js';
|
|
9
|
+
// Patterns for detecting hardcoded values in CSS/SCSS
|
|
10
|
+
const COLOR_PATTERNS = [
|
|
11
|
+
/#[0-9a-fA-F]{3,8}\b/g, // Hex colors
|
|
12
|
+
/rgb\s*\([^)]+\)/gi, // rgb()
|
|
13
|
+
/rgba\s*\([^)]+\)/gi, // rgba()
|
|
14
|
+
/hsl\s*\([^)]+\)/gi, // hsl()
|
|
15
|
+
/hsla\s*\([^)]+\)/gi, // hsla()
|
|
16
|
+
];
|
|
17
|
+
const SPACING_PATTERN = /:\s*(\d+(?:\.\d+)?(?:px|rem|em))\s*[;}\n]/g;
|
|
18
|
+
const FONT_SIZE_PATTERN = /font-size\s*:\s*(\d+(?:\.\d+)?(?:px|rem|em|pt))/gi;
|
|
19
|
+
export function createBootstrapCommand() {
|
|
20
|
+
const cmd = new Command('bootstrap')
|
|
21
|
+
.description('Extract design tokens from existing hardcoded values')
|
|
22
|
+
.option('--format <format>', 'Output format: json, css-variables, tailwind', 'json')
|
|
23
|
+
.option('--output <path>', 'Output file path', 'tokens.json')
|
|
24
|
+
.option('--dry-run', 'Preview without writing files')
|
|
25
|
+
.option('-v, --verbose', 'Show detailed extraction info')
|
|
26
|
+
.action(async (options) => {
|
|
27
|
+
try {
|
|
28
|
+
const cwd = process.cwd();
|
|
29
|
+
// Early validation: Check if this is a frontend project
|
|
30
|
+
const frameworks = await detectFrameworks(cwd);
|
|
31
|
+
const frontendFrameworks = frameworks.filter(f => ['react', 'vue', 'svelte', 'angular', 'webcomponents', 'tailwind', 'css'].includes(f.plugin));
|
|
32
|
+
// Check for style files
|
|
33
|
+
const stylePatterns = ['**/*.css', '**/*.scss', '**/*.sass', '**/*.less'];
|
|
34
|
+
const styleIgnore = ['**/node_modules/**', '**/dist/**', '**/build/**'];
|
|
35
|
+
let hasStyleFiles = false;
|
|
36
|
+
for (const pattern of stylePatterns) {
|
|
37
|
+
const matches = await glob(pattern, { cwd, ignore: styleIgnore, nodir: true });
|
|
38
|
+
if (matches.length > 0) {
|
|
39
|
+
hasStyleFiles = true;
|
|
40
|
+
break;
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
// If no frontend framework and no style files, abort early
|
|
44
|
+
if (frontendFrameworks.length === 0 && !hasStyleFiles) {
|
|
45
|
+
newline();
|
|
46
|
+
warning('This doesn\'t appear to be a frontend project.');
|
|
47
|
+
newline();
|
|
48
|
+
info('Bootstrap extracts design tokens from existing CSS and component files.');
|
|
49
|
+
info('No frontend frameworks or stylesheets were detected in this project.');
|
|
50
|
+
newline();
|
|
51
|
+
console.log(chalk.dim('Detected project type:'));
|
|
52
|
+
if (frameworks.length > 0) {
|
|
53
|
+
frameworks.forEach(f => console.log(chalk.dim(` • ${f.name} (${f.evidence})`)));
|
|
54
|
+
}
|
|
55
|
+
else {
|
|
56
|
+
console.log(chalk.dim(' • No known frameworks detected'));
|
|
57
|
+
}
|
|
58
|
+
newline();
|
|
59
|
+
console.log(chalk.cyan('💡 If this is a frontend project:'));
|
|
60
|
+
console.log(chalk.dim(' • Ensure you\'re in the correct directory'));
|
|
61
|
+
console.log(chalk.dim(' • Check that your CSS/component files exist'));
|
|
62
|
+
newline();
|
|
63
|
+
console.log(chalk.cyan('💡 To create a design system from scratch:'));
|
|
64
|
+
console.log(chalk.dim(' Run: buoy build'));
|
|
65
|
+
return;
|
|
66
|
+
}
|
|
67
|
+
const spin = spinner('Scanning for hardcoded values...');
|
|
68
|
+
const extracted = new Map();
|
|
69
|
+
// Check if config exists - if so, use component scanning
|
|
70
|
+
const configExists = getConfigPath() !== null;
|
|
71
|
+
if (configExists) {
|
|
72
|
+
spin.text = 'Scanning components for hardcoded values...';
|
|
73
|
+
await extractFromComponents(cwd, extracted, options.verbose);
|
|
74
|
+
}
|
|
75
|
+
// Always scan CSS/SCSS files
|
|
76
|
+
spin.text = 'Scanning stylesheets...';
|
|
77
|
+
await extractFromStylesheets(cwd, extracted, options.verbose);
|
|
78
|
+
spin.stop();
|
|
79
|
+
// Group by type
|
|
80
|
+
const colors = [...extracted.values()].filter(v => v.type === 'color');
|
|
81
|
+
const spacing = [...extracted.values()].filter(v => v.type === 'spacing');
|
|
82
|
+
const fontSizes = [...extracted.values()].filter(v => v.type === 'fontSize');
|
|
83
|
+
// Display summary
|
|
84
|
+
newline();
|
|
85
|
+
header('Extracted Values');
|
|
86
|
+
newline();
|
|
87
|
+
if (colors.length === 0 && spacing.length === 0 && fontSizes.length === 0) {
|
|
88
|
+
info('No hardcoded values found to extract.');
|
|
89
|
+
newline();
|
|
90
|
+
info('This could mean:');
|
|
91
|
+
info(' • Your codebase already uses design tokens');
|
|
92
|
+
info(' • No CSS/component files were found');
|
|
93
|
+
info(' • Values are using CSS variables or theme objects');
|
|
94
|
+
newline();
|
|
95
|
+
// Suggest buoy build
|
|
96
|
+
console.log(chalk.cyan('💡 Want to create a design system from scratch?'));
|
|
97
|
+
console.log(chalk.dim(' Run: buoy build'));
|
|
98
|
+
return;
|
|
99
|
+
}
|
|
100
|
+
console.log(` ${chalk.cyan('Colors:')} ${colors.length} unique values`);
|
|
101
|
+
if (options.verbose && colors.length > 0) {
|
|
102
|
+
colors.slice(0, 5).forEach(c => {
|
|
103
|
+
console.log(chalk.dim(` ${c.value} (${c.count}x)`));
|
|
104
|
+
});
|
|
105
|
+
if (colors.length > 5)
|
|
106
|
+
console.log(chalk.dim(` ... and ${colors.length - 5} more`));
|
|
107
|
+
}
|
|
108
|
+
console.log(` ${chalk.cyan('Spacing:')} ${spacing.length} unique values`);
|
|
109
|
+
if (options.verbose && spacing.length > 0) {
|
|
110
|
+
spacing.slice(0, 5).forEach(s => {
|
|
111
|
+
console.log(chalk.dim(` ${s.value} (${s.count}x)`));
|
|
112
|
+
});
|
|
113
|
+
if (spacing.length > 5)
|
|
114
|
+
console.log(chalk.dim(` ... and ${spacing.length - 5} more`));
|
|
115
|
+
}
|
|
116
|
+
console.log(` ${chalk.cyan('Font sizes:')} ${fontSizes.length} unique values`);
|
|
117
|
+
if (options.verbose && fontSizes.length > 0) {
|
|
118
|
+
fontSizes.slice(0, 5).forEach(f => {
|
|
119
|
+
console.log(chalk.dim(` ${f.value} (${f.count}x)`));
|
|
120
|
+
});
|
|
121
|
+
if (fontSizes.length > 5)
|
|
122
|
+
console.log(chalk.dim(` ... and ${fontSizes.length - 5} more`));
|
|
123
|
+
}
|
|
124
|
+
newline();
|
|
125
|
+
// Generate output
|
|
126
|
+
const outputPath = resolve(cwd, options.output);
|
|
127
|
+
if (options.dryRun) {
|
|
128
|
+
info('Dry run - no files written');
|
|
129
|
+
newline();
|
|
130
|
+
console.log(chalk.dim('Would generate:'));
|
|
131
|
+
console.log(chalk.dim(` ${outputPath}`));
|
|
132
|
+
newline();
|
|
133
|
+
// Preview the output
|
|
134
|
+
const tokens = generateTokens(colors, spacing, fontSizes);
|
|
135
|
+
console.log(chalk.dim(JSON.stringify(tokens, null, 2).slice(0, 500) + '...'));
|
|
136
|
+
return;
|
|
137
|
+
}
|
|
138
|
+
// Generate and write tokens
|
|
139
|
+
const tokens = generateTokens(colors, spacing, fontSizes);
|
|
140
|
+
switch (options.format) {
|
|
141
|
+
case 'css-variables':
|
|
142
|
+
writeFileSync(outputPath.replace('.json', '.css'), generateCssVariables(tokens));
|
|
143
|
+
success(`Created ${relative(cwd, outputPath.replace('.json', '.css'))}`);
|
|
144
|
+
break;
|
|
145
|
+
case 'tailwind':
|
|
146
|
+
writeFileSync(outputPath.replace('.json', '.js'), generateTailwindConfig(tokens));
|
|
147
|
+
success(`Created ${relative(cwd, outputPath.replace('.json', '.js'))}`);
|
|
148
|
+
break;
|
|
149
|
+
default:
|
|
150
|
+
writeFileSync(outputPath, JSON.stringify(tokens, null, 2));
|
|
151
|
+
success(`Created ${relative(cwd, outputPath)}`);
|
|
152
|
+
}
|
|
153
|
+
newline();
|
|
154
|
+
info('Next steps:');
|
|
155
|
+
info(' 1. Review and rename tokens in the generated file');
|
|
156
|
+
info(' 2. Update your config to reference the token file');
|
|
157
|
+
info(' 3. Run ' + chalk.cyan('buoy drift check') + ' to find usage of hardcoded values');
|
|
158
|
+
newline();
|
|
159
|
+
console.log(chalk.dim('💡 Tip: Use buoy build to generate a complete design system with AI'));
|
|
160
|
+
}
|
|
161
|
+
catch (err) {
|
|
162
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
163
|
+
error(`Bootstrap failed: ${message}`);
|
|
164
|
+
process.exit(1);
|
|
165
|
+
}
|
|
166
|
+
});
|
|
167
|
+
return cmd;
|
|
168
|
+
}
|
|
169
|
+
async function extractFromComponents(cwd, extracted, _verbose) {
|
|
170
|
+
const { config } = await loadConfig();
|
|
171
|
+
// Import scanners dynamically
|
|
172
|
+
const { ReactComponentScanner, VueComponentScanner, SvelteComponentScanner, } = await import('@buoy-design/scanners/git');
|
|
173
|
+
// Scan React components
|
|
174
|
+
if (config.sources.react?.enabled) {
|
|
175
|
+
const scanner = new ReactComponentScanner({
|
|
176
|
+
projectRoot: cwd,
|
|
177
|
+
include: config.sources.react.include,
|
|
178
|
+
exclude: config.sources.react.exclude,
|
|
179
|
+
});
|
|
180
|
+
const result = await scanner.scan();
|
|
181
|
+
for (const component of result.items) {
|
|
182
|
+
if (component.metadata.hardcodedValues) {
|
|
183
|
+
const sourcePath = 'path' in component.source ? component.source.path : component.name;
|
|
184
|
+
for (const hv of component.metadata.hardcodedValues) {
|
|
185
|
+
addExtractedValue(extracted, hv.value, hv.type, sourcePath);
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
// Scan Vue components
|
|
191
|
+
if (config.sources.vue?.enabled) {
|
|
192
|
+
const scanner = new VueComponentScanner({
|
|
193
|
+
projectRoot: cwd,
|
|
194
|
+
include: config.sources.vue.include,
|
|
195
|
+
exclude: config.sources.vue.exclude,
|
|
196
|
+
});
|
|
197
|
+
const result = await scanner.scan();
|
|
198
|
+
for (const component of result.items) {
|
|
199
|
+
if (component.metadata.hardcodedValues) {
|
|
200
|
+
const sourcePath = 'path' in component.source ? component.source.path : component.name;
|
|
201
|
+
for (const hv of component.metadata.hardcodedValues) {
|
|
202
|
+
addExtractedValue(extracted, hv.value, hv.type, sourcePath);
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
// Scan Svelte components
|
|
208
|
+
if (config.sources.svelte?.enabled) {
|
|
209
|
+
const scanner = new SvelteComponentScanner({
|
|
210
|
+
projectRoot: cwd,
|
|
211
|
+
include: config.sources.svelte.include,
|
|
212
|
+
exclude: config.sources.svelte.exclude,
|
|
213
|
+
});
|
|
214
|
+
const result = await scanner.scan();
|
|
215
|
+
for (const component of result.items) {
|
|
216
|
+
if (component.metadata.hardcodedValues) {
|
|
217
|
+
const sourcePath = 'path' in component.source ? component.source.path : component.name;
|
|
218
|
+
for (const hv of component.metadata.hardcodedValues) {
|
|
219
|
+
addExtractedValue(extracted, hv.value, hv.type, sourcePath);
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
async function extractFromStylesheets(cwd, extracted, _verbose) {
|
|
226
|
+
// Find CSS/SCSS files
|
|
227
|
+
const patterns = ['**/*.css', '**/*.scss', '**/*.sass', '**/*.less'];
|
|
228
|
+
const ignore = ['**/node_modules/**', '**/dist/**', '**/build/**', '**/.next/**'];
|
|
229
|
+
const files = [];
|
|
230
|
+
for (const pattern of patterns) {
|
|
231
|
+
const matches = await glob(pattern, { cwd, ignore, absolute: true });
|
|
232
|
+
files.push(...matches);
|
|
233
|
+
}
|
|
234
|
+
for (const file of files) {
|
|
235
|
+
try {
|
|
236
|
+
const content = readFileSync(file, 'utf-8');
|
|
237
|
+
const relativePath = relative(cwd, file);
|
|
238
|
+
// Skip files that are likely generated or vendor
|
|
239
|
+
if (relativePath.includes('vendor') || relativePath.includes('.min.')) {
|
|
240
|
+
continue;
|
|
241
|
+
}
|
|
242
|
+
// Extract colors
|
|
243
|
+
for (const pattern of COLOR_PATTERNS) {
|
|
244
|
+
const matches = content.matchAll(pattern);
|
|
245
|
+
for (const match of matches) {
|
|
246
|
+
const value = match[0].toLowerCase();
|
|
247
|
+
// Skip CSS variable references
|
|
248
|
+
if (!value.includes('var(')) {
|
|
249
|
+
addExtractedValue(extracted, value, 'color', relativePath);
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
}
|
|
253
|
+
// Extract spacing values
|
|
254
|
+
const spacingMatches = content.matchAll(SPACING_PATTERN);
|
|
255
|
+
for (const match of spacingMatches) {
|
|
256
|
+
if (match[1]) {
|
|
257
|
+
addExtractedValue(extracted, match[1], 'spacing', relativePath);
|
|
258
|
+
}
|
|
259
|
+
}
|
|
260
|
+
// Extract font sizes
|
|
261
|
+
const fontMatches = content.matchAll(FONT_SIZE_PATTERN);
|
|
262
|
+
for (const match of fontMatches) {
|
|
263
|
+
if (match[1]) {
|
|
264
|
+
addExtractedValue(extracted, match[1], 'fontSize', relativePath);
|
|
265
|
+
}
|
|
266
|
+
}
|
|
267
|
+
}
|
|
268
|
+
catch {
|
|
269
|
+
// Skip files that can't be read
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
}
|
|
273
|
+
function addExtractedValue(extracted, value, type, source) {
|
|
274
|
+
const key = `${type}:${value}`;
|
|
275
|
+
const existing = extracted.get(key);
|
|
276
|
+
if (existing) {
|
|
277
|
+
existing.count++;
|
|
278
|
+
if (!existing.sources.includes(source)) {
|
|
279
|
+
existing.sources.push(source);
|
|
280
|
+
}
|
|
281
|
+
}
|
|
282
|
+
else {
|
|
283
|
+
extracted.set(key, {
|
|
284
|
+
type,
|
|
285
|
+
value,
|
|
286
|
+
count: 1,
|
|
287
|
+
sources: [source],
|
|
288
|
+
});
|
|
289
|
+
}
|
|
290
|
+
}
|
|
291
|
+
function generateTokens(colors, spacing, fontSizes) {
|
|
292
|
+
const tokens = {
|
|
293
|
+
colors: {},
|
|
294
|
+
spacing: {},
|
|
295
|
+
typography: {
|
|
296
|
+
fontSizes: {},
|
|
297
|
+
},
|
|
298
|
+
};
|
|
299
|
+
// Sort by frequency (most used first)
|
|
300
|
+
colors.sort((a, b) => b.count - a.count);
|
|
301
|
+
spacing.sort((a, b) => b.count - a.count);
|
|
302
|
+
fontSizes.sort((a, b) => b.count - a.count);
|
|
303
|
+
// Generate color tokens
|
|
304
|
+
colors.forEach((color, i) => {
|
|
305
|
+
const name = generateColorName(color.value, i);
|
|
306
|
+
tokens.colors[name] = {
|
|
307
|
+
value: color.value,
|
|
308
|
+
description: `Used ${color.count}x`,
|
|
309
|
+
};
|
|
310
|
+
});
|
|
311
|
+
// Generate spacing tokens
|
|
312
|
+
spacing.forEach((space, i) => {
|
|
313
|
+
const name = generateSpacingName(space.value, i);
|
|
314
|
+
tokens.spacing[name] = {
|
|
315
|
+
value: space.value,
|
|
316
|
+
description: `Used ${space.count}x`,
|
|
317
|
+
};
|
|
318
|
+
});
|
|
319
|
+
// Generate font size tokens
|
|
320
|
+
fontSizes.forEach((size, i) => {
|
|
321
|
+
const name = generateFontSizeName(size.value, i);
|
|
322
|
+
tokens.typography.fontSizes[name] = {
|
|
323
|
+
value: size.value,
|
|
324
|
+
description: `Used ${size.count}x`,
|
|
325
|
+
};
|
|
326
|
+
});
|
|
327
|
+
return tokens;
|
|
328
|
+
}
|
|
329
|
+
function generateColorName(value, index) {
|
|
330
|
+
// Try to generate semantic names based on value
|
|
331
|
+
const lower = value.toLowerCase();
|
|
332
|
+
if (lower === '#fff' || lower === '#ffffff' || lower === 'rgb(255, 255, 255)') {
|
|
333
|
+
return 'white';
|
|
334
|
+
}
|
|
335
|
+
if (lower === '#000' || lower === '#000000' || lower === 'rgb(0, 0, 0)') {
|
|
336
|
+
return 'black';
|
|
337
|
+
}
|
|
338
|
+
// For other colors, use generic names
|
|
339
|
+
return `color-${index + 1}`;
|
|
340
|
+
}
|
|
341
|
+
function generateSpacingName(value, index) {
|
|
342
|
+
// Map common values to semantic names
|
|
343
|
+
const num = parseFloat(value);
|
|
344
|
+
if (value.includes('rem')) {
|
|
345
|
+
return `space-${Math.round(num * 4)}`;
|
|
346
|
+
}
|
|
347
|
+
if (value.includes('px')) {
|
|
348
|
+
if (num <= 4)
|
|
349
|
+
return 'space-xs';
|
|
350
|
+
if (num <= 8)
|
|
351
|
+
return 'space-sm';
|
|
352
|
+
if (num <= 16)
|
|
353
|
+
return 'space-md';
|
|
354
|
+
if (num <= 24)
|
|
355
|
+
return 'space-lg';
|
|
356
|
+
if (num <= 32)
|
|
357
|
+
return 'space-xl';
|
|
358
|
+
return `space-${index + 1}`;
|
|
359
|
+
}
|
|
360
|
+
return `space-${index + 1}`;
|
|
361
|
+
}
|
|
362
|
+
function generateFontSizeName(value, index) {
|
|
363
|
+
const num = parseFloat(value);
|
|
364
|
+
if (value.includes('px')) {
|
|
365
|
+
if (num <= 12)
|
|
366
|
+
return 'text-xs';
|
|
367
|
+
if (num <= 14)
|
|
368
|
+
return 'text-sm';
|
|
369
|
+
if (num <= 16)
|
|
370
|
+
return 'text-base';
|
|
371
|
+
if (num <= 18)
|
|
372
|
+
return 'text-lg';
|
|
373
|
+
if (num <= 20)
|
|
374
|
+
return 'text-xl';
|
|
375
|
+
if (num <= 24)
|
|
376
|
+
return 'text-2xl';
|
|
377
|
+
if (num <= 30)
|
|
378
|
+
return 'text-3xl';
|
|
379
|
+
return `text-${index + 1}`;
|
|
380
|
+
}
|
|
381
|
+
if (value.includes('rem')) {
|
|
382
|
+
if (num <= 0.75)
|
|
383
|
+
return 'text-xs';
|
|
384
|
+
if (num <= 0.875)
|
|
385
|
+
return 'text-sm';
|
|
386
|
+
if (num <= 1)
|
|
387
|
+
return 'text-base';
|
|
388
|
+
if (num <= 1.125)
|
|
389
|
+
return 'text-lg';
|
|
390
|
+
if (num <= 1.25)
|
|
391
|
+
return 'text-xl';
|
|
392
|
+
return `text-${index + 1}`;
|
|
393
|
+
}
|
|
394
|
+
return `text-${index + 1}`;
|
|
395
|
+
}
|
|
396
|
+
function generateCssVariables(tokens) {
|
|
397
|
+
const lines = [
|
|
398
|
+
'/* Generated by buoy bootstrap */',
|
|
399
|
+
'/* Review and rename these variables as needed */',
|
|
400
|
+
'',
|
|
401
|
+
':root {',
|
|
402
|
+
];
|
|
403
|
+
// Colors
|
|
404
|
+
if (Object.keys(tokens.colors).length > 0) {
|
|
405
|
+
lines.push(' /* Colors */');
|
|
406
|
+
for (const [name, token] of Object.entries(tokens.colors)) {
|
|
407
|
+
lines.push(` --${name}: ${token.value};`);
|
|
408
|
+
}
|
|
409
|
+
lines.push('');
|
|
410
|
+
}
|
|
411
|
+
// Spacing
|
|
412
|
+
if (Object.keys(tokens.spacing).length > 0) {
|
|
413
|
+
lines.push(' /* Spacing */');
|
|
414
|
+
for (const [name, token] of Object.entries(tokens.spacing)) {
|
|
415
|
+
lines.push(` --${name}: ${token.value};`);
|
|
416
|
+
}
|
|
417
|
+
lines.push('');
|
|
418
|
+
}
|
|
419
|
+
// Typography
|
|
420
|
+
if (Object.keys(tokens.typography.fontSizes).length > 0) {
|
|
421
|
+
lines.push(' /* Typography */');
|
|
422
|
+
for (const [name, token] of Object.entries(tokens.typography.fontSizes)) {
|
|
423
|
+
lines.push(` --${name}: ${token.value};`);
|
|
424
|
+
}
|
|
425
|
+
}
|
|
426
|
+
lines.push('}');
|
|
427
|
+
lines.push('');
|
|
428
|
+
return lines.join('\n');
|
|
429
|
+
}
|
|
430
|
+
function generateTailwindConfig(tokens) {
|
|
431
|
+
const colors = {};
|
|
432
|
+
const spacing = {};
|
|
433
|
+
const fontSize = {};
|
|
434
|
+
for (const [name, token] of Object.entries(tokens.colors)) {
|
|
435
|
+
colors[name] = token.value;
|
|
436
|
+
}
|
|
437
|
+
for (const [name, token] of Object.entries(tokens.spacing)) {
|
|
438
|
+
spacing[name.replace('space-', '')] = token.value;
|
|
439
|
+
}
|
|
440
|
+
for (const [name, token] of Object.entries(tokens.typography.fontSizes)) {
|
|
441
|
+
fontSize[name.replace('text-', '')] = token.value;
|
|
442
|
+
}
|
|
443
|
+
return `// Generated by buoy bootstrap
|
|
444
|
+
// Review and rename these values as needed
|
|
445
|
+
|
|
446
|
+
/** @type {import('tailwindcss').Config} */
|
|
447
|
+
module.exports = {
|
|
448
|
+
theme: {
|
|
449
|
+
extend: {
|
|
450
|
+
colors: ${JSON.stringify(colors, null, 6).replace(/\n/g, '\n ')},
|
|
451
|
+
spacing: ${JSON.stringify(spacing, null, 6).replace(/\n/g, '\n ')},
|
|
452
|
+
fontSize: ${JSON.stringify(fontSize, null, 6).replace(/\n/g, '\n ')},
|
|
453
|
+
},
|
|
454
|
+
},
|
|
455
|
+
};
|
|
456
|
+
`;
|
|
457
|
+
}
|
|
458
|
+
//# sourceMappingURL=bootstrap.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bootstrap.js","sourceRoot":"","sources":["../../src/commands/bootstrap.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"build.d.ts","sourceRoot":"","sources":["../../src/commands/build.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAwFpC,wBAAgB,kBAAkB,IAAI,OAAO,CAyH5C"}
|