@mp3wizard/figma-console-mcp 1.14.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 (201) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +816 -0
  3. package/dist/apps/design-system-dashboard/scoring/accessibility.d.ts +14 -0
  4. package/dist/apps/design-system-dashboard/scoring/accessibility.d.ts.map +1 -0
  5. package/dist/apps/design-system-dashboard/scoring/accessibility.js +278 -0
  6. package/dist/apps/design-system-dashboard/scoring/accessibility.js.map +1 -0
  7. package/dist/apps/design-system-dashboard/scoring/component-metadata.d.ts +29 -0
  8. package/dist/apps/design-system-dashboard/scoring/component-metadata.d.ts.map +1 -0
  9. package/dist/apps/design-system-dashboard/scoring/component-metadata.js +358 -0
  10. package/dist/apps/design-system-dashboard/scoring/component-metadata.js.map +1 -0
  11. package/dist/apps/design-system-dashboard/scoring/consistency.d.ts +14 -0
  12. package/dist/apps/design-system-dashboard/scoring/consistency.d.ts.map +1 -0
  13. package/dist/apps/design-system-dashboard/scoring/consistency.js +342 -0
  14. package/dist/apps/design-system-dashboard/scoring/consistency.js.map +1 -0
  15. package/dist/apps/design-system-dashboard/scoring/coverage.d.ts +14 -0
  16. package/dist/apps/design-system-dashboard/scoring/coverage.d.ts.map +1 -0
  17. package/dist/apps/design-system-dashboard/scoring/coverage.js +231 -0
  18. package/dist/apps/design-system-dashboard/scoring/coverage.js.map +1 -0
  19. package/dist/apps/design-system-dashboard/scoring/engine.d.ts +27 -0
  20. package/dist/apps/design-system-dashboard/scoring/engine.d.ts.map +1 -0
  21. package/dist/apps/design-system-dashboard/scoring/engine.js +93 -0
  22. package/dist/apps/design-system-dashboard/scoring/engine.js.map +1 -0
  23. package/dist/apps/design-system-dashboard/scoring/naming-semantics.d.ts +14 -0
  24. package/dist/apps/design-system-dashboard/scoring/naming-semantics.d.ts.map +1 -0
  25. package/dist/apps/design-system-dashboard/scoring/naming-semantics.js +309 -0
  26. package/dist/apps/design-system-dashboard/scoring/naming-semantics.js.map +1 -0
  27. package/dist/apps/design-system-dashboard/scoring/token-architecture.d.ts +14 -0
  28. package/dist/apps/design-system-dashboard/scoring/token-architecture.d.ts.map +1 -0
  29. package/dist/apps/design-system-dashboard/scoring/token-architecture.js +350 -0
  30. package/dist/apps/design-system-dashboard/scoring/token-architecture.js.map +1 -0
  31. package/dist/apps/design-system-dashboard/scoring/types.d.ts +89 -0
  32. package/dist/apps/design-system-dashboard/scoring/types.d.ts.map +1 -0
  33. package/dist/apps/design-system-dashboard/scoring/types.js +41 -0
  34. package/dist/apps/design-system-dashboard/scoring/types.js.map +1 -0
  35. package/dist/apps/design-system-dashboard/server.d.ts +24 -0
  36. package/dist/apps/design-system-dashboard/server.d.ts.map +1 -0
  37. package/dist/apps/design-system-dashboard/server.js +160 -0
  38. package/dist/apps/design-system-dashboard/server.js.map +1 -0
  39. package/dist/apps/token-browser/server.d.ts +26 -0
  40. package/dist/apps/token-browser/server.d.ts.map +1 -0
  41. package/dist/apps/token-browser/server.js +137 -0
  42. package/dist/apps/token-browser/server.js.map +1 -0
  43. package/dist/browser/base.d.ts +58 -0
  44. package/dist/browser/base.d.ts.map +1 -0
  45. package/dist/browser/base.js +6 -0
  46. package/dist/browser/base.js.map +1 -0
  47. package/dist/browser/local.d.ts +87 -0
  48. package/dist/browser/local.d.ts.map +1 -0
  49. package/dist/browser/local.js +318 -0
  50. package/dist/browser/local.js.map +1 -0
  51. package/dist/cloudflare/apps/design-system-dashboard/scoring/accessibility.js +277 -0
  52. package/dist/cloudflare/apps/design-system-dashboard/scoring/component-metadata.js +357 -0
  53. package/dist/cloudflare/apps/design-system-dashboard/scoring/consistency.js +341 -0
  54. package/dist/cloudflare/apps/design-system-dashboard/scoring/coverage.js +230 -0
  55. package/dist/cloudflare/apps/design-system-dashboard/scoring/engine.js +92 -0
  56. package/dist/cloudflare/apps/design-system-dashboard/scoring/naming-semantics.js +308 -0
  57. package/dist/cloudflare/apps/design-system-dashboard/scoring/token-architecture.js +349 -0
  58. package/dist/cloudflare/apps/design-system-dashboard/scoring/types.js +40 -0
  59. package/dist/cloudflare/apps/design-system-dashboard/server.js +159 -0
  60. package/dist/cloudflare/apps/token-browser/server.js +136 -0
  61. package/dist/cloudflare/browser/base.js +5 -0
  62. package/dist/cloudflare/browser/cloudflare.js +156 -0
  63. package/dist/cloudflare/browser-manager.js +157 -0
  64. package/dist/cloudflare/core/cloud-websocket-connector.js +267 -0
  65. package/dist/cloudflare/core/cloud-websocket-relay.js +199 -0
  66. package/dist/cloudflare/core/comment-tools.js +292 -0
  67. package/dist/cloudflare/core/config.js +161 -0
  68. package/dist/cloudflare/core/console-monitor.js +427 -0
  69. package/dist/cloudflare/core/design-code-tools.js +2504 -0
  70. package/dist/cloudflare/core/design-system-manifest.js +260 -0
  71. package/dist/cloudflare/core/design-system-tools.js +863 -0
  72. package/dist/cloudflare/core/enrichment/enrichment-service.js +272 -0
  73. package/dist/cloudflare/core/enrichment/index.js +7 -0
  74. package/dist/cloudflare/core/enrichment/relationship-mapper.js +351 -0
  75. package/dist/cloudflare/core/enrichment/style-resolver.js +326 -0
  76. package/dist/cloudflare/core/figma-api.js +409 -0
  77. package/dist/cloudflare/core/figma-connector.js +7 -0
  78. package/dist/cloudflare/core/figma-desktop-connector.js +1184 -0
  79. package/dist/cloudflare/core/figma-reconstruction-spec.js +402 -0
  80. package/dist/cloudflare/core/figma-style-extractor.js +311 -0
  81. package/dist/cloudflare/core/figma-tools.js +2947 -0
  82. package/dist/cloudflare/core/logger.js +53 -0
  83. package/dist/cloudflare/core/port-discovery.js +282 -0
  84. package/dist/cloudflare/core/snippet-injector.js +96 -0
  85. package/dist/cloudflare/core/types/design-code.js +4 -0
  86. package/dist/cloudflare/core/types/enriched.js +5 -0
  87. package/dist/cloudflare/core/types/index.js +4 -0
  88. package/dist/cloudflare/core/websocket-connector.js +256 -0
  89. package/dist/cloudflare/core/websocket-server.js +646 -0
  90. package/dist/cloudflare/core/write-tools.js +2091 -0
  91. package/dist/cloudflare/index.js +2899 -0
  92. package/dist/cloudflare/test-browser.js +88 -0
  93. package/dist/core/comment-tools.d.ts +11 -0
  94. package/dist/core/comment-tools.d.ts.map +1 -0
  95. package/dist/core/comment-tools.js +293 -0
  96. package/dist/core/comment-tools.js.map +1 -0
  97. package/dist/core/config.d.ts +17 -0
  98. package/dist/core/config.d.ts.map +1 -0
  99. package/dist/core/config.js +162 -0
  100. package/dist/core/config.js.map +1 -0
  101. package/dist/core/console-monitor.d.ts +82 -0
  102. package/dist/core/console-monitor.d.ts.map +1 -0
  103. package/dist/core/console-monitor.js +428 -0
  104. package/dist/core/console-monitor.js.map +1 -0
  105. package/dist/core/design-code-tools.d.ts +127 -0
  106. package/dist/core/design-code-tools.d.ts.map +1 -0
  107. package/dist/core/design-code-tools.js +2505 -0
  108. package/dist/core/design-code-tools.js.map +1 -0
  109. package/dist/core/design-system-manifest.d.ts +272 -0
  110. package/dist/core/design-system-manifest.d.ts.map +1 -0
  111. package/dist/core/design-system-manifest.js +261 -0
  112. package/dist/core/design-system-manifest.js.map +1 -0
  113. package/dist/core/design-system-tools.d.ts +17 -0
  114. package/dist/core/design-system-tools.d.ts.map +1 -0
  115. package/dist/core/design-system-tools.js +864 -0
  116. package/dist/core/design-system-tools.js.map +1 -0
  117. package/dist/core/enrichment/enrichment-service.d.ts +52 -0
  118. package/dist/core/enrichment/enrichment-service.d.ts.map +1 -0
  119. package/dist/core/enrichment/enrichment-service.js +273 -0
  120. package/dist/core/enrichment/enrichment-service.js.map +1 -0
  121. package/dist/core/enrichment/index.d.ts +8 -0
  122. package/dist/core/enrichment/index.d.ts.map +1 -0
  123. package/dist/core/enrichment/index.js +8 -0
  124. package/dist/core/enrichment/index.js.map +1 -0
  125. package/dist/core/enrichment/relationship-mapper.d.ts +106 -0
  126. package/dist/core/enrichment/relationship-mapper.d.ts.map +1 -0
  127. package/dist/core/enrichment/relationship-mapper.js +352 -0
  128. package/dist/core/enrichment/relationship-mapper.js.map +1 -0
  129. package/dist/core/enrichment/style-resolver.d.ts +80 -0
  130. package/dist/core/enrichment/style-resolver.d.ts.map +1 -0
  131. package/dist/core/enrichment/style-resolver.js +327 -0
  132. package/dist/core/enrichment/style-resolver.js.map +1 -0
  133. package/dist/core/figma-api.d.ts +201 -0
  134. package/dist/core/figma-api.d.ts.map +1 -0
  135. package/dist/core/figma-api.js +410 -0
  136. package/dist/core/figma-api.js.map +1 -0
  137. package/dist/core/figma-connector.d.ts +48 -0
  138. package/dist/core/figma-connector.d.ts.map +1 -0
  139. package/dist/core/figma-connector.js +8 -0
  140. package/dist/core/figma-connector.js.map +1 -0
  141. package/dist/core/figma-desktop-connector.d.ts +265 -0
  142. package/dist/core/figma-desktop-connector.d.ts.map +1 -0
  143. package/dist/core/figma-desktop-connector.js +1184 -0
  144. package/dist/core/figma-desktop-connector.js.map +1 -0
  145. package/dist/core/figma-reconstruction-spec.d.ts +166 -0
  146. package/dist/core/figma-reconstruction-spec.d.ts.map +1 -0
  147. package/dist/core/figma-reconstruction-spec.js +403 -0
  148. package/dist/core/figma-reconstruction-spec.js.map +1 -0
  149. package/dist/core/figma-style-extractor.d.ts +76 -0
  150. package/dist/core/figma-style-extractor.d.ts.map +1 -0
  151. package/dist/core/figma-style-extractor.js +312 -0
  152. package/dist/core/figma-style-extractor.js.map +1 -0
  153. package/dist/core/figma-tools.d.ts +23 -0
  154. package/dist/core/figma-tools.d.ts.map +1 -0
  155. package/dist/core/figma-tools.js +2948 -0
  156. package/dist/core/figma-tools.js.map +1 -0
  157. package/dist/core/logger.d.ts +22 -0
  158. package/dist/core/logger.d.ts.map +1 -0
  159. package/dist/core/logger.js +54 -0
  160. package/dist/core/logger.js.map +1 -0
  161. package/dist/core/port-discovery.d.ts +110 -0
  162. package/dist/core/port-discovery.d.ts.map +1 -0
  163. package/dist/core/port-discovery.js +283 -0
  164. package/dist/core/port-discovery.js.map +1 -0
  165. package/dist/core/snippet-injector.d.ts +24 -0
  166. package/dist/core/snippet-injector.d.ts.map +1 -0
  167. package/dist/core/snippet-injector.js +97 -0
  168. package/dist/core/snippet-injector.js.map +1 -0
  169. package/dist/core/types/design-code.d.ts +262 -0
  170. package/dist/core/types/design-code.d.ts.map +1 -0
  171. package/dist/core/types/design-code.js +5 -0
  172. package/dist/core/types/design-code.js.map +1 -0
  173. package/dist/core/types/enriched.d.ts +213 -0
  174. package/dist/core/types/enriched.d.ts.map +1 -0
  175. package/dist/core/types/enriched.js +6 -0
  176. package/dist/core/types/enriched.js.map +1 -0
  177. package/dist/core/types/index.d.ts +112 -0
  178. package/dist/core/types/index.d.ts.map +1 -0
  179. package/dist/core/types/index.js +5 -0
  180. package/dist/core/types/index.js.map +1 -0
  181. package/dist/core/websocket-connector.d.ts +55 -0
  182. package/dist/core/websocket-connector.d.ts.map +1 -0
  183. package/dist/core/websocket-connector.js +257 -0
  184. package/dist/core/websocket-connector.js.map +1 -0
  185. package/dist/core/websocket-server.d.ts +191 -0
  186. package/dist/core/websocket-server.d.ts.map +1 -0
  187. package/dist/core/websocket-server.js +647 -0
  188. package/dist/core/websocket-server.js.map +1 -0
  189. package/dist/core/write-tools.d.ts +7 -0
  190. package/dist/core/write-tools.d.ts.map +1 -0
  191. package/dist/core/write-tools.js +2092 -0
  192. package/dist/core/write-tools.js.map +1 -0
  193. package/dist/local.d.ts +84 -0
  194. package/dist/local.d.ts.map +1 -0
  195. package/dist/local.js +5039 -0
  196. package/dist/local.js.map +1 -0
  197. package/figma-desktop-bridge/README.md +313 -0
  198. package/figma-desktop-bridge/code.js +2818 -0
  199. package/figma-desktop-bridge/manifest.json +67 -0
  200. package/figma-desktop-bridge/ui.html +1236 -0
  201. package/package.json +87 -0
