@grafema/rfdb-client 0.2.12-beta → 0.3.0-beta
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/base-client.d.ts +156 -0
- package/dist/base-client.d.ts.map +1 -0
- package/dist/base-client.js +591 -0
- package/dist/base-client.js.map +1 -0
- package/dist/client.d.ts +14 -319
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +20 -740
- package/dist/client.js.map +1 -1
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/websocket-client.d.ts +41 -0
- package/dist/websocket-client.d.ts.map +1 -0
- package/dist/websocket-client.js +144 -0
- package/dist/websocket-client.js.map +1 -0
- package/package.json +2 -2
- package/ts/base-client.ts +737 -0
- package/ts/client.ts +28 -863
- package/ts/index.ts +2 -0
- package/ts/rfdb-client-locking.test.ts +897 -0
- package/ts/rfdb-websocket-client.test.ts +572 -0
- package/ts/websocket-client.ts +174 -0
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* BaseRFDBClient - Abstract base class for RFDB transport clients
|
|
3
|
+
*
|
|
4
|
+
* Contains all graph operation methods that delegate to abstract _send().
|
|
5
|
+
* Subclasses provide the transport layer (Unix socket, WebSocket, etc.)
|
|
6
|
+
*/
|
|
7
|
+
import { EventEmitter } from 'events';
|
|
8
|
+
import type { RFDBCommand, WireNode, WireEdge, RFDBResponse, IRFDBClient, AttrQuery, FieldDeclaration, DatalogResult, DatalogExplainResult, CypherResult, NodeType, EdgeType, HelloResponse, CreateDatabaseResponse, OpenDatabaseResponse, ListDatabasesResponse, CurrentDatabaseResponse, ServerStats, SnapshotRef, SnapshotDiff, SnapshotInfo, CommitDelta } from '@grafema/types';
|
|
9
|
+
export declare abstract class BaseRFDBClient extends EventEmitter implements IRFDBClient {
|
|
10
|
+
abstract readonly socketPath: string;
|
|
11
|
+
abstract readonly clientName: string;
|
|
12
|
+
abstract connected: boolean;
|
|
13
|
+
/**
|
|
14
|
+
* Whether the connected server supports streaming responses.
|
|
15
|
+
* Defaults to false. Unix socket subclass may set this after hello().
|
|
16
|
+
*/
|
|
17
|
+
get supportsStreaming(): boolean;
|
|
18
|
+
protected _batching: boolean;
|
|
19
|
+
protected _batchNodes: WireNode[];
|
|
20
|
+
protected _batchEdges: WireEdge[];
|
|
21
|
+
protected _batchFiles: Set<string>;
|
|
22
|
+
abstract connect(): Promise<void>;
|
|
23
|
+
abstract close(): Promise<void>;
|
|
24
|
+
/**
|
|
25
|
+
* Send a request to RFDB server and wait for response.
|
|
26
|
+
* Subclasses implement transport-specific send logic.
|
|
27
|
+
*/
|
|
28
|
+
protected abstract _send(cmd: RFDBCommand, payload?: Record<string, unknown>, timeoutMs?: number): Promise<RFDBResponse>;
|
|
29
|
+
/**
|
|
30
|
+
* Add nodes to the graph.
|
|
31
|
+
* Extra properties beyond id/type/name/file/exported/metadata are merged into metadata.
|
|
32
|
+
*/
|
|
33
|
+
addNodes(nodes: Array<Partial<WireNode> & {
|
|
34
|
+
id: string;
|
|
35
|
+
type?: string;
|
|
36
|
+
node_type?: string;
|
|
37
|
+
nodeType?: string;
|
|
38
|
+
}>): Promise<RFDBResponse>;
|
|
39
|
+
/**
|
|
40
|
+
* Add edges to the graph.
|
|
41
|
+
* Extra properties beyond src/dst/type are merged into metadata.
|
|
42
|
+
*/
|
|
43
|
+
addEdges(edges: WireEdge[], skipValidation?: boolean): Promise<RFDBResponse>;
|
|
44
|
+
deleteNode(id: string): Promise<RFDBResponse>;
|
|
45
|
+
deleteEdge(src: string, dst: string, edgeType: EdgeType): Promise<RFDBResponse>;
|
|
46
|
+
getNode(id: string): Promise<WireNode | null>;
|
|
47
|
+
nodeExists(id: string): Promise<boolean>;
|
|
48
|
+
findByType(nodeType: NodeType): Promise<string[]>;
|
|
49
|
+
findByAttr(query: Record<string, unknown>): Promise<string[]>;
|
|
50
|
+
neighbors(id: string, edgeTypes?: EdgeType[]): Promise<string[]>;
|
|
51
|
+
bfs(startIds: string[], maxDepth: number, edgeTypes?: EdgeType[]): Promise<string[]>;
|
|
52
|
+
dfs(startIds: string[], maxDepth: number, edgeTypes?: EdgeType[]): Promise<string[]>;
|
|
53
|
+
reachability(startIds: string[], maxDepth: number, edgeTypes?: EdgeType[], backward?: boolean): Promise<string[]>;
|
|
54
|
+
/**
|
|
55
|
+
* Get outgoing edges from a node.
|
|
56
|
+
* Parses metadata JSON and spreads it onto the edge object for convenience.
|
|
57
|
+
*/
|
|
58
|
+
getOutgoingEdges(id: string, edgeTypes?: EdgeType[] | null): Promise<(WireEdge & Record<string, unknown>)[]>;
|
|
59
|
+
/**
|
|
60
|
+
* Get incoming edges to a node.
|
|
61
|
+
* Parses metadata JSON and spreads it onto the edge object for convenience.
|
|
62
|
+
*/
|
|
63
|
+
getIncomingEdges(id: string, edgeTypes?: EdgeType[] | null): Promise<(WireEdge & Record<string, unknown>)[]>;
|
|
64
|
+
nodeCount(): Promise<number>;
|
|
65
|
+
edgeCount(): Promise<number>;
|
|
66
|
+
countNodesByType(types?: NodeType[] | null): Promise<Record<string, number>>;
|
|
67
|
+
countEdgesByType(edgeTypes?: EdgeType[] | null): Promise<Record<string, number>>;
|
|
68
|
+
getStats(): Promise<ServerStats>;
|
|
69
|
+
flush(): Promise<RFDBResponse>;
|
|
70
|
+
compact(): Promise<RFDBResponse>;
|
|
71
|
+
clear(): Promise<RFDBResponse>;
|
|
72
|
+
/**
|
|
73
|
+
* Build a server query object from an AttrQuery.
|
|
74
|
+
*/
|
|
75
|
+
protected _buildServerQuery(query: AttrQuery): Record<string, unknown>;
|
|
76
|
+
/**
|
|
77
|
+
* Query nodes (async generator).
|
|
78
|
+
* Default implementation fetches all matching nodes in a single request.
|
|
79
|
+
* Subclasses with streaming support can override.
|
|
80
|
+
*/
|
|
81
|
+
queryNodes(query: AttrQuery): AsyncGenerator<WireNode, void, unknown>;
|
|
82
|
+
/**
|
|
83
|
+
* Stream nodes matching query.
|
|
84
|
+
* Default implementation delegates to queryNodes().
|
|
85
|
+
* Subclasses with streaming support can override.
|
|
86
|
+
*/
|
|
87
|
+
queryNodesStream(query: AttrQuery): AsyncGenerator<WireNode, void, unknown>;
|
|
88
|
+
/**
|
|
89
|
+
* Get all nodes matching query.
|
|
90
|
+
*/
|
|
91
|
+
getAllNodes(query?: AttrQuery): Promise<WireNode[]>;
|
|
92
|
+
/**
|
|
93
|
+
* Get all edges.
|
|
94
|
+
* Parses metadata JSON and spreads it onto the edge object for convenience.
|
|
95
|
+
*/
|
|
96
|
+
getAllEdges(): Promise<(WireEdge & Record<string, unknown>)[]>;
|
|
97
|
+
isEndpoint(id: string): Promise<boolean>;
|
|
98
|
+
getNodeIdentifier(id: string): Promise<string | null>;
|
|
99
|
+
updateNodeVersion(id: string, version: string): Promise<RFDBResponse>;
|
|
100
|
+
declareFields(fields: FieldDeclaration[]): Promise<number>;
|
|
101
|
+
datalogLoadRules(source: string): Promise<number>;
|
|
102
|
+
datalogClearRules(): Promise<RFDBResponse>;
|
|
103
|
+
protected _parseExplainResponse(response: RFDBResponse): DatalogExplainResult;
|
|
104
|
+
datalogQuery(query: string): Promise<DatalogResult[]>;
|
|
105
|
+
datalogQuery(query: string, explain: true): Promise<DatalogExplainResult>;
|
|
106
|
+
checkGuarantee(ruleSource: string): Promise<DatalogResult[]>;
|
|
107
|
+
checkGuarantee(ruleSource: string, explain: true): Promise<DatalogExplainResult>;
|
|
108
|
+
executeDatalog(source: string): Promise<DatalogResult[]>;
|
|
109
|
+
executeDatalog(source: string, explain: true): Promise<DatalogExplainResult>;
|
|
110
|
+
cypherQuery(query: string): Promise<CypherResult>;
|
|
111
|
+
ping(): Promise<string | false>;
|
|
112
|
+
hello(protocolVersion?: number): Promise<HelloResponse>;
|
|
113
|
+
createDatabase(name: string, ephemeral?: boolean): Promise<CreateDatabaseResponse>;
|
|
114
|
+
openDatabase(name: string, mode?: 'rw' | 'ro'): Promise<OpenDatabaseResponse>;
|
|
115
|
+
closeDatabase(): Promise<RFDBResponse>;
|
|
116
|
+
dropDatabase(name: string): Promise<RFDBResponse>;
|
|
117
|
+
listDatabases(): Promise<ListDatabasesResponse>;
|
|
118
|
+
currentDatabase(): Promise<CurrentDatabaseResponse>;
|
|
119
|
+
/**
|
|
120
|
+
* Convert a SnapshotRef to wire format payload fields.
|
|
121
|
+
*/
|
|
122
|
+
protected _resolveSnapshotRef(ref: SnapshotRef): Record<string, unknown>;
|
|
123
|
+
diffSnapshots(from: SnapshotRef, to: SnapshotRef): Promise<SnapshotDiff>;
|
|
124
|
+
tagSnapshot(version: number, tags: Record<string, string>): Promise<void>;
|
|
125
|
+
findSnapshot(tagKey: string, tagValue: string): Promise<number | null>;
|
|
126
|
+
listSnapshots(filterTag?: string): Promise<SnapshotInfo[]>;
|
|
127
|
+
beginBatch(): void;
|
|
128
|
+
/**
|
|
129
|
+
* Synchronously batch a single node.
|
|
130
|
+
*/
|
|
131
|
+
batchNode(node: Partial<WireNode> & {
|
|
132
|
+
id: string;
|
|
133
|
+
type?: string;
|
|
134
|
+
node_type?: string;
|
|
135
|
+
nodeType?: string;
|
|
136
|
+
}): void;
|
|
137
|
+
/**
|
|
138
|
+
* Synchronously batch a single edge.
|
|
139
|
+
*/
|
|
140
|
+
batchEdge(edge: WireEdge | Record<string, unknown>): void;
|
|
141
|
+
commitBatch(tags?: string[], deferIndex?: boolean, protectedTypes?: string[], overrideChangedFiles?: string[]): Promise<CommitDelta>;
|
|
142
|
+
/**
|
|
143
|
+
* Internal helper: send a commitBatch with chunking for large payloads.
|
|
144
|
+
* @internal
|
|
145
|
+
*/
|
|
146
|
+
_sendCommitBatch(changedFiles: string[], allNodes: WireNode[], allEdges: WireEdge[], tags?: string[], deferIndex?: boolean, protectedTypes?: string[]): Promise<CommitDelta>;
|
|
147
|
+
rebuildIndexes(): Promise<void>;
|
|
148
|
+
abortBatch(): void;
|
|
149
|
+
isBatching(): boolean;
|
|
150
|
+
/**
|
|
151
|
+
* Find files that depend on the given changed files.
|
|
152
|
+
*/
|
|
153
|
+
findDependentFiles(changedFiles: string[]): Promise<string[]>;
|
|
154
|
+
shutdown(): Promise<void>;
|
|
155
|
+
}
|
|
156
|
+
//# sourceMappingURL=base-client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"base-client.d.ts","sourceRoot":"","sources":["../ts/base-client.ts"],"names":[],"mappings":"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"}
|