Configuration Validator
Validate your ngxsmk-gatekeeper configuration for type errors, performance issues, and security concerns.
Overview
The configuration validator helps you:
- Type Check - Ensure configuration matches expected types
- Performance Analysis - Identify potential performance bottlenecks
- Security Recommendations - Get security best practice suggestions
- Best Practices - Validate against recommended patterns
Quick Start
typescript
import { validateConfig } from 'ngxsmk-gatekeeper/lib/validator';
const config = {
middlewares: [authMiddleware],
onFail: '/login',
};
const result = validateConfig(config);
if (!result.valid) {
console.error('Configuration errors:', result.errorIssues);
}Usage
Basic Validation
typescript
import { ConfigValidator } from 'ngxsmk-gatekeeper/lib/validator';
import { inject } from '@angular/core';
@Component({...})
export class AppComponent {
private validator = inject(ConfigValidator);
ngOnInit() {
const config = this.getConfig();
const result = this.validator.validate(config);
if (!result.valid) {
console.error('Configuration is invalid:', result.errorIssues);
}
if (result.warnings > 0) {
console.warn('Configuration warnings:', result.warningIssues);
}
}
}Validation Options
typescript
const result = this.validator.validate(config, {
checkTypes: true, // Enable type checking
checkPerformance: true, // Enable performance analysis
checkSecurity: true, // Enable security analysis
checkBestPractices: true, // Enable best practice checks
maxMiddlewareCount: 10, // Max middlewares before warning
maxExecutionTime: 100, // Max execution time (ms) before warning
requireAuth: true, // Require authentication middleware
requireAuditInProduction: false, // Require audit in production
});Validation Result
typescript
interface ValidationResult {
valid: boolean; // Whether config is valid
totalIssues: number; // Total number of issues
errors: number; // Number of errors
warnings: number; // Number of warnings
info: number; // Number of info messages
issues: ValidationIssue[]; // All issues
errorIssues: ValidationIssue[]; // Errors only
warningIssues: ValidationIssue[]; // Warnings only
infoIssues: ValidationIssue[]; // Info only
issuesByCategory: { // Issues grouped by category
type: ValidationIssue[];
performance: ValidationIssue[];
security: ValidationIssue[];
'best-practice': ValidationIssue[];
configuration: ValidationIssue[];
};
performance?: PerformanceAnalysis; // Performance analysis
security?: SecurityAnalysis; // Security analysis
}Type Checking
Validates that configuration matches expected types:
typescript
// ❌ Invalid - middlewares is not an array
const invalid = {
middlewares: 'not-an-array',
onFail: '/login',
};
const result = validateConfig(invalid);
// result.valid = false
// result.errorIssues = [
// {
// severity: 'error',
// category: 'type',
// code: 'MIDDLEWARES_NOT_ARRAY',
// message: '"middlewares" must be an array',
// path: 'middlewares',
// }
// ]Performance Analysis
Analyzes configuration for performance issues:
typescript
const result = validateConfig(config, {
checkPerformance: true,
maxMiddlewareCount: 10,
maxExecutionTime: 100,
});
if (result.performance) {
console.log('Performance Score:', result.performance.score);
console.log('Estimated Time:', result.performance.estimatedExecutionTime, 'ms');
console.log('Bottlenecks:', result.performance.bottlenecks);
}Performance Recommendations
- Too Many Middlewares - Warns if middleware count exceeds threshold
- Slow Middleware - Identifies potentially slow middleware
- Slow Chain - Warns if estimated execution time exceeds threshold
- Benchmark Recommended - Suggests enabling benchmark mode
Security Analysis
Analyzes configuration for security concerns:
typescript
const result = validateConfig(config, {
checkSecurity: true,
requireAuth: true,
});
if (result.security) {
console.log('Security Score:', result.security.score);
console.log('Missing Features:', result.security.missingFeatures);
console.log('Risks:', result.security.risks);
}Security Recommendations
- Missing Authentication - Warns if no auth middleware found
- Missing CSRF Protection - Suggests CSRF middleware
- Missing Rate Limiting - Suggests rate limiting
- Debug in Production - Warns if debug enabled in production
- Missing Audit Logging - Suggests audit logging for production
- Insecure Redirect - Warns about insecure redirect paths
Best Practices
Validates against recommended patterns:
- Empty middlewares array
- Debug mode in development
- Benchmark in production
- Compliance mode for complex chains
- Default onFail paths
Validation Summary
Get a formatted summary of validation results:
typescript
const result = this.validator.validate(config);
const summary = this.validator.getSummary(result);
console.log(summary);Output:
Configuration Validation Summary
========================================
Status: ✓ Valid
Total Issues: 3
Errors: 0
Warnings: 2
Info: 1
Performance Analysis:
Middleware Count: 5
Estimated Time: 45ms
Performance Score: 90/100
Security Analysis:
Security Score: 75/100
Missing Features: CSRF protection, Rate limitingValidate and Throw
Validate configuration and throw on errors:
typescript
import { ConfigValidator } from 'ngxsmk-gatekeeper/lib/validator';
const validator = new ConfigValidator();
try {
validator.validateOrThrow(config);
console.log('Configuration is valid!');
} catch (error) {
console.error('Configuration validation failed:', error.message);
}Integration with CLI
The CLI tool uses the validator:
bash
gatekeeper analyzeThis will:
- Analyze route protection
- Validate configuration
- Show performance and security recommendations
Custom Validation
You can create custom validators:
typescript
import { ValidationIssue, ValidationSeverity, ValidationCategory } from 'ngxsmk-gatekeeper/lib/validator';
function customValidator(config: GatekeeperConfig): ValidationIssue[] {
const issues: ValidationIssue[] = [];
// Your custom validation logic
if (config.middlewares.length === 0) {
issues.push({
severity: ValidationSeverity.Error,
category: ValidationCategory.Configuration,
code: 'CUSTOM_ERROR',
message: 'Custom validation failed',
path: 'middlewares',
});
}
return issues;
}Best Practices
- Validate Early - Validate configuration during development
- Fix Errors First - Address errors before warnings
- Review Warnings - Don't ignore warnings, review them
- Use in CI/CD - Add validation to your build pipeline
- Monitor Performance - Enable benchmark mode to track actual performance