@buoy-design/cli 0.1.1 → 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.
Files changed (119) hide show
  1. package/dist/commands/audit.d.ts +3 -0
  2. package/dist/commands/audit.d.ts.map +1 -0
  3. package/dist/commands/audit.js +235 -0
  4. package/dist/commands/audit.js.map +1 -0
  5. package/dist/commands/check.d.ts +16 -0
  6. package/dist/commands/check.d.ts.map +1 -0
  7. package/dist/commands/check.js +168 -0
  8. package/dist/commands/check.js.map +1 -0
  9. package/dist/commands/ci.d.ts.map +1 -1
  10. package/dist/commands/ci.js +85 -81
  11. package/dist/commands/ci.js.map +1 -1
  12. package/dist/commands/compare.d.ts +3 -0
  13. package/dist/commands/compare.d.ts.map +1 -0
  14. package/dist/commands/compare.js +170 -0
  15. package/dist/commands/compare.js.map +1 -0
  16. package/dist/commands/drift.d.ts.map +1 -1
  17. package/dist/commands/drift.js +40 -55
  18. package/dist/commands/drift.js.map +1 -1
  19. package/dist/commands/explain.d.ts +3 -0
  20. package/dist/commands/explain.d.ts.map +1 -0
  21. package/dist/commands/explain.js +212 -0
  22. package/dist/commands/explain.js.map +1 -0
  23. package/dist/commands/graph.d.ts +3 -0
  24. package/dist/commands/graph.d.ts.map +1 -0
  25. package/dist/commands/graph.js +430 -0
  26. package/dist/commands/graph.js.map +1 -0
  27. package/dist/commands/index.d.ts +6 -1
  28. package/dist/commands/index.d.ts.map +1 -1
  29. package/dist/commands/index.js +6 -1
  30. package/dist/commands/index.js.map +1 -1
  31. package/dist/commands/init.d.ts +1 -1
  32. package/dist/commands/init.d.ts.map +1 -1
  33. package/dist/commands/init.js +368 -176
  34. package/dist/commands/init.js.map +1 -1
  35. package/dist/commands/scan.d.ts.map +1 -1
  36. package/dist/commands/scan.js +56 -16
  37. package/dist/commands/scan.js.map +1 -1
  38. package/dist/commands/status.d.ts.map +1 -1
  39. package/dist/commands/status.js +40 -11
  40. package/dist/commands/status.js.map +1 -1
  41. package/dist/commands/tokens.d.ts +3 -0
  42. package/dist/commands/tokens.d.ts.map +1 -0
  43. package/dist/commands/tokens.js +261 -0
  44. package/dist/commands/tokens.js.map +1 -0
  45. package/dist/config/auto-detect.d.ts +21 -0
  46. package/dist/config/auto-detect.d.ts.map +1 -0
  47. package/dist/config/auto-detect.js +278 -0
  48. package/dist/config/auto-detect.js.map +1 -0
  49. package/dist/config/loader.d.ts.map +1 -1
  50. package/dist/config/loader.js +17 -0
  51. package/dist/config/loader.js.map +1 -1
  52. package/dist/config/schema.d.ts +63 -63
  53. package/dist/config/schema.d.ts.map +1 -1
  54. package/dist/config/schema.js +20 -2
  55. package/dist/config/schema.js.map +1 -1
  56. package/dist/constants.d.ts +36 -0
  57. package/dist/constants.d.ts.map +1 -0
  58. package/dist/constants.js +37 -0
  59. package/dist/constants.js.map +1 -0
  60. package/dist/detect/frameworks.d.ts +5 -1
  61. package/dist/detect/frameworks.d.ts.map +1 -1
  62. package/dist/detect/frameworks.js +35 -9
  63. package/dist/detect/frameworks.js.map +1 -1
  64. package/dist/detect/index.d.ts +1 -0
  65. package/dist/detect/index.d.ts.map +1 -1
  66. package/dist/detect/index.js +3 -0
  67. package/dist/detect/index.js.map +1 -1
  68. package/dist/detect/monorepo-patterns.d.ts +54 -0
  69. package/dist/detect/monorepo-patterns.d.ts.map +1 -0
  70. package/dist/detect/monorepo-patterns.js +209 -0
  71. package/dist/detect/monorepo-patterns.js.map +1 -0
  72. package/dist/detect/project-detector.d.ts +1 -1
  73. package/dist/detect/project-detector.d.ts.map +1 -1
  74. package/dist/detect/project-detector.js +132 -0
  75. package/dist/detect/project-detector.js.map +1 -1
  76. package/dist/explain/agents.d.ts +31 -0
  77. package/dist/explain/agents.d.ts.map +1 -0
  78. package/dist/explain/agents.js +507 -0
  79. package/dist/explain/agents.js.map +1 -0
  80. package/dist/hooks/index.d.ts +26 -0
  81. package/dist/hooks/index.d.ts.map +1 -0
  82. package/dist/hooks/index.js +283 -0
  83. package/dist/hooks/index.js.map +1 -0
  84. package/dist/index.d.ts.map +1 -1
  85. package/dist/index.js +7 -2
  86. package/dist/index.js.map +1 -1
  87. package/dist/integrations/github-formatter.d.ts +54 -2
  88. package/dist/integrations/github-formatter.d.ts.map +1 -1
  89. package/dist/integrations/github-formatter.js +369 -47
  90. package/dist/integrations/github-formatter.js.map +1 -1
  91. package/dist/integrations/github.d.ts +75 -0
  92. package/dist/integrations/github.d.ts.map +1 -1
  93. package/dist/integrations/github.js +212 -0
  94. package/dist/integrations/github.js.map +1 -1
  95. package/dist/integrations/index.d.ts +3 -3
  96. package/dist/integrations/index.d.ts.map +1 -1
  97. package/dist/integrations/index.js +2 -2
  98. package/dist/integrations/index.js.map +1 -1
  99. package/dist/output/formatters.d.ts.map +1 -1
  100. package/dist/output/formatters.js +5 -10
  101. package/dist/output/formatters.js.map +1 -1
  102. package/dist/services/ai-analysis.d.ts +54 -0
  103. package/dist/services/ai-analysis.d.ts.map +1 -0
  104. package/dist/services/ai-analysis.js +239 -0
  105. package/dist/services/ai-analysis.js.map +1 -0
  106. package/dist/services/drift-analysis.d.ts +77 -0
  107. package/dist/services/drift-analysis.d.ts.map +1 -0
  108. package/dist/services/drift-analysis.js +145 -0
  109. package/dist/services/drift-analysis.js.map +1 -0
  110. package/package.json +16 -13
  111. package/LICENSE +0 -21
  112. package/dist/commands/__tests__/ci.test.d.ts +0 -2
  113. package/dist/commands/__tests__/ci.test.d.ts.map +0 -1
  114. package/dist/commands/__tests__/ci.test.js +0 -33
  115. package/dist/commands/__tests__/ci.test.js.map +0 -1
  116. package/dist/commands/bootstrap.d.ts +0 -3
  117. package/dist/commands/bootstrap.d.ts.map +0 -1
  118. package/dist/commands/bootstrap.js +0 -458
  119. package/dist/commands/bootstrap.js.map +0 -1
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare function createAuditCommand(): Command;
3
+ //# sourceMappingURL=audit.d.ts.map
@@ -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,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"}
@@ -0,0 +1,168 @@
1
+ // apps/cli/src/commands/check.ts
2
+ import { Command } from "commander";
3
+ import { loadConfig, getConfigPath } from "../config/loader.js";
4
+ import { execSync } from "node:child_process";
5
+ import { DriftAnalysisService, hasDriftsAboveThreshold, calculateDriftSummary, } from "../services/drift-analysis.js";
6
+ /**
7
+ * Get list of staged files from git
8
+ */
9
+ export function getStagedFiles() {
10
+ try {
11
+ const output = execSync("git diff --cached --name-only --diff-filter=ACMR", {
12
+ encoding: "utf-8",
13
+ stdio: ["pipe", "pipe", "pipe"],
14
+ });
15
+ return output
16
+ .split("\n")
17
+ .map((f) => f.trim())
18
+ .filter(Boolean);
19
+ }
20
+ catch {
21
+ return [];
22
+ }
23
+ }
24
+ /**
25
+ * Filter files to only include scannable extensions
26
+ */
27
+ export function filterScannableFiles(files) {
28
+ const scannableExtensions = [
29
+ // React/JS
30
+ ".tsx",
31
+ ".jsx",
32
+ ".ts",
33
+ ".js",
34
+ // Vue
35
+ ".vue",
36
+ // Svelte
37
+ ".svelte",
38
+ // Angular
39
+ ".component.ts",
40
+ // Templates
41
+ ".blade.php",
42
+ ".erb",
43
+ ".twig",
44
+ ".njk",
45
+ ".html",
46
+ // Tokens
47
+ ".css",
48
+ ".scss",
49
+ ".json",
50
+ ];
51
+ return files.filter((file) => scannableExtensions.some((ext) => file.endsWith(ext)));
52
+ }
53
+ /**
54
+ * Check if a drift signal is from a staged file
55
+ */
56
+ export function isFromStagedFile(drift, stagedFiles) {
57
+ const location = drift.source.location;
58
+ if (!location)
59
+ return true; // Include drifts without location
60
+ // Extract file path from location (format: "path/to/file.tsx:line")
61
+ const filePath = location.split(":")[0];
62
+ // Check if the file path matches any staged file
63
+ if (!filePath)
64
+ return true;
65
+ return stagedFiles.some((stagedFile) => filePath === stagedFile ||
66
+ filePath.endsWith(`/${stagedFile}`) ||
67
+ stagedFile.endsWith(`/${filePath}`));
68
+ }
69
+ export function createCheckCommand() {
70
+ const cmd = new Command("check")
71
+ .description("Fast drift check for pre-commit hooks")
72
+ .option("--fail-on <severity>", "Exit 1 if drift at this severity or higher: critical, warning, info, none", "critical")
73
+ .option("--staged", "Only check staged files (for pre-commit hooks)")
74
+ .option("--quiet", "Suppress all output except errors")
75
+ .option("-v, --verbose", "Show detailed output")
76
+ .action(async (options) => {
77
+ const log = options.quiet
78
+ ? () => { }
79
+ : options.verbose
80
+ ? console.error.bind(console)
81
+ : () => { };
82
+ try {
83
+ // Check for config
84
+ if (!getConfigPath()) {
85
+ log("No buoy.config.mjs found, skipping check");
86
+ process.exit(0);
87
+ }
88
+ // Get staged files if --staged flag is used
89
+ let stagedFiles = [];
90
+ if (options.staged) {
91
+ stagedFiles = getStagedFiles();
92
+ const scannableStaged = filterScannableFiles(stagedFiles);
93
+ if (scannableStaged.length === 0) {
94
+ log("No scannable files staged, skipping check");
95
+ process.exit(0);
96
+ }
97
+ log(`Checking ${scannableStaged.length} staged file(s)...`);
98
+ }
99
+ log("Loading configuration...");
100
+ const { config } = await loadConfig();
101
+ log("Scanning for drift...");
102
+ // Use consolidated drift analysis service
103
+ const service = new DriftAnalysisService(config);
104
+ const result = await service.analyze({
105
+ onProgress: log,
106
+ includeBaseline: false,
107
+ });
108
+ let drifts = result.drifts;
109
+ // Filter to staged files only if --staged is used
110
+ if (options.staged && stagedFiles.length > 0) {
111
+ drifts = drifts.filter((d) => isFromStagedFile(d, stagedFiles));
112
+ }
113
+ // Determine exit code using shared utility
114
+ const failOn = options.failOn;
115
+ const exitCode = hasDriftsAboveThreshold(drifts, failOn) ? 1 : 0;
116
+ // Summary counts using shared utility
117
+ const summary = calculateDriftSummary(drifts);
118
+ // Output
119
+ if (!options.quiet) {
120
+ if (exitCode === 0) {
121
+ if (summary.total === 0) {
122
+ console.log("+ No drift detected");
123
+ }
124
+ else {
125
+ console.log(`+ Check passed (${summary.total} drift${summary.total !== 1 ? "s" : ""} below threshold)`);
126
+ }
127
+ }
128
+ else {
129
+ console.log("x Drift detected");
130
+ console.log("");
131
+ console.log(` Critical: ${summary.critical}`);
132
+ console.log(` Warning: ${summary.warning}`);
133
+ console.log(` Info: ${summary.info}`);
134
+ if (options.verbose) {
135
+ console.log("");
136
+ console.log("Issues:");
137
+ for (const drift of drifts.slice(0, 10)) {
138
+ const sev = drift.severity === "critical"
139
+ ? "!"
140
+ : drift.severity === "warning"
141
+ ? "~"
142
+ : "i";
143
+ const loc = drift.source.location
144
+ ? ` (${drift.source.location})`
145
+ : "";
146
+ console.log(` [${sev}] ${drift.source.entityName}: ${drift.message}${loc}`);
147
+ }
148
+ if (drifts.length > 10) {
149
+ console.log(` ... and ${drifts.length - 10} more`);
150
+ }
151
+ }
152
+ console.log("");
153
+ console.log("Run `buoy drift check` for details");
154
+ }
155
+ }
156
+ process.exit(exitCode);
157
+ }
158
+ catch (err) {
159
+ const message = err instanceof Error ? err.message : String(err);
160
+ if (!options.quiet) {
161
+ console.error(`Error: ${message}`);
162
+ }
163
+ process.exit(1);
164
+ }
165
+ });
166
+ return cmd;
167
+ }
168
+ //# sourceMappingURL=check.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"check.js","sourceRoot":"","sources":["../../src/commands/check.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"ci.d.ts","sourceRoot":"","sources":["../../src/commands/ci.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAIpC,OAAO,KAAK,EAAe,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAO/D,MAAM,WAAW,QAAQ;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE;QACP,KAAK,EAAE,MAAM,CAAC;QACd,QAAQ,EAAE,MAAM,CAAC;QACjB,OAAO,EAAE,MAAM,CAAC;QAChB,IAAI,EAAE,MAAM,CAAC;KACd,CAAC;IACF,SAAS,EAAE,KAAK,CAAC;QACf,IAAI,EAAE,MAAM,CAAC;QACb,QAAQ,EAAE,QAAQ,CAAC;QACnB,SAAS,EAAE,MAAM,CAAC;QAClB,OAAO,EAAE,MAAM,CAAC;QAChB,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,UAAU,CAAC,EAAE,MAAM,CAAC;KACrB,CAAC,CAAC;IACH,QAAQ,EAAE,MAAM,CAAC;CAClB;AAoED,wBAAgB,eAAe,IAAI,OAAO,CAuKzC"}
1
+ {"version":3,"file":"ci.d.ts","sourceRoot":"","sources":["../../src/commands/ci.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAGpC,OAAO,KAAK,EAAe,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAc/D,MAAM,WAAW,QAAQ;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE;QACP,KAAK,EAAE,MAAM,CAAC;QACd,QAAQ,EAAE,MAAM,CAAC;QACjB,OAAO,EAAE,MAAM,CAAC;QAChB,IAAI,EAAE,MAAM,CAAC;KACd,CAAC;IACF,SAAS,EAAE,KAAK,CAAC;QACf,IAAI,EAAE,MAAM,CAAC;QACb,QAAQ,EAAE,QAAQ,CAAC;QACnB,SAAS,EAAE,MAAM,CAAC;QAClB,OAAO,EAAE,MAAM,CAAC;QAChB,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,UAAU,CAAC,EAAE,MAAM,CAAC;KACrB,CAAC,CAAC;IACH,QAAQ,EAAE,MAAM,CAAC;CAClB;AA8DD,wBAAgB,eAAe,IAAI,OAAO,CAoLzC"}