"use strict";
const {
simpleFun,
nodehandleRunWhen,
nodehandleQuery,
chidoriNew,
chidoriStartServer,
chidoriObjInterface,
chidoriPlay,
chidoriPause,
chidoriBranch,
chidoriQuery,
chidoriGraphStructure,
chidoriRegisterCustomNodeHandle,
chidoriRunCustomNodeLoop,
graphbuilderNew,
graphbuilderCustomNode,
graphbuilderPromptNode,
graphbuilderDenoCodeNode,
graphbuilderVectorMemoryNode,
graphbuilderCommit
} = require("./native/chidori.node");
const toSnakeCase = str => str.replace(/[A-Z]/g, letter => `_${letter.toLowerCase()}`);
const transformKeys = (obj) => {
if (Array.isArray(obj)) {
return obj.map(val => transformKeys(val));
} else if (obj !== null && obj.constructor === Object) {
return Object.keys(obj).reduce((accumulator, key) => {
accumulator[toSnakeCase(key)] = transformKeys(obj[key]);
return accumulator;
}, {});
}
return obj;
};
class NodeHandle {
constructor(nh) {
this.nh = nh;
}
runWhen(graphBuilder, otherNodeHandle) {
return nodehandleRunWhen.call(this.nh, graphBuilder.g, otherNodeHandle.nh);
}
query(branch, frame) {
return nodehandleQuery.call(this.nh, branch, frame);
}
}
class Chidori {
constructor(fileId, url) {
this.chi = chidoriNew(fileId, url);
}
startServer(filePath) {
return chidoriStartServer.call(this.chi, filePath);
}
objectInterface(executionStatus) {
return chidoriObjInterface.call(this.chi, executionStatus);
}
play(branch, frame) {
return chidoriPlay.call(this.chi, branch, frame);
}
pause(branch, frame) {
return chidoriPause.call(this.chi, branch, frame);
}
query(query, branch, frame) {
return chidoriQuery.call(this.chi, query, branch, frame)
}
branch(branch, frame) {
return chidoriBranch.call(this.chi, branch, frame);
}
graphStructure(branch) {
return chidoriGraphStructure.call(this.chi, branch);
}
registerCustomNodeHandle(nodeTypeName, handle) {
return chidoriRegisterCustomNodeHandle.call(this.chi, nodeTypeName, handle);
}
runCustomNodeLoop() {
return chidoriRunCustomNodeLoop.call(this.chi);
}
}
class GraphBuilder {
constructor() {
this.g = graphbuilderNew();
}
customNode(createCustomNodeOpts) {
return new NodeHandle(graphbuilderCustomNode.call(this.g, transformKeys(createCustomNodeOpts)));
}
promptNode(promptNodeCreateOpts) {
return new NodeHandle(graphbuilderPromptNode.call(this.g, transformKeys(promptNodeCreateOpts)));
}
denoCodeNode(denoCodeNodeCreateOpts) {
return new NodeHandle(graphbuilderDenoCodeNode.call(this.g, transformKeys(denoCodeNodeCreateOpts)));
}
vectorMemoryNode(vectorMemoryNodeCreateOpts) {
return new NodeHandle(graphbuilderVectorMemoryNode.call(this.g, transformKeys(vectorMemoryNodeCreateOpts)));
}
commit(chidori) {
return graphbuilderCommit.call(this.g, chidori.chi, 0);
}
}
module.exports = {
Chidori: Chidori,
GraphBuilder: GraphBuilder,
NodeHandle: NodeHandle,
simpleFun: simpleFun
};