mongodb-rag-core
Version:
Common elements used by MongoDB Chatbot Framework components.
49 lines (47 loc) • 1.85 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.executeNodeJsDriverCode = void 0;
const vm_1 = __importDefault(require("vm"));
const extractCodeFromMarkdown_1 = require("./extractCodeFromMarkdown");
/**
Execute the Node.js driver code using the provided MongoDB client instance.
This function expects that the driver code
uses the `database` variable of type `Db` to access the MongoDB database.
If you do not provide a `database` variable in the driver code,
this function will not work as expected.
*/
async function executeNodeJsDriverCode(params) {
const { generatedDriverCode, mongoClient, databaseName } = params;
const database = mongoClient.db(databaseName);
// Wrap the generated code in an async IIFE to guarantee that it returns a Promise
const promiseCode = `(async () => (
${removeTrailingSemiColon((0, extractCodeFromMarkdown_1.extractCodeFromMarkdown)(generatedDriverCode))}
))()`;
const startTime = Date.now();
try {
const result = await vm_1.default.runInNewContext(promiseCode, { database });
const endTime = Date.now();
return {
result,
executionTimeMs: endTime - startTime,
};
}
catch (error) {
const errorMessage = error instanceof Error ? error.message : "An unknown error occurred";
return {
result: null,
error: {
message: errorMessage,
},
executionTimeMs: null,
};
}
}
exports.executeNodeJsDriverCode = executeNodeJsDriverCode;
function removeTrailingSemiColon(code) {
return code.replace(/;$/, "");
}
//# sourceMappingURL=executeNodeJsDriverCode.js.map