UNPKG

@convo-lang/convo-lang

Version:
164 lines 5.68 kB
"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