// Document handlers
// Annotation handlers
import {
getAnnotations,
setAnnotation,
setMultipleAnnotations,
} from "./annotations";
// Component handlers
import {
createComponentInstance,
getInstanceOverrides,
getLocalComponents,
setInstanceOverrides,
} from "./components";
import { getDocumentInfo, getSelection } from "./document";
// Export handlers
import { exportNodeAsImage } from "./export";
// Layout handlers
import {
setAxisAlign,
setItemSpacing,
setLayoutMode,
setLayoutSizing,
setPadding,
} from "./layout";
// Node handlers
import { getNodeInfo, getNodesInfo, readMyDesign } from "./nodes";
// Prototyping handlers
import {
createConnections,
getReactions,
setDefaultConnector,
} from "./prototyping";
// Scanning handlers
import { scanNodesByTypes } from "./scanning";
// Selection handlers
import { setFocus, setSelections } from "./selection";
// Shape handlers
import { createFrame, createRectangle } from "./shapes";
// Styling handlers
import { setCornerRadius, setFillColor, setStrokeColor } from "./styling";
// Text handlers
import {
createText,
scanTextNodes,
setMultipleTextContents,
setTextContent,
} from "./text";
// Transform handlers
import {
cloneNode,
deleteMultipleNodes,
deleteNode,
moveNode,
resizeNode,
} from "./transform";
// Variable handlers
import {
bindVariableToNode,
createExtendedCollection,
createVariable,
createVariableCollection,
createVariableMode,
deleteVariable,
deleteVariableCollection,
deleteVariableMode,
getExtendedCollection,
// Extended collections
getExtendedVariableCollections,
getLocalVariableCollections,
getVariableCollection,
getVariableModes,
getVariablesInCollection,
removeExtendedCollectionOverride,
renameVariableMode,
setExtendedCollectionOverride,
setVariableValueForMode,
unbindVariableFromNode,
updateVariable,
updateVariableCollection,
} from "./variables";
// Helper to cast params - we trust the MCP server sends correct params
// eslint-disable-next-line @typescript-eslint/no-explicit-any
const p = <T>(params: Record<string, unknown>): T => params as unknown as T;
/**
* Handle commands from the WebSocket relay
*/
export async function handleCommand(
command: string,
params: Record<string, unknown>,
): Promise<unknown> {
switch (command) {
// Document commands
case "get_document_info":
return getDocumentInfo();
case "get_selection":
return getSelection();
// Node commands
case "get_node_info":
return getNodeInfo(params.nodeId as string);
case "get_nodes_info":
return getNodesInfo(params.nodeIds as string[]);
case "read_my_design":
return readMyDesign();
// Shape commands
case "create_rectangle":
return createRectangle(p(params));
case "create_frame":
return createFrame(p(params));
// Text commands
case "create_text":
return createText(p(params));
case "set_text_content":
return setTextContent(p(params));
case "set_multiple_text_contents":
return setMultipleTextContents(p(params));
case "scan_text_nodes":
return scanTextNodes(p(params));
// Styling commands
case "set_fill_color":
return setFillColor(p(params));
case "set_stroke_color":
return setStrokeColor(p(params));
case "set_corner_radius":
return setCornerRadius(p(params));
// Transform commands
case "move_node":
return moveNode(p(params));
case "resize_node":
return resizeNode(p(params));
case "delete_node":
return deleteNode(p(params));
case "delete_multiple_nodes":
return deleteMultipleNodes(p(params));
case "clone_node":
return cloneNode(p(params));
// Layout commands
case "set_layout_mode":
return setLayoutMode(p(params));
case "set_padding":
return setPadding(p(params));
case "set_axis_align":
return setAxisAlign(p(params));
case "set_layout_sizing":
return setLayoutSizing(p(params));
case "set_item_spacing":
return setItemSpacing(p(params));
// Component commands
case "get_local_components":
return getLocalComponents();
case "create_component_instance":
return createComponentInstance(p(params));
case "get_instance_overrides":
return getInstanceOverrides(p(params));
case "set_instance_overrides":
return setInstanceOverrides(p(params));
// Annotation commands
case "get_annotations":
return getAnnotations(p(params));
case "set_annotation":
return setAnnotation(p(params));
case "set_multiple_annotations":
return setMultipleAnnotations(p(params));
// Export commands
case "export_node_as_image":
return exportNodeAsImage(p(params));
// Selection commands
case "set_focus":
return setFocus(p(params));
case "set_selections":
return setSelections(p(params));
// Prototyping commands
case "get_reactions":
return getReactions(p(params));
case "set_default_connector":
return setDefaultConnector(p(params));
case "create_connections":
return createConnections(p(params));
// Scanning commands
case "scan_nodes_by_types":
return scanNodesByTypes(p(params));
// Variable Collection commands
case "get_local_variable_collections":
return getLocalVariableCollections();
case "get_variable_collection":
return getVariableCollection(p(params));
case "create_variable_collection":
return createVariableCollection(p(params));
case "update_variable_collection":
return updateVariableCollection(p(params));
case "delete_variable_collection":
return deleteVariableCollection(p(params));
// Variable commands
case "get_variables_in_collection":
return getVariablesInCollection(p(params));
case "create_variable":
return createVariable(p(params));
case "update_variable":
return updateVariable(p(params));
case "delete_variable":
return deleteVariable(p(params));
// Variable Mode commands
case "get_variable_modes":
return getVariableModes(p(params));
case "create_variable_mode":
return createVariableMode(p(params));
case "rename_variable_mode":
return renameVariableMode(p(params));
case "delete_variable_mode":
return deleteVariableMode(p(params));
// Variable Value commands
case "set_variable_value_for_mode":
return setVariableValueForMode(p(params));
// Variable Binding commands
case "bind_variable_to_node":
return bindVariableToNode(p(params));
case "unbind_variable_from_node":
return unbindVariableFromNode(p(params));
// Extended Collection commands
case "get_extended_variable_collections":
return getExtendedVariableCollections();
case "create_extended_collection":
return createExtendedCollection(p(params));
case "get_extended_collection":
return getExtendedCollection(p(params));
case "set_extended_collection_override":
return setExtendedCollectionOverride(p(params));
case "remove_extended_collection_override":
return removeExtendedCollectionOverride(p(params));
default:
throw new Error(`Unknown command: ${command}`);
}
}
// Re-export all handlers for direct use if needed
export {
// Document
getDocumentInfo,
getSelection,
// Nodes
getNodeInfo,
getNodesInfo,
readMyDesign,
// Shapes
createRectangle,
createFrame,
// Text
createText,
setTextContent,
setMultipleTextContents,
scanTextNodes,
// Styling
setFillColor,
setStrokeColor,
setCornerRadius,
// Transform
moveNode,
resizeNode,
deleteNode,
deleteMultipleNodes,
cloneNode,
// Layout
setLayoutMode,
setPadding,
setAxisAlign,
setLayoutSizing,
setItemSpacing,
// Components
getLocalComponents,
createComponentInstance,
getInstanceOverrides,
setInstanceOverrides,
// Annotations
getAnnotations,
setAnnotation,
setMultipleAnnotations,
// Export
exportNodeAsImage,
// Selection
setFocus,
setSelections,
// Prototyping
getReactions,
setDefaultConnector,
createConnections,
// Scanning
scanNodesByTypes,
// Variables
getLocalVariableCollections,
getVariableCollection,
createVariableCollection,
updateVariableCollection,
deleteVariableCollection,
getVariablesInCollection,
createVariable,
updateVariable,
deleteVariable,
getVariableModes,
createVariableMode,
renameVariableMode,
deleteVariableMode,
setVariableValueForMode,
bindVariableToNode,
unbindVariableFromNode,
// Extended Collections
getExtendedVariableCollections,
createExtendedCollection,
getExtendedCollection,
setExtendedCollectionOverride,
removeExtendedCollectionOverride,
};