@buoy-design/cli 0.3.38 → 0.4.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.
Files changed (155) hide show
  1. package/dist/bin.js +0 -0
  2. package/dist/commands/designmd/diff.d.ts +34 -0
  3. package/dist/commands/designmd/diff.d.ts.map +1 -0
  4. package/dist/commands/designmd/diff.js +35 -0
  5. package/dist/commands/designmd/diff.js.map +1 -0
  6. package/dist/commands/designmd/export.d.ts +11 -0
  7. package/dist/commands/designmd/export.d.ts.map +1 -0
  8. package/dist/commands/designmd/export.js +37 -0
  9. package/dist/commands/designmd/export.js.map +1 -0
  10. package/dist/commands/designmd/index.d.ts +3 -0
  11. package/dist/commands/designmd/index.d.ts.map +1 -0
  12. package/dist/commands/designmd/index.js +57 -0
  13. package/dist/commands/designmd/index.js.map +1 -0
  14. package/dist/commands/designmd/init.d.ts +17 -0
  15. package/dist/commands/designmd/init.d.ts.map +1 -0
  16. package/dist/commands/designmd/init.js +89 -0
  17. package/dist/commands/designmd/init.js.map +1 -0
  18. package/dist/commands/designmd/lint.d.ts +10 -0
  19. package/dist/commands/designmd/lint.d.ts.map +1 -0
  20. package/dist/commands/designmd/lint.js +13 -0
  21. package/dist/commands/designmd/lint.js.map +1 -0
  22. package/dist/commands/index.d.ts +2 -0
  23. package/dist/commands/index.d.ts.map +1 -1
  24. package/dist/commands/index.js +2 -0
  25. package/dist/commands/index.js.map +1 -1
  26. package/dist/commands/system.d.ts +3 -0
  27. package/dist/commands/system.d.ts.map +1 -0
  28. package/dist/commands/system.js +119 -0
  29. package/dist/commands/system.js.map +1 -0
  30. package/dist/config/auto-detect.d.ts.map +1 -1
  31. package/dist/config/auto-detect.js +4 -0
  32. package/dist/config/auto-detect.js.map +1 -1
  33. package/dist/config/schema.d.ts +89 -0
  34. package/dist/config/schema.d.ts.map +1 -1
  35. package/dist/config/schema.js +15 -0
  36. package/dist/config/schema.js.map +1 -1
  37. package/dist/index.d.ts.map +1 -1
  38. package/dist/index.js +7 -3
  39. package/dist/index.js.map +1 -1
  40. package/dist/scan/orchestrator.d.ts +7 -0
  41. package/dist/scan/orchestrator.d.ts.map +1 -1
  42. package/dist/scan/orchestrator.js +47 -0
  43. package/dist/scan/orchestrator.js.map +1 -1
  44. package/dist/services/remote-check.js +2 -0
  45. package/dist/services/remote-check.js.map +1 -1
  46. package/dist/services/system-map.d.ts +51 -0
  47. package/dist/services/system-map.d.ts.map +1 -0
  48. package/dist/services/system-map.js +135 -0
  49. package/dist/services/system-map.js.map +1 -0
  50. package/package.json +15 -14
  51. package/LICENSE +0 -21
  52. package/dist/commands/audit.d.ts +0 -3
  53. package/dist/commands/audit.d.ts.map +0 -1
  54. package/dist/commands/audit.js +0 -235
  55. package/dist/commands/audit.js.map +0 -1
  56. package/dist/commands/baseline.d.ts +0 -47
  57. package/dist/commands/baseline.d.ts.map +0 -1
  58. package/dist/commands/baseline.js +0 -327
  59. package/dist/commands/baseline.js.map +0 -1
  60. package/dist/commands/begin.d.ts +0 -9
  61. package/dist/commands/begin.d.ts.map +0 -1
  62. package/dist/commands/begin.js +0 -827
  63. package/dist/commands/begin.js.map +0 -1
  64. package/dist/commands/build.d.ts +0 -8
  65. package/dist/commands/build.d.ts.map +0 -1
  66. package/dist/commands/build.js +0 -26
  67. package/dist/commands/build.js.map +0 -1
  68. package/dist/commands/check.d.ts.sync-conflict-20260305-170128-6PCZ3ZU.map +0 -1
  69. package/dist/commands/check.js.sync-conflict-20260313-114446-6PCZ3ZU.map +0 -1
  70. package/dist/commands/check.sync-conflict-20260305-155016-6PCZ3ZU.d.ts +0 -26
  71. package/dist/commands/check.sync-conflict-20260305-155016-6PCZ3ZU.d.ts.map +0 -1
  72. package/dist/commands/check.sync-conflict-20260305-155016-6PCZ3ZU.js +0 -438
  73. package/dist/commands/check.sync-conflict-20260305-155016-6PCZ3ZU.js.map +0 -1
  74. package/dist/commands/commands.d.ts +0 -8
  75. package/dist/commands/commands.d.ts.map +0 -1
  76. package/dist/commands/commands.js +0 -148
  77. package/dist/commands/commands.js.map +0 -1
  78. package/dist/commands/components-query.d.ts +0 -13
  79. package/dist/commands/components-query.d.ts.map +0 -1
  80. package/dist/commands/components-query.js +0 -263
  81. package/dist/commands/components-query.js.map +0 -1
  82. package/dist/commands/components.d.ts +0 -8
  83. package/dist/commands/components.d.ts.map +0 -1
  84. package/dist/commands/components.js +0 -14
  85. package/dist/commands/components.js.map +0 -1
  86. package/dist/commands/dock.js.sync-conflict-20260313-172700-6PCZ3ZU.map +0 -1
  87. package/dist/commands/dock.sync-conflict-20260309-191923-6PCZ3ZU.js +0 -1006
  88. package/dist/commands/history.d.ts +0 -3
  89. package/dist/commands/history.d.ts.map +0 -1
  90. package/dist/commands/history.js +0 -352
  91. package/dist/commands/history.js.map +0 -1
  92. package/dist/commands/plugins.d.ts +0 -3
  93. package/dist/commands/plugins.d.ts.map +0 -1
  94. package/dist/commands/plugins.js +0 -63
  95. package/dist/commands/plugins.js.map +0 -1
  96. package/dist/commands/show.d.ts.sync-conflict-20260306-165917-6PCZ3ZU.map +0 -1
  97. package/dist/commands/show.sync-conflict-20260305-140755-6PCZ3ZU.js +0 -1735
  98. package/dist/commands/show.sync-conflict-20260309-130326-6PCZ3ZU.d.ts +0 -11
  99. package/dist/commands/show.sync-conflict-20260309-130326-6PCZ3ZU.d.ts.map +0 -1
  100. package/dist/commands/show.sync-conflict-20260309-130326-6PCZ3ZU.js +0 -1735
  101. package/dist/commands/show.sync-conflict-20260309-130326-6PCZ3ZU.js.map +0 -1
  102. package/dist/config/loader.d.ts.sync-conflict-20260313-145931-6PCZ3ZU.map +0 -1
  103. package/dist/config/loader.js.sync-conflict-20260309-033512-6PCZ3ZU.map +0 -1
  104. package/dist/config/loader.sync-conflict-20260307-175208-6PCZ3ZU.d.ts +0 -8
  105. package/dist/config/loader.sync-conflict-20260307-175208-6PCZ3ZU.d.ts.map +0 -1
  106. package/dist/config/loader.sync-conflict-20260307-175208-6PCZ3ZU.js +0 -162
  107. package/dist/config/loader.sync-conflict-20260307-175208-6PCZ3ZU.js.map +0 -1
  108. package/dist/config/schema.d.ts.sync-conflict-20260309-154654-6PCZ3ZU.map +0 -1
  109. package/dist/config/schema.sync-conflict-20260309-135703-6PCZ3ZU.js +0 -214
  110. package/dist/config/schema.sync-conflict-20260313-173553-6PCZ3ZU.d.ts +0 -1812
  111. package/dist/config/schema.sync-conflict-20260313-173553-6PCZ3ZU.d.ts.map +0 -1
  112. package/dist/config/schema.sync-conflict-20260313-173553-6PCZ3ZU.js +0 -214
  113. package/dist/config/schema.sync-conflict-20260313-173553-6PCZ3ZU.js.map +0 -1
  114. package/dist/detect/frameworks.js.sync-conflict-20260306-123756-6PCZ3ZU.map +0 -1
  115. package/dist/detect/frameworks.sync-conflict-20260313-150557-6PCZ3ZU.js +0 -252
  116. package/dist/detect/monorepo-patterns.js.sync-conflict-20260309-155400-6PCZ3ZU.map +0 -1
  117. package/dist/detect/monorepo-patterns.sync-conflict-20260311-182757-6PCZ3ZU.js +0 -209
  118. package/dist/hooks/index.d.ts.sync-conflict-20260306-220901-6PCZ3ZU.map +0 -1
  119. package/dist/hooks/index.sync-conflict-20260311-082258-6PCZ3ZU.js +0 -616
  120. package/dist/output/formatters.js.sync-conflict-20260306-134702-6PCZ3ZU.map +0 -1
  121. package/dist/output/formatters.sync-conflict-20260306-180804-6PCZ3ZU.js +0 -867
  122. package/dist/output/formatters.sync-conflict-20260307-131418-5SN2GZG.d.ts +0 -29
  123. package/dist/output/formatters.sync-conflict-20260307-131418-5SN2GZG.d.ts.map +0 -1
  124. package/dist/output/formatters.sync-conflict-20260307-131418-5SN2GZG.js +0 -867
  125. package/dist/output/formatters.sync-conflict-20260307-131418-5SN2GZG.js.map +0 -1
  126. package/dist/output/formatters.sync-conflict-20260307-143122-5SN2GZG.d.ts +0 -29
  127. package/dist/output/formatters.sync-conflict-20260307-143122-5SN2GZG.d.ts.map +0 -1
  128. package/dist/output/formatters.sync-conflict-20260307-143122-5SN2GZG.js +0 -867
  129. package/dist/output/formatters.sync-conflict-20260307-143122-5SN2GZG.js.map +0 -1
  130. package/dist/output/index.sync-conflict-20260309-222859-6PCZ3ZU.js +0 -5
  131. package/dist/output/reporters.d.sync-conflict-20260309-193820-6PCZ3ZU.ts +0 -38
  132. package/dist/output/reporters.d.ts.sync-conflict-20260306-193811-6PCZ3ZU.map +0 -1
  133. package/dist/output/reporters.js.sync-conflict-20260313-164629-6PCZ3ZU.map +0 -1
  134. package/dist/output/reporters.sync-conflict-20260309-030558-6PCZ3ZU.js +0 -182
  135. package/dist/output/reports.d.ts.sync-conflict-20260307-172149-6PCZ3ZU.map +0 -1
  136. package/dist/output/reports.js.sync-conflict-20260305-161643-6PCZ3ZU.map +0 -1
  137. package/dist/output/reports.sync-conflict-20260305-211951-6PCZ3ZU.js +0 -393
  138. package/dist/output/visuals.d.ts +0 -53
  139. package/dist/output/visuals.d.ts.map +0 -1
  140. package/dist/output/visuals.js +0 -194
  141. package/dist/output/visuals.js.map +0 -1
  142. package/dist/services/drift-analysis.d.sync-conflict-20260306-151016-6PCZ3ZU.ts +0 -194
  143. package/dist/services/drift-analysis.d.ts.sync-conflict-20260307-175904-6PCZ3ZU.map +0 -1
  144. package/dist/services/drift-analysis.js.sync-conflict-20260313-152307-6PCZ3ZU.map +0 -1
  145. package/dist/services/drift-analysis.sync-conflict-20260309-133811-6PCZ3ZU.d.ts +0 -194
  146. package/dist/services/drift-analysis.sync-conflict-20260309-133811-6PCZ3ZU.d.ts.map +0 -1
  147. package/dist/services/drift-analysis.sync-conflict-20260309-133811-6PCZ3ZU.js +0 -1022
  148. package/dist/services/drift-analysis.sync-conflict-20260309-133811-6PCZ3ZU.js.map +0 -1
  149. package/dist/services/skill-export.d.ts.sync-conflict-20260309-171021-6PCZ3ZU.map +0 -1
  150. package/dist/services/skill-export.js.sync-conflict-20260313-155735-6PCZ3ZU.map +0 -1
  151. package/dist/services/skill-export.sync-conflict-20260309-144621-6PCZ3ZU.d.ts +0 -109
  152. package/dist/services/skill-export.sync-conflict-20260309-144621-6PCZ3ZU.d.ts.map +0 -1
  153. package/dist/services/skill-export.sync-conflict-20260309-144621-6PCZ3ZU.js +0 -737
  154. package/dist/services/skill-export.sync-conflict-20260309-144621-6PCZ3ZU.js.map +0 -1
  155. 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.0",
