@sxl-studio/bridge 1.7.1 → 1.7.3
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/README.md +342 -16
- package/dist/agent-recipes.d.ts +781 -11
- package/dist/agent-recipes.js +886 -13
- package/dist/agent-recipes.js.map +1 -1
- package/dist/agent-runbook.d.ts +50 -0
- package/dist/agent-runbook.js +243 -0
- package/dist/agent-runbook.js.map +1 -0
- package/dist/asset-upload.d.ts +63 -0
- package/dist/asset-upload.js +225 -0
- package/dist/asset-upload.js.map +1 -0
- package/dist/audit-store.d.ts +15 -0
- package/dist/audit-store.js +100 -0
- package/dist/audit-store.js.map +1 -0
- package/dist/audit.d.ts +4 -3
- package/dist/audit.js +37 -4
- package/dist/audit.js.map +1 -1
- package/dist/auth.d.ts +8 -1
- package/dist/auth.js +41 -1
- package/dist/auth.js.map +1 -1
- package/dist/bridge-agent-workflow-validation-cli.d.ts +2 -0
- package/dist/bridge-agent-workflow-validation-cli.js +68 -0
- package/dist/bridge-agent-workflow-validation-cli.js.map +1 -0
- package/dist/bridge-agent-workflow-validation.d.ts +42 -0
- package/dist/bridge-agent-workflow-validation.js +170 -0
- package/dist/bridge-agent-workflow-validation.js.map +1 -0
- package/dist/bridge-contract-audit.d.ts +45 -0
- package/dist/bridge-contract-audit.js +345 -0
- package/dist/bridge-contract-audit.js.map +1 -0
- package/dist/bridge-health-cli.d.ts +2 -0
- package/dist/bridge-health-cli.js +115 -0
- package/dist/bridge-health-cli.js.map +1 -0
- package/dist/bridge-health.d.ts +33 -0
- package/dist/bridge-health.js +594 -0
- package/dist/bridge-health.js.map +1 -0
- package/dist/bridge-live-validation-cli.d.ts +2 -0
- package/dist/bridge-live-validation-cli.js +114 -0
- package/dist/bridge-live-validation-cli.js.map +1 -0
- package/dist/bridge-live-validation.d.ts +39 -0
- package/dist/bridge-live-validation.js +1141 -0
- package/dist/bridge-live-validation.js.map +1 -0
- package/dist/bridge-performance-profile.d.ts +81 -0
- package/dist/bridge-performance-profile.js +227 -0
- package/dist/bridge-performance-profile.js.map +1 -0
- package/dist/bridge-readiness-cli.d.ts +30 -0
- package/dist/bridge-readiness-cli.js +242 -0
- package/dist/bridge-readiness-cli.js.map +1 -0
- package/dist/bridge-runtime-summary.d.ts +50 -0
- package/dist/bridge-runtime-summary.js +112 -0
- package/dist/bridge-runtime-summary.js.map +1 -0
- package/dist/bridge-workflow-smoke-cli.d.ts +2 -0
- package/dist/bridge-workflow-smoke-cli.js +126 -0
- package/dist/bridge-workflow-smoke-cli.js.map +1 -0
- package/dist/bridge-workflow-smoke.d.ts +39 -0
- package/dist/bridge-workflow-smoke.js +431 -0
- package/dist/bridge-workflow-smoke.js.map +1 -0
- package/dist/codeconnect-suggestions.d.ts +74 -0
- package/dist/codeconnect-suggestions.js +398 -0
- package/dist/codeconnect-suggestions.js.map +1 -0
- package/dist/codeconnect-template.d.ts +98 -0
- package/dist/codeconnect-template.js +280 -0
- package/dist/codeconnect-template.js.map +1 -0
- package/dist/command-queue.d.ts +24 -2
- package/dist/command-queue.js +295 -25
- package/dist/command-queue.js.map +1 -1
- package/dist/command-safety.d.ts +13 -0
- package/dist/command-safety.js +59 -0
- package/dist/command-safety.js.map +1 -0
- package/dist/enabled-library-search.d.ts +49 -0
- package/dist/enabled-library-search.js +151 -0
- package/dist/enabled-library-search.js.map +1 -0
- package/dist/figma-mcp-parity.d.ts +49 -0
- package/dist/figma-mcp-parity.js +368 -0
- package/dist/figma-mcp-parity.js.map +1 -0
- package/dist/figma-mcp-skills-parity.d.ts +61 -0
- package/dist/figma-mcp-skills-parity.js +434 -0
- package/dist/figma-mcp-skills-parity.js.map +1 -0
- package/dist/figma-rest-diagnostics.d.ts +50 -0
- package/dist/figma-rest-diagnostics.js +314 -0
- package/dist/figma-rest-diagnostics.js.map +1 -0
- package/dist/figma-rest.d.ts +27 -0
- package/dist/figma-rest.js +116 -0
- package/dist/figma-rest.js.map +1 -0
- package/dist/http-api.d.ts +14 -2
- package/dist/http-api.js +323 -17
- package/dist/http-api.js.map +1 -1
- package/dist/index.js +25 -1
- package/dist/index.js.map +1 -1
- package/dist/mcp-factory.d.ts +6 -1
- package/dist/mcp-factory.js +23 -4
- package/dist/mcp-factory.js.map +1 -1
- package/dist/mcp-runtime-probe.d.ts +22 -0
- package/dist/mcp-runtime-probe.js +777 -0
- package/dist/mcp-runtime-probe.js.map +1 -0
- package/dist/mcp-server.d.ts +2 -1
- package/dist/mcp-server.js +2 -2
- package/dist/mcp-server.js.map +1 -1
- package/dist/sxl-mcp-instructions.js +97 -25
- package/dist/sxl-mcp-instructions.js.map +1 -1
- package/dist/tools/audit.d.ts +22 -6
- package/dist/tools/audit.js +49 -7
- package/dist/tools/audit.js.map +1 -1
- package/dist/tools/capability-matrix.d.ts +22 -0
- package/dist/tools/capability-matrix.js +38 -0
- package/dist/tools/capability-matrix.js.map +1 -0
- package/dist/tools/catalogue-bootstrap.d.ts +1 -0
- package/dist/tools/catalogue-bootstrap.js +665 -30
- package/dist/tools/catalogue-bootstrap.js.map +1 -1
- package/dist/tools/code-connect-context.d.ts +3 -0
- package/dist/tools/code-connect-context.js +319 -0
- package/dist/tools/code-connect-context.js.map +1 -0
- package/dist/tools/code-connect-template.d.ts +3 -0
- package/dist/tools/code-connect-template.js +111 -0
- package/dist/tools/code-connect-template.js.map +1 -0
- package/dist/tools/composition.js +13 -28
- package/dist/tools/composition.js.map +1 -1
- package/dist/tools/compositions-orchestration.d.ts +14 -14
- package/dist/tools/compositions-orchestration.js +2 -2
- package/dist/tools/compositions-orchestration.js.map +1 -1
- package/dist/tools/data.js +839 -27
- package/dist/tools/data.js.map +1 -1
- package/dist/tools/design-context.d.ts +3 -0
- package/dist/tools/design-context.js +197 -0
- package/dist/tools/design-context.js.map +1 -0
- package/dist/tools/destructive-confirmation.d.ts +10 -0
- package/dist/tools/destructive-confirmation.js +22 -0
- package/dist/tools/destructive-confirmation.js.map +1 -0
- package/dist/tools/diagnostics.js +76 -51
- package/dist/tools/diagnostics.js.map +1 -1
- package/dist/tools/figma-mcp-design.d.ts +3 -0
- package/dist/tools/figma-mcp-design.js +377 -0
- package/dist/tools/figma-mcp-design.js.map +1 -0
- package/dist/tools/figma-nodes.js +57 -43
- package/dist/tools/figma-nodes.js.map +1 -1
- package/dist/tools/figma-rc-extended.js +23 -6
- package/dist/tools/figma-rc-extended.js.map +1 -1
- package/dist/tools/figma-rest.d.ts +39 -0
- package/dist/tools/figma-rest.js +279 -0
- package/dist/tools/figma-rest.js.map +1 -0
- package/dist/tools/git.js +11 -7
- package/dist/tools/git.js.map +1 -1
- package/dist/tools/large-data.d.ts +14 -0
- package/dist/tools/large-data.js +189 -0
- package/dist/tools/large-data.js.map +1 -0
- package/dist/tools/meta.d.ts +6 -1
- package/dist/tools/meta.js +89 -11
- package/dist/tools/meta.js.map +1 -1
- package/dist/tools/metadata.d.ts +3 -0
- package/dist/tools/metadata.js +140 -0
- package/dist/tools/metadata.js.map +1 -0
- package/dist/tools/mockup.d.ts +15 -156
- package/dist/tools/mockup.js +54 -121
- package/dist/tools/mockup.js.map +1 -1
- package/dist/tools/orchestration.js +73 -45
- package/dist/tools/orchestration.js.map +1 -1
- package/dist/tools/prompts.d.ts +3 -0
- package/dist/tools/prompts.js +219 -0
- package/dist/tools/prompts.js.map +1 -0
- package/dist/tools/registry.d.ts +19 -1
- package/dist/tools/registry.js +4 -4
- package/dist/tools/registry.js.map +1 -1
- package/dist/tools/resources.d.ts +19 -2
- package/dist/tools/resources.js +149 -5
- package/dist/tools/resources.js.map +1 -1
- package/dist/tools/schema-contracts.d.ts +4763 -0
- package/dist/tools/schema-contracts.js +814 -0
- package/dist/tools/schema-contracts.js.map +1 -0
- package/dist/tools/screenshot.d.ts +3 -0
- package/dist/tools/screenshot.js +144 -0
- package/dist/tools/screenshot.js.map +1 -0
- package/dist/tools/shared.d.ts +11 -1
- package/dist/tools/shared.js +55 -2
- package/dist/tools/shared.js.map +1 -1
- package/dist/tools/styles-orchestration.d.ts +2 -2
- package/dist/tools/styles-orchestration.js +13 -5
- package/dist/tools/styles-orchestration.js.map +1 -1
- package/dist/tools/styles.js +22 -8
- package/dist/tools/styles.js.map +1 -1
- package/dist/tools/tokens.d.ts +31 -692
- package/dist/tools/tokens.js +175 -135
- package/dist/tools/tokens.js.map +1 -1
- package/dist/tools/variable-defs.d.ts +3 -0
- package/dist/tools/variable-defs.js +338 -0
- package/dist/tools/variable-defs.js.map +1 -0
- package/dist/tools/variables-orchestration.js +13 -5
- package/dist/tools/variables-orchestration.js.map +1 -1
- package/dist/tools/variables.js +18 -15
- package/dist/tools/variables.js.map +1 -1
- package/dist/types.d.ts +53 -0
- package/dist/ultimate-readiness-audit.d.ts +37 -0
- package/dist/ultimate-readiness-audit.js +431 -0
- package/dist/ultimate-readiness-audit.js.map +1 -0
- package/dist/workflow-planner.d.ts +57 -0
- package/dist/workflow-planner.js +464 -0
- package/dist/workflow-planner.js.map +1 -0
- package/dist/ws-server.js +16 -3
- package/dist/ws-server.js.map +1 -1
- package/package.json +19 -3
|
@@ -0,0 +1,280 @@
|
|
|
1
|
+
import { existsSync, mkdirSync, writeFileSync } from "node:fs";
|
|
2
|
+
import path from "node:path";
|
|
3
|
+
import { buildCodeConnectSuggestions, } from "./codeconnect-suggestions.js";
|
|
4
|
+
function clampIndex(value, fallback) {
|
|
5
|
+
if (typeof value !== "number" || !Number.isFinite(value))
|
|
6
|
+
return fallback;
|
|
7
|
+
return Math.max(0, Math.floor(value));
|
|
8
|
+
}
|
|
9
|
+
function escapeStringLiteral(value) {
|
|
10
|
+
return value
|
|
11
|
+
.replace(/\\/g, "\\\\")
|
|
12
|
+
.replace(/'/g, "\\'")
|
|
13
|
+
.replace(/\r/g, "\\r")
|
|
14
|
+
.replace(/\n/g, "\\n");
|
|
15
|
+
}
|
|
16
|
+
function escapeTemplateLiteral(value, preserveExpressions = false) {
|
|
17
|
+
const escaped = value
|
|
18
|
+
.replace(/\\/g, "\\\\")
|
|
19
|
+
.replace(/`/g, "\\`")
|
|
20
|
+
.replace(/\$\{/g, preserveExpressions ? "${" : "\\${");
|
|
21
|
+
return escaped;
|
|
22
|
+
}
|
|
23
|
+
function pascalCase(value) {
|
|
24
|
+
const parts = value
|
|
25
|
+
.replace(/([a-z0-9])([A-Z])/g, "$1 $2")
|
|
26
|
+
.split(/[^a-zA-Z0-9]+/g)
|
|
27
|
+
.filter(Boolean);
|
|
28
|
+
if (parts.length === 0)
|
|
29
|
+
return "Component";
|
|
30
|
+
return parts.map((part) => `${part.slice(0, 1).toUpperCase()}${part.slice(1)}`).join("");
|
|
31
|
+
}
|
|
32
|
+
function camelCase(value) {
|
|
33
|
+
const pascal = pascalCase(value);
|
|
34
|
+
return `${pascal.slice(0, 1).toLowerCase()}${pascal.slice(1)}` || "value";
|
|
35
|
+
}
|
|
36
|
+
function safeIdentifier(value, used) {
|
|
37
|
+
const base = camelCase(value).replace(/^[^a-zA-Z_$]+/, "") || "value";
|
|
38
|
+
let next = base;
|
|
39
|
+
let index = 2;
|
|
40
|
+
while (used.has(next)) {
|
|
41
|
+
next = `${base}${index}`;
|
|
42
|
+
index += 1;
|
|
43
|
+
}
|
|
44
|
+
used.add(next);
|
|
45
|
+
return next;
|
|
46
|
+
}
|
|
47
|
+
function safeTemplateId(value) {
|
|
48
|
+
const id = value
|
|
49
|
+
.normalize("NFKD")
|
|
50
|
+
.replace(/[\u0300-\u036f]/g, "")
|
|
51
|
+
.toLowerCase()
|
|
52
|
+
.replace(/[^a-z0-9]+/g, "-")
|
|
53
|
+
.replace(/^-+|-+$/g, "")
|
|
54
|
+
.slice(0, 80);
|
|
55
|
+
return id || "code-connect-template";
|
|
56
|
+
}
|
|
57
|
+
function fileNameFor(value) {
|
|
58
|
+
const base = pascalCase(value);
|
|
59
|
+
return `${base}.figma.ts`;
|
|
60
|
+
}
|
|
61
|
+
function selectSuggestion(args) {
|
|
62
|
+
const suggestions = buildCodeConnectSuggestions({
|
|
63
|
+
targets: args.targets,
|
|
64
|
+
componentNames: args.componentNames,
|
|
65
|
+
rootDir: args.rootDir,
|
|
66
|
+
repositoryUrl: args.repositoryUrl,
|
|
67
|
+
gitlabUrl: args.gitlabUrl,
|
|
68
|
+
documentationUrl: args.documentationUrl,
|
|
69
|
+
documentationDocsQuerySuffix: args.documentationDocsQuerySuffix,
|
|
70
|
+
documentationStoryPathTemplate: args.documentationStoryPathTemplate,
|
|
71
|
+
frameworks: args.frameworks,
|
|
72
|
+
maxSuggestionsPerTarget: args.maxSuggestionsPerTarget,
|
|
73
|
+
maxFiles: args.maxFiles,
|
|
74
|
+
maxFileBytes: args.maxFileBytes,
|
|
75
|
+
includeLowConfidence: args.includeLowConfidence,
|
|
76
|
+
});
|
|
77
|
+
const target = suggestions.targets[clampIndex(args.targetIndex, 0)];
|
|
78
|
+
const suggestion = target?.suggestions[clampIndex(args.suggestionIndex, 0)];
|
|
79
|
+
if (!target || !suggestion)
|
|
80
|
+
return null;
|
|
81
|
+
return { target, suggestion };
|
|
82
|
+
}
|
|
83
|
+
function firstFile(binding) {
|
|
84
|
+
return binding.files?.find((file) => file.componentName || file.filePath || file.importPath) ?? binding.files?.[0];
|
|
85
|
+
}
|
|
86
|
+
function componentNameFor(binding) {
|
|
87
|
+
return firstFile(binding)?.componentName?.trim() || pascalCase(binding.displayName);
|
|
88
|
+
}
|
|
89
|
+
function importPathFor(binding) {
|
|
90
|
+
return binding.importPath?.trim() || firstFile(binding)?.importPath?.trim() || null;
|
|
91
|
+
}
|
|
92
|
+
function sourceFilePathFor(binding) {
|
|
93
|
+
return firstFile(binding)?.filePath?.trim() || null;
|
|
94
|
+
}
|
|
95
|
+
function snippetFor(binding, componentName, includeAttrs, attrs) {
|
|
96
|
+
if (!includeAttrs) {
|
|
97
|
+
return binding.snippetTemplate?.trim() || firstFile(binding)?.snippetTemplate?.trim() || `<${componentName} />`;
|
|
98
|
+
}
|
|
99
|
+
if (attrs.length === 0)
|
|
100
|
+
return `<${componentName} />`;
|
|
101
|
+
return `<${componentName} ${attrs.join(" ")} />`;
|
|
102
|
+
}
|
|
103
|
+
function propertyKind(property) {
|
|
104
|
+
return property.kind.trim().toUpperCase();
|
|
105
|
+
}
|
|
106
|
+
function accessorFor(property, variableName) {
|
|
107
|
+
const name = escapeStringLiteral(property.name);
|
|
108
|
+
const kind = propertyKind(property);
|
|
109
|
+
if (kind === "TEXT")
|
|
110
|
+
return `const ${variableName} = instance.getString('${name}')`;
|
|
111
|
+
if (kind === "BOOLEAN")
|
|
112
|
+
return `const ${variableName} = instance.getBoolean('${name}')`;
|
|
113
|
+
if (kind === "VARIANT") {
|
|
114
|
+
const options = Array.isArray(property.options) ? property.options : [];
|
|
115
|
+
const mapLines = options.length > 0
|
|
116
|
+
? options.map((option) => ` '${escapeStringLiteral(option)}': '${escapeStringLiteral(option)}',`).join("\n")
|
|
117
|
+
: ` '${escapeStringLiteral(String(property.defaultValue ?? "Default"))}': '${escapeStringLiteral(String(property.defaultValue ?? "Default"))}',`;
|
|
118
|
+
return `const ${variableName} = instance.getEnum('${name}', {\n${mapLines}\n})`;
|
|
119
|
+
}
|
|
120
|
+
if (kind === "INSTANCE_SWAP")
|
|
121
|
+
return `const ${variableName} = instance.getInstanceSwap('${name}')`;
|
|
122
|
+
if (kind === "SLOT")
|
|
123
|
+
return `const ${variableName} = instance.getSlot('${name}')`;
|
|
124
|
+
return `const ${variableName} = instance.getString('${name}')`;
|
|
125
|
+
}
|
|
126
|
+
function propertyAttr(property, variableName) {
|
|
127
|
+
const propName = camelCase(property.name);
|
|
128
|
+
const kind = propertyKind(property);
|
|
129
|
+
if (kind === "TEXT" || kind === "VARIANT")
|
|
130
|
+
return `${propName}={\${${variableName}}}`;
|
|
131
|
+
if (kind === "BOOLEAN")
|
|
132
|
+
return `${propName}={\${${variableName}}}`;
|
|
133
|
+
return null;
|
|
134
|
+
}
|
|
135
|
+
function buildPropertyBlock(binding, includeAccessors, includeMetadata, includeAttrs) {
|
|
136
|
+
const properties = binding.storybook?.componentApi?.properties ?? [];
|
|
137
|
+
if (!includeAccessors || properties.length === 0) {
|
|
138
|
+
return { lines: [], metadataLines: [], attrs: [], names: [] };
|
|
139
|
+
}
|
|
140
|
+
const used = new Set();
|
|
141
|
+
const lines = [];
|
|
142
|
+
const metadataLines = [];
|
|
143
|
+
const attrs = [];
|
|
144
|
+
const names = [];
|
|
145
|
+
for (const property of properties) {
|
|
146
|
+
if (!property.name.trim())
|
|
147
|
+
continue;
|
|
148
|
+
const variableName = safeIdentifier(property.name, used);
|
|
149
|
+
names.push(variableName);
|
|
150
|
+
lines.push(accessorFor(property, variableName));
|
|
151
|
+
if (includeMetadata)
|
|
152
|
+
metadataLines.push(` ${variableName},`);
|
|
153
|
+
const attr = includeAttrs ? propertyAttr(property, variableName) : null;
|
|
154
|
+
if (attr)
|
|
155
|
+
attrs.push(attr);
|
|
156
|
+
}
|
|
157
|
+
return { lines, metadataLines, attrs, names };
|
|
158
|
+
}
|
|
159
|
+
function outputPathFor(args, binding, rootDir, componentName) {
|
|
160
|
+
if (args.outputPath?.trim())
|
|
161
|
+
return path.resolve(args.outputPath);
|
|
162
|
+
const fileName = args.fileName?.trim() || fileNameFor(componentName);
|
|
163
|
+
if (args.outputDir?.trim())
|
|
164
|
+
return path.resolve(rootDir, args.outputDir, fileName);
|
|
165
|
+
const sourceFile = sourceFilePathFor(binding);
|
|
166
|
+
const sourceDir = sourceFile ? path.dirname(sourceFile) : ".";
|
|
167
|
+
return path.resolve(rootDir, sourceDir, fileName);
|
|
168
|
+
}
|
|
169
|
+
function assertInsideRoot(outputPath, rootDir, allowOutsideRoot) {
|
|
170
|
+
if (allowOutsideRoot)
|
|
171
|
+
return;
|
|
172
|
+
const relative = path.relative(rootDir, outputPath);
|
|
173
|
+
if (relative.startsWith("..") || path.isAbsolute(relative)) {
|
|
174
|
+
throw new Error("outputPath must stay inside rootDir unless allowOutsideRoot=true");
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
function templateContent(args, binding) {
|
|
178
|
+
const componentName = componentNameFor(binding);
|
|
179
|
+
const importPath = importPathFor(binding);
|
|
180
|
+
const sourceFilePath = sourceFilePathFor(binding);
|
|
181
|
+
const includeAccessors = args.includePropertyAccessors !== false;
|
|
182
|
+
const includeMetadata = args.includePropertyMetadata !== false;
|
|
183
|
+
const includeAttrs = args.includePropertyAttrs === true;
|
|
184
|
+
const props = buildPropertyBlock(binding, includeAccessors, includeMetadata, includeAttrs);
|
|
185
|
+
const snippet = snippetFor(binding, componentName, includeAttrs, props.attrs);
|
|
186
|
+
const lines = [];
|
|
187
|
+
if (args.figmaUrl?.trim())
|
|
188
|
+
lines.push(`// url=${args.figmaUrl.trim()}`);
|
|
189
|
+
else if (args.nodeId?.trim())
|
|
190
|
+
lines.push(`// node-id=${args.nodeId.trim()}`);
|
|
191
|
+
if (sourceFilePath)
|
|
192
|
+
lines.push(`// source=${sourceFilePath}`);
|
|
193
|
+
lines.push(`// component=${componentName}`);
|
|
194
|
+
lines.push("import figma from 'figma'");
|
|
195
|
+
lines.push("");
|
|
196
|
+
lines.push("const instance = figma.selectedInstance");
|
|
197
|
+
if (props.lines.length > 0) {
|
|
198
|
+
lines.push("");
|
|
199
|
+
lines.push(...props.lines);
|
|
200
|
+
}
|
|
201
|
+
lines.push("");
|
|
202
|
+
lines.push("export default {");
|
|
203
|
+
lines.push(` id: '${safeTemplateId(binding.displayName || componentName)}',`);
|
|
204
|
+
lines.push(` example: figma.code\`${escapeTemplateLiteral(snippet, includeAttrs)}\`,`);
|
|
205
|
+
if (importPath) {
|
|
206
|
+
lines.push(` imports: ['import { ${componentName} } from "${escapeStringLiteral(importPath)}"'],`);
|
|
207
|
+
}
|
|
208
|
+
if (includeMetadata && props.metadataLines.length > 0) {
|
|
209
|
+
lines.push(" metadata: {");
|
|
210
|
+
lines.push(" nestable: true,");
|
|
211
|
+
lines.push(" props: {");
|
|
212
|
+
lines.push(...props.metadataLines);
|
|
213
|
+
lines.push(" },");
|
|
214
|
+
lines.push(" },");
|
|
215
|
+
}
|
|
216
|
+
lines.push("}");
|
|
217
|
+
lines.push("");
|
|
218
|
+
return {
|
|
219
|
+
content: lines.join("\n"),
|
|
220
|
+
componentName,
|
|
221
|
+
importPath,
|
|
222
|
+
sourceFilePath,
|
|
223
|
+
propertyAccessors: props.names,
|
|
224
|
+
};
|
|
225
|
+
}
|
|
226
|
+
export function generateCodeConnectTemplate(args) {
|
|
227
|
+
const rootDir = path.resolve(args.rootDir ?? process.env.SXL_CODECONNECT_ROOT ?? process.cwd());
|
|
228
|
+
const selected = args.binding ? null : selectSuggestion(args);
|
|
229
|
+
const binding = (args.binding ?? selected?.suggestion.binding);
|
|
230
|
+
if (!binding) {
|
|
231
|
+
throw new Error("No Code Connect binding available. Provide binding or componentNames/targets with a matching local source file.");
|
|
232
|
+
}
|
|
233
|
+
const generated = templateContent(args, binding);
|
|
234
|
+
const outputPath = outputPathFor(args, binding, rootDir, generated.componentName);
|
|
235
|
+
assertInsideRoot(outputPath, rootDir, args.allowOutsideRoot);
|
|
236
|
+
const writeRequested = args.writeFile === true;
|
|
237
|
+
const existed = existsSync(outputPath);
|
|
238
|
+
if (writeRequested) {
|
|
239
|
+
if (existed && args.overwrite !== true) {
|
|
240
|
+
throw new Error(`Template already exists at ${outputPath}. Set overwrite=true to replace it.`);
|
|
241
|
+
}
|
|
242
|
+
mkdirSync(path.dirname(outputPath), { recursive: true });
|
|
243
|
+
writeFileSync(outputPath, generated.content, "utf8");
|
|
244
|
+
}
|
|
245
|
+
const warnings = [];
|
|
246
|
+
if (generated.propertyAccessors.length > 0 && args.includePropertyAttrs !== true) {
|
|
247
|
+
warnings.push("Figma component API properties were emitted as accessors/metadata only. Set includePropertyAttrs=true only after verifying matching code component prop names.");
|
|
248
|
+
}
|
|
249
|
+
if (!generated.importPath) {
|
|
250
|
+
warnings.push("No importPath was available; imports[] was omitted from the generated template.");
|
|
251
|
+
}
|
|
252
|
+
return {
|
|
253
|
+
ok: true,
|
|
254
|
+
source: "bridge-code-connect-template",
|
|
255
|
+
dryRun: !writeRequested,
|
|
256
|
+
generatedAt: new Date().toISOString(),
|
|
257
|
+
target: selected?.target ?? null,
|
|
258
|
+
binding,
|
|
259
|
+
template: {
|
|
260
|
+
fileName: path.basename(outputPath),
|
|
261
|
+
outputPath,
|
|
262
|
+
content: generated.content,
|
|
263
|
+
bytes: Buffer.byteLength(generated.content, "utf8"),
|
|
264
|
+
componentName: generated.componentName,
|
|
265
|
+
importPath: generated.importPath,
|
|
266
|
+
sourceFilePath: generated.sourceFilePath,
|
|
267
|
+
propertyAccessors: generated.propertyAccessors,
|
|
268
|
+
},
|
|
269
|
+
write: {
|
|
270
|
+
requested: writeRequested,
|
|
271
|
+
written: writeRequested,
|
|
272
|
+
overwritten: writeRequested && existed,
|
|
273
|
+
},
|
|
274
|
+
warnings,
|
|
275
|
+
nextStep: writeRequested
|
|
276
|
+
? "Review the generated .figma.ts template, adjust prop mappings if needed, then publish/apply Code Connect through your normal repository workflow."
|
|
277
|
+
: "Review template.content and call generate_code_connect_template with writeFile=true to create the .figma.ts file.",
|
|
278
|
+
};
|
|
279
|
+
}
|
|
280
|
+
//# sourceMappingURL=codeconnect-template.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"codeconnect-template.js","sourceRoot":"","sources":["../src/codeconnect-template.ts"],"names":[],"mappings":"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"}
|
package/dist/command-queue.d.ts
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* Serial execution: one command at a time.
|
|
5
5
|
* Each command has a timeout. Results are resolved via promises.
|
|
6
6
|
*/
|
|
7
|
-
import type { CommandResult, CommandStatus } from "./types.js";
|
|
7
|
+
import type { CommandQueueSnapshot, CommandResult, CommandStatus, CommandTelemetryEvent, CommandTelemetrySummary } from "./types.js";
|
|
8
8
|
/** Per-command client timeouts. Keep long to avoid client-side aborts on heavy files. */
|
|
9
9
|
export declare const BRIDGE_COMMAND_TIMEOUT_MS: Readonly<Record<string, number>>;
|
|
10
10
|
type CommandSender = (command: {
|
|
@@ -15,15 +15,37 @@ type CommandSender = (command: {
|
|
|
15
15
|
export declare class CommandQueue {
|
|
16
16
|
private queue;
|
|
17
17
|
private current;
|
|
18
|
+
private immediate;
|
|
18
19
|
private sendCommand;
|
|
19
|
-
private
|
|
20
|
+
private timeoutHandles;
|
|
21
|
+
private events;
|
|
20
22
|
setSender(sender: CommandSender): void;
|
|
21
23
|
get queueLength(): number;
|
|
22
24
|
get currentCommand(): string | null;
|
|
25
|
+
getSnapshot(now?: number): CommandQueueSnapshot;
|
|
26
|
+
getEventsSnapshot(filters?: {
|
|
27
|
+
limit?: number;
|
|
28
|
+
commandId?: string | null;
|
|
29
|
+
}): CommandTelemetryEvent[];
|
|
30
|
+
getTelemetrySummary(now?: number): CommandTelemetrySummary;
|
|
23
31
|
execute(commandType: string, payload?: Record<string, unknown>): Promise<CommandResult>;
|
|
32
|
+
/**
|
|
33
|
+
* Out-of-band command dispatch for control-plane operations.
|
|
34
|
+
*
|
|
35
|
+
* Long Figma operations are intentionally serialized, but cancellation must be able
|
|
36
|
+
* to reach the plugin while another command is running. The plugin main handler can
|
|
37
|
+
* process this command concurrently during generator yields and flip its cancellation
|
|
38
|
+
* flag; queuing it behind the running command makes cancellation ineffective.
|
|
39
|
+
*/
|
|
40
|
+
private executeImmediate;
|
|
41
|
+
private scheduleTimeout;
|
|
24
42
|
resolveCommand(commandId: string, status: CommandStatus, result?: unknown, error?: string, events?: unknown[], durationMs?: number): void;
|
|
25
43
|
cancelAll(): void;
|
|
26
44
|
private processNext;
|
|
45
|
+
recordPluginEvent(raw: unknown): void;
|
|
27
46
|
private clearTimeout;
|
|
47
|
+
private clearAllTimeouts;
|
|
48
|
+
private recordCommandEvent;
|
|
49
|
+
private recordTelemetryEvent;
|
|
28
50
|
}
|
|
29
51
|
export {};
|