@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
JavaScript
;
/**
* 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