Skip to main content
Glama

Analytical MCP Server

visualization_validation_provider.ts8.19 kB
import { ValidationHelpers } from './validation_helpers.js'; import { ValidationError } from './errors.js'; /** * VisualizationValidationProvider * * Handles input validation and data preprocessing for visualization generation. * Provides focused responsibility for validation logic across all chart types. * Integrates ValidationHelpers patterns for input validation and early returns. */ export class VisualizationValidationProvider { /** * Validate visualization type against supported types * @param type - The visualization type to validate * @throws ValidationError if type is invalid */ public validateVisualizationType(type: string): void { ValidationHelpers.throwIfInvalid(ValidationHelpers.validateNonEmptyString(type)); const validTypes = ['scatter', 'line', 'bar', 'histogram', 'box', 'heatmap', 'pie', 'violin', 'correlation']; if (!validTypes.includes(type)) { throw new ValidationError('ERR_1001', `Invalid visualization type: ${type}. Must be one of: ${validTypes.join(', ')}`); } } /** * Validate inputs for line chart generation * @param baseSpec - Base specification object * @param variables - Array of variable names * @param data - Array of data objects * @throws ValidationError if inputs are invalid */ public validateLineChartInputs( baseSpec: any, variables: string[], data: Record<string, any>[] ): void { if (!baseSpec || typeof baseSpec !== 'object') { throw new ValidationError('ERR_1001', 'Base specification is required and must be an object.'); } ValidationHelpers.throwIfInvalid(ValidationHelpers.validateDataArray(variables)); ValidationHelpers.throwIfInvalid(ValidationHelpers.validateDataArray(data)); if (variables.length < 2) { throw new ValidationError('ERR_1001', 'Line chart requires at least 2 variables.'); } } /** * Validate inputs for bar chart generation * @param baseSpec - Base specification object * @param variables - Array of variable names * @param data - Array of data objects * @throws ValidationError if inputs are invalid */ public validateBarChartInputs( baseSpec: any, variables: string[], data: Record<string, any>[] ): void { if (!baseSpec || typeof baseSpec !== 'object') { throw new ValidationError('ERR_1001', 'Base specification is required and must be an object.'); } ValidationHelpers.throwIfInvalid(ValidationHelpers.validateDataArray(variables)); ValidationHelpers.throwIfInvalid(ValidationHelpers.validateDataArray(data)); if (variables.length < 2) { throw new ValidationError('ERR_1001', 'Bar chart requires at least 2 variables.'); } } /** * Validate inputs for heatmap generation * @param baseSpec - Base specification object * @param variables - Array of variable names * @param data - Array of data objects * @throws ValidationError if inputs are invalid */ public validateHeatmapInputs( baseSpec: any, variables: string[], data: Record<string, any>[] ): void { ValidationHelpers.throwIfInvalid(ValidationHelpers.validateDataArray(variables)); ValidationHelpers.throwIfInvalid(ValidationHelpers.validateDataArray(data)); if (variables.length < 2) { throw new ValidationError('ERR_1001', 'Heatmap requires at least 2 variables for X and Y axes.'); } if (variables.length > 3) { throw new ValidationError('ERR_1001', 'Heatmap supports at most 3 variables (X, Y, and optional color).'); } } /** * Validate inputs for violin plot generation * @param baseSpec - Base specification object * @param variables - Array of variable names * @throws ValidationError if inputs are invalid */ public validateViolinPlotInputs( baseSpec: any, variables: string[] ): void { if (!baseSpec || typeof baseSpec !== 'object') { throw new ValidationError('ERR_1001', 'Base specification is required and must be an object.'); } ValidationHelpers.throwIfInvalid(ValidationHelpers.validateDataArray(variables)); if (variables.length < 1) { throw new ValidationError('ERR_1001', 'Violin plot requires at least 1 variable.'); } } /** * Validate inputs for correlation chart generation * @param baseSpec - Base specification object * @param variables - Array of variable names * @throws ValidationError if inputs are invalid */ public validateCorrelationInputs( baseSpec: any, variables: string[] ): void { ValidationHelpers.throwIfInvalid(ValidationHelpers.validateDataArray(variables)); if (variables.length < 2) { throw new ValidationError('ERR_1001', 'Correlation analysis requires at least 2 variables.'); } } /** * Validate general visualization inputs * @param data - Array of data objects * @param visualizationType - Type of visualization * @param variables - Array of variable names * @throws ValidationError if inputs are invalid */ public validateGeneralInputs( data: Record<string, any>[], visualizationType: string, variables: string[] ): void { ValidationHelpers.throwIfInvalid(ValidationHelpers.validateDataArray(data)); this.validateVisualizationType(visualizationType); ValidationHelpers.throwIfInvalid(ValidationHelpers.validateVariablesInData(variables, data)); ValidationHelpers.throwIfInvalid(ValidationHelpers.validateVariableCount(visualizationType, variables.length)); } /** * Validate scatter plot specific inputs * @param variables - Array of variable names * @param data - Array of data objects * @throws ValidationError if inputs are invalid */ public validateScatterPlotInputs( variables: string[], data: Record<string, any>[] ): void { ValidationHelpers.throwIfInvalid(ValidationHelpers.validateDataArray(variables)); ValidationHelpers.throwIfInvalid(ValidationHelpers.validateDataArray(data)); if (variables.length < 2) { throw new ValidationError('ERR_1001', 'Scatter plot requires at least 2 variables (X and Y).'); } if (variables.length > 4) { throw new ValidationError('ERR_1001', 'Scatter plot supports at most 4 variables (X, Y, size, color).'); } } /** * Validate histogram specific inputs * @param variables - Array of variable names * @param data - Array of data objects * @throws ValidationError if inputs are invalid */ public validateHistogramInputs( variables: string[], data: Record<string, any>[] ): void { ValidationHelpers.throwIfInvalid(ValidationHelpers.validateDataArray(variables)); ValidationHelpers.throwIfInvalid(ValidationHelpers.validateDataArray(data)); if (variables.length !== 1) { throw new ValidationError('ERR_1001', 'Histogram requires exactly 1 variable.'); } } /** * Validate box plot specific inputs * @param variables - Array of variable names * @param data - Array of data objects * @throws ValidationError if inputs are invalid */ public validateBoxPlotInputs( variables: string[], data: Record<string, any>[] ): void { ValidationHelpers.throwIfInvalid(ValidationHelpers.validateDataArray(variables)); ValidationHelpers.throwIfInvalid(ValidationHelpers.validateDataArray(data)); if (variables.length < 1 || variables.length > 2) { throw new ValidationError('ERR_1001', 'Box plot requires 1-2 variables (value and optional grouping).'); } } /** * Validate pie chart specific inputs * @param variables - Array of variable names * @param data - Array of data objects * @throws ValidationError if inputs are invalid */ public validatePieChartInputs( variables: string[], data: Record<string, any>[] ): void { ValidationHelpers.throwIfInvalid(ValidationHelpers.validateDataArray(variables)); ValidationHelpers.throwIfInvalid(ValidationHelpers.validateDataArray(data)); if (variables.length < 1 || variables.length > 2) { throw new ValidationError('ERR_1001', 'Pie chart requires 1-2 variables (category and optional value).'); } } }

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/quanticsoul4772/analytical-mcp'

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