4
4
  "description": "Catch design drift before it ships",
5
5
  "type": "module",
6
6
  "license": "MIT",
@@ -31,8 +31,20 @@
31
31
  },
32
32
  "main": "./dist/index.js",
33
33
  "types": "./dist/index.d.ts",
34
+ "scripts": {
35
+ "build": "tsc",
36
+ "dev": "tsc --watch",
37
+ "typecheck": "tsc --noEmit",
38
+ "clean": "rm -rf dist",
39
+ "start": "node ./dist/bin.js",
40
+ "test": "vitest run",
41
+ "test:watch": "vitest"
42
+ },
34
43
  "dependencies": {
35
44
  "@anthropic-ai/sdk": "^0.71.2",
45
+ "@buoy-design/core": "workspace:*",
46
+ "@buoy-design/scanners": "workspace:*",
47
+ "@google/design.md": "0.1.1",
36
48
  "@inquirer/prompts": "^8.1.0",
37
49
  "@octokit/rest": "^21.0.0",
38
50
  "chalk": "^5.3.0",
@@ -45,21 +57,10 @@
45
57
  "ora": "^8.1.1",
46
58
  "yaml": "^2.8.2",
47
59
  "zod": "^3.24.1",
48
- "zod-validation-error": "^5.0.0",
49
- "@buoy-design/scanners": "0.3.38",
50
- "@buoy-design/core": "0.3.38"
60
+ "zod-validation-error": "^5.0.0"
51
61
  },
52
62
  "devDependencies": {
53
63
  "@types/node": "^22.10.2",
54
64
  "typescript": "^5.7.2"
55
- },
56
- "scripts": {
57
- "build": "tsc",
58
- "dev": "tsc --watch",
59
- "typecheck": "tsc --noEmit",
60
- "clean": "rm -rf dist",
61
- "start": "node ./dist/bin.js",
62
- "test": "vitest run",
63
- "test:watch": "vitest"
64
65
  }
65
- }
66
+ }
package/LICENSE DELETED
@@ -1,21 +0,0 @@
1
- MIT License
2
-
3
- Copyright (c) 2024 Buoy
4
-
5
- Permission is hereby granted, free of charge, to any person obtaining a copy
6
- of this software and associated documentation files (the "Software"), to deal
7
- in the Software without restriction, including without limitation the rights
8
- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
- copies of the Software, and to permit persons to whom the Software is
10
- furnished to do so, subject to the following conditions:
11
-
12
- The above copyright notice and this permission notice shall be included in all
13
- copies or substantial portions of the Software.
14
-
15
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
- SOFTWARE.
@@ -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"}