@convo-lang/convo-lang
Version:
The language of AI
164 lines • 5.68 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.ConvoMemoryGraphStore = void 0;
const common_1 = require("@iyio/common");
const rxjs_1 = require("rxjs");
const convo_graph_lib_1 = require("./convo-graph-lib");
class ConvoMemoryGraphStore {
graphId;
db;
_onDbChange = new rxjs_1.Subject();
get onDbChange() { return this._onDbChange; }
constructor({ graphId, db = {
nodes: [],
edges: [],
traversers: [],
}, }) {
this.graphId = graphId;
this.db = {
nodes: db.nodes ?? [],
edges: db.edges ?? [],
traversers: db.traversers ?? [],
inputs: db.inputs ?? [],
sourceNodes: db.sourceNodes ?? [],
};
if (!this.db.inputs) {
this.db.inputs = [];
}
}
saveChangesAsync() {
// do nothing
return Promise.resolve();
}
getNodeAsync(idOrKey) {
return Promise.resolve(this.db.nodes.find(g => g.id === idOrKey || g.key === idOrKey));
}
putNodeAsync(node) {
const index = this.db.nodes.findIndex(g => g.id === node.id);
if (index === -1) {
(0, common_1.wAryPush)(this.db.nodes, node);
}
else {
(0, common_1.wArySplice)(this.db.nodes, index, 1, node);
}
this._onDbChange.next({ node, nodeId: node.id });
return Promise.resolve();
}
deleteNodeAsync(id) {
const index = this.db.nodes.findIndex(g => g.id === id);
if (index !== -1) {
(0, common_1.wArySplice)(this.db.nodes, index, 1);
}
this._onDbChange.next({ nodeId: id });
return Promise.resolve();
}
getNodeEdgesAsync(nodeId, side) {
return Promise.resolve(this.db.edges.filter(e => side === 'to' ?
e.to === nodeId :
e.from === nodeId));
}
getEdgeAsync(id) {
return Promise.resolve(this.db.edges.find(g => g.id === id));
}
putEdgeAsync(edge) {
const index = this.db.edges.findIndex(g => g.id === edge.id);
if (index === -1) {
(0, common_1.wAryPush)(this.db.edges, edge);
}
else {
(0, common_1.wArySplice)(this.db.edges, index, 1, edge);
}
this._onDbChange.next({ edge, edgeId: edge.id });
return Promise.resolve();
}
deleteEdgeAsync(id) {
const index = this.db.edges.findIndex(g => g.id === id);
if (index !== -1) {
(0, common_1.wArySplice)(this.db.edges, index, 1);
}
this._onDbChange.next({ edgeId: id });
return Promise.resolve();
}
getTraverserAsync(id, storeSuffix) {
return Promise.resolve(this.db.traversers.find(g => g.id === id && g.state[convo_graph_lib_1.convoTraverserStateStoreSuffix] === storeSuffix));
}
putTraverserAsync(traverser) {
traverser = (0, convo_graph_lib_1.getConvoTraverserForSaving)(traverser);
const index = this.db.traversers.findIndex(g => g.id === traverser.id &&
g.state[convo_graph_lib_1.convoTraverserStateStoreSuffix] === traverser.state[convo_graph_lib_1.convoTraverserStateStoreSuffix]);
if (index === -1) {
(0, common_1.wAryPush)(this.db.traversers, traverser);
}
else {
(0, common_1.wArySplice)(this.db.traversers, index, 1, traverser);
}
this._onDbChange.next({ traverser, traverserId: traverser.id });
return Promise.resolve();
}
deleteTraverserAsync(id, storeSuffix) {
const index = this.db.traversers.findIndex(g => g.id === id && g.state[convo_graph_lib_1.convoTraverserStateStoreSuffix] === storeSuffix);
if (index !== -1) {
(0, common_1.wArySplice)(this.db.traversers, index, 1);
}
this._onDbChange.next({ traverserId: id });
return Promise.resolve();
}
getSourceNodesAsync() {
return Promise.resolve([...this.db.sourceNodes]);
}
getSourceNodeAsync(id) {
return Promise.resolve(this.db.sourceNodes.find(g => g.id === id));
}
putSourceNodeAsync(sourceNode) {
const index = this.db.sourceNodes.findIndex(g => g.id === sourceNode.id);
if (index === -1) {
(0, common_1.wAryPush)(this.db.sourceNodes, sourceNode);
}
else {
(0, common_1.wArySplice)(this.db.sourceNodes, index, 1, sourceNode);
}
this._onDbChange.next({ sourceNode, traverserId: sourceNode.id });
return Promise.resolve();
}
deleteSourceNodeAsync(id) {
const index = this.db.sourceNodes.findIndex(g => g.id === id);
if (index !== -1) {
(0, common_1.wArySplice)(this.db.sourceNodes, index, 1);
}
this._onDbChange.next({ traverserId: id });
return Promise.resolve();
}
getNextNodeId() {
let i = 0;
while (this.db.nodes.some(n => n.id === 'n' + i)) {
i++;
}
return 'n' + i;
}
getNextEdgeId() {
let i = 0;
while (this.db.edges.some(n => n.id === 'e' + i)) {
i++;
}
return 'e' + i;
}
getNextTraverserId() {
return (0, common_1.shortUuid)();
}
getNextSourceNodeId() {
let i = 0;
while (this.db.sourceNodes.some(n => n.id === 's' + i)) {
i++;
}
return 's' + i;
}
getNextInputId() {
let i = 0;
while (this.db.inputs.some(n => n.id === 'i' + i)) {
i++;
}
return 'i' + i;
}
}
exports.ConvoMemoryGraphStore = ConvoMemoryGraphStore;
//# sourceMappingURL=ConvoMemoryGraphStore.js.map