UNPKG

@zeplin/mcp-server

Version:

Zeplin’s official MCP server for AI-assisted UI development

102 lines (101 loc) 3.47 kB
/** * Preprocess a screen object to remove unnecessary information * @param screen The screen object to preprocess * @returns The processed screen object */ export function preProcessScreen(screen) { return preProcess(screen); } /** * Preprocess a design tokens object to remove metadata * @param designTokens The design tokens to preprocess * @returns The processed design tokens */ export function preProcessDesignTokens(designTokens) { const processedTokens = preProcess(designTokens); return removeMetadata(processedTokens); } /** * Generic preprocessing function that removes unnecessary properties from objects * @param data The data to preprocess * @returns Processed data with unnecessary properties removed */ export function preProcess(data) { if (Array.isArray(data)) { return data .map(item => preProcess(item)) .filter(item => { if (Array.isArray(item) && item.length === 0) return false; return true; }); } else if (data !== null && typeof data === "object") { const result = {}; // Skip unnecessary properties const propsToSkip = new Set(["created", "creator", "thumbnails", "id"]); const defaultValues = new Map([ ["opacity", 1], ["blend_mode", "normal"], ["rotation", 0] ]); for (const [key, value] of Object.entries(data)) { if (propsToSkip.has(key)) continue; if (defaultValues.has(key) && defaultValues.get(key) === value) continue; let processedValue; if (key === "contents" && Array.isArray(value)) { const itemsToKeep = value.filter(originalContentItem => { if (originalContentItem && typeof originalContentItem === "object" && originalContentItem !== null && "density" in originalContentItem) { return originalContentItem.density === 1; } if (Array.isArray(originalContentItem) && originalContentItem.length === 0) { return false; } return true; }); processedValue = itemsToKeep.map(keptItem => preProcess(keptItem)) .filter(processedItem => { if (Array.isArray(processedItem) && processedItem.length === 0) { return false; } return true; }); } else { processedValue = preProcess(value); } if (Array.isArray(processedValue) && processedValue.length === 0) { continue; } result[key] = processedValue; } return result; } else { return data; } } /** * Removes metadata from design tokens * @param obj Object containing design tokens * @returns Object with metadata removed */ function removeMetadata(obj) { if (Array.isArray(obj)) { return obj.map(removeMetadata); } else if (obj !== null && typeof obj === "object") { const result = {}; for (const [key, value] of Object.entries(obj)) { if (key === "metadata") continue; result[key] = removeMetadata(value); } return result; } else { return obj; } }