@buoy-design/cli 0.3.38 → 0.4.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.
Files changed (153) hide show
  1. package/dist/commands/designmd/diff.d.ts +34 -0
  2. package/dist/commands/designmd/diff.d.ts.map +1 -0
  3. package/dist/commands/designmd/diff.js +35 -0
  4. package/dist/commands/designmd/diff.js.map +1 -0
  5. package/dist/commands/designmd/export.d.ts +11 -0
  6. package/dist/commands/designmd/export.d.ts.map +1 -0
  7. package/dist/commands/designmd/export.js +37 -0
  8. package/dist/commands/designmd/export.js.map +1 -0
  9. package/dist/commands/designmd/index.d.ts +3 -0
  10. package/dist/commands/designmd/index.d.ts.map +1 -0
  11. package/dist/commands/designmd/index.js +57 -0
  12. package/dist/commands/designmd/index.js.map +1 -0
  13. package/dist/commands/designmd/init.d.ts +17 -0
  14. package/dist/commands/designmd/init.d.ts.map +1 -0
  15. package/dist/commands/designmd/init.js +89 -0
  16. package/dist/commands/designmd/init.js.map +1 -0
  17. package/dist/commands/designmd/lint.d.ts +10 -0
  18. package/dist/commands/designmd/lint.d.ts.map +1 -0
  19. package/dist/commands/designmd/lint.js +13 -0
  20. package/dist/commands/designmd/lint.js.map +1 -0
  21. package/dist/commands/index.d.ts +2 -0
  22. package/dist/commands/index.d.ts.map +1 -1
  23. package/dist/commands/index.js +2 -0
  24. package/dist/commands/index.js.map +1 -1
  25. package/dist/commands/system.d.ts +3 -0
  26. package/dist/commands/system.d.ts.map +1 -0
  27. package/dist/commands/system.js +119 -0
  28. package/dist/commands/system.js.map +1 -0
  29. package/dist/config/auto-detect.d.ts.map +1 -1
  30. package/dist/config/auto-detect.js +4 -0
  31. package/dist/config/auto-detect.js.map +1 -1
  32. package/dist/config/schema.d.ts +89 -0
  33. package/dist/config/schema.d.ts.map +1 -1
  34. package/dist/config/schema.js +15 -0
  35. package/dist/config/schema.js.map +1 -1
  36. package/dist/index.d.ts.map +1 -1
  37. package/dist/index.js +7 -3
  38. package/dist/index.js.map +1 -1
  39. package/dist/scan/orchestrator.d.ts +7 -0
  40. package/dist/scan/orchestrator.d.ts.map +1 -1
  41. package/dist/scan/orchestrator.js +47 -0
  42. package/dist/scan/orchestrator.js.map +1 -1
  43. package/dist/services/remote-check.js +2 -0
  44. package/dist/services/remote-check.js.map +1 -1
  45. package/dist/services/system-map.d.ts +51 -0
  46. package/dist/services/system-map.d.ts.map +1 -0
  47. package/dist/services/system-map.js +135 -0
  48. package/dist/services/system-map.js.map +1 -0
  49. package/package.json +4 -3
  50. package/dist/commands/audit.d.ts +0 -3
  51. package/dist/commands/audit.d.ts.map +0 -1
  52. package/dist/commands/audit.js +0 -235
  53. package/dist/commands/audit.js.map +0 -1
  54. package/dist/commands/baseline.d.ts +0 -47
  55. package/dist/commands/baseline.d.ts.map +0 -1
  56. package/dist/commands/baseline.js +0 -327
  57. package/dist/commands/baseline.js.map +0 -1
  58. package/dist/commands/begin.d.ts +0 -9
  59. package/dist/commands/begin.d.ts.map +0 -1
  60. package/dist/commands/begin.js +0 -827
  61. package/dist/commands/begin.js.map +0 -1
  62. package/dist/commands/build.d.ts +0 -8
  63. package/dist/commands/build.d.ts.map +0 -1
  64. package/dist/commands/build.js +0 -26
  65. package/dist/commands/build.js.map +0 -1
  66. package/dist/commands/check.d.ts.sync-conflict-20260305-170128-6PCZ3ZU.map +0 -1
  67. package/dist/commands/check.js.sync-conflict-20260313-114446-6PCZ3ZU.map +0 -1
  68. package/dist/commands/check.sync-conflict-20260305-155016-6PCZ3ZU.d.ts +0 -26
  69. package/dist/commands/check.sync-conflict-20260305-155016-6PCZ3ZU.d.ts.map +0 -1
  70. package/dist/commands/check.sync-conflict-20260305-155016-6PCZ3ZU.js +0 -438
  71. package/dist/commands/check.sync-conflict-20260305-155016-6PCZ3ZU.js.map +0 -1
  72. package/dist/commands/commands.d.ts +0 -8
  73. package/dist/commands/commands.d.ts.map +0 -1
  74. package/dist/commands/commands.js +0 -148
  75. package/dist/commands/commands.js.map +0 -1
  76. package/dist/commands/components-query.d.ts +0 -13
  77. package/dist/commands/components-query.d.ts.map +0 -1
  78. package/dist/commands/components-query.js +0 -263
  79. package/dist/commands/components-query.js.map +0 -1
  80. package/dist/commands/components.d.ts +0 -8
  81. package/dist/commands/components.d.ts.map +0 -1
  82. package/dist/commands/components.js +0 -14
  83. package/dist/commands/components.js.map +0 -1
  84. package/dist/commands/dock.js.sync-conflict-20260313-172700-6PCZ3ZU.map +0 -1
  85. package/dist/commands/dock.sync-conflict-20260309-191923-6PCZ3ZU.js +0 -1006
  86. package/dist/commands/history.d.ts +0 -3
  87. package/dist/commands/history.d.ts.map +0 -1
  88. package/dist/commands/history.js +0 -352
  89. package/dist/commands/history.js.map +0 -1
  90. package/dist/commands/plugins.d.ts +0 -3
  91. package/dist/commands/plugins.d.ts.map +0 -1
  92. package/dist/commands/plugins.js +0 -63
  93. package/dist/commands/plugins.js.map +0 -1
  94. package/dist/commands/show.d.ts.sync-conflict-20260306-165917-6PCZ3ZU.map +0 -1
  95. package/dist/commands/show.sync-conflict-20260305-140755-6PCZ3ZU.js +0 -1735
  96. package/dist/commands/show.sync-conflict-20260309-130326-6PCZ3ZU.d.ts +0 -11
  97. package/dist/commands/show.sync-conflict-20260309-130326-6PCZ3ZU.d.ts.map +0 -1
  98. package/dist/commands/show.sync-conflict-20260309-130326-6PCZ3ZU.js +0 -1735
  99. package/dist/commands/show.sync-conflict-20260309-130326-6PCZ3ZU.js.map +0 -1
  100. package/dist/config/loader.d.ts.sync-conflict-20260313-145931-6PCZ3ZU.map +0 -1
  101. package/dist/config/loader.js.sync-conflict-20260309-033512-6PCZ3ZU.map +0 -1
  102. package/dist/config/loader.sync-conflict-20260307-175208-6PCZ3ZU.d.ts +0 -8
  103. package/dist/config/loader.sync-conflict-20260307-175208-6PCZ3ZU.d.ts.map +0 -1
  104. package/dist/config/loader.sync-conflict-20260307-175208-6PCZ3ZU.js +0 -162
  105. package/dist/config/loader.sync-conflict-20260307-175208-6PCZ3ZU.js.map +0 -1
  106. package/dist/config/schema.d.ts.sync-conflict-20260309-154654-6PCZ3ZU.map +0 -1
  107. package/dist/config/schema.sync-conflict-20260309-135703-6PCZ3ZU.js +0 -214
  108. package/dist/config/schema.sync-conflict-20260313-173553-6PCZ3ZU.d.ts +0 -1812
  109. package/dist/config/schema.sync-conflict-20260313-173553-6PCZ3ZU.d.ts.map +0 -1
  110. package/dist/config/schema.sync-conflict-20260313-173553-6PCZ3ZU.js +0 -214
  111. package/dist/config/schema.sync-conflict-20260313-173553-6PCZ3ZU.js.map +0 -1
  112. package/dist/detect/frameworks.js.sync-conflict-20260306-123756-6PCZ3ZU.map +0 -1
  113. package/dist/detect/frameworks.sync-conflict-20260313-150557-6PCZ3ZU.js +0 -252
  114. package/dist/detect/monorepo-patterns.js.sync-conflict-20260309-155400-6PCZ3ZU.map +0 -1
  115. package/dist/detect/monorepo-patterns.sync-conflict-20260311-182757-6PCZ3ZU.js +0 -209
  116. package/dist/hooks/index.d.ts.sync-conflict-20260306-220901-6PCZ3ZU.map +0 -1
  117. package/dist/hooks/index.sync-conflict-20260311-082258-6PCZ3ZU.js +0 -616
  118. package/dist/output/formatters.js.sync-conflict-20260306-134702-6PCZ3ZU.map +0 -1
  119. package/dist/output/formatters.sync-conflict-20260306-180804-6PCZ3ZU.js +0 -867
  120. package/dist/output/formatters.sync-conflict-20260307-131418-5SN2GZG.d.ts +0 -29
  121. package/dist/output/formatters.sync-conflict-20260307-131418-5SN2GZG.d.ts.map +0 -1
  122. package/dist/output/formatters.sync-conflict-20260307-131418-5SN2GZG.js +0 -867
  123. package/dist/output/formatters.sync-conflict-20260307-131418-5SN2GZG.js.map +0 -1
  124. package/dist/output/formatters.sync-conflict-20260307-143122-5SN2GZG.d.ts +0 -29
  125. package/dist/output/formatters.sync-conflict-20260307-143122-5SN2GZG.d.ts.map +0 -1
  126. package/dist/output/formatters.sync-conflict-20260307-143122-5SN2GZG.js +0 -867
  127. package/dist/output/formatters.sync-conflict-20260307-143122-5SN2GZG.js.map +0 -1
  128. package/dist/output/index.sync-conflict-20260309-222859-6PCZ3ZU.js +0 -5
  129. package/dist/output/reporters.d.sync-conflict-20260309-193820-6PCZ3ZU.ts +0 -38
  130. package/dist/output/reporters.d.ts.sync-conflict-20260306-193811-6PCZ3ZU.map +0 -1
  131. package/dist/output/reporters.js.sync-conflict-20260313-164629-6PCZ3ZU.map +0 -1
  132. package/dist/output/reporters.sync-conflict-20260309-030558-6PCZ3ZU.js +0 -182
  133. package/dist/output/reports.d.ts.sync-conflict-20260307-172149-6PCZ3ZU.map +0 -1
  134. package/dist/output/reports.js.sync-conflict-20260305-161643-6PCZ3ZU.map +0 -1
  135. package/dist/output/reports.sync-conflict-20260305-211951-6PCZ3ZU.js +0 -393
  136. package/dist/output/visuals.d.ts +0 -53
  137. package/dist/output/visuals.d.ts.map +0 -1
  138. package/dist/output/visuals.js +0 -194
  139. package/dist/output/visuals.js.map +0 -1
  140. package/dist/services/drift-analysis.d.sync-conflict-20260306-151016-6PCZ3ZU.ts +0 -194
  141. package/dist/services/drift-analysis.d.ts.sync-conflict-20260307-175904-6PCZ3ZU.map +0 -1
  142. package/dist/services/drift-analysis.js.sync-conflict-20260313-152307-6PCZ3ZU.map +0 -1
  143. package/dist/services/drift-analysis.sync-conflict-20260309-133811-6PCZ3ZU.d.ts +0 -194
  144. package/dist/services/drift-analysis.sync-conflict-20260309-133811-6PCZ3ZU.d.ts.map +0 -1
  145. package/dist/services/drift-analysis.sync-conflict-20260309-133811-6PCZ3ZU.js +0 -1022
  146. package/dist/services/drift-analysis.sync-conflict-20260309-133811-6PCZ3ZU.js.map +0 -1
  147. package/dist/services/skill-export.d.ts.sync-conflict-20260309-171021-6PCZ3ZU.map +0 -1
  148. package/dist/services/skill-export.js.sync-conflict-20260313-155735-6PCZ3ZU.map +0 -1
  149. package/dist/services/skill-export.sync-conflict-20260309-144621-6PCZ3ZU.d.ts +0 -109
  150. package/dist/services/skill-export.sync-conflict-20260309-144621-6PCZ3ZU.d.ts.map +0 -1
  151. package/dist/services/skill-export.sync-conflict-20260309-144621-6PCZ3ZU.js +0 -737
  152. package/dist/services/skill-export.sync-conflict-20260309-144621-6PCZ3ZU.js.map +0 -1
  153. package/dist/services/skill-export.sync-conflict-20260313-161246-6PCZ3ZU.js +0 -737
