@wix-pilot/core
Version:
A flexible plugin that drives your tests with human-written commands, enhanced by the power of large language models (LLMs)
42 lines (41 loc) • 1.88 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.CodeEvaluator = void 0;
const CodeEvaluationError_1 = require("../errors/CodeEvaluationError");
const logger_1 = __importDefault(require("../common/logger"));
class CodeEvaluator {
async evaluate(code, context, sharedContext = {}) {
const asyncFunction = this.createAsyncFunction(code, context, sharedContext);
try {
const result = await asyncFunction();
logger_1.default.labeled("EVAL").info("Code executed successfully\n", {
message: `${code}`,
isBold: false,
color: "gray",
});
return { code, result, sharedContext };
}
catch (error) {
const errorMessage = error instanceof Error ? error.message : String(error);
logger_1.default.labeled("ERROR").error(`Execution failed: ${errorMessage}`);
throw error;
}
}
createAsyncFunction(code, context, sharedContext) {
try {
const contextValues = Object.values(context);
// Wrap the code in an immediately-invoked async function expression (IIFE), and inject context variables into the function
return new Function(...Object.keys(context), "sharedContext", `return (async () => {
${code}
})();`).bind(null, ...contextValues, sharedContext);
}
catch (error) {
const underlyingErrorMessage = error?.message;
throw new CodeEvaluationError_1.CodeEvaluationError(`Failed to execute test step code, error: ${underlyingErrorMessage}:\n\`\`\`\n${code}\n\`\`\``);
}
}
}
exports.CodeEvaluator = CodeEvaluator;