@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.
- package/LICENSE +21 -0
- package/README.md +816 -0
- package/dist/apps/design-system-dashboard/scoring/accessibility.d.ts +14 -0
- package/dist/apps/design-system-dashboard/scoring/accessibility.d.ts.map +1 -0
- package/dist/apps/design-system-dashboard/scoring/accessibility.js +278 -0
- package/dist/apps/design-system-dashboard/scoring/accessibility.js.map +1 -0
- package/dist/apps/design-system-dashboard/scoring/component-metadata.d.ts +29 -0
- package/dist/apps/design-system-dashboard/scoring/component-metadata.d.ts.map +1 -0
- package/dist/apps/design-system-dashboard/scoring/component-metadata.js +358 -0
- package/dist/apps/design-system-dashboard/scoring/component-metadata.js.map +1 -0
- package/dist/apps/design-system-dashboard/scoring/consistency.d.ts +14 -0
- package/dist/apps/design-system-dashboard/scoring/consistency.d.ts.map +1 -0
- package/dist/apps/design-system-dashboard/scoring/consistency.js +342 -0
- package/dist/apps/design-system-dashboard/scoring/consistency.js.map +1 -0
- package/dist/apps/design-system-dashboard/scoring/coverage.d.ts +14 -0
- package/dist/apps/design-system-dashboard/scoring/coverage.d.ts.map +1 -0
- package/dist/apps/design-system-dashboard/scoring/coverage.js +231 -0
- package/dist/apps/design-system-dashboard/scoring/coverage.js.map +1 -0
- package/dist/apps/design-system-dashboard/scoring/engine.d.ts +27 -0
- package/dist/apps/design-system-dashboard/scoring/engine.d.ts.map +1 -0
- package/dist/apps/design-system-dashboard/scoring/engine.js +93 -0
- package/dist/apps/design-system-dashboard/scoring/engine.js.map +1 -0
- package/dist/apps/design-system-dashboard/scoring/naming-semantics.d.ts +14 -0
- package/dist/apps/design-system-dashboard/scoring/naming-semantics.d.ts.map +1 -0
- package/dist/apps/design-system-dashboard/scoring/naming-semantics.js +309 -0
- package/dist/apps/design-system-dashboard/scoring/naming-semantics.js.map +1 -0
- package/dist/apps/design-system-dashboard/scoring/token-architecture.d.ts +14 -0
- package/dist/apps/design-system-dashboard/scoring/token-architecture.d.ts.map +1 -0
- package/dist/apps/design-system-dashboard/scoring/token-architecture.js +350 -0
- package/dist/apps/design-system-dashboard/scoring/token-architecture.js.map +1 -0
- package/dist/apps/design-system-dashboard/scoring/types.d.ts +89 -0
- package/dist/apps/design-system-dashboard/scoring/types.d.ts.map +1 -0
- package/dist/apps/design-system-dashboard/scoring/types.js +41 -0
- package/dist/apps/design-system-dashboard/scoring/types.js.map +1 -0
- package/dist/apps/design-system-dashboard/server.d.ts +24 -0
- package/dist/apps/design-system-dashboard/server.d.ts.map +1 -0
- package/dist/apps/design-system-dashboard/server.js +160 -0
- package/dist/apps/design-system-dashboard/server.js.map +1 -0
- package/dist/apps/token-browser/server.d.ts +26 -0
- package/dist/apps/token-browser/server.d.ts.map +1 -0
- package/dist/apps/token-browser/server.js +137 -0
- package/dist/apps/token-browser/server.js.map +1 -0
- package/dist/browser/base.d.ts +58 -0
- package/dist/browser/base.d.ts.map +1 -0
- package/dist/browser/base.js +6 -0
- package/dist/browser/base.js.map +1 -0
- package/dist/browser/local.d.ts +87 -0
- package/dist/browser/local.d.ts.map +1 -0
- package/dist/browser/local.js +318 -0
- package/dist/browser/local.js.map +1 -0
- package/dist/cloudflare/apps/design-system-dashboard/scoring/accessibility.js +277 -0
- package/dist/cloudflare/apps/design-system-dashboard/scoring/component-metadata.js +357 -0
- package/dist/cloudflare/apps/design-system-dashboard/scoring/consistency.js +341 -0
- package/dist/cloudflare/apps/design-system-dashboard/scoring/coverage.js +230 -0
- package/dist/cloudflare/apps/design-system-dashboard/scoring/engine.js +92 -0
- package/dist/cloudflare/apps/design-system-dashboard/scoring/naming-semantics.js +308 -0
- package/dist/cloudflare/apps/design-system-dashboard/scoring/token-architecture.js +349 -0
- package/dist/cloudflare/apps/design-system-dashboard/scoring/types.js +40 -0
- package/dist/cloudflare/apps/design-system-dashboard/server.js +159 -0
- package/dist/cloudflare/apps/token-browser/server.js +136 -0
- package/dist/cloudflare/browser/base.js +5 -0
- package/dist/cloudflare/browser/cloudflare.js +156 -0
- package/dist/cloudflare/browser-manager.js +157 -0
- package/dist/cloudflare/core/cloud-websocket-connector.js +267 -0
- package/dist/cloudflare/core/cloud-websocket-relay.js +199 -0
- package/dist/cloudflare/core/comment-tools.js +292 -0
- package/dist/cloudflare/core/config.js +161 -0
- package/dist/cloudflare/core/console-monitor.js +427 -0
- package/dist/cloudflare/core/design-code-tools.js +2504 -0
- package/dist/cloudflare/core/design-system-manifest.js +260 -0
- package/dist/cloudflare/core/design-system-tools.js +863 -0
- package/dist/cloudflare/core/enrichment/enrichment-service.js +272 -0
- package/dist/cloudflare/core/enrichment/index.js +7 -0
- package/dist/cloudflare/core/enrichment/relationship-mapper.js +351 -0
- package/dist/cloudflare/core/enrichment/style-resolver.js +326 -0
- package/dist/cloudflare/core/figma-api.js +409 -0
- package/dist/cloudflare/core/figma-connector.js +7 -0
- package/dist/cloudflare/core/figma-desktop-connector.js +1184 -0
- package/dist/cloudflare/core/figma-reconstruction-spec.js +402 -0
- package/dist/cloudflare/core/figma-style-extractor.js +311 -0
- package/dist/cloudflare/core/figma-tools.js +2947 -0
- package/dist/cloudflare/core/logger.js +53 -0
- package/dist/cloudflare/core/port-discovery.js +282 -0
- package/dist/cloudflare/core/snippet-injector.js +96 -0
- package/dist/cloudflare/core/types/design-code.js +4 -0
- package/dist/cloudflare/core/types/enriched.js +5 -0
- package/dist/cloudflare/core/types/index.js +4 -0
- package/dist/cloudflare/core/websocket-connector.js +256 -0
- package/dist/cloudflare/core/websocket-server.js +646 -0
- package/dist/cloudflare/core/write-tools.js +2091 -0
- package/dist/cloudflare/index.js +2899 -0
- package/dist/cloudflare/test-browser.js +88 -0
- package/dist/core/comment-tools.d.ts +11 -0
- package/dist/core/comment-tools.d.ts.map +1 -0
- package/dist/core/comment-tools.js +293 -0
- package/dist/core/comment-tools.js.map +1 -0
- package/dist/core/config.d.ts +17 -0
- package/dist/core/config.d.ts.map +1 -0
- package/dist/core/config.js +162 -0
- package/dist/core/config.js.map +1 -0
- package/dist/core/console-monitor.d.ts +82 -0
- package/dist/core/console-monitor.d.ts.map +1 -0
- package/dist/core/console-monitor.js +428 -0
- package/dist/core/console-monitor.js.map +1 -0
- package/dist/core/design-code-tools.d.ts +127 -0
- package/dist/core/design-code-tools.d.ts.map +1 -0
- package/dist/core/design-code-tools.js +2505 -0
- package/dist/core/design-code-tools.js.map +1 -0
- package/dist/core/design-system-manifest.d.ts +272 -0
- package/dist/core/design-system-manifest.d.ts.map +1 -0
- package/dist/core/design-system-manifest.js +261 -0
- package/dist/core/design-system-manifest.js.map +1 -0
- package/dist/core/design-system-tools.d.ts +17 -0
- package/dist/core/design-system-tools.d.ts.map +1 -0
- package/dist/core/design-system-tools.js +864 -0
- package/dist/core/design-system-tools.js.map +1 -0
- package/dist/core/enrichment/enrichment-service.d.ts +52 -0
- package/dist/core/enrichment/enrichment-service.d.ts.map +1 -0
- package/dist/core/enrichment/enrichment-service.js +273 -0
- package/dist/core/enrichment/enrichment-service.js.map +1 -0
- package/dist/core/enrichment/index.d.ts +8 -0
- package/dist/core/enrichment/index.d.ts.map +1 -0
- package/dist/core/enrichment/index.js +8 -0
- package/dist/core/enrichment/index.js.map +1 -0
- package/dist/core/enrichment/relationship-mapper.d.ts +106 -0
- package/dist/core/enrichment/relationship-mapper.d.ts.map +1 -0
- package/dist/core/enrichment/relationship-mapper.js +352 -0
- package/dist/core/enrichment/relationship-mapper.js.map +1 -0
- package/dist/core/enrichment/style-resolver.d.ts +80 -0
- package/dist/core/enrichment/style-resolver.d.ts.map +1 -0
- package/dist/core/enrichment/style-resolver.js +327 -0
- package/dist/core/enrichment/style-resolver.js.map +1 -0
- package/dist/core/figma-api.d.ts +201 -0
- package/dist/core/figma-api.d.ts.map +1 -0
- package/dist/core/figma-api.js +410 -0
- package/dist/core/figma-api.js.map +1 -0
- package/dist/core/figma-connector.d.ts +48 -0
- package/dist/core/figma-connector.d.ts.map +1 -0
- package/dist/core/figma-connector.js +8 -0
- package/dist/core/figma-connector.js.map +1 -0
- package/dist/core/figma-desktop-connector.d.ts +265 -0
- package/dist/core/figma-desktop-connector.d.ts.map +1 -0
- package/dist/core/figma-desktop-connector.js +1184 -0
- package/dist/core/figma-desktop-connector.js.map +1 -0
- package/dist/core/figma-reconstruction-spec.d.ts +166 -0
- package/dist/core/figma-reconstruction-spec.d.ts.map +1 -0
- package/dist/core/figma-reconstruction-spec.js +403 -0
- package/dist/core/figma-reconstruction-spec.js.map +1 -0
- package/dist/core/figma-style-extractor.d.ts +76 -0
- package/dist/core/figma-style-extractor.d.ts.map +1 -0
- package/dist/core/figma-style-extractor.js +312 -0
- package/dist/core/figma-style-extractor.js.map +1 -0
- package/dist/core/figma-tools.d.ts +23 -0
- package/dist/core/figma-tools.d.ts.map +1 -0
- package/dist/core/figma-tools.js +2948 -0
- package/dist/core/figma-tools.js.map +1 -0
- package/dist/core/logger.d.ts +22 -0
- package/dist/core/logger.d.ts.map +1 -0
- package/dist/core/logger.js +54 -0
- package/dist/core/logger.js.map +1 -0
- package/dist/core/port-discovery.d.ts +110 -0
- package/dist/core/port-discovery.d.ts.map +1 -0
- package/dist/core/port-discovery.js +283 -0
- package/dist/core/port-discovery.js.map +1 -0
- package/dist/core/snippet-injector.d.ts +24 -0
- package/dist/core/snippet-injector.d.ts.map +1 -0
- package/dist/core/snippet-injector.js +97 -0
- package/dist/core/snippet-injector.js.map +1 -0
- package/dist/core/types/design-code.d.ts +262 -0
- package/dist/core/types/design-code.d.ts.map +1 -0
- package/dist/core/types/design-code.js +5 -0
- package/dist/core/types/design-code.js.map +1 -0
- package/dist/core/types/enriched.d.ts +213 -0
- package/dist/core/types/enriched.d.ts.map +1 -0
- package/dist/core/types/enriched.js +6 -0
- package/dist/core/types/enriched.js.map +1 -0
- package/dist/core/types/index.d.ts +112 -0
- package/dist/core/types/index.d.ts.map +1 -0
- package/dist/core/types/index.js +5 -0
- package/dist/core/types/index.js.map +1 -0
- package/dist/core/websocket-connector.d.ts +55 -0
- package/dist/core/websocket-connector.d.ts.map +1 -0
- package/dist/core/websocket-connector.js +257 -0
- package/dist/core/websocket-connector.js.map +1 -0
- package/dist/core/websocket-server.d.ts +191 -0
- package/dist/core/websocket-server.d.ts.map +1 -0
- package/dist/core/websocket-server.js +647 -0
- package/dist/core/websocket-server.js.map +1 -0
- package/dist/core/write-tools.d.ts +7 -0
- package/dist/core/write-tools.d.ts.map +1 -0
- package/dist/core/write-tools.js +2092 -0
- package/dist/core/write-tools.js.map +1 -0
- package/dist/local.d.ts +84 -0
- package/dist/local.d.ts.map +1 -0
- package/dist/local.js +5039 -0
- package/dist/local.js.map +1 -0
- package/figma-desktop-bridge/README.md +313 -0
- package/figma-desktop-bridge/code.js +2818 -0
- package/figma-desktop-bridge/manifest.json +67 -0
- package/figma-desktop-bridge/ui.html +1236 -0
- package/package.json +87 -0
|
@@ -0,0 +1,352 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Relationship Mapper
|
|
3
|
+
* Maps relationships between styles, variables, and components
|
|
4
|
+
* Tracks usage counts and builds reverse lookup indexes
|
|
5
|
+
*/
|
|
6
|
+
export class RelationshipMapper {
|
|
7
|
+
constructor(logger) {
|
|
8
|
+
// Relationship indexes
|
|
9
|
+
this.componentsByStyle = new Map();
|
|
10
|
+
this.componentsByVariable = new Map();
|
|
11
|
+
this.stylesByVariable = new Map();
|
|
12
|
+
this.variableDependencies = new Map();
|
|
13
|
+
// Usage counters
|
|
14
|
+
this.styleUsageCount = new Map();
|
|
15
|
+
this.variableUsageCount = new Map();
|
|
16
|
+
this.logger = logger;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Build all relationship indexes from file data
|
|
20
|
+
*/
|
|
21
|
+
async buildRelationships(fileData) {
|
|
22
|
+
this.logger.info("Building relationship indexes");
|
|
23
|
+
try {
|
|
24
|
+
// Clear existing indexes
|
|
25
|
+
this.clear();
|
|
26
|
+
// Build variable dependencies first
|
|
27
|
+
if (fileData.variables) {
|
|
28
|
+
await this.buildVariableDependencies(fileData.variables);
|
|
29
|
+
}
|
|
30
|
+
// Build style-variable relationships
|
|
31
|
+
if (fileData.styles && fileData.variables) {
|
|
32
|
+
await this.buildStyleVariableRelationships(fileData.styles, fileData.variables);
|
|
33
|
+
}
|
|
34
|
+
// Build component relationships
|
|
35
|
+
if (fileData.document) {
|
|
36
|
+
await this.buildComponentRelationships(fileData.document);
|
|
37
|
+
}
|
|
38
|
+
this.logger.info({
|
|
39
|
+
styles: this.componentsByStyle.size,
|
|
40
|
+
variables: this.componentsByVariable.size,
|
|
41
|
+
}, "Relationship indexes built successfully");
|
|
42
|
+
}
|
|
43
|
+
catch (error) {
|
|
44
|
+
this.logger.error({ error }, "Error building relationships");
|
|
45
|
+
throw error;
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Get components that use a specific style
|
|
50
|
+
*/
|
|
51
|
+
getComponentsByStyle(styleId) {
|
|
52
|
+
return this.componentsByStyle.get(styleId) || [];
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Get components that use a specific variable
|
|
56
|
+
*/
|
|
57
|
+
getComponentsByVariable(variableId) {
|
|
58
|
+
return this.componentsByVariable.get(variableId) || [];
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Get styles that use a specific variable
|
|
62
|
+
*/
|
|
63
|
+
getStylesByVariable(variableId) {
|
|
64
|
+
return this.stylesByVariable.get(variableId) || [];
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Get variable dependencies (what variables this variable references)
|
|
68
|
+
*/
|
|
69
|
+
getVariableDependencies(variableId) {
|
|
70
|
+
return this.variableDependencies.get(variableId) || [];
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Get usage count for a style
|
|
74
|
+
*/
|
|
75
|
+
getStyleUsageCount(styleId) {
|
|
76
|
+
return this.styleUsageCount.get(styleId) || 0;
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Get usage count for a variable
|
|
80
|
+
*/
|
|
81
|
+
getVariableUsageCount(variableId) {
|
|
82
|
+
return this.variableUsageCount.get(variableId) || 0;
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Find unused styles (styles with zero usage)
|
|
86
|
+
*/
|
|
87
|
+
getUnusedStyles(allStyles) {
|
|
88
|
+
const unused = [];
|
|
89
|
+
for (const style of allStyles) {
|
|
90
|
+
const usageCount = this.getStyleUsageCount(style.node_id || style.key || style.id);
|
|
91
|
+
if (usageCount === 0) {
|
|
92
|
+
unused.push({
|
|
93
|
+
id: style.id || style.key,
|
|
94
|
+
name: style.name,
|
|
95
|
+
type: style.style_type || style.styleType,
|
|
96
|
+
node_id: style.node_id || style.key,
|
|
97
|
+
});
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
return unused;
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* Find unused variables (variables with zero usage)
|
|
104
|
+
*/
|
|
105
|
+
getUnusedVariables(allVariables) {
|
|
106
|
+
const unused = [];
|
|
107
|
+
for (const variable of allVariables) {
|
|
108
|
+
const usageCount = this.getVariableUsageCount(variable.id);
|
|
109
|
+
if (usageCount === 0) {
|
|
110
|
+
unused.push({
|
|
111
|
+
id: variable.id,
|
|
112
|
+
name: variable.name,
|
|
113
|
+
collection: variable.variableCollectionId,
|
|
114
|
+
resolvedType: variable.resolvedType,
|
|
115
|
+
});
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
return unused;
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* Build variable dependency graph (which variables reference which)
|
|
122
|
+
*/
|
|
123
|
+
async buildVariableDependencies(variables) {
|
|
124
|
+
for (const [variableId, variable] of variables.entries()) {
|
|
125
|
+
const dependencies = this.extractVariableDependencies(variable, variables);
|
|
126
|
+
if (dependencies.length > 0) {
|
|
127
|
+
this.variableDependencies.set(variableId, dependencies);
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* Extract dependencies from a single variable
|
|
133
|
+
*/
|
|
134
|
+
extractVariableDependencies(variable, allVariables, depth = 0) {
|
|
135
|
+
const dependencies = [];
|
|
136
|
+
// Check all modes for variable aliases
|
|
137
|
+
for (const [modeId, value] of Object.entries(variable.valuesByMode || {})) {
|
|
138
|
+
if (typeof value === "object" &&
|
|
139
|
+
value !== null &&
|
|
140
|
+
value.type === "VARIABLE_ALIAS") {
|
|
141
|
+
const targetId = value.id;
|
|
142
|
+
const targetVariable = allVariables.get(targetId);
|
|
143
|
+
if (targetVariable) {
|
|
144
|
+
dependencies.push({
|
|
145
|
+
id: targetId,
|
|
146
|
+
name: targetVariable.name,
|
|
147
|
+
type: "alias",
|
|
148
|
+
depth,
|
|
149
|
+
});
|
|
150
|
+
// Increment usage count for the referenced variable
|
|
151
|
+
const currentCount = this.variableUsageCount.get(targetId) || 0;
|
|
152
|
+
this.variableUsageCount.set(targetId, currentCount + 1);
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
return dependencies;
|
|
157
|
+
}
|
|
158
|
+
/**
|
|
159
|
+
* Build relationships between styles and variables
|
|
160
|
+
*/
|
|
161
|
+
async buildStyleVariableRelationships(styles, variables) {
|
|
162
|
+
for (const style of styles) {
|
|
163
|
+
const variableRefs = this.extractStyleVariableReferences(style);
|
|
164
|
+
for (const varRef of variableRefs) {
|
|
165
|
+
// Track which styles use this variable
|
|
166
|
+
if (!this.stylesByVariable.has(varRef)) {
|
|
167
|
+
this.stylesByVariable.set(varRef, []);
|
|
168
|
+
}
|
|
169
|
+
this.stylesByVariable.get(varRef)?.push({
|
|
170
|
+
id: style.id || style.key,
|
|
171
|
+
name: style.name,
|
|
172
|
+
type: style.style_type || style.styleType,
|
|
173
|
+
node_id: style.node_id || style.key,
|
|
174
|
+
});
|
|
175
|
+
// Increment variable usage count
|
|
176
|
+
const currentCount = this.variableUsageCount.get(varRef) || 0;
|
|
177
|
+
this.variableUsageCount.set(varRef, currentCount + 1);
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
/**
|
|
182
|
+
* Extract variable references from a style
|
|
183
|
+
*/
|
|
184
|
+
extractStyleVariableReferences(style) {
|
|
185
|
+
const refs = [];
|
|
186
|
+
// Check boundVariables
|
|
187
|
+
if (style.boundVariables) {
|
|
188
|
+
const props = ["fills", "strokes", "effects", "text"];
|
|
189
|
+
for (const prop of props) {
|
|
190
|
+
if (style.boundVariables[prop]) {
|
|
191
|
+
const binding = style.boundVariables[prop];
|
|
192
|
+
if (Array.isArray(binding)) {
|
|
193
|
+
for (const b of binding) {
|
|
194
|
+
if (b.id)
|
|
195
|
+
refs.push(b.id);
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
else if (binding.id) {
|
|
199
|
+
refs.push(binding.id);
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
return refs;
|
|
205
|
+
}
|
|
206
|
+
/**
|
|
207
|
+
* Build component relationships by traversing the document tree
|
|
208
|
+
*/
|
|
209
|
+
async buildComponentRelationships(document) {
|
|
210
|
+
// Traverse all pages
|
|
211
|
+
if (document.children) {
|
|
212
|
+
for (const page of document.children) {
|
|
213
|
+
await this.traverseNode(page, page.name);
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
/**
|
|
218
|
+
* Recursively traverse nodes to find component instances and their style/variable usage
|
|
219
|
+
*/
|
|
220
|
+
async traverseNode(node, pageName, path = []) {
|
|
221
|
+
const currentPath = [...path, node.name];
|
|
222
|
+
// Check if this node uses any styles
|
|
223
|
+
if (node.styles) {
|
|
224
|
+
this.trackNodeStyleUsage(node, pageName, currentPath);
|
|
225
|
+
}
|
|
226
|
+
// Check if this node uses any variables (via boundVariables)
|
|
227
|
+
if (node.boundVariables) {
|
|
228
|
+
this.trackNodeVariableUsage(node, pageName, currentPath);
|
|
229
|
+
}
|
|
230
|
+
// Recurse into children
|
|
231
|
+
if (node.children) {
|
|
232
|
+
for (const child of node.children) {
|
|
233
|
+
await this.traverseNode(child, pageName, currentPath);
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
/**
|
|
238
|
+
* Track which styles a node uses
|
|
239
|
+
*/
|
|
240
|
+
trackNodeStyleUsage(node, pageName, path) {
|
|
241
|
+
const componentUsage = {
|
|
242
|
+
id: node.id,
|
|
243
|
+
name: node.name,
|
|
244
|
+
type: node.type,
|
|
245
|
+
page: pageName,
|
|
246
|
+
};
|
|
247
|
+
// Check all style properties (fill, stroke, text, effect, grid)
|
|
248
|
+
const styleProps = ["fill", "stroke", "text", "effect", "grid"];
|
|
249
|
+
for (const prop of styleProps) {
|
|
250
|
+
const styleId = node.styles?.[prop];
|
|
251
|
+
if (styleId) {
|
|
252
|
+
// Add to componentsByStyle index
|
|
253
|
+
if (!this.componentsByStyle.has(styleId)) {
|
|
254
|
+
this.componentsByStyle.set(styleId, []);
|
|
255
|
+
}
|
|
256
|
+
this.componentsByStyle.get(styleId)?.push(componentUsage);
|
|
257
|
+
// Increment style usage count
|
|
258
|
+
const currentCount = this.styleUsageCount.get(styleId) || 0;
|
|
259
|
+
this.styleUsageCount.set(styleId, currentCount + 1);
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
}
|
|
263
|
+
/**
|
|
264
|
+
* Track which variables a node uses
|
|
265
|
+
*/
|
|
266
|
+
trackNodeVariableUsage(node, pageName, path) {
|
|
267
|
+
const componentUsage = {
|
|
268
|
+
id: node.id,
|
|
269
|
+
name: node.name,
|
|
270
|
+
type: node.type,
|
|
271
|
+
page: pageName,
|
|
272
|
+
};
|
|
273
|
+
// Extract all variable IDs from boundVariables
|
|
274
|
+
const variableIds = this.extractNodeVariableReferences(node);
|
|
275
|
+
for (const varId of variableIds) {
|
|
276
|
+
// Add to componentsByVariable index
|
|
277
|
+
if (!this.componentsByVariable.has(varId)) {
|
|
278
|
+
this.componentsByVariable.set(varId, []);
|
|
279
|
+
}
|
|
280
|
+
this.componentsByVariable.get(varId)?.push(componentUsage);
|
|
281
|
+
// Increment variable usage count
|
|
282
|
+
const currentCount = this.variableUsageCount.get(varId) || 0;
|
|
283
|
+
this.variableUsageCount.set(varId, currentCount + 1);
|
|
284
|
+
}
|
|
285
|
+
}
|
|
286
|
+
/**
|
|
287
|
+
* Extract all variable references from a node's boundVariables
|
|
288
|
+
*/
|
|
289
|
+
extractNodeVariableReferences(node) {
|
|
290
|
+
const refs = [];
|
|
291
|
+
if (!node.boundVariables)
|
|
292
|
+
return refs;
|
|
293
|
+
// boundVariables can have many properties (fills, strokes, etc.)
|
|
294
|
+
for (const [prop, binding] of Object.entries(node.boundVariables)) {
|
|
295
|
+
if (Array.isArray(binding)) {
|
|
296
|
+
for (const b of binding) {
|
|
297
|
+
if (b.id)
|
|
298
|
+
refs.push(b.id);
|
|
299
|
+
}
|
|
300
|
+
}
|
|
301
|
+
else if (binding && typeof binding === "object" && binding.id) {
|
|
302
|
+
refs.push(binding.id);
|
|
303
|
+
}
|
|
304
|
+
}
|
|
305
|
+
return refs;
|
|
306
|
+
}
|
|
307
|
+
/**
|
|
308
|
+
* Detect circular variable references
|
|
309
|
+
*/
|
|
310
|
+
detectCircularReferences() {
|
|
311
|
+
const circular = [];
|
|
312
|
+
const visited = new Set();
|
|
313
|
+
const currentPath = [];
|
|
314
|
+
for (const [variableId] of this.variableDependencies) {
|
|
315
|
+
this.detectCircularDFS(variableId, visited, currentPath, circular);
|
|
316
|
+
}
|
|
317
|
+
return circular;
|
|
318
|
+
}
|
|
319
|
+
/**
|
|
320
|
+
* DFS helper for detecting circular references
|
|
321
|
+
*/
|
|
322
|
+
detectCircularDFS(variableId, visited, currentPath, circular) {
|
|
323
|
+
if (currentPath.includes(variableId)) {
|
|
324
|
+
// Found a cycle
|
|
325
|
+
const cycleStart = currentPath.indexOf(variableId);
|
|
326
|
+
const cycle = currentPath.slice(cycleStart).concat(variableId);
|
|
327
|
+
circular.push({ chain: cycle });
|
|
328
|
+
return;
|
|
329
|
+
}
|
|
330
|
+
if (visited.has(variableId))
|
|
331
|
+
return;
|
|
332
|
+
visited.add(variableId);
|
|
333
|
+
currentPath.push(variableId);
|
|
334
|
+
const dependencies = this.variableDependencies.get(variableId) || [];
|
|
335
|
+
for (const dep of dependencies) {
|
|
336
|
+
this.detectCircularDFS(dep.id, visited, currentPath, circular);
|
|
337
|
+
}
|
|
338
|
+
currentPath.pop();
|
|
339
|
+
}
|
|
340
|
+
/**
|
|
341
|
+
* Clear all indexes and caches
|
|
342
|
+
*/
|
|
343
|
+
clear() {
|
|
344
|
+
this.componentsByStyle.clear();
|
|
345
|
+
this.componentsByVariable.clear();
|
|
346
|
+
this.stylesByVariable.clear();
|
|
347
|
+
this.variableDependencies.clear();
|
|
348
|
+
this.styleUsageCount.clear();
|
|
349
|
+
this.variableUsageCount.clear();
|
|
350
|
+
}
|
|
351
|
+
}
|
|
352
|
+
//# sourceMappingURL=relationship-mapper.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"relationship-mapper.js","sourceRoot":"","sources":["../../../src/core/enrichment/relationship-mapper.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Style Value Resolver
|
|
3
|
+
* Resolves style values from variable references and provides formatted outputs
|
|
4
|
+
*/
|
|
5
|
+
import type { VariableReference, ExportFormats, ExportFormat } from "../types/enriched.js";
|
|
6
|
+
import type pino from "pino";
|
|
7
|
+
type Logger = pino.Logger;
|
|
8
|
+
export declare class StyleValueResolver {
|
|
9
|
+
private cache;
|
|
10
|
+
private variableCache;
|
|
11
|
+
private logger;
|
|
12
|
+
constructor(logger: Logger);
|
|
13
|
+
/**
|
|
14
|
+
* Resolve a style's value, handling variable references
|
|
15
|
+
*/
|
|
16
|
+
resolveStyleValue(style: any, variables: Map<string, any>, maxDepth?: number): Promise<{
|
|
17
|
+
value: any;
|
|
18
|
+
variableRef?: VariableReference;
|
|
19
|
+
}>;
|
|
20
|
+
/**
|
|
21
|
+
* Resolve a variable's value, handling alias chains
|
|
22
|
+
*/
|
|
23
|
+
resolveVariableValue(variable: any, allVariables: Map<string, any>, maxDepth?: number, currentDepth?: number): Promise<any>;
|
|
24
|
+
/**
|
|
25
|
+
* Format a variable value based on its type
|
|
26
|
+
*/
|
|
27
|
+
private formatVariableValue;
|
|
28
|
+
/**
|
|
29
|
+
* Format a color value to hex string
|
|
30
|
+
*/
|
|
31
|
+
private formatColor;
|
|
32
|
+
/**
|
|
33
|
+
* Generate export formats for a resolved value
|
|
34
|
+
*/
|
|
35
|
+
generateExportFormats(name: string, value: any, type: string, formats?: ExportFormat[]): ExportFormats;
|
|
36
|
+
/**
|
|
37
|
+
* Convert token name to CSS variable format
|
|
38
|
+
* Example: "color/background/primary-default" -> "--color-background-primary-default"
|
|
39
|
+
*/
|
|
40
|
+
private toCSSVariableName;
|
|
41
|
+
/**
|
|
42
|
+
* Convert token name to Sass variable format
|
|
43
|
+
* Example: "color/background/primary-default" -> "$color-background-primary-default"
|
|
44
|
+
*/
|
|
45
|
+
private toSassVariableName;
|
|
46
|
+
/**
|
|
47
|
+
* Convert token name to Tailwind class format
|
|
48
|
+
* Example: "color/background/primary-default" -> "bg-primary"
|
|
49
|
+
*/
|
|
50
|
+
private toTailwindClassName;
|
|
51
|
+
/**
|
|
52
|
+
* Convert token name to TypeScript path format
|
|
53
|
+
* Example: "color/background/primary-default" -> "tokens.color.background.primaryDefault"
|
|
54
|
+
*/
|
|
55
|
+
private toTypeScriptPath;
|
|
56
|
+
/**
|
|
57
|
+
* Convert token name to nested JSON path
|
|
58
|
+
* Example: "color/background/primary-default" -> { color: { background: { primaryDefault: value } } }
|
|
59
|
+
*/
|
|
60
|
+
private toJSONPath;
|
|
61
|
+
/**
|
|
62
|
+
* Get style data from Figma API
|
|
63
|
+
* This would be called via the Figma API client
|
|
64
|
+
*/
|
|
65
|
+
private getStyleData;
|
|
66
|
+
/**
|
|
67
|
+
* Find variable reference in style data
|
|
68
|
+
*/
|
|
69
|
+
private findVariableReference;
|
|
70
|
+
/**
|
|
71
|
+
* Extract direct value from style (no variable)
|
|
72
|
+
*/
|
|
73
|
+
private extractDirectValue;
|
|
74
|
+
/**
|
|
75
|
+
* Clear the cache
|
|
76
|
+
*/
|
|
77
|
+
clearCache(): void;
|
|
78
|
+
}
|
|
79
|
+
export {};
|
|
80
|
+
//# sourceMappingURL=style-resolver.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"style-resolver.d.ts","sourceRoot":"","sources":["../../../src/core/enrichment/style-resolver.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAEX,iBAAiB,EACjB,aAAa,EACb,YAAY,EACZ,MAAM,sBAAsB,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAE7B,KAAK,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;AAE1B,qBAAa,kBAAkB;IAC9B,OAAO,CAAC,KAAK,CAA+B;IAC5C,OAAO,CAAC,aAAa,CAA+B;IACpD,OAAO,CAAC,MAAM,CAAS;gBAEX,MAAM,EAAE,MAAM;IAI1B;;OAEG;IACG,iBAAiB,CACtB,KAAK,EAAE,GAAG,EACV,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,EAC3B,QAAQ,SAAK,GACX,OAAO,CAAC;QAAE,KAAK,EAAE,GAAG,CAAC;QAAC,WAAW,CAAC,EAAE,iBAAiB,CAAA;KAAE,CAAC;IAwD3D;;OAEG;IACG,oBAAoB,CACzB,QAAQ,EAAE,GAAG,EACb,YAAY,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,EAC9B,QAAQ,SAAK,EACb,YAAY,SAAI,GACd,OAAO,CAAC,GAAG,CAAC;IA6Df;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAkB3B;;OAEG;IACH,OAAO,CAAC,WAAW;IAenB;;OAEG;IACH,qBAAqB,CACpB,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,GAAG,EACV,IAAI,EAAE,MAAM,EACZ,OAAO,GAAE,YAAY,EAAsD,GACzE,aAAa;IAiChB;;;OAGG;IACH,OAAO,CAAC,iBAAiB;IAIzB;;;OAGG;IACH,OAAO,CAAC,kBAAkB;IAI1B;;;OAGG;IACH,OAAO,CAAC,mBAAmB;IAwB3B;;;OAGG;IACH,OAAO,CAAC,gBAAgB;IAgBxB;;;OAGG;IACH,OAAO,CAAC,UAAU;IA0BlB;;;OAGG;YACW,YAAY;IAM1B;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAqB7B;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAiC1B;;OAEG;IACH,UAAU,IAAI,IAAI;CAIlB"}
|