kist
Version:
Lightweight Package Pipeline Processor with Plugin Architecture
80 lines • 3.32 kB
JavaScript
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