@@ -0,0 +1,51 @@
1
+ import type { Component, DesignToken } from "@buoy-design/core";
2
+ import type { SystemConfig } from "../config/schema.js";
3
+ export type SystemEntityKind = "component" | "token";
4
+ export type SystemEntityClassification = "canonical" | "unmanaged";
5
+ export interface SystemConsumer {
6
+ file: string;
7
+ owner?: string;
8
+ usages: number;
9
+ }
10
+ export interface SystemEntity {
11
+ id: string;
12
+ kind: SystemEntityKind;
13
+ name: string;
14
+ path?: string;
15
+ classification: SystemEntityClassification;
16
+ owner?: string;
17
+ usageCount: number;
18
+ consumers: SystemConsumer[];
19
+ risk: "low" | "medium" | "high";
20
+ deprecated: boolean;
21
+ }
22
+ export interface SystemMap {
23
+ generatedAt: string;
24
+ canonicalConfigured: boolean;
25
+ summary: {
26
+ canonicalComponents: number;
27
+ canonicalTokens: number;
28
+ unmanagedComponents: number;
29
+ unmanagedTokens: number;
30
+ observedUsages: number;
31
+ };
32
+ components: SystemEntity[];
33
+ tokens: SystemEntity[];
34
+ }
35
+ export interface ChangeImpact {
36
+ entity: SystemEntity;
37
+ recommendation: string;
38
+ }
39
+ /**
40
+ * Build a code-first map of the current design-system surface. It deliberately
41
+ * does not need a design-tool integration: canonical intent is declared in
42
+ * config and actual usage is observed from code.
43
+ */
44
+ export declare function buildSystemMap(input: {
45
+ projectRoot: string;
46
+ config: SystemConfig;
47
+ components: Component[];
48
+ tokens: DesignToken[];
49
+ }): Promise<SystemMap>;
50
+ export declare function findChangeImpact(map: SystemMap, name: string, kind?: SystemEntityKind): ChangeImpact | undefined;
51
+ //# sourceMappingURL=system-map.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"system-map.d.ts","sourceRoot":"","sources":["../../src/services/system-map.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAMhE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAExD,MAAM,MAAM,gBAAgB,GAAG,WAAW,GAAG,OAAO,CAAC;AACrD,MAAM,MAAM,0BAA0B,GAAG,WAAW,GAAG,WAAW,CAAC;AAEnE,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,gBAAgB,CAAC;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,cAAc,EAAE,0BAA0B,CAAC;IAC3C,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,cAAc,EAAE,CAAC;IAC5B,IAAI,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,CAAC;IAChC,UAAU,EAAE,OAAO,CAAC;CACrB;AAED,MAAM,WAAW,SAAS;IACxB,WAAW,EAAE,MAAM,CAAC;IACpB,mBAAmB,EAAE,OAAO,CAAC;IAC7B,OAAO,EAAE;QACP,mBAAmB,EAAE,MAAM,CAAC;QAC5B,eAAe,EAAE,MAAM,CAAC;QACxB,mBAAmB,EAAE,MAAM,CAAC;QAC5B,eAAe,EAAE,MAAM,CAAC;QACxB,cAAc,EAAE,MAAM,CAAC;KACxB,CAAC;IACF,UAAU,EAAE,YAAY,EAAE,CAAC;IAC3B,MAAM,EAAE,YAAY,EAAE,CAAC;CACxB;AAED,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,YAAY,CAAC;IACrB,cAAc,EAAE,MAAM,CAAC;CACxB;AA+CD;;;;GAIG;AACH,wBAAsB,cAAc,CAAC,KAAK,EAAE;IAC1C,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,YAAY,CAAC;IACrB,UAAU,EAAE,SAAS,EAAE,CAAC;IACxB,MAAM,EAAE,WAAW,EAAE,CAAC;CACvB,GAAG,OAAO,CAAC,SAAS,CAAC,CA6GrB;AAED,wBAAgB,gBAAgB,CAC9B,GAAG,EAAE,SAAS,EACd,IAAI,EAAE,MAAM,EACZ,IAAI,CAAC,EAAE,gBAAgB,GACtB,YAAY,GAAG,SAAS,CAuB1B"}
@@ -0,0 +1,135 @@
1
+ import { minimatch } from "minimatch";
2
+ import { collectUsages, normalizeComponentName, normalizeTokenName, } from "@buoy-design/core";
3
+ function sourcePath(entity) {
4
+ return "path" in entity.source ? entity.source.path : undefined;
5
+ }
6
+ function matches(path, patterns) {
7
+ return (!!path &&
8
+ patterns.some((pattern) => minimatch(path, pattern, { dot: true })));
9
+ }
10
+ function ownerFor(path, config) {
11
+ if (!path)
12
+ return undefined;
13
+ return config.owners.find((owner) => matches(path, owner.paths))?.name;
14
+ }
15
+ function riskFor(usageCount, consumerCount) {
16
+ if (usageCount >= 25 || consumerCount >= 3)
17
+ return "high";
18
+ if (usageCount >= 5 || consumerCount >= 2)
19
+ return "medium";
20
+ return "low";
21
+ }
22
+ function groupConsumers(usages, config) {
23
+ const counts = new Map();
24
+ for (const usage of usages) {
25
+ counts.set(usage.filePath, (counts.get(usage.filePath) ?? 0) + 1);
26
+ }
27
+ return [...counts.entries()]
28
+ .map(([file, count]) => ({
29
+ file,
30
+ usages: count,
31
+ owner: ownerFor(file, config),
32
+ }))
33
+ .sort((a, b) => b.usages - a.usages || a.file.localeCompare(b.file));
34
+ }
35
+ /**
36
+ * Build a code-first map of the current design-system surface. It deliberately
37
+ * does not need a design-tool integration: canonical intent is declared in
38
+ * config and actual usage is observed from code.
39
+ */
40
+ export async function buildSystemMap(input) {
41
+ const { projectRoot, config, components, tokens } = input;
42
+ const usages = await collectUsages({
43
+ projectRoot,
44
+ knownComponents: components.map((component) => component.name),
45
+ knownTokens: tokens.map((token) => token.name),
46
+ });
47
+ const componentUsageByName = new Map();
48
+ for (const usage of usages.componentUsages) {
49
+ const key = normalizeComponentName(usage.componentName);
50
+ componentUsageByName.set(key, [
51
+ ...(componentUsageByName.get(key) ?? []),
52
+ usage,
53
+ ]);
54
+ }
55
+ const tokenUsageByName = new Map();
56
+ for (const usage of usages.tokenUsages) {
57
+ const key = normalizeTokenName(usage.tokenName);
58
+ tokenUsageByName.set(key, [...(tokenUsageByName.get(key) ?? []), usage]);
59
+ }
60
+ const mapComponent = (component) => {
61
+ const path = sourcePath(component);
62
+ const consumers = groupConsumers(componentUsageByName.get(normalizeComponentName(component.name)) ?? [], config);
63
+ const usageCount = consumers.reduce((total, consumer) => total + consumer.usages, 0);
64
+ return {
65
+ id: component.id,
66
+ kind: "component",
67
+ name: component.name,
68
+ path,
69
+ classification: matches(path, config.components)
70
+ ? "canonical"
71
+ : "unmanaged",
72
+ owner: ownerFor(path, config),
73
+ usageCount,
74
+ consumers,
75
+ risk: riskFor(usageCount, consumers.length),
76
+ deprecated: component.metadata.deprecated === true,
77
+ };
78
+ };
79
+ const mapToken = (token) => {
80
+ const path = sourcePath(token);
81
+ const consumers = groupConsumers(tokenUsageByName.get(normalizeTokenName(token.name)) ?? [], config);
82
+ const usageCount = consumers.reduce((total, consumer) => total + consumer.usages, 0);
83
+ return {
84
+ id: token.id,
85
+ kind: "token",
86
+ name: token.name,
87
+ path,
88
+ classification: matches(path, config.tokens) ? "canonical" : "unmanaged",
89
+ owner: ownerFor(path, config),
90
+ usageCount,
91
+ consumers,
92
+ risk: riskFor(usageCount, consumers.length),
93
+ deprecated: token.metadata.deprecated === true,
94
+ };
95
+ };
96
+ const systemComponents = components
97
+ .map(mapComponent)
98
+ .sort((a, b) => b.usageCount - a.usageCount || a.name.localeCompare(b.name));
99
+ const systemTokens = tokens
100
+ .map(mapToken)
101
+ .sort((a, b) => b.usageCount - a.usageCount || a.name.localeCompare(b.name));
102
+ const allEntities = [...systemComponents, ...systemTokens];
103
+ return {
104
+ generatedAt: new Date().toISOString(),
105
+ canonicalConfigured: config.components.length > 0 || config.tokens.length > 0,
106
+ summary: {
107
+ canonicalComponents: systemComponents.filter((entity) => entity.classification === "canonical").length,
108
+ canonicalTokens: systemTokens.filter((entity) => entity.classification === "canonical").length,
109
+ unmanagedComponents: systemComponents.filter((entity) => entity.classification === "unmanaged").length,
110
+ unmanagedTokens: systemTokens.filter((entity) => entity.classification === "unmanaged").length,
111
+ observedUsages: allEntities.reduce((total, entity) => total + entity.usageCount, 0),
112
+ },
113
+ components: systemComponents,
114
+ tokens: systemTokens,
115
+ };
116
+ }
117
+ export function findChangeImpact(map, name, kind) {
118
+ const normalized = kind === "token" ? normalizeTokenName(name) : normalizeComponentName(name);
119
+ const candidates = [...map.components, ...map.tokens].filter((entity) => !kind || entity.kind === kind);
120
+ const entity = candidates.find((candidate) => {
121
+ const candidateName = candidate.kind === "token"
122
+ ? normalizeTokenName(candidate.name)
123
+ : normalizeComponentName(candidate.name);
124
+ return candidateName === normalized;
125
+ });
126
+ if (!entity)
127
+ return undefined;
128
+ const recommendation = entity.usageCount === 0
129
+ ? `No observed consumers. Confirm dynamic or external usage before removing ${entity.name}.`
130
+ : entity.risk === "high"
131
+ ? `Plan a staged migration: ${entity.name} has ${entity.usageCount} observed usages across ${entity.consumers.length} consumer file(s).`
132
+ : `Review the ${entity.consumers.length} observed consumer file(s) before changing ${entity.name}.`;
133
+ return { entity, recommendation };
134
+ }
135
+ //# sourceMappingURL=system-map.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"system-map.js","sourceRoot":"","sources":["../../src/services/system-map.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@buoy-design/cli",
3
- "version": "0.3.38",
3
+ "version": "0.4.1",
4
4
  "description": "Catch design drift before it ships",
