Skip to main content
Glama
by alucardeht
assetHelpers.js1.82 kB
export function isIconNode(node) { const name = node.name.toLowerCase(); const hasIconKeyword = name.includes("icon") || name.includes("ico") || name.includes("logo") || name.includes("symbol") || name.includes("arrow") || name.includes("chevron"); const isVectorType = node.type === "VECTOR" || node.type === "BOOLEAN_OPERATION"; const isSmall = node.absoluteBoundingBox && node.absoluteBoundingBox.width <= 64 && node.absoluteBoundingBox.height <= 64; return hasIconKeyword || (isVectorType && isSmall); } export function isImageNode(node) { const hasImageFill = node.fills?.some((f) => f.type === "IMAGE"); const name = node.name.toLowerCase(); const hasImageKeyword = name.includes("image") || name.includes("photo") || name.includes("img") || name.includes("picture") || name.includes("banner") || name.includes("hero") || name.includes("background") || name.includes("bg"); return hasImageFill || (node.type === "RECTANGLE" && hasImageKeyword); } export function buildAssetName(path) { const relevant = path.filter( (p) => !p.toLowerCase().startsWith("frame") && !p.toLowerCase().startsWith("group") && p.length > 1 ); return relevant.slice(-2).join("-"); } export function findAssets(node, path) { if (!node) return []; const assets = []; const currentPath = [...path, node.name]; const isIcon = isIconNode(node); const isImage = isImageNode(node); if (isIcon || isImage) { assets.push({ id: node.id, name: buildAssetName(currentPath), category: isIcon ? "icon" : "image", type: node.type, }); } if (node.children && !isIcon && !isImage) { node.children.forEach((child) => { assets.push(...findAssets(child, currentPath)); }); } return assets; }

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/alucardeht/figma-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server