@obra-studio/figma-console-mcp 1.32.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 (354) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +879 -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/core/accessibility-tools.d.ts +21 -0
  52. package/dist/core/accessibility-tools.d.ts.map +1 -0
  53. package/dist/core/accessibility-tools.js +307 -0
  54. package/dist/core/accessibility-tools.js.map +1 -0
  55. package/dist/core/annotation-tools.d.ts +14 -0
  56. package/dist/core/annotation-tools.d.ts.map +1 -0
  57. package/dist/core/annotation-tools.js +231 -0
  58. package/dist/core/annotation-tools.js.map +1 -0
  59. package/dist/core/autodocs-tools.d.ts +7 -0
  60. package/dist/core/autodocs-tools.d.ts.map +1 -0
  61. package/dist/core/autodocs-tools.js +195 -0
  62. package/dist/core/autodocs-tools.js.map +1 -0
  63. package/dist/core/comment-tools.d.ts +11 -0
  64. package/dist/core/comment-tools.d.ts.map +1 -0
  65. package/dist/core/comment-tools.js +293 -0
  66. package/dist/core/comment-tools.js.map +1 -0
  67. package/dist/core/config.d.ts +17 -0
  68. package/dist/core/config.d.ts.map +1 -0
  69. package/dist/core/config.js +154 -0
  70. package/dist/core/config.js.map +1 -0
  71. package/dist/core/console-monitor.d.ts +82 -0
  72. package/dist/core/console-monitor.d.ts.map +1 -0
  73. package/dist/core/console-monitor.js +428 -0
  74. package/dist/core/console-monitor.js.map +1 -0
  75. package/dist/core/deep-component-tools.d.ts +14 -0
  76. package/dist/core/deep-component-tools.d.ts.map +1 -0
  77. package/dist/core/deep-component-tools.js +129 -0
  78. package/dist/core/deep-component-tools.js.map +1 -0
  79. package/dist/core/design-code-tools.d.ts +116 -0
  80. package/dist/core/design-code-tools.d.ts.map +1 -0
  81. package/dist/core/design-code-tools.js +2751 -0
  82. package/dist/core/design-code-tools.js.map +1 -0
  83. package/dist/core/design-system-manifest.d.ts +272 -0
  84. package/dist/core/design-system-manifest.d.ts.map +1 -0
  85. package/dist/core/design-system-manifest.js +261 -0
  86. package/dist/core/design-system-manifest.js.map +1 -0
  87. package/dist/core/design-system-tools.d.ts +67 -0
  88. package/dist/core/design-system-tools.d.ts.map +1 -0
  89. package/dist/core/design-system-tools.js +874 -0
  90. package/dist/core/design-system-tools.js.map +1 -0
  91. package/dist/core/diagnose-tool.d.ts +33 -0
  92. package/dist/core/diagnose-tool.d.ts.map +1 -0
  93. package/dist/core/diagnose-tool.js +97 -0
  94. package/dist/core/diagnose-tool.js.map +1 -0
  95. package/dist/core/diff/changelog-formatter.d.ts +35 -0
  96. package/dist/core/diff/changelog-formatter.d.ts.map +1 -0
  97. package/dist/core/diff/changelog-formatter.js +276 -0
  98. package/dist/core/diff/changelog-formatter.js.map +1 -0
  99. package/dist/core/diff/diff-engine.d.ts +127 -0
  100. package/dist/core/diff/diff-engine.d.ts.map +1 -0
  101. package/dist/core/diff/diff-engine.js +335 -0
  102. package/dist/core/diff/diff-engine.js.map +1 -0
  103. package/dist/core/diff/property-compare.d.ts +19 -0
  104. package/dist/core/diff/property-compare.d.ts.map +1 -0
  105. package/dist/core/diff/property-compare.js +37 -0
  106. package/dist/core/diff/property-compare.js.map +1 -0
  107. package/dist/core/diff/version-cache.d.ts +40 -0
  108. package/dist/core/diff/version-cache.d.ts.map +1 -0
  109. package/dist/core/diff/version-cache.js +75 -0
  110. package/dist/core/diff/version-cache.js.map +1 -0
  111. package/dist/core/enrichment/enrichment-service.d.ts +52 -0
  112. package/dist/core/enrichment/enrichment-service.d.ts.map +1 -0
  113. package/dist/core/enrichment/enrichment-service.js +369 -0
  114. package/dist/core/enrichment/enrichment-service.js.map +1 -0
  115. package/dist/core/enrichment/index.d.ts +8 -0
  116. package/dist/core/enrichment/index.d.ts.map +1 -0
  117. package/dist/core/enrichment/index.js +8 -0
  118. package/dist/core/enrichment/index.js.map +1 -0
  119. package/dist/core/enrichment/relationship-mapper.d.ts +106 -0
  120. package/dist/core/enrichment/relationship-mapper.d.ts.map +1 -0
  121. package/dist/core/enrichment/relationship-mapper.js +352 -0
  122. package/dist/core/enrichment/relationship-mapper.js.map +1 -0
  123. package/dist/core/enrichment/style-resolver.d.ts +80 -0
  124. package/dist/core/enrichment/style-resolver.d.ts.map +1 -0
  125. package/dist/core/enrichment/style-resolver.js +327 -0
  126. package/dist/core/enrichment/style-resolver.js.map +1 -0
  127. package/dist/core/figjam-tools.d.ts +8 -0
  128. package/dist/core/figjam-tools.d.ts.map +1 -0
  129. package/dist/core/figjam-tools.js +548 -0
  130. package/dist/core/figjam-tools.js.map +1 -0
  131. package/dist/core/figma-api.d.ts +245 -0
  132. package/dist/core/figma-api.d.ts.map +1 -0
  133. package/dist/core/figma-api.js +446 -0
  134. package/dist/core/figma-api.js.map +1 -0
  135. package/dist/core/figma-connector.d.ts +180 -0
  136. package/dist/core/figma-connector.d.ts.map +1 -0
  137. package/dist/core/figma-connector.js +8 -0
  138. package/dist/core/figma-connector.js.map +1 -0
  139. package/dist/core/figma-desktop-connector.d.ts +312 -0
  140. package/dist/core/figma-desktop-connector.d.ts.map +1 -0
  141. package/dist/core/figma-desktop-connector.js +1298 -0
  142. package/dist/core/figma-desktop-connector.js.map +1 -0
  143. package/dist/core/figma-reconstruction-spec.d.ts +166 -0
  144. package/dist/core/figma-reconstruction-spec.d.ts.map +1 -0
  145. package/dist/core/figma-reconstruction-spec.js +403 -0
  146. package/dist/core/figma-reconstruction-spec.js.map +1 -0
  147. package/dist/core/figma-style-extractor.d.ts +76 -0
  148. package/dist/core/figma-style-extractor.d.ts.map +1 -0
  149. package/dist/core/figma-style-extractor.js +312 -0
  150. package/dist/core/figma-style-extractor.js.map +1 -0
  151. package/dist/core/figma-tools.d.ts +22 -0
  152. package/dist/core/figma-tools.d.ts.map +1 -0
  153. package/dist/core/figma-tools.js +3187 -0
  154. package/dist/core/figma-tools.js.map +1 -0
  155. package/dist/core/identity.d.ts +41 -0
  156. package/dist/core/identity.d.ts.map +1 -0
  157. package/dist/core/identity.js +97 -0
  158. package/dist/core/identity.js.map +1 -0
  159. package/dist/core/library-tools.d.ts +17 -0
  160. package/dist/core/library-tools.d.ts.map +1 -0
  161. package/dist/core/library-tools.js +581 -0
  162. package/dist/core/library-tools.js.map +1 -0
  163. package/dist/core/logger.d.ts +22 -0
  164. package/dist/core/logger.d.ts.map +1 -0
  165. package/dist/core/logger.js +54 -0
  166. package/dist/core/logger.js.map +1 -0
  167. package/dist/core/port-discovery.d.ts +171 -0
  168. package/dist/core/port-discovery.d.ts.map +1 -0
  169. package/dist/core/port-discovery.js +563 -0
  170. package/dist/core/port-discovery.js.map +1 -0
  171. package/dist/core/resolve-package-root.d.ts +2 -0
  172. package/dist/core/resolve-package-root.d.ts.map +1 -0
  173. package/dist/core/resolve-package-root.js +12 -0
  174. package/dist/core/resolve-package-root.js.map +1 -0
  175. package/dist/core/slides-tools.d.ts +8 -0
  176. package/dist/core/slides-tools.d.ts.map +1 -0
  177. package/dist/core/slides-tools.js +715 -0
  178. package/dist/core/slides-tools.js.map +1 -0
  179. package/dist/core/snippet-injector.d.ts +24 -0
  180. package/dist/core/snippet-injector.d.ts.map +1 -0
  181. package/dist/core/snippet-injector.js +97 -0
  182. package/dist/core/snippet-injector.js.map +1 -0
  183. package/dist/core/tokens/alias-resolver.d.ts +55 -0
  184. package/dist/core/tokens/alias-resolver.d.ts.map +1 -0
  185. package/dist/core/tokens/alias-resolver.js +136 -0
  186. package/dist/core/tokens/alias-resolver.js.map +1 -0
  187. package/dist/core/tokens/config.d.ts +87 -0
  188. package/dist/core/tokens/config.d.ts.map +1 -0
  189. package/dist/core/tokens/config.js +285 -0
  190. package/dist/core/tokens/config.js.map +1 -0
  191. package/dist/core/tokens/figma-converter.d.ts +81 -0
  192. package/dist/core/tokens/figma-converter.d.ts.map +1 -0
  193. package/dist/core/tokens/figma-converter.js +196 -0
  194. package/dist/core/tokens/figma-converter.js.map +1 -0
  195. package/dist/core/tokens/formatters/css-vars.d.ts +24 -0
  196. package/dist/core/tokens/formatters/css-vars.d.ts.map +1 -0
  197. package/dist/core/tokens/formatters/css-vars.js +330 -0
  198. package/dist/core/tokens/formatters/css-vars.js.map +1 -0
  199. package/dist/core/tokens/formatters/dtcg.d.ts +28 -0
  200. package/dist/core/tokens/formatters/dtcg.d.ts.map +1 -0
  201. package/dist/core/tokens/formatters/dtcg.js +301 -0
  202. package/dist/core/tokens/formatters/dtcg.js.map +1 -0
  203. package/dist/core/tokens/formatters/index.d.ts +30 -0
  204. package/dist/core/tokens/formatters/index.d.ts.map +1 -0
  205. package/dist/core/tokens/formatters/index.js +46 -0
  206. package/dist/core/tokens/formatters/index.js.map +1 -0
  207. package/dist/core/tokens/formatters/json.d.ts +37 -0
  208. package/dist/core/tokens/formatters/json.d.ts.map +1 -0
  209. package/dist/core/tokens/formatters/json.js +188 -0
  210. package/dist/core/tokens/formatters/json.js.map +1 -0
  211. package/dist/core/tokens/formatters/less.d.ts +4 -0
  212. package/dist/core/tokens/formatters/less.d.ts.map +1 -0
  213. package/dist/core/tokens/formatters/less.js +5 -0
  214. package/dist/core/tokens/formatters/less.js.map +1 -0
  215. package/dist/core/tokens/formatters/scss.d.ts +26 -0
  216. package/dist/core/tokens/formatters/scss.d.ts.map +1 -0
  217. package/dist/core/tokens/formatters/scss.js +253 -0
  218. package/dist/core/tokens/formatters/scss.js.map +1 -0
  219. package/dist/core/tokens/formatters/stubs.d.ts +9 -0
  220. package/dist/core/tokens/formatters/stubs.d.ts.map +1 -0
  221. package/dist/core/tokens/formatters/stubs.js +14 -0
  222. package/dist/core/tokens/formatters/stubs.js.map +1 -0
  223. package/dist/core/tokens/formatters/style-dictionary-v3.d.ts +45 -0
  224. package/dist/core/tokens/formatters/style-dictionary-v3.d.ts.map +1 -0
  225. package/dist/core/tokens/formatters/style-dictionary-v3.js +208 -0
  226. package/dist/core/tokens/formatters/style-dictionary-v3.js.map +1 -0
  227. package/dist/core/tokens/formatters/tailwind-v3.d.ts +37 -0
  228. package/dist/core/tokens/formatters/tailwind-v3.d.ts.map +1 -0
  229. package/dist/core/tokens/formatters/tailwind-v3.js +238 -0
  230. package/dist/core/tokens/formatters/tailwind-v3.js.map +1 -0
  231. package/dist/core/tokens/formatters/tailwind-v4.d.ts +41 -0
  232. package/dist/core/tokens/formatters/tailwind-v4.d.ts.map +1 -0
  233. package/dist/core/tokens/formatters/tailwind-v4.js +331 -0
  234. package/dist/core/tokens/formatters/tailwind-v4.js.map +1 -0
  235. package/dist/core/tokens/formatters/tokens-studio.d.ts +44 -0
  236. package/dist/core/tokens/formatters/tokens-studio.d.ts.map +1 -0
  237. package/dist/core/tokens/formatters/tokens-studio.js +251 -0
  238. package/dist/core/tokens/formatters/tokens-studio.js.map +1 -0
  239. package/dist/core/tokens/formatters/ts-module.d.ts +35 -0
  240. package/dist/core/tokens/formatters/ts-module.d.ts.map +1 -0
  241. package/dist/core/tokens/formatters/ts-module.js +199 -0
  242. package/dist/core/tokens/formatters/ts-module.js.map +1 -0
  243. package/dist/core/tokens/index.d.ts +17 -0
  244. package/dist/core/tokens/index.d.ts.map +1 -0
  245. package/dist/core/tokens/index.js +16 -0
  246. package/dist/core/tokens/index.js.map +1 -0
  247. package/dist/core/tokens/parsers/css-vars.d.ts +3 -0
  248. package/dist/core/tokens/parsers/css-vars.d.ts.map +1 -0
  249. package/dist/core/tokens/parsers/css-vars.js +5 -0
  250. package/dist/core/tokens/parsers/css-vars.js.map +1 -0
  251. package/dist/core/tokens/parsers/dtcg.d.ts +21 -0
  252. package/dist/core/tokens/parsers/dtcg.d.ts.map +1 -0
  253. package/dist/core/tokens/parsers/dtcg.js +254 -0
  254. package/dist/core/tokens/parsers/dtcg.js.map +1 -0
  255. package/dist/core/tokens/parsers/index.d.ts +37 -0
  256. package/dist/core/tokens/parsers/index.d.ts.map +1 -0
  257. package/dist/core/tokens/parsers/index.js +139 -0
  258. package/dist/core/tokens/parsers/index.js.map +1 -0
  259. package/dist/core/tokens/parsers/json.d.ts +4 -0
  260. package/dist/core/tokens/parsers/json.d.ts.map +1 -0
  261. package/dist/core/tokens/parsers/json.js +8 -0
  262. package/dist/core/tokens/parsers/json.js.map +1 -0
  263. package/dist/core/tokens/parsers/scss.d.ts +3 -0
  264. package/dist/core/tokens/parsers/scss.d.ts.map +1 -0
  265. package/dist/core/tokens/parsers/scss.js +5 -0
  266. package/dist/core/tokens/parsers/scss.js.map +1 -0
  267. package/dist/core/tokens/parsers/stubs.d.ts +15 -0
  268. package/dist/core/tokens/parsers/stubs.d.ts.map +1 -0
  269. package/dist/core/tokens/parsers/stubs.js +21 -0
  270. package/dist/core/tokens/parsers/stubs.js.map +1 -0
  271. package/dist/core/tokens/parsers/style-dictionary-v3.d.ts +3 -0
  272. package/dist/core/tokens/parsers/style-dictionary-v3.d.ts.map +1 -0
  273. package/dist/core/tokens/parsers/style-dictionary-v3.js +5 -0
  274. package/dist/core/tokens/parsers/style-dictionary-v3.js.map +1 -0
  275. package/dist/core/tokens/parsers/tailwind-v3.d.ts +3 -0
  276. package/dist/core/tokens/parsers/tailwind-v3.d.ts.map +1 -0
  277. package/dist/core/tokens/parsers/tailwind-v3.js +5 -0
  278. package/dist/core/tokens/parsers/tailwind-v3.js.map +1 -0
  279. package/dist/core/tokens/parsers/tailwind-v4.d.ts +3 -0
  280. package/dist/core/tokens/parsers/tailwind-v4.d.ts.map +1 -0
  281. package/dist/core/tokens/parsers/tailwind-v4.js +5 -0
  282. package/dist/core/tokens/parsers/tailwind-v4.js.map +1 -0
  283. package/dist/core/tokens/parsers/tokens-studio.d.ts +3 -0
  284. package/dist/core/tokens/parsers/tokens-studio.d.ts.map +1 -0
  285. package/dist/core/tokens/parsers/tokens-studio.js +5 -0
  286. package/dist/core/tokens/parsers/tokens-studio.js.map +1 -0
  287. package/dist/core/tokens/schemas.d.ts +31 -0
  288. package/dist/core/tokens/schemas.d.ts.map +1 -0
  289. package/dist/core/tokens/schemas.js +149 -0
  290. package/dist/core/tokens/schemas.js.map +1 -0
  291. package/dist/core/tokens/transforms/color.d.ts +9 -0
  292. package/dist/core/tokens/transforms/color.d.ts.map +1 -0
  293. package/dist/core/tokens/transforms/color.js +13 -0
  294. package/dist/core/tokens/transforms/color.js.map +1 -0
  295. package/dist/core/tokens/transforms/index.d.ts +36 -0
  296. package/dist/core/tokens/transforms/index.d.ts.map +1 -0
  297. package/dist/core/tokens/transforms/index.js +30 -0
  298. package/dist/core/tokens/transforms/index.js.map +1 -0
  299. package/dist/core/tokens/transforms/size.d.ts +7 -0
  300. package/dist/core/tokens/transforms/size.d.ts.map +1 -0
  301. package/dist/core/tokens/transforms/size.js +8 -0
  302. package/dist/core/tokens/transforms/size.js.map +1 -0
  303. package/dist/core/tokens/types.d.ts +228 -0
  304. package/dist/core/tokens/types.d.ts.map +1 -0
  305. package/dist/core/tokens/types.js +19 -0
  306. package/dist/core/tokens/types.js.map +1 -0
  307. package/dist/core/tokens-tools.d.ts +42 -0
  308. package/dist/core/tokens-tools.d.ts.map +1 -0
  309. package/dist/core/tokens-tools.js +860 -0
  310. package/dist/core/tokens-tools.js.map +1 -0
  311. package/dist/core/types/design-code.d.ts +271 -0
  312. package/dist/core/types/design-code.d.ts.map +1 -0
  313. package/dist/core/types/design-code.js +5 -0
  314. package/dist/core/types/design-code.js.map +1 -0
  315. package/dist/core/types/enriched.d.ts +213 -0
  316. package/dist/core/types/enriched.d.ts.map +1 -0
  317. package/dist/core/types/enriched.js +6 -0
  318. package/dist/core/types/enriched.js.map +1 -0
  319. package/dist/core/types/index.d.ts +104 -0
  320. package/dist/core/types/index.d.ts.map +1 -0
  321. package/dist/core/types/index.js +5 -0
  322. package/dist/core/types/index.js.map +1 -0
  323. package/dist/core/variable-resolver.d.ts +45 -0
  324. package/dist/core/variable-resolver.d.ts.map +1 -0
  325. package/dist/core/variable-resolver.js +86 -0
  326. package/dist/core/variable-resolver.js.map +1 -0
  327. package/dist/core/version-tools.d.ts +59 -0
  328. package/dist/core/version-tools.d.ts.map +1 -0
  329. package/dist/core/version-tools.js +1159 -0
  330. package/dist/core/version-tools.js.map +1 -0
  331. package/dist/core/websocket-connector.d.ts +187 -0
  332. package/dist/core/websocket-connector.d.ts.map +1 -0
  333. package/dist/core/websocket-connector.js +378 -0
  334. package/dist/core/websocket-connector.js.map +1 -0
  335. package/dist/core/websocket-server.js +866 -0
  336. package/dist/core/websocket-server.js.map +1 -0
  337. package/dist/core/write-tools.d.ts +7 -0
  338. package/dist/core/write-tools.d.ts.map +1 -0
  339. package/dist/core/write-tools.js +2172 -0
  340. package/dist/core/write-tools.js.map +1 -0
  341. package/dist/local.d.ts +95 -0
  342. package/dist/local.d.ts.map +1 -0
  343. package/dist/local.js +3036 -0
  344. package/dist/local.js.map +1 -0
  345. package/dist/vendor/obra-autodocs/autodocs-body.generated.d.ts +2 -0
  346. package/dist/vendor/obra-autodocs/autodocs-body.generated.d.ts.map +1 -0
  347. package/dist/vendor/obra-autodocs/autodocs-body.generated.js +6 -0
  348. package/dist/vendor/obra-autodocs/autodocs-body.generated.js.map +1 -0
  349. package/figma-desktop-bridge/README.md +365 -0
  350. package/figma-desktop-bridge/code.js +6504 -0
  351. package/figma-desktop-bridge/icon.png +0 -0
  352. package/figma-desktop-bridge/manifest.json +67 -0
  353. package/figma-desktop-bridge/ui.html +2441 -0
  354. package/package.json +98 -0
