UNPKG

kist

Version:

Lightweight Package Pipeline Processor with Plugin Architecture

80 lines 3.32 kB
import { AbstractValidator } from "../abstract/AbstractValidator.js"; import { ActionValidator } from "./ActionValidator.js"; export class StepValidator extends AbstractValidator { constructor() { super(); this.actionValidator = new ActionValidator(); this.logInfo("StepValidator initialized."); } validate(step) { this.logInfo(`Validating step: "${step.name}"`); this.validateProperty("name", step.name); this.validateActions(step.action); if (step.options) { this.validateProperty("options", step.options); } this.logInfo(`Step "${step.name}" validated successfully.`); } validateProperty(key, value) { switch (key) { case "name": this.validateName(value); break; case "options": this.validateOptions(value); break; default: this.throwValidationError(key, value, "Unknown key provided for validation."); } this.logValidationSuccess(key, value); } validateName(name) { if (!name || typeof name !== "string" || name.trim() === "") { this.throwValidationError("name", name, "Each step must have a valid, non-empty 'name' property."); } } validateActions(action) { if (!action || typeof action.name !== "string" || action.name.trim() === "") { this.throwValidationError("action", action, "Each step must have a valid 'action' object with a non-empty 'name' property."); } try { this.actionValidator.validate({ action: action.name }); } catch (error) { this.throwValidationError("action", action, error.message); } } validateOptions(options) { if (options === null) { this.throwValidationError("options", options, "Step options must be a valid object or undefined, but 'null' was provided."); } if (options && (typeof options !== "object" || Array.isArray(options))) { this.throwValidationError("options", options, "Step options must be a valid object conforming to StepOptionsInterface."); } if (options) { for (const [key, value] of Object.entries(options)) { switch (key) { case "description": if (value !== undefined && typeof value !== "string") { this.throwValidationError("options", value, `Invalid value for "description": must be a string.`); } break; case "enabled": if (value !== undefined && typeof value !== "boolean") { this.throwValidationError("options", value, `Invalid value for "enabled": must be a boolean.`); } break; default: this.logInfo(`Validating additional key "${key}" with value "${value}".`); break; } } } this.logInfo("Step options validated successfully."); } } //# sourceMappingURL=StepValidator.js.map