UNPKG

@iyio/convo-lang

Version:

A conversational language.

124 lines 4.13 kB
import { wAryPush, wArySplice } from "@iyio/common"; import { Subject } from "rxjs"; export class ConvoMemoryGraphStore { get onDbChange() { return this._onDbChange; } constructor({ graphId, db = { nodes: [], edges: [], traversers: [], }, }) { this._onDbChange = new Subject(); 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(id) { return Promise.resolve(this.db.nodes.find(g => g.id === id)); } putNodeAsync(node) { const index = this.db.nodes.findIndex(g => g.id === node.id); if (index === -1) { wAryPush(this.db.nodes, node); } else { 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) { 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) { wAryPush(this.db.edges, edge); } else { 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) { wArySplice(this.db.edges, index, 1); } this._onDbChange.next({ edgeId: id }); return Promise.resolve(); } getTraverserAsync(id) { return Promise.resolve(this.db.traversers.find(g => g.id === id)); } putTraverserAsync(traverser) { const index = this.db.traversers.findIndex(g => g.id === traverser.id); if (index === -1) { wAryPush(this.db.traversers, traverser); } else { wArySplice(this.db.traversers, index, 1, traverser); } this._onDbChange.next({ traverser, traverserId: traverser.id }); return Promise.resolve(); } deleteTraverserAsync(id) { const index = this.db.traversers.findIndex(g => g.id === id); if (index !== -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) { wAryPush(this.db.sourceNodes, sourceNode); } else { 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) { wArySplice(this.db.sourceNodes, index, 1); } this._onDbChange.next({ traverserId: id }); return Promise.resolve(); } } //# sourceMappingURL=ConvoMemoryGraphStore.js.map