Skip to main content
Glama
config.test.ts9.5 kB
import type { ContextRules } from '../config/rules.js'; describe('Configuration Rules', () => { // Mock context rules for testing const mockRules: ContextRules = { maxDepth: 10, includeHiddenNodes: false, includeLockedNodes: true, nodeTypeFilters: { include: ['FRAME', 'TEXT', 'RECTANGLE'], exclude: ['SLICE'], prioritize: ['FRAME', 'TEXT'] }, aiOptimization: { enableCSSGeneration: true, enableSemanticAnalysis: true, enableAccessibilityInfo: true, enableResponsiveBreakpoints: true, enableDesignTokens: true, enableComponentVariants: true, enableInteractionStates: true, simplifyComplexPaths: true, optimizeForCodeGeneration: true }, contentEnhancement: { extractTextContent: true, analyzeImageContent: false, detectUIPatterns: true, identifyComponentHierarchy: true, extractLayoutConstraints: true, analyzeColorPalettes: true, extractTypographyStyles: true, detectSpacingPatterns: true }, contextReduction: { removeRedundantProperties: true, simplifyNestedStructures: true, aggregateSimilarNodes: false, removeEmptyContainers: true, limitTextLength: 1000, compressLargeArrays: true }, frameworkOptimizations: { react: { generateJSX: true, useStyledComponents: false, useTailwindCSS: true, generateHooks: true, generatePropTypes: false, useTypeScript: true, componentNamingConvention: 'PascalCase', generateStorybook: false }, vue: { generateSFC: true, useCompositionAPI: true, useScoped: true, generateProps: true, useTypeScript: true, componentNamingConvention: 'PascalCase' }, angular: { generateComponent: true, useStandalone: true, generateModule: false, useSignals: true, useTypeScript: true, componentNamingConvention: 'PascalCase' }, svelte: { generateSvelteComponent: true, useTypeScript: true, useStores: true, componentNamingConvention: 'PascalCase' }, html: { generateSemanticHTML: true, useCSS: true, useTailwindCSS: true, generateAccessibleMarkup: true, useModernCSS: true }, swiftui: { generateViews: true, useViewBuilder: true, generateModifiers: true, useObservableObject: true, useStateManagement: true, generatePreviewProvider: true, useEnvironmentObjects: false, componentNamingConvention: 'PascalCase', generateSFSymbols: true, useNativeColors: true, generateAdaptiveLayouts: true, useAsyncImage: true, generateNavigationViews: true, useToolbarModifiers: true, generateAnimations: true, useGeometryReader: false, generateDarkModeSupport: true, useTabViews: true, generateListViews: true, useScrollViews: true, generateFormViews: true }, uikit: { generateViewControllers: true, useStoryboards: false, useProgrammaticLayout: true, useAutoLayout: true, generateXIBFiles: false, useStackViews: true, generateConstraints: true, useSwiftUIInterop: true, componentNamingConvention: 'PascalCase', generateDelegatePatterns: true, useModernConcurrency: true, generateAccessibilitySupport: true }, electron: { generateMainProcess: true, generateRendererProcess: true, useIPC: true, useWebSecurity: true, generateMenus: true, useNativeDialogs: true, generateUpdater: true, useContextIsolation: true, componentNamingConvention: 'camelCase', generateNotifications: true, useCrashReporter: false, generateTrayIcon: false, useProtocolHandlers: false }, tauri: { generateRustBackend: true, generateWebFrontend: true, useSystemWebView: true, generateCommands: true, useEventSystem: true, generatePlugins: false, useSidecar: false, componentNamingConvention: 'snake_case', generateUpdater: true, useFilesystem: true, generateNotifications: true, useSystemTray: false, generateMenus: true }, nwjs: { generateNodeBackend: true, generateWebFrontend: true, useChromiumAPI: true, generateMenus: true, useNativeModules: true, generateManifest: true, useClipboard: true, componentNamingConvention: 'camelCase', generateFileAccess: true, useShell: true, generateScreenCapture: false, useTrayIcon: false } }, customRules: [] }; describe('AI Optimization Rules', () => { it('should have all required AI optimization properties', () => { const { aiOptimization } = mockRules; expect(aiOptimization).toBeDefined(); expect(typeof aiOptimization.enableCSSGeneration).toBe('boolean'); expect(typeof aiOptimization.enableSemanticAnalysis).toBe('boolean'); expect(typeof aiOptimization.enableAccessibilityInfo).toBe('boolean'); expect(typeof aiOptimization.enableResponsiveBreakpoints).toBe('boolean'); expect(typeof aiOptimization.enableDesignTokens).toBe('boolean'); expect(typeof aiOptimization.enableComponentVariants).toBe('boolean'); expect(typeof aiOptimization.enableInteractionStates).toBe('boolean'); expect(typeof aiOptimization.simplifyComplexPaths).toBe('boolean'); expect(typeof aiOptimization.optimizeForCodeGeneration).toBe('boolean'); }); it('should enable key optimizations by default', () => { const { aiOptimization } = mockRules; expect(aiOptimization.enableSemanticAnalysis).toBe(true); expect(aiOptimization.enableAccessibilityInfo).toBe(true); expect(aiOptimization.optimizeForCodeGeneration).toBe(true); }); }); describe('Framework Optimizations', () => { it('should have optimizations for all 10 frameworks', () => { const { frameworkOptimizations } = mockRules; expect(frameworkOptimizations.react).toBeDefined(); expect(frameworkOptimizations.vue).toBeDefined(); expect(frameworkOptimizations.angular).toBeDefined(); expect(frameworkOptimizations.svelte).toBeDefined(); expect(frameworkOptimizations.html).toBeDefined(); expect(frameworkOptimizations.swiftui).toBeDefined(); expect(frameworkOptimizations.uikit).toBeDefined(); expect(frameworkOptimizations.electron).toBeDefined(); expect(frameworkOptimizations.tauri).toBeDefined(); expect(frameworkOptimizations.nwjs).toBeDefined(); }); it('should have proper naming conventions for each framework', () => { const { frameworkOptimizations } = mockRules; expect(frameworkOptimizations.react?.componentNamingConvention).toBe('PascalCase'); expect(frameworkOptimizations.vue?.componentNamingConvention).toBe('PascalCase'); expect(frameworkOptimizations.angular?.componentNamingConvention).toBe('PascalCase'); expect(frameworkOptimizations.svelte?.componentNamingConvention).toBe('PascalCase'); expect(frameworkOptimizations.electron?.componentNamingConvention).toBe('camelCase'); expect(frameworkOptimizations.tauri?.componentNamingConvention).toBe('snake_case'); expect(frameworkOptimizations.nwjs?.componentNamingConvention).toBe('camelCase'); }); it('should enable TypeScript for modern frameworks', () => { const { frameworkOptimizations } = mockRules; expect(frameworkOptimizations.react?.useTypeScript).toBe(true); expect(frameworkOptimizations.vue?.useTypeScript).toBe(true); expect(frameworkOptimizations.angular?.useTypeScript).toBe(true); expect(frameworkOptimizations.svelte?.useTypeScript).toBe(true); }); it('should have framework-specific features enabled', () => { const { frameworkOptimizations } = mockRules; // React specific expect(frameworkOptimizations.react?.generateJSX).toBe(true); expect(frameworkOptimizations.react?.generateHooks).toBe(true); // Vue specific expect(frameworkOptimizations.vue?.generateSFC).toBe(true); expect(frameworkOptimizations.vue?.useCompositionAPI).toBe(true); // Angular specific expect(frameworkOptimizations.angular?.useStandalone).toBe(true); expect(frameworkOptimizations.angular?.useSignals).toBe(true); // SwiftUI specific expect(frameworkOptimizations.swiftui?.generateViews).toBe(true); expect(frameworkOptimizations.swiftui?.useStateManagement).toBe(true); // Electron specific expect(frameworkOptimizations.electron?.useIPC).toBe(true); expect(frameworkOptimizations.electron?.useWebSecurity).toBe(true); }); }); describe('Type Safety', () => { it('should have proper TypeScript types', () => { // This test ensures the types are properly defined const rules: ContextRules = mockRules; expect(rules).toBeDefined(); expect(rules.aiOptimization).toBeDefined(); expect(rules.frameworkOptimizations).toBeDefined(); }); }); });

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/artemsvit/Figma-MCP-Pro'

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