@@ -0,0 +1,93 @@
1
+ /**
2
+ * Design System Health Dashboard — Scoring Engine
3
+ *
4
+ * Main orchestrator that runs all 6 category scorers against raw Figma data
5
+ * and produces a Lighthouse-style health score.
6
+ *
7
+ * Data flow:
8
+ * DesignSystemRawData → scoreDesignSystem() → DashboardData (JSON)
9
+ */
10
+ import { scoreAccessibility } from "./accessibility.js";
11
+ import { classifyComponents, scoreComponentMetadata, } from "./component-metadata.js";
12
+ import { scoreConsistency } from "./consistency.js";
13
+ import { scoreCoverage } from "./coverage.js";
14
+ import { scoreNamingSemantics } from "./naming-semantics.js";
15
+ import { scoreTokenArchitecture } from "./token-architecture.js";
16
+ import { getStatus } from "./types.js";
17
+ /**
18
+ * Collect actionable findings from scored categories.
19
+ * Returns up to 5 human-readable strings from the worst findings,
20
+ * prioritizing "fail" severity, then "warning", sorted by score ascending.
21
+ */
22
+ function generateSummary(categories) {
23
+ const actionableFindings = [];
24
+ for (const category of categories) {
25
+ for (const finding of category.findings) {
26
+ if (finding.severity === "fail" || finding.severity === "warning") {
27
+ actionableFindings.push({
28
+ ...finding,
29
+ categoryLabel: category.label,
30
+ });
31
+ }
32
+ }
33
+ }
34
+ // Sort: fail before warning, then by score ascending (worst first)
35
+ actionableFindings.sort((a, b) => {
36
+ const severityOrder = { fail: 0, warning: 1, pass: 2, info: 3 };
37
+ const aSev = severityOrder[a.severity];
38
+ const bSev = severityOrder[b.severity];
39
+ if (aSev !== bSev)
40
+ return aSev - bSev;
41
+ return a.score - b.score;
42
+ });
43
+ return actionableFindings
44
+ .slice(0, 5)
45
+ .map((f) => `[${f.categoryLabel}] ${f.label}: ${f.details ?? "Needs improvement."}`);
46
+ }
47
+ /**
48
+ * Score a design system's health from raw Figma data.
49
+ *
50
+ * Runs all 6 category scorers and produces a weighted overall score.
51
+ * Category weights sum to 1.0:
52
+ * - Naming & Semantics: 0.20
53
+ * - Token Architecture: 0.20
54
+ * - Component Metadata: 0.20
55
+ * - Accessibility: 0.15
56
+ * - Consistency: 0.15
57
+ * - Coverage: 0.10
58
+ *
59
+ * @param data - Raw Figma data (variables, collections, components, styles)
60
+ * @returns Complete dashboard payload with overall score, categories, and summary
61
+ */
62
+ export function scoreDesignSystem(data) {
63
+ const categories = [
64
+ scoreNamingSemantics(data),
65
+ scoreTokenArchitecture(data),
66
+ scoreComponentMetadata(data),
67
+ scoreAccessibility(data),
68
+ scoreConsistency(data),
69
+ scoreCoverage(data),
70
+ ];
71
+ const overall = Math.round(categories.reduce((sum, c) => sum + c.score * c.weight, 0));
72
+ const summary = generateSummary(categories);
73
+ const classification = classifyComponents(data);
74
+ return {
75
+ overall,
76
+ status: getStatus(overall),
77
+ categories,
78
+ summary,
79
+ meta: {
80
+ componentCount: data.components.length,
81
+ variableCount: data.variables.length,
82
+ collectionCount: data.collections.length,
83
+ styleCount: data.styles.length,
84
+ componentSetCount: data.componentSets.length,
85
+ standaloneCount: classification.standalone.length,
86
+ variantCount: classification.variants.length,
87
+ timestamp: Date.now(),
88
+ },
89
+ fileInfo: data.fileInfo,
90
+ dataAvailability: data.dataAvailability,
91
+ };
92
+ }
93
+ //# sourceMappingURL=engine.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"engine.js","sourceRoot":"","sources":["../../../../src/apps/design-system-dashboard/scoring/engine.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AACxD,OAAO,EACN,kBAAkB,EAClB,sBAAsB,GACtB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAC9C,OAAO,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAC;AAOjE,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAEvC;;;;GAIG;AACH,SAAS,eAAe,CAAC,UAA2B;IACnD,MAAM,kBAAkB,GAA+C,EAAE,CAAC;IAE1E,KAAK,MAAM,QAAQ,IAAI,UAAU,EAAE,CAAC;QACnC,KAAK,MAAM,OAAO,IAAI,QAAQ,CAAC,QAAQ,EAAE,CAAC;YACzC,IAAI,OAAO,CAAC,QAAQ,KAAK,MAAM,IAAI,OAAO,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;gBACnE,kBAAkB,CAAC,IAAI,CAAC;oBACvB,GAAG,OAAO;oBACV,aAAa,EAAE,QAAQ,CAAC,KAAK;iBAC7B,CAAC,CAAC;YACJ,CAAC;QACF,CAAC;IACF,CAAC;IAED,mEAAmE;IACnE,kBAAkB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;QAChC,MAAM,aAAa,GAAG,EAAE,IAAI,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;QAChE,MAAM,IAAI,GAAG,aAAa,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;QACvC,MAAM,IAAI,GAAG,aAAa,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;QACvC,IAAI,IAAI,KAAK,IAAI;YAAE,OAAO,IAAI,GAAG,IAAI,CAAC;QACtC,OAAO,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC;IAC1B,CAAC,CAAC,CAAC;IAEH,OAAO,kBAAkB;SACvB,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;SACX,GAAG,CACH,CAAC,CAAC,EAAE,EAAE,CACL,IAAI,CAAC,CAAC,aAAa,KAAK,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,OAAO,IAAI,oBAAoB,EAAE,CACxE,CAAC;AACJ,CAAC;AAED;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,iBAAiB,CAAC,IAAyB;IAC1D,MAAM,UAAU,GAAoB;QACnC,oBAAoB,CAAC,IAAI,CAAC;QAC1B,sBAAsB,CAAC,IAAI,CAAC;QAC5B,sBAAsB,CAAC,IAAI,CAAC;QAC5B,kBAAkB,CAAC,IAAI,CAAC;QACxB,gBAAgB,CAAC,IAAI,CAAC;QACtB,aAAa,CAAC,IAAI,CAAC;KACnB,CAAC;IAEF,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CACzB,UAAU,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAC1D,CAAC;IAEF,MAAM,OAAO,GAAG,eAAe,CAAC,UAAU,CAAC,CAAC;IAE5C,MAAM,cAAc,GAAG,kBAAkB,CAAC,IAAI,CAAC,CAAC;IAEhD,OAAO;QACN,OAAO;QACP,MAAM,EAAE,SAAS,CAAC,OAAO,CAAC;QAC1B,UAAU;QACV,OAAO;QACP,IAAI,EAAE;YACL,cAAc,EAAE,IAAI,CAAC,UAAU,CAAC,MAAM;YACtC,aAAa,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM;YACpC,eAAe,EAAE,IAAI,CAAC,WAAW,CAAC,MAAM;YACxC,UAAU,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM;YAC9B,iBAAiB,EAAE,IAAI,CAAC,aAAa,CAAC,MAAM;YAC5C,eAAe,EAAE,cAAc,CAAC,UAAU,CAAC,MAAM;YACjD,YAAY,EAAE,cAAc,CAAC,QAAQ,CAAC,MAAM;YAC5C,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;SACrB;QACD,QAAQ,EAAE,IAAI,CAAC,QAAQ;QACvB,gBAAgB,EAAE,IAAI,CAAC,gBAAgB;KACvC,CAAC;AACH,CAAC"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Naming & Semantics Scorer (weight: 0.20)
3
+ *
4
+ * Checks whether design system names describe intent rather than appearance.
5
+ * Evaluates variable naming, component naming, variant naming, and boolean
6
+ * naming conventions against semantic best practices.
7
+ */
8
+ import type { CategoryScore, DesignSystemRawData } from "./types.js";
9
+ /**
10
+ * Naming & Semantics category scorer.
11
+ * Returns the average score across all naming checks.
12
+ */
13
+ export declare function scoreNamingSemantics(data: DesignSystemRawData): CategoryScore;
14
+ //# sourceMappingURL=naming-semantics.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"naming-semantics.d.ts","sourceRoot":"","sources":["../../../../src/apps/design-system-dashboard/scoring/naming-semantics.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,mBAAmB,EAAW,MAAM,YAAY,CAAC;AAoV9E;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,mBAAmB,GAAG,aAAa,CAoB7E"}
@@ -0,0 +1,309 @@
1
+ /**
2
+ * Naming & Semantics Scorer (weight: 0.20)
3
+ *
4
+ * Checks whether design system names describe intent rather than appearance.
5
+ * Evaluates variable naming, component naming, variant naming, and boolean
6
+ * naming conventions against semantic best practices.
7
+ */
8
+ import { buildCollectionNameMap, clamp, getSeverity } from "./types.js";
9
+ /** Maximum examples to include in a finding. */
10
+ const MAX_EXAMPLES = 5;
11
+ /** Color words that indicate visual (non-semantic) naming. */
12
+ const VISUAL_COLOR_WORDS = [
13
+ "red",
14
+ "blue",
15
+ "green",
16
+ "yellow",
17
+ "orange",
18
+ "purple",
19
+ "pink",
20
+ "black",
21
+ "white",
22
+ "gray",
23
+ "grey",
24
+ "cyan",
25
+ "magenta",
26
+ "teal",
27
+ "indigo",
28
+ "violet",
29
+ "brown",
30
+ "lime",
31
+ "amber",
32
+ "emerald",
33
+ "rose",
34
+ "sky",
35
+ "slate",
36
+ "zinc",
37
+ "stone",
38
+ "neutral",
39
+ ];
40
+ /** Visual variant values that should be replaced with semantic ones. */
41
+ const VISUAL_VARIANT_VALUES = [
42
+ "red",
43
+ "blue",
44
+ "green",
45
+ "yellow",
46
+ "orange",
47
+ "purple",
48
+ "pink",
49
+ "black",
50
+ "white",
51
+ "gray",
52
+ "grey",
53
+ "cyan",
54
+ ];
55
+ /** Semantic variant values that indicate good naming. */
56
+ const SEMANTIC_VARIANT_VALUES = [
57
+ "primary",
58
+ "secondary",
59
+ "tertiary",
60
+ "danger",
61
+ "warning",
62
+ "success",
63
+ "info",
64
+ "error",
65
+ "disabled",
66
+ "default",
67
+ "accent",
68
+ "muted",
69
+ "destructive",
70
+ "outline",
71
+ "ghost",
72
+ "link",
73
+ ];
74
+ const PASCAL_CASE_RE = /^[A-Z][a-zA-Z0-9]*$/;
75
+ const BOOLEAN_PREFIX_RE = /^(is|has|can|should|will|did|was|with|show|hide|enable|disable)/i;
76
+ /**
77
+ * Extract the leaf segment from a variable name.
78
+ * e.g. "color/action/primary" -> "primary", "color.blue.500" -> "500"
79
+ */
80
+ function getLeafName(name) {
81
+ const parts = name.split(/[/.]/);
82
+ return parts[parts.length - 1];
83
+ }
84
+ /**
85
+ * Check if a name contains visual color words in its leaf segments.
86
+ */
87
+ function containsVisualColorWord(name) {
88
+ const leaf = getLeafName(name).toLowerCase();
89
+ return VISUAL_COLOR_WORDS.some((word) => leaf === word || leaf.startsWith(`${word}-`));
90
+ }
91
+ /**
92
+ * Score variable naming for semantic quality.
93
+ * Variables should use semantic names (color.action.primary) rather than
94
+ * visual names (color.blue.500).
95
+ */
96
+ function scoreVariableNaming(data) {
97
+ const colorVars = data.variables.filter((v) => v.resolvedType === "COLOR");
98
+ if (colorVars.length === 0) {
99
+ return {
100
+ id: "naming-variable-semantic",
101
+ label: "Variable naming",
102
+ score: 100,
103
+ severity: "info",
104
+ tooltip: "Variables should describe intent (e.g. color/action/primary) rather than appearance (e.g. color/blue/500). Semantic names survive theme changes.",
105
+ details: "No color variables to evaluate.",
106
+ };
107
+ }
108
+ const collectionNames = buildCollectionNameMap(data.collections);
109
+ const visualVars = colorVars.filter((v) => containsVisualColorWord(v.name));
110
+ const semanticRatio = 1 - visualVars.length / colorVars.length;
111
+ const score = clamp(semanticRatio * 100);
112
+ return {
113
+ id: "naming-variable-semantic",
114
+ label: "Variable naming",
115
+ score,
116
+ severity: getSeverity(score),
117
+ tooltip: "Variables should describe intent (e.g. color/action/primary) rather than appearance (e.g. color/blue/500). Semantic names survive theme changes.",
118
+ details: visualVars.length > 0
119
+ ? `${visualVars.length} of ${colorVars.length} color variables use visual names instead of semantic names.`
120
+ : `All ${colorVars.length} color variables use semantic names.`,
121
+ examples: visualVars.length > 0
122
+ ? visualVars.slice(0, MAX_EXAMPLES).map((v) => v.name)
123
+ : undefined,
124
+ locations: visualVars.length > 0
125
+ ? visualVars.slice(0, MAX_EXAMPLES).map((v) => ({
126
+ name: v.name,
127
+ collection: collectionNames.get(v.variableCollectionId),
128
+ type: "variable",
129
+ }))
130
+ : undefined,
131
+ };
132
+ }
133
+ /**
134
+ * Score component naming for consistency.
135
+ * Components should use PascalCase and avoid mixed abbreviations.
136
+ */
137
+ function scoreComponentNaming(data) {
138
+ const components = data.components;
139
+ if (components.length === 0) {
140
+ return {
141
+ id: "naming-component-casing",
142
+ label: "Component naming",
143
+ score: 100,
144
+ severity: "info",
145
+ tooltip: "Component names should use consistent PascalCase (e.g. Button, IconStar). Consistent casing improves discoverability.",
146
+ details: "No components to evaluate.",
147
+ };
148
+ }
149
+ let pascalCount = 0;
150
+ const nonPascalComps = [];
151
+ for (const comp of components) {
152
+ // Component names may use path separators; check each segment
153
+ const segments = comp.name.split("/").map((s) => s.trim());
154
+ const allPascal = segments.every((seg) => PASCAL_CASE_RE.test(seg));
155
+ if (allPascal) {
156
+ pascalCount++;
157
+ }
158
+ else {
159
+ nonPascalComps.push(comp.name);
160
+ }
161
+ }
162
+ const ratio = pascalCount / components.length;
163
+ const score = clamp(ratio * 100);
164
+ return {
165
+ id: "naming-component-casing",
166
+ label: "Component naming",
167
+ score,
168
+ severity: getSeverity(score),
169
+ tooltip: "Component names should use consistent PascalCase (e.g. Button, IconStar). Consistent casing improves discoverability.",
170
+ details: `${pascalCount} of ${components.length} components use consistent PascalCase naming.`,
171
+ examples: nonPascalComps.length > 0
172
+ ? nonPascalComps.slice(0, MAX_EXAMPLES)
173
+ : undefined,
174
+ };
175
+ }
176
+ /**
177
+ * Score variant naming for semantic quality.
178
+ * Variant values should be semantic (primary, danger) rather than
179
+ * visual (blue, red). Also checks for consistent size naming.
180
+ */
181
+ function scoreVariantNaming(data) {
182
+ // Components with variants have a componentSetId (Plugin API),
183
+ // containing_frame.containingComponentSet (REST API), or component_set_id (file JSON)
184
+ const variantComponents = data.components.filter((c) => c.componentSetId ||
185
+ c.containing_frame?.containingComponentSet ||
186
+ c.component_set_id);
187
+ if (variantComponents.length === 0) {
188
+ return {
189
+ id: "naming-variant-semantic",
190
+ label: "Variant naming",
191
+ score: 100,
192
+ severity: "info",
193
+ tooltip: "Variant values should use semantic terms (primary, danger) rather than visual ones (red, blue). This decouples design from implementation.",
194
+ details: "No variant components to evaluate.",
195
+ };
196
+ }
197
+ // Extract variant info from component names (e.g., "Button/Primary" or "Size=Small, Color=Primary")
198
+ let semanticCount = 0;
199
+ let visualCount = 0;
200
+ const visualVariantComps = [];
201
+ for (const comp of variantComponents) {
202
+ const nameLower = comp.name.toLowerCase();
203
+ const hasVisual = VISUAL_VARIANT_VALUES.some((v) => nameLower === v ||
204
+ nameLower.includes(`=${v}`) ||
205
+ nameLower.includes(`, ${v}`));
206
+ const hasSemantic = SEMANTIC_VARIANT_VALUES.some((v) => nameLower === v ||
207
+ nameLower.includes(`=${v}`) ||
208
+ nameLower.includes(`, ${v}`));
209
+ if (hasSemantic)
210
+ semanticCount++;
211
+ if (hasVisual) {
212
+ visualCount++;
213
+ visualVariantComps.push(comp.name);
214
+ }
215
+ }
216
+ const totalEvaluated = semanticCount + visualCount;
217
+ if (totalEvaluated === 0) {
218
+ return {
219
+ id: "naming-variant-semantic",
220
+ label: "Variant naming",
221
+ score: 75,
222
+ severity: "warning",
223
+ tooltip: "Variant values should use semantic terms (primary, danger) rather than visual ones (red, blue). This decouples design from implementation.",
224
+ details: "Variant values could not be classified as semantic or visual.",
225
+ };
226
+ }
227
+ const ratio = semanticCount / totalEvaluated;
228
+ const score = clamp(ratio * 100);
229
+ return {
230
+ id: "naming-variant-semantic",
231
+ label: "Variant naming",
232
+ score,
233
+ severity: getSeverity(score),
234
+ tooltip: "Variant values should use semantic terms (primary, danger) rather than visual ones (red, blue). This decouples design from implementation.",
235
+ details: visualCount > 0
236
+ ? `${visualCount} variant values use visual names. Prefer semantic names like "primary", "danger".`
237
+ : "Variant values use semantic naming conventions.",
238
+ examples: visualVariantComps.length > 0
239
+ ? visualVariantComps.slice(0, MAX_EXAMPLES)
240
+ : undefined,
241
+ };
242
+ }
243
+ /**
244
+ * Score boolean variable naming.
245
+ * Boolean variables should follow is-, has-, can- prefix patterns.
246
+ */
247
+ function scoreBooleanNaming(data) {
248
+ const boolVars = data.variables.filter((v) => v.resolvedType === "BOOLEAN");
249
+ if (boolVars.length === 0) {
250
+ return {
251
+ id: "naming-boolean-prefix",
252
+ label: "Boolean naming",
253
+ score: 100,
254
+ severity: "info",
255
+ tooltip: "Boolean variables should start with is, has, can, show, or similar prefixes (e.g. isDisabled). This makes their purpose immediately clear.",
256
+ details: "No boolean variables to evaluate.",
257
+ };
258
+ }
259
+ const collectionNames = buildCollectionNameMap(data.collections);
260
+ const missingPrefix = boolVars.filter((v) => {
261
+ const leaf = getLeafName(v.name);
262
+ return !BOOLEAN_PREFIX_RE.test(leaf);
263
+ });
264
+ const correctCount = boolVars.length - missingPrefix.length;
265
+ const ratio = correctCount / boolVars.length;
266
+ const score = clamp(ratio * 100);
267
+ return {
268
+ id: "naming-boolean-prefix",
269
+ label: "Boolean naming",
270
+ score,
271
+ severity: getSeverity(score),
272
+ tooltip: "Boolean variables should start with is, has, can, show, or similar prefixes (e.g. isDisabled). This makes their purpose immediately clear.",
273
+ details: missingPrefix.length > 0
274
+ ? `${missingPrefix.length} of ${boolVars.length} boolean variables lack is*/has*/can* prefixes.`
275
+ : `All ${boolVars.length} boolean variables use proper prefixes.`,
276
+ examples: missingPrefix.length > 0
277
+ ? missingPrefix.slice(0, MAX_EXAMPLES).map((v) => v.name)
278
+ : undefined,
279
+ locations: missingPrefix.length > 0
280
+ ? missingPrefix.slice(0, MAX_EXAMPLES).map((v) => ({
281
+ name: v.name,
282
+ collection: collectionNames.get(v.variableCollectionId),
283
+ type: "variable",
284
+ }))
285
+ : undefined,
286
+ };
287
+ }
288
+ /**
289
+ * Naming & Semantics category scorer.
290
+ * Returns the average score across all naming checks.
291
+ */
292
+ export function scoreNamingSemantics(data) {
293
+ const findings = [
294
+ scoreVariableNaming(data),
295
+ scoreComponentNaming(data),
296
+ scoreVariantNaming(data),
297
+ scoreBooleanNaming(data),
298
+ ];
299
+ const score = clamp(findings.reduce((sum, f) => sum + f.score, 0) / findings.length);
300
+ return {
301
+ id: "naming-semantics",
302
+ label: "Naming & Semantics",
303
+ shortLabel: "Naming",
304
+ score,
305
+ weight: 0.2,
306
+ findings,
307
+ };
308
+ }
309
+ //# sourceMappingURL=naming-semantics.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"naming-semantics.js","sourceRoot":"","sources":["../../../../src/apps/design-system-dashboard/scoring/naming-semantics.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,EAAE,sBAAsB,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAExE,gDAAgD;AAChD,MAAM,YAAY,GAAG,CAAC,CAAC;AAEvB,8DAA8D;AAC9D,MAAM,kBAAkB,GAAG;IAC1B,KAAK;IACL,MAAM;IACN,OAAO;IACP,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,MAAM;IACN,OAAO;IACP,OAAO;IACP,MAAM;IACN,MAAM;IACN,MAAM;IACN,SAAS;IACT,MAAM;IACN,QAAQ;IACR,QAAQ;IACR,OAAO;IACP,MAAM;IACN,OAAO;IACP,SAAS;IACT,MAAM;IACN,KAAK;IACL,OAAO;IACP,MAAM;IACN,OAAO;IACP,SAAS;CACT,CAAC;AAEF,wEAAwE;AACxE,MAAM,qBAAqB,GAAG;IAC7B,KAAK;IACL,MAAM;IACN,OAAO;IACP,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,MAAM;IACN,OAAO;IACP,OAAO;IACP,MAAM;IACN,MAAM;IACN,MAAM;CACN,CAAC;AAEF,yDAAyD;AACzD,MAAM,uBAAuB,GAAG;IAC/B,SAAS;IACT,WAAW;IACX,UAAU;IACV,QAAQ;IACR,SAAS;IACT,SAAS;IACT,MAAM;IACN,OAAO;IACP,UAAU;IACV,SAAS;IACT,QAAQ;IACR,OAAO;IACP,aAAa;IACb,SAAS;IACT,OAAO;IACP,MAAM;CACN,CAAC;AAEF,MAAM,cAAc,GAAG,qBAAqB,CAAC;AAC7C,MAAM,iBAAiB,GACtB,kEAAkE,CAAC;AAEpE;;;GAGG;AACH,SAAS,WAAW,CAAC,IAAY;IAChC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IACjC,OAAO,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AAChC,CAAC;AAED;;GAEG;AACH,SAAS,uBAAuB,CAAC,IAAY;IAC5C,MAAM,IAAI,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,CAAC;IAC7C,OAAO,kBAAkB,CAAC,IAAI,CAC7B,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,KAAK,IAAI,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,IAAI,GAAG,CAAC,CACtD,CAAC;AACH,CAAC;AAED;;;;GAIG;AACH,SAAS,mBAAmB,CAAC,IAAyB;IACrD,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,YAAY,KAAK,OAAO,CAAC,CAAC;IAE3E,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC5B,OAAO;YACN,EAAE,EAAE,0BAA0B;YAC9B,KAAK,EAAE,iBAAiB;YACxB,KAAK,EAAE,GAAG;YACV,QAAQ,EAAE,MAAM;YAChB,OAAO,EACN,kJAAkJ;YACnJ,OAAO,EAAE,iCAAiC;SAC1C,CAAC;IACH,CAAC;IAED,MAAM,eAAe,GAAG,sBAAsB,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IACjE,MAAM,UAAU,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,uBAAuB,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;IAC5E,MAAM,aAAa,GAAG,CAAC,GAAG,UAAU,CAAC,MAAM,GAAG,SAAS,CAAC,MAAM,CAAC;IAC/D,MAAM,KAAK,GAAG,KAAK,CAAC,aAAa,GAAG,GAAG,CAAC,CAAC;IAEzC,OAAO;QACN,EAAE,EAAE,0BAA0B;QAC9B,KAAK,EAAE,iBAAiB;QACxB,KAAK;QACL,QAAQ,EAAE,WAAW,CAAC,KAAK,CAAC;QAC5B,OAAO,EACN,kJAAkJ;QACnJ,OAAO,EACN,UAAU,CAAC,MAAM,GAAG,CAAC;YACpB,CAAC,CAAC,GAAG,UAAU,CAAC,MAAM,OAAO,SAAS,CAAC,MAAM,8DAA8D;YAC3G,CAAC,CAAC,OAAO,SAAS,CAAC,MAAM,sCAAsC;QACjE,QAAQ,EACP,UAAU,CAAC,MAAM,GAAG,CAAC;YACpB,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;YACtD,CAAC,CAAC,SAAS;QACb,SAAS,EACR,UAAU,CAAC,MAAM,GAAG,CAAC;YACpB,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;gBAC9C,IAAI,EAAE,CAAC,CAAC,IAAI;gBACZ,UAAU,EAAE,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC,oBAAoB,CAAC;gBACvD,IAAI,EAAE,UAAU;aAChB,CAAC,CAAC;YACJ,CAAC,CAAC,SAAS;KACb,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,SAAS,oBAAoB,CAAC,IAAyB;IACtD,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC;IAEnC,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC7B,OAAO;YACN,EAAE,EAAE,yBAAyB;YAC7B,KAAK,EAAE,kBAAkB;YACzB,KAAK,EAAE,GAAG;YACV,QAAQ,EAAE,MAAM;YAChB,OAAO,EACN,uHAAuH;YACxH,OAAO,EAAE,4BAA4B;SACrC,CAAC;IACH,CAAC;IAED,IAAI,WAAW,GAAG,CAAC,CAAC;IACpB,MAAM,cAAc,GAAa,EAAE,CAAC;IACpC,KAAK,MAAM,IAAI,IAAI,UAAU,EAAE,CAAC;QAC/B,8DAA8D;QAC9D,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;QACnE,MAAM,SAAS,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,GAAW,EAAE,EAAE,CAAC,cAAc,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;QAC5E,IAAI,SAAS,EAAE,CAAC;YACf,WAAW,EAAE,CAAC;QACf,CAAC;aAAM,CAAC;YACP,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAChC,CAAC;IACF,CAAC;IAED,MAAM,KAAK,GAAG,WAAW,GAAG,UAAU,CAAC,MAAM,CAAC;IAC9C,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,GAAG,GAAG,CAAC,CAAC;IAEjC,OAAO;QACN,EAAE,EAAE,yBAAyB;QAC7B,KAAK,EAAE,kBAAkB;QACzB,KAAK;QACL,QAAQ,EAAE,WAAW,CAAC,KAAK,CAAC;QAC5B,OAAO,EACN,uHAAuH;QACxH,OAAO,EAAE,GAAG,WAAW,OAAO,UAAU,CAAC,MAAM,+CAA+C;QAC9F,QAAQ,EACP,cAAc,CAAC,MAAM,GAAG,CAAC;YACxB,CAAC,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,EAAE,YAAY,CAAC;YACvC,CAAC,CAAC,SAAS;KACb,CAAC;AACH,CAAC;AAED;;;;GAIG;AACH,SAAS,kBAAkB,CAAC,IAAyB;IACpD,+DAA+D;IAC/D,sFAAsF;IACtF,MAAM,iBAAiB,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,CAC/C,CAAC,CAAC,EAAE,EAAE,CACL,CAAC,CAAC,cAAc;QAChB,CAAC,CAAC,gBAAgB,EAAE,sBAAsB;QAC1C,CAAC,CAAC,gBAAgB,CACnB,CAAC;IAEF,IAAI,iBAAiB,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACpC,OAAO;YACN,EAAE,EAAE,yBAAyB;YAC7B,KAAK,EAAE,gBAAgB;YACvB,KAAK,EAAE,GAAG;YACV,QAAQ,EAAE,MAAM;YAChB,OAAO,EACN,4IAA4I;YAC7I,OAAO,EAAE,oCAAoC;SAC7C,CAAC;IACH,CAAC;IAED,oGAAoG;IACpG,IAAI,aAAa,GAAG,CAAC,CAAC;IACtB,IAAI,WAAW,GAAG,CAAC,CAAC;IACpB,MAAM,kBAAkB,GAAa,EAAE,CAAC;IAExC,KAAK,MAAM,IAAI,IAAI,iBAAiB,EAAE,CAAC;QACtC,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;QAC1C,MAAM,SAAS,GAAG,qBAAqB,CAAC,IAAI,CAC3C,CAAC,CAAC,EAAE,EAAE,CACL,SAAS,KAAK,CAAC;YACf,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;YAC3B,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC,CAC7B,CAAC;QACF,MAAM,WAAW,GAAG,uBAAuB,CAAC,IAAI,CAC/C,CAAC,CAAC,EAAE,EAAE,CACL,SAAS,KAAK,CAAC;YACf,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;YAC3B,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC,CAC7B,CAAC;QAEF,IAAI,WAAW;YAAE,aAAa,EAAE,CAAC;QACjC,IAAI,SAAS,EAAE,CAAC;YACf,WAAW,EAAE,CAAC;YACd,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACpC,CAAC;IACF,CAAC;IAED,MAAM,cAAc,GAAG,aAAa,GAAG,WAAW,CAAC;IACnD,IAAI,cAAc,KAAK,CAAC,EAAE,CAAC;QAC1B,OAAO;YACN,EAAE,EAAE,yBAAyB;YAC7B,KAAK,EAAE,gBAAgB;YACvB,KAAK,EAAE,EAAE;YACT,QAAQ,EAAE,SAAS;YACnB,OAAO,EACN,4IAA4I;YAC7I,OAAO,EAAE,+DAA+D;SACxE,CAAC;IACH,CAAC;IAED,MAAM,KAAK,GAAG,aAAa,GAAG,cAAc,CAAC;IAC7C,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,GAAG,GAAG,CAAC,CAAC;IAEjC,OAAO;QACN,EAAE,EAAE,yBAAyB;QAC7B,KAAK,EAAE,gBAAgB;QACvB,KAAK;QACL,QAAQ,EAAE,WAAW,CAAC,KAAK,CAAC;QAC5B,OAAO,EACN,4IAA4I;QAC7I,OAAO,EACN,WAAW,GAAG,CAAC;YACd,CAAC,CAAC,GAAG,WAAW,mFAAmF;YACnG,CAAC,CAAC,iDAAiD;QACrD,QAAQ,EACP,kBAAkB,CAAC,MAAM,GAAG,CAAC;YAC5B,CAAC,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC,EAAE,YAAY,CAAC;YAC3C,CAAC,CAAC,SAAS;KACb,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,SAAS,kBAAkB,CAAC,IAAyB;IACpD,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,YAAY,KAAK,SAAS,CAAC,CAAC;IAE5E,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC3B,OAAO;YACN,EAAE,EAAE,uBAAuB;YAC3B,KAAK,EAAE,gBAAgB;YACvB,KAAK,EAAE,GAAG;YACV,QAAQ,EAAE,MAAM;YAChB,OAAO,EACN,4IAA4I;YAC7I,OAAO,EAAE,mCAAmC;SAC5C,CAAC;IACH,CAAC;IAED,MAAM,eAAe,GAAG,sBAAsB,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IAEjE,MAAM,aAAa,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE;QAC3C,MAAM,IAAI,GAAG,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QACjC,OAAO,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACtC,CAAC,CAAC,CAAC;IACH,MAAM,YAAY,GAAG,QAAQ,CAAC,MAAM,GAAG,aAAa,CAAC,MAAM,CAAC;IAE5D,MAAM,KAAK,GAAG,YAAY,GAAG,QAAQ,CAAC,MAAM,CAAC;IAC7C,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,GAAG,GAAG,CAAC,CAAC;IAEjC,OAAO;QACN,EAAE,EAAE,uBAAuB;QAC3B,KAAK,EAAE,gBAAgB;QACvB,KAAK;QACL,QAAQ,EAAE,WAAW,CAAC,KAAK,CAAC;QAC5B,OAAO,EACN,4IAA4I;QAC7I,OAAO,EACN,aAAa,CAAC,MAAM,GAAG,CAAC;YACvB,CAAC,CAAC,GAAG,aAAa,CAAC,MAAM,OAAO,QAAQ,CAAC,MAAM,iDAAiD;YAChG,CAAC,CAAC,OAAO,QAAQ,CAAC,MAAM,yCAAyC;QACnE,QAAQ,EACP,aAAa,CAAC,MAAM,GAAG,CAAC;YACvB,CAAC,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;YACzD,CAAC,CAAC,SAAS;QACb,SAAS,EACR,aAAa,CAAC,MAAM,GAAG,CAAC;YACvB,CAAC,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;gBACjD,IAAI,EAAE,CAAC,CAAC,IAAI;gBACZ,UAAU,EAAE,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC,oBAAoB,CAAC;gBACvD,IAAI,EAAE,UAAU;aAChB,CAAC,CAAC;YACJ,CAAC,CAAC,SAAS;KACb,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,oBAAoB,CAAC,IAAyB;IAC7D,MAAM,QAAQ,GAAc;QAC3B,mBAAmB,CAAC,IAAI,CAAC;QACzB,oBAAoB,CAAC,IAAI,CAAC;QAC1B,kBAAkB,CAAC,IAAI,CAAC;QACxB,kBAAkB,CAAC,IAAI,CAAC;KACxB,CAAC;IAEF,MAAM,KAAK,GAAG,KAAK,CAClB,QAAQ,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,GAAG,QAAQ,CAAC,MAAM,CAC/D,CAAC;IAEF,OAAO;QACN,EAAE,EAAE,kBAAkB;QACtB,KAAK,EAAE,oBAAoB;QAC3B,UAAU,EAAE,QAAQ;QACpB,KAAK;QACL,MAAM,EAAE,GAAG;QACX,QAAQ;KACR,CAAC;AACH,CAAC"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Token Architecture Scorer (weight: 0.20)
3
+ *
4
+ * Evaluates the depth and organization of the token system.
5
+ * Checks collection organization, mode coverage, alias usage,
6
+ * token tier depth, type distribution, and description coverage.
7
+ */
8
+ import type { CategoryScore, DesignSystemRawData } from "./types.js";
9
+ /**
10
+ * Token Architecture category scorer.
11
+ * Returns the average score across all token architecture checks.
12
+ */
13
+ export declare function scoreTokenArchitecture(data: DesignSystemRawData): CategoryScore;
14
+ //# sourceMappingURL=token-architecture.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"token-architecture.d.ts","sourceRoot":"","sources":["../../../../src/apps/design-system-dashboard/scoring/token-architecture.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,mBAAmB,EAAW,MAAM,YAAY,CAAC;AA+X9E;;;GAGG;AACH,wBAAgB,sBAAsB,CACrC,IAAI,EAAE,mBAAmB,GACvB,aAAa,CAsBf"}