gauge-ts
Version:
Typescript runner for Gauge
50 lines (49 loc) • 2.11 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.ValidationProcessor = void 0;
const node_crypto_1 = require("node:crypto");
const node_os_1 = require("node:os");
const messages_pb_1 = require("../gen/messages_pb");
const StepRegistry_1 = require("../models/StepRegistry");
class ValidationProcessor {
process(req) {
const step = req.getStepvalue();
const stepValue = step.getParameterizedstepvalue();
const res = new messages_pb_1.StepValidateResponse();
res.setIsvalid(true);
res.setErrormessage("");
if (!StepRegistry_1.default.isImplemented(req.getSteptext())) {
res.setIsvalid(false);
res.setErrormessage(`No step implementation found for ${stepValue}`);
res.setErrortype(messages_pb_1.StepValidateResponse.ErrorType.STEP_IMPLEMENTATION_NOT_FOUND);
res.setSuggestion(this.getSuggestion(step));
}
else if (StepRegistry_1.default.hasMultipleImplementations(req.getSteptext())) {
res.setIsvalid(false);
res.setErrormessage(`Multiple step implementation found for ${stepValue}`);
res.setErrortype(messages_pb_1.StepValidateResponse.ErrorType.DUPLICATE_STEP_IMPLEMENTATION);
}
return res;
}
getSuggestion(step) {
let argCount = 0;
const stepText = step
.getParameterizedstepvalue()
.replace(/{}/g, () => `<arg${argCount++}>`);
return `@Step("${stepText}")${node_os_1.EOL}public async ${this.getMethodName()}(${this.getParamsList(step.getParametersList())}) {${node_os_1.EOL}\tthrow new Error("Method not implemented.");${node_os_1.EOL}}`;
}
getMethodName() {
return `implementation${(0, node_crypto_1.randomBytes)(10).toString("hex")}`;
}
getParamsList(params) {
if (!params || !params.length) {
return "";
}
return params
.map((_, i) => {
return `arg${i.toString()}: any`;
})
.join(", ");
}
}
exports.ValidationProcessor = ValidationProcessor;