@@ -0,0 +1,75 @@
1
+ /**
2
+ * In-memory LRU cache for Figma file snapshots at past versions.
3
+ *
4
+ * Past versions are immutable, so a cached snapshot for `${fileKey}:${versionId}`
5
+ * never goes stale. The cache is process-scoped (no persistence) and bounded by
6
+ * a max-entries cap rather than a byte budget — keeps the implementation simple
7
+ * and avoids assumptions about JSON serialization size.
8
+ *
9
+ * HEAD ("current") is intentionally NOT cached because it changes on every save.
10
+ * Callers should pass `null` as the versionId for HEAD requests; the cache
11
+ * methods short-circuit on null.
12
+ *
13
+ * Usage:
14
+ * const cache = new VersionSnapshotCache();
15
+ * const key = cache.makeKey(fileKey, versionId, depth, nodeIds);
16
+ * let snapshot = cache.get(key);
17
+ * if (!snapshot) {
18
+ * snapshot = await api.getFile(fileKey, { version: versionId, depth });
19
+ * cache.set(key, snapshot);
20
+ * }
21
+ */
22
+ export class VersionSnapshotCache {
23
+ constructor(options = {}) {
24
+ // Map preserves insertion order — first key is the LRU.
25
+ this.store = new Map();
26
+ this.maxEntries = options.maxEntries ?? 50;
27
+ }
28
+ /**
29
+ * Build a stable cache key from the request parameters.
30
+ * Returns null for HEAD requests (versionId is null/undefined/empty).
31
+ */
32
+ makeKey(fileKey, versionId, depth, nodeIds) {
33
+ if (!versionId)
34
+ return null;
35
+ const idsHash = nodeIds && nodeIds.length > 0
36
+ ? [...nodeIds].sort().join(",")
37
+ : "";
38
+ const depthPart = depth === undefined ? "full" : String(depth);
39
+ return `${fileKey}:${versionId}:${depthPart}:${idsHash}`;
40
+ }
41
+ get(key) {
42
+ if (key === null)
43
+ return undefined;
44
+ if (!this.store.has(key))
45
+ return undefined;
46
+ // Refresh recency: delete + re-insert moves the key to the end.
47
+ const value = this.store.get(key);
48
+ this.store.delete(key);
49
+ this.store.set(key, value);
50
+ return value;
51
+ }
52
+ set(key, value) {
53
+ if (key === null)
54
+ return;
55
+ if (this.store.has(key))
56
+ this.store.delete(key);
57
+ this.store.set(key, value);
58
+ while (this.store.size > this.maxEntries) {
59
+ const oldestKey = this.store.keys().next().value;
60
+ if (oldestKey === undefined)
61
+ break;
62
+ this.store.delete(oldestKey);
63
+ }
64
+ }
65
+ has(key) {
66
+ return key !== null && this.store.has(key);
67
+ }
68
+ get size() {
69
+ return this.store.size;
70
+ }
71
+ clear() {
72
+ this.store.clear();
73
+ }
74
+ }
75
+ //# sourceMappingURL=version-cache.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"version-cache.js","sourceRoot":"","sources":["../../../src/core/diff/version-cache.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAMH,MAAM,OAAO,oBAAoB;IAKhC,YAAY,UAAuC,EAAE;QAHrD,wDAAwD;QACvC,UAAK,GAAG,IAAI,GAAG,EAAmB,CAAC;QAGnD,IAAI,CAAC,UAAU,GAAG,OAAO,CAAC,UAAU,IAAI,EAAE,CAAC;IAC5C,CAAC;IAED;;;OAGG;IACH,OAAO,CACN,OAAe,EACf,SAAoC,EACpC,KAAyB,EACzB,OAAkB;QAElB,IAAI,CAAC,SAAS;YAAE,OAAO,IAAI,CAAC;QAC5B,MAAM,OAAO,GAAG,OAAO,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC;YAC5C,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC;YAC/B,CAAC,CAAC,EAAE,CAAC;QACN,MAAM,SAAS,GAAG,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAC/D,OAAO,GAAG,OAAO,IAAI,SAAS,IAAI,SAAS,IAAI,OAAO,EAAE,CAAC;IAC1D,CAAC;IAED,GAAG,CAAc,GAAkB;QAClC,IAAI,GAAG,KAAK,IAAI;YAAE,OAAO,SAAS,CAAC;QACnC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC;YAAE,OAAO,SAAS,CAAC;QAC3C,gEAAgE;QAChE,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAM,CAAC;QACvC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACvB,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QAC3B,OAAO,KAAK,CAAC;IACd,CAAC;IAED,GAAG,CAAC,GAAkB,EAAE,KAAc;QACrC,IAAI,GAAG,KAAK,IAAI;YAAE,OAAO;QACzB,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC;YAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAChD,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QAC3B,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC,UAAU,EAAE;YACzC,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC;YACjD,IAAI,SAAS,KAAK,SAAS;gBAAE,MAAM;YACnC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;SAC7B;IACF,CAAC;IAED,GAAG,CAAC,GAAkB;QACrB,OAAO,GAAG,KAAK,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAC5C,CAAC;IAED,IAAI,IAAI;QACP,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;IACxB,CAAC;IAED,KAAK;QACJ,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;IACpB,CAAC;CACD"}
@@ -0,0 +1,52 @@
1
+ /**
2
+ * Enrichment Service
3
+ * Coordinates enrichment of Figma API responses
4
+ */
5
+ import type pino from "pino";
6
+ import type { EnrichedStyle, EnrichedVariable, EnrichedComponent, EnrichedFileData, EnrichmentOptions } from "../types/enriched.js";
7
+ type Logger = pino.Logger;
8
+ export declare class EnrichmentService {
9
+ private logger;
10
+ private styleResolver;
11
+ private relationshipMapper;
12
+ private fileDataCache;
13
+ private lastEnrichmentTime;
14
+ private CACHE_TTL_MS;
15
+ constructor(logger: Logger);
16
+ /**
17
+ * Enrich styles response
18
+ */
19
+ enrichStyles(styles: any[], fileKey: string, options?: EnrichmentOptions, fileData?: any): Promise<EnrichedStyle[]>;
20
+ /**
21
+ * Enrich variables response
22
+ */
23
+ enrichVariables(variables: any[], fileKey: string, options?: EnrichmentOptions, fileData?: any): Promise<EnrichedVariable[]>;
24
+ /**
25
+ * Enrich component response
26
+ */
27
+ enrichComponent(component: any, fileKey: string, options?: EnrichmentOptions, fileData?: any): Promise<EnrichedComponent>;
28
+ /**
29
+ * Enrich file data response
30
+ */
31
+ enrichFileData(fileData: any, options?: EnrichmentOptions): Promise<EnrichedFileData>;
32
+ /**
33
+ * Get file data for enrichment (with caching)
34
+ * NOTE: This is a placeholder that returns the data passed in
35
+ * In a full implementation, this would fetch fresh data from Figma API
36
+ */
37
+ private getFileDataForEnrichment;
38
+ /**
39
+ * Set file data in cache (called by tools that already have the data)
40
+ */
41
+ setFileDataCache(fileKey: string, fileData: any): void;
42
+ /**
43
+ * Extract variables as a Map for efficient lookup
44
+ */
45
+ private extractVariablesMap;
46
+ /**
47
+ * Clear all caches
48
+ */
49
+ clearCache(): void;
50
+ }
51
+ export {};
52
+ //# sourceMappingURL=enrichment-service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"enrichment-service.d.ts","sourceRoot":"","sources":["../../../src/core/enrichment/enrichment-service.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAG7B,OAAO,KAAK,EACX,aAAa,EACb,gBAAgB,EAChB,iBAAiB,EACjB,gBAAgB,EAChB,iBAAiB,EAEjB,MAAM,sBAAsB,CAAC;AAE9B,KAAK,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;AAE1B,qBAAa,iBAAiB;IAC7B,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,aAAa,CAAqB;IAC1C,OAAO,CAAC,kBAAkB,CAAqB;IAG/C,OAAO,CAAC,aAAa,CAA+B;IACpD,OAAO,CAAC,kBAAkB,CAAkC;IAC5D,OAAO,CAAC,YAAY,CAAiB;gBAEzB,MAAM,EAAE,MAAM;IAM1B;;OAEG;IACG,YAAY,CACjB,MAAM,EAAE,GAAG,EAAE,EACb,OAAO,EAAE,MAAM,EACf,OAAO,GAAE,iBAAsB,EAC/B,QAAQ,CAAC,EAAE,GAAG,GACZ,OAAO,CAAC,aAAa,EAAE,CAAC;IAsE3B;;OAEG;IACG,eAAe,CACpB,SAAS,EAAE,GAAG,EAAE,EAChB,OAAO,EAAE,MAAM,EACf,OAAO,GAAE,iBAAsB,EAC/B,QAAQ,CAAC,EAAE,GAAG,GACZ,OAAO,CAAC,gBAAgB,EAAE,CAAC;IAgF9B;;OAEG;IACG,eAAe,CACpB,SAAS,EAAE,GAAG,EACd,OAAO,EAAE,MAAM,EACf,OAAO,GAAE,iBAAsB,EAC/B,QAAQ,CAAC,EAAE,GAAG,GACZ,OAAO,CAAC,iBAAiB,CAAC;IAmK7B;;OAEG;IACG,cAAc,CACnB,QAAQ,EAAE,GAAG,EACb,OAAO,GAAE,iBAAsB,GAC7B,OAAO,CAAC,gBAAgB,CAAC;IAqD5B;;;;OAIG;YACW,wBAAwB;IA2BtC;;OAEG;IACH,gBAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,GAAG,IAAI;IAKtD;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAY3B;;OAEG;IACH,UAAU,IAAI,IAAI;CAMlB"}
@@ -0,0 +1,369 @@
1
+ /**
2
+ * Enrichment Service
3
+ * Coordinates enrichment of Figma API responses
4
+ */
5
+ import { StyleValueResolver } from "./style-resolver.js";
6
+ import { RelationshipMapper } from "./relationship-mapper.js";
7
+ export class EnrichmentService {
8
+ constructor(logger) {
9
+ // Caches
10
+ this.fileDataCache = new Map();
11
+ this.lastEnrichmentTime = new Map();
12
+ this.CACHE_TTL_MS = 5 * 60 * 1000; // 5 minutes
13
+ this.logger = logger;
14
+ this.styleResolver = new StyleValueResolver(logger);
15
+ this.relationshipMapper = new RelationshipMapper(logger);
16
+ }
17
+ /**
18
+ * Enrich styles response
19
+ */
20
+ async enrichStyles(styles, fileKey, options = {}, fileData) {
21
+ if (!options.enrich) {
22
+ return styles; // Return as-is if enrichment not requested
23
+ }
24
+ this.logger.info({ fileKey, count: styles.length }, "Enriching styles");
25
+ try {
26
+ // Get file data for relationships (use provided data if available)
27
+ const data = fileData || await this.getFileDataForEnrichment(fileKey);
28
+ const variables = this.extractVariablesMap(data);
29
+ // Build relationships if requested
30
+ if (options.include_usage) {
31
+ await this.relationshipMapper.buildRelationships(data);
32
+ }
33
+ const enrichedStyles = [];
34
+ for (const style of styles) {
35
+ const enriched = {
36
+ ...style,
37
+ };
38
+ // Resolve value and variable reference
39
+ if (options.include_exports !== false) {
40
+ const { value, variableRef } = await this.styleResolver.resolveStyleValue(style, variables, options.max_depth);
41
+ enriched.resolved_value = value;
42
+ enriched.variable_reference = variableRef;
43
+ // Generate export formats
44
+ if (value && options.export_formats) {
45
+ enriched.export_formats = this.styleResolver.generateExportFormats(style.name, value, style.style_type, options.export_formats);
46
+ }
47
+ }
48
+ // Add usage information
49
+ if (options.include_usage) {
50
+ const styleId = style.node_id || style.key || style.id;
51
+ enriched.used_in_components =
52
+ this.relationshipMapper.getComponentsByStyle(styleId);
53
+ enriched.usage_count =
54
+ this.relationshipMapper.getStyleUsageCount(styleId);
55
+ }
56
+ enrichedStyles.push(enriched);
57
+ }
58
+ this.logger.info({ enrichedCount: enrichedStyles.length }, "Styles enrichment complete");
59
+ return enrichedStyles;
60
+ }
61
+ catch (error) {
62
+ this.logger.error({ error }, "Failed to enrich styles");
63
+ return styles; // Return original on error
64
+ }
65
+ }
66
+ /**
67
+ * Enrich variables response
68
+ */
69
+ async enrichVariables(variables, fileKey, options = {}, fileData) {
70
+ if (!options.enrich) {
71
+ return variables;
72
+ }
73
+ this.logger.info({ fileKey, count: variables.length }, "Enriching variables");
74
+ try {
75
+ const data = fileData || await this.getFileDataForEnrichment(fileKey);
76
+ const variablesMap = this.extractVariablesMap(data);
77
+ // Build relationships if requested
78
+ if (options.include_usage) {
79
+ await this.relationshipMapper.buildRelationships(data);
80
+ }
81
+ const enrichedVars = [];
82
+ for (const variable of variables) {
83
+ const enriched = {
84
+ ...variable,
85
+ };
86
+ // Resolve values for all modes
87
+ if (options.include_exports !== false) {
88
+ const resolved_values = {};
89
+ for (const [modeId, value] of Object.entries(variable.valuesByMode || {})) {
90
+ const resolvedValue = await this.styleResolver.resolveVariableValue(variable, variablesMap, options.max_depth);
91
+ resolved_values[modeId] = resolvedValue;
92
+ }
93
+ enriched.resolved_values = resolved_values;
94
+ // Generate export formats using first mode
95
+ const firstModeValue = Object.values(resolved_values)[0];
96
+ if (firstModeValue && options.export_formats) {
97
+ enriched.export_formats = this.styleResolver.generateExportFormats(variable.name, firstModeValue, variable.resolvedType, options.export_formats);
98
+ }
99
+ }
100
+ // Add usage information
101
+ if (options.include_usage) {
102
+ enriched.used_in_styles =
103
+ this.relationshipMapper.getStylesByVariable(variable.id);
104
+ enriched.used_in_components =
105
+ this.relationshipMapper.getComponentsByVariable(variable.id);
106
+ enriched.usage_count =
107
+ this.relationshipMapper.getVariableUsageCount(variable.id);
108
+ }
109
+ // Add dependencies
110
+ if (options.include_dependencies) {
111
+ enriched.dependencies =
112
+ this.relationshipMapper.getVariableDependencies(variable.id);
113
+ }
114
+ enrichedVars.push(enriched);
115
+ }
116
+ this.logger.info({ enrichedCount: enrichedVars.length }, "Variables enrichment complete");
117
+ return enrichedVars;
118
+ }
119
+ catch (error) {
120
+ this.logger.error({ error }, "Failed to enrich variables");
121
+ return variables;
122
+ }
123
+ }
124
+ /**
125
+ * Enrich component response
126
+ */
127
+ async enrichComponent(component, fileKey, options = {}, fileData) {
128
+ if (!options.enrich) {
129
+ return component;
130
+ }
131
+ this.logger.info({ fileKey, componentId: component.id }, "Enriching component");
132
+ try {
133
+ const enriched = {
134
+ ...component,
135
+ };
136
+ const data = fileData || await this.getFileDataForEnrichment(fileKey);
137
+ // Build relationships
138
+ await this.relationshipMapper.buildRelationships(data);
139
+ // Extract styles used
140
+ if (component.styles) {
141
+ const stylesUsed = [];
142
+ for (const [prop, styleId] of Object.entries(component.styles)) {
143
+ const style = data.styles?.[styleId];
144
+ if (style) {
145
+ stylesUsed.push({
146
+ style_id: styleId,
147
+ style_name: style.name,
148
+ style_type: style.style_type,
149
+ property: prop,
150
+ });
151
+ }
152
+ }
153
+ enriched.styles_used = stylesUsed;
154
+ }
155
+ // Extract variables used and detect hardcoded values by walking the node tree
156
+ const varsUsed = [];
157
+ const hardcodedValues = [];
158
+ const variables = this.extractVariablesMap(data);
159
+ // Walk node tree to find boundVariables and hardcoded values
160
+ const walkForTokens = (node, path = "") => {
161
+ if (!node)
162
+ return;
163
+ const nodePath = path ? `${path} > ${node.name || node.id}` : (node.name || node.id);
164
+ const bv = node.boundVariables || {};
165
+ // Check fills
166
+ if (node.fills && Array.isArray(node.fills)) {
167
+ for (let i = 0; i < node.fills.length; i++) {
168
+ const fill = node.fills[i];
169
+ if (fill.type === "SOLID" && fill.visible !== false) {
170
+ const fillBv = bv.fills;
171
+ if (fillBv && (Array.isArray(fillBv) ? fillBv[i] : fillBv)) {
172
+ const varRef = Array.isArray(fillBv) ? fillBv[i] : fillBv;
173
+ if (varRef?.id) {
174
+ const varInfo = variables.get(varRef.id);
175
+ varsUsed.push({
176
+ variableId: varRef.id,
177
+ variableName: varInfo?.name || varRef.id,
178
+ property: "fill",
179
+ nodePath,
180
+ });
181
+ }
182
+ }
183
+ else {
184
+ // Hardcoded fill
185
+ const c = fill.color;
186
+ if (c) {
187
+ hardcodedValues.push({
188
+ property: "fill",
189
+ value: `rgb(${Math.round(c.r * 255)}, ${Math.round(c.g * 255)}, ${Math.round(c.b * 255)})`,
190
+ nodePath,
191
+ });
192
+ }
193
+ }
194
+ }
195
+ }
196
+ }
197
+ // Check strokes
198
+ if (node.strokes && Array.isArray(node.strokes)) {
199
+ for (let i = 0; i < node.strokes.length; i++) {
200
+ const stroke = node.strokes[i];
201
+ if (stroke.type === "SOLID" && stroke.visible !== false) {
202
+ const strokeBv = bv.strokes;
203
+ if (strokeBv && (Array.isArray(strokeBv) ? strokeBv[i] : strokeBv)) {
204
+ const varRef = Array.isArray(strokeBv) ? strokeBv[i] : strokeBv;
205
+ if (varRef?.id) {
206
+ const varInfo = variables.get(varRef.id);
207
+ varsUsed.push({
208
+ variableId: varRef.id,
209
+ variableName: varInfo?.name || varRef.id,
210
+ property: "stroke",
211
+ nodePath,
212
+ });
213
+ }
214
+ }
215
+ else {
216
+ const c = stroke.color;
217
+ if (c) {
218
+ hardcodedValues.push({
219
+ property: "stroke",
220
+ value: `rgb(${Math.round(c.r * 255)}, ${Math.round(c.g * 255)}, ${Math.round(c.b * 255)})`,
221
+ nodePath,
222
+ });
223
+ }
224
+ }
225
+ }
226
+ }
227
+ }
228
+ // Check spacing/sizing tokens
229
+ const spacingProps = ["itemSpacing", "paddingLeft", "paddingRight", "paddingTop", "paddingBottom", "cornerRadius"];
230
+ for (const prop of spacingProps) {
231
+ if (node[prop] !== undefined && node[prop] !== 0) {
232
+ if (bv[prop]?.id) {
233
+ const varInfo = variables.get(bv[prop].id);
234
+ varsUsed.push({
235
+ variableId: bv[prop].id,
236
+ variableName: varInfo?.name || bv[prop].id,
237
+ property: prop,
238
+ nodePath,
239
+ });
240
+ }
241
+ else {
242
+ hardcodedValues.push({
243
+ property: prop,
244
+ value: node[prop],
245
+ nodePath,
246
+ });
247
+ }
248
+ }
249
+ }
250
+ // Recurse into children
251
+ if (node.children && Array.isArray(node.children)) {
252
+ for (const child of node.children) {
253
+ walkForTokens(child, nodePath);
254
+ }
255
+ }
256
+ };
257
+ walkForTokens(component);
258
+ enriched.variables_used = varsUsed;
259
+ enriched.hardcoded_values = hardcodedValues;
260
+ // Calculate token coverage
261
+ const totalProps = varsUsed.length + (enriched.styles_used?.length || 0) + hardcodedValues.length;
262
+ const tokenProps = varsUsed.length + (enriched.styles_used?.length || 0);
263
+ enriched.token_coverage =
264
+ totalProps > 0 ? Math.round((tokenProps / totalProps) * 100) : 100;
265
+ this.logger.info({ componentId: component.id, coverage: enriched.token_coverage }, "Component enrichment complete");
266
+ return enriched;
267
+ }
268
+ catch (error) {
269
+ this.logger.error({ error }, "Failed to enrich component");
270
+ return component;
271
+ }
272
+ }
273
+ /**
274
+ * Enrich file data response
275
+ */
276
+ async enrichFileData(fileData, options = {}) {
277
+ if (!options.enrich) {
278
+ return fileData;
279
+ }
280
+ this.logger.info({ fileKey: fileData.fileKey }, "Enriching file data");
281
+ try {
282
+ const enriched = {
283
+ ...fileData,
284
+ };
285
+ // Build relationships for statistics
286
+ await this.relationshipMapper.buildRelationships(fileData);
287
+ // Calculate statistics
288
+ const styles = Object.values(fileData.styles || {});
289
+ const variables = Array.from(this.extractVariablesMap(fileData).values());
290
+ const unusedStyles = this.relationshipMapper.getUnusedStyles(styles);
291
+ const unusedVars = this.relationshipMapper.getUnusedVariables(variables);
292
+ enriched.statistics = {
293
+ total_variables: variables.length,
294
+ total_styles: styles.length,
295
+ total_components: Object.keys(fileData.components || {}).length,
296
+ unused_variables: unusedVars.length,
297
+ unused_styles: unusedStyles.length,
298
+ average_token_coverage: 0,
299
+ total_hardcoded_values: 0,
300
+ audit_issues_count: 0, // TODO: Calculate from audit
301
+ };
302
+ // Calculate health score (simple formula)
303
+ const usageRate = variables.length > 0
304
+ ? ((variables.length - unusedVars.length) / variables.length) * 100
305
+ : 100;
306
+ enriched.health_score = Math.round(usageRate);
307
+ this.logger.info({ health_score: enriched.health_score }, "File data enrichment complete");
308
+ return enriched;
309
+ }
310
+ catch (error) {
311
+ this.logger.error({ error }, "Failed to enrich file data");
312
+ return fileData;
313
+ }
314
+ }
315
+ /**
316
+ * Get file data for enrichment (with caching)
317
+ * NOTE: This is a placeholder that returns the data passed in
318
+ * In a full implementation, this would fetch fresh data from Figma API
319
+ */
320
+ async getFileDataForEnrichment(fileKey, providedData) {
321
+ const now = Date.now();
322
+ const lastEnrich = this.lastEnrichmentTime.get(fileKey) || 0;
323
+ // Return cached if fresh
324
+ if (this.fileDataCache.has(fileKey) &&
325
+ now - lastEnrich < this.CACHE_TTL_MS) {
326
+ return this.fileDataCache.get(fileKey);
327
+ }
328
+ // If data is provided, use it (from the tool that called us)
329
+ // This avoids redundant API calls since the tool already fetched the data
330
+ const fileData = providedData || {
331
+ styles: {},
332
+ variables: {},
333
+ document: {},
334
+ components: {},
335
+ };
336
+ this.fileDataCache.set(fileKey, fileData);
337
+ this.lastEnrichmentTime.set(fileKey, now);
338
+ return fileData;
339
+ }
340
+ /**
341
+ * Set file data in cache (called by tools that already have the data)
342
+ */
343
+ setFileDataCache(fileKey, fileData) {
344
+ this.fileDataCache.set(fileKey, fileData);
345
+ this.lastEnrichmentTime.set(fileKey, Date.now());
346
+ }
347
+ /**
348
+ * Extract variables as a Map for efficient lookup
349
+ */
350
+ extractVariablesMap(fileData) {
351
+ const variablesMap = new Map();
352
+ if (fileData.variables) {
353
+ for (const [id, variable] of Object.entries(fileData.variables)) {
354
+ variablesMap.set(id, variable);
355
+ }
356
+ }
357
+ return variablesMap;
358
+ }
359
+ /**
360
+ * Clear all caches
361
+ */
362
+ clearCache() {
363
+ this.fileDataCache.clear();
364
+ this.lastEnrichmentTime.clear();
365
+ this.styleResolver.clearCache();
366
+ this.relationshipMapper.clear();
367
+ }
368
+ }
369
+ //# sourceMappingURL=enrichment-service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"enrichment-service.js","sourceRoot":"","sources":["../../../src/core/enrichment/enrichment-service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Enrichment module exports
3
+ * Phase 5: Enriched Data Extraction & Design System Auditing
4
+ */
5
+ export { StyleValueResolver } from "./style-resolver.js";
6
+ export { RelationshipMapper } from "./relationship-mapper.js";
7
+ export { EnrichmentService } from "./enrichment-service.js";
8
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/core/enrichment/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAC9D,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Enrichment module exports
3
+ * Phase 5: Enriched Data Extraction & Design System Auditing
4
+ */
5
+ export { StyleValueResolver } from "./style-resolver.js";
6
+ export { RelationshipMapper } from "./relationship-mapper.js";
7
+ export { EnrichmentService } from "./enrichment-service.js";
8
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/core/enrichment/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAC9D,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC"}
@@ -0,0 +1,106 @@
1
+ /**
2
+ * Relationship Mapper
3
+ * Maps relationships between styles, variables, and components
4
+ * Tracks usage counts and builds reverse lookup indexes
5
+ */
6
+ import type { ComponentUsage, StyleUsage, VariableDependency } from "../types/enriched.js";
7
+ import type pino from "pino";
8
+ type Logger = pino.Logger;
9
+ export declare class RelationshipMapper {
10
+ private logger;
11
+ private componentsByStyle;
12
+ private componentsByVariable;
13
+ private stylesByVariable;
14
+ private variableDependencies;
15
+ private styleUsageCount;
16
+ private variableUsageCount;
17
+ constructor(logger: Logger);
18
+ /**
19
+ * Build all relationship indexes from file data
20
+ */
21
+ buildRelationships(fileData: any): Promise<void>;
22
+ /**
23
+ * Get components that use a specific style
24
+ */
25
+ getComponentsByStyle(styleId: string): ComponentUsage[];
26
+ /**
27
+ * Get components that use a specific variable
28
+ */
29
+ getComponentsByVariable(variableId: string): ComponentUsage[];
30
+ /**
31
+ * Get styles that use a specific variable
32
+ */
33
+ getStylesByVariable(variableId: string): StyleUsage[];
34
+ /**
35
+ * Get variable dependencies (what variables this variable references)
36
+ */
37
+ getVariableDependencies(variableId: string): VariableDependency[];
38
+ /**
39
+ * Get usage count for a style
40
+ */
41
+ getStyleUsageCount(styleId: string): number;
42
+ /**
43
+ * Get usage count for a variable
44
+ */
45
+ getVariableUsageCount(variableId: string): number;
46
+ /**
47
+ * Find unused styles (styles with zero usage)
48
+ */
49
+ getUnusedStyles(allStyles: any[]): StyleUsage[];
50
+ /**
51
+ * Find unused variables (variables with zero usage)
52
+ */
53
+ getUnusedVariables(allVariables: any[]): any[];
54
+ /**
55
+ * Build variable dependency graph (which variables reference which)
56
+ */
57
+ private buildVariableDependencies;
58
+ /**
59
+ * Extract dependencies from a single variable
60
+ */
61
+ private extractVariableDependencies;
62
+ /**
63
+ * Build relationships between styles and variables
64
+ */
65
+ private buildStyleVariableRelationships;
66
+ /**
67
+ * Extract variable references from a style
68
+ */
69
+ private extractStyleVariableReferences;
70
+ /**
71
+ * Build component relationships by traversing the document tree
72
+ */
73
+ private buildComponentRelationships;
74
+ /**
75
+ * Recursively traverse nodes to find component instances and their style/variable usage
76
+ */
77
+ private traverseNode;
78
+ /**
79
+ * Track which styles a node uses
80
+ */
81
+ private trackNodeStyleUsage;
82
+ /**
83
+ * Track which variables a node uses
84
+ */
85
+ private trackNodeVariableUsage;
86
+ /**
87
+ * Extract all variable references from a node's boundVariables
88
+ */
89
+ private extractNodeVariableReferences;
90
+ /**
91
+ * Detect circular variable references
92
+ */
93
+ detectCircularReferences(): Array<{
94
+ chain: string[];
95
+ }>;
96
+ /**
97
+ * DFS helper for detecting circular references
98
+ */
99
+ private detectCircularDFS;
100
+ /**
101
+ * Clear all indexes and caches
102
+ */
103
+ clear(): void;
104
+ }
105
+ export {};
106
+ //# sourceMappingURL=relationship-mapper.d.ts.map