5
5
  "type": "module",
6
6
  "license": "MIT",
@@ -33,6 +33,7 @@
33
33
  "types": "./dist/index.d.ts",
34
34
  "dependencies": {
35
35
  "@anthropic-ai/sdk": "^0.71.2",
36
+ "@google/design.md": "0.1.1",
36
37
  "@inquirer/prompts": "^8.1.0",
37
38
  "@octokit/rest": "^21.0.0",
38
39
  "chalk": "^5.3.0",
@@ -46,8 +47,8 @@
46
47
  "yaml": "^2.8.2",
47
48
  "zod": "^3.24.1",
48
49
  "zod-validation-error": "^5.0.0",
49
- "@buoy-design/scanners": "0.3.38",
50
- "@buoy-design/core": "0.3.38"
50
+ "@buoy-design/core": "0.4.1",
51
+ "@buoy-design/scanners": "0.4.1"
51
52
  },
52
53
  "devDependencies": {
53
54
  "@types/node": "^22.10.2",
@@ -1,3 +0,0 @@
1
- import { Command } from 'commander';
2
- export declare function createAuditCommand(): Command;
3
- //# sourceMappingURL=audit.d.ts.map
@@ -1 +0,0 @@
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"}
@@ -1,235 +0,0 @@
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
@@ -1 +0,0 @@
1
- {"version":3,"file":"audit.js","sourceRoot":"","sources":["../../src/commands/audit.ts"],"names":[],"mappings":"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"}
@@ -1,47 +0,0 @@
1
- import { Command } from "commander";
2
- import type { DriftSignal } from "@buoy-design/core";
3
- export interface BaselineEntry {
4
- reason: string;
5
- createdAt: string;
6
- createdBy?: string;
7
- }
8
- export interface Baseline {
9
- version: 1;
10
- createdAt: string;
11
- updatedAt: string;
12
- reason: string;
13
- driftIds: string[];
14
- /** Per-drift reasons (drift ID -> entry) */
15
- entries?: Record<string, BaselineEntry>;
16
- summary: {
17
- critical: number;
18
- warning: number;
19
- info: number;
20
- total: number;
21
- };
22
- }
23
- /**
24
- * Get the path to the baseline file
25
- */
26
- export declare function getBaselinePath(projectRoot?: string): string;
27
- /**
28
- * Load existing baseline or return null if none exists
29
- */
30
- export declare function loadBaseline(projectRoot?: string): Promise<Baseline | null>;
31
- /**
32
- * Save baseline to disk
33
- */
34
- export declare function saveBaseline(baseline: Baseline, projectRoot?: string): Promise<void>;
35
- /**
36
- * Create baseline from current drift signals
37
- */
38
- export declare function createBaseline(drifts: DriftSignal[], reason: string): Baseline;
39
- /**
40
- * Filter out baselined drifts from results
41
- */
42
- export declare function filterBaseline(drifts: DriftSignal[], baseline: Baseline | null): {
43
- newDrifts: DriftSignal[];
44
- baselinedCount: number;
45
- };
46
- export declare function createBaselineCommand(): Command;
47
- //# sourceMappingURL=baseline.d.ts.map
@@ -1 +0,0 @@
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,aAAa;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,QAAQ;IACvB,OAAO,EAAE,CAAC,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,4CAA4C;IAC5C,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;IACxC,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,EAAE,MAAM,EAAE,MAAM,GAAG,QAAQ,CA0B9E;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,CAoT/C"}