UNPKG

@syntropysoft/praetorian

Version:

Praetorian CLI – A universal multi-environment configuration validator for DevSecOps teams. Validate, compare, and secure YAML/ENV files with ease.

95 lines 3.55 kB
"use strict"; /** * TODO: DECLARATIVE PROGRAMMING PATTERN * * This file demonstrates excellent declarative programming practices: * - Pure functions with clear input/output contracts * - Functional composition with async/await * - Immutable data handling with spread operator * - Array methods (forEach, push, length) * - No imperative state mutations * - Clear separation of concerns * * Mutation Score: 100% - Declarative code is inherently testable! */ Object.defineProperty(exports, "__esModule", { value: true }); exports.Validator = void 0; const PluginLoader_1 = require("../../infrastructure/plugins/PluginLoader"); const HealthChecker_1 = require("../../infrastructure/plugins/HealthChecker"); const PluginValidator_1 = require("../validators/PluginValidator"); const ResultBuilder_1 = require("../../shared/utils/ResultBuilder"); class Validator { constructor(options = {}) { this.options = { plugins: ['syntropylog'], strict: false, rules: {}, ...options }; this.pluginLoader = new PluginLoader_1.PluginLoader({ plugins: this.options.plugins, autoLoad: true }); this.healthChecker = new HealthChecker_1.HealthChecker(this.pluginLoader.getPluginManager()); this.pluginValidator = new PluginValidator_1.PluginValidator({ strict: this.options.strict }); this.resultBuilder = new ResultBuilder_1.ResultBuilder(); } /** * Validate a configuration using loaded plugins */ async validate(config, context) { const startTime = Date.now(); // Validate input parameters if (config === null || config === undefined) { throw new Error('Configuration is required and cannot be null or undefined'); } if (!context || typeof context !== 'object') { throw new Error('Validation context is required and must be a valid object'); } try { const pluginManager = this.pluginLoader.getPluginManager(); const plugins = pluginManager.getEnabledPlugins(); if (plugins.length === 0) { return this.resultBuilder.createNoPluginsResult(startTime); } const results = await this.pluginValidator.validateThroughPlugins(plugins, config, context); return this.resultBuilder.buildValidationResult(results, plugins.length, startTime, this.pluginValidator.isStrictMode()); } catch (error) { return this.resultBuilder.buildErrorResult(error, startTime); } } /** * Get all available validation rules */ getRules() { const pluginManager = this.pluginLoader.getPluginManager(); const plugins = pluginManager.getEnabledPlugins(); const rules = []; plugins.forEach(plugin => { rules.push(...plugin.getRules()); }); return rules; } /** * Enable or disable a specific rule */ setRuleEnabled(ruleId, enabled) { const pluginManager = this.pluginLoader.getPluginManager(); const plugins = pluginManager.getEnabledPlugins(); for (const plugin of plugins) { if (plugin.setRuleEnabled(ruleId, enabled)) { return true; } } return false; } /** * Get plugin health status */ async getHealth() { return this.healthChecker.getHealth(); } } exports.Validator = Validator; //# sourceMappingURL=Validator.js.map