grafio-mongo 1.0.0
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/.gitattributes +2 -0
- package/LICENSE +674 -0
- package/README.md +220 -0
- package/dist/MongoGraphFactory.d.ts +13 -0
- package/dist/MongoGraphFactory.d.ts.map +1 -0
- package/dist/MongoGraphFactory.js +33 -0
- package/dist/MongoGraphFactory.js.map +1 -0
- package/dist/MongoStorageProvider.d.ts +48 -0
- package/dist/MongoStorageProvider.d.ts.map +1 -0
- package/dist/MongoStorageProvider.js +417 -0
- package/dist/MongoStorageProvider.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +7 -0
- package/dist/index.js.map +1 -0
- package/jest.config.js +27 -0
- package/package.json +41 -0
- package/src/MongoGraphFactory.ts +93 -0
- package/src/MongoStorageProvider.ts +719 -0
- package/src/index.ts +4 -0
- package/tests/EducationGraph.mongo.test.ts +33 -0
- package/tests/SocialGraph.mongo.test.ts +30 -0
- package/tests/graph/Graph.clear.mongo.test.ts +24 -0
- package/tests/graph/Graph.edge.mongo.test.ts +24 -0
- package/tests/graph/Graph.fromJSON.mongo.test.ts +24 -0
- package/tests/graph/Graph.index.mongo.test.ts +24 -0
- package/tests/graph/Graph.isDAG.mongo.test.ts +24 -0
- package/tests/graph/Graph.node.mongo.test.ts +24 -0
- package/tests/graph/Graph.properties.mongo.test.ts +24 -0
- package/tests/graph/Graph.serialization.mongo.test.ts +24 -0
- package/tests/graph/Graph.topologicalSort.mongo.test.ts +24 -0
- package/tests/graph/Graph.transaction.mongo.test.ts +24 -0
- package/tests/graph/Graph.traverse.mongo.test.ts +24 -0
- package/tests/graph/GraphToMermaid.mongo.test.ts +24 -0
- package/tests/storage/MongoGraphFactory.test.ts +102 -0
- package/tsconfig.json +21 -0
- package/tsconfig.perf.json +18 -0
- package/tsconfig.prod.json +11 -0
|
@@ -0,0 +1,417 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.MongoStorageProvider = void 0;
|
|
4
|
+
const mongodb_1 = require("mongodb");
|
|
5
|
+
const grafio_1 = require("grafio");
|
|
6
|
+
const errors_1 = require("grafio/errors");
|
|
7
|
+
class MongoStorageProvider {
|
|
8
|
+
_nodes;
|
|
9
|
+
_edges;
|
|
10
|
+
_graphId;
|
|
11
|
+
_batchSize;
|
|
12
|
+
_client = null;
|
|
13
|
+
constructor(db, opts = {}) {
|
|
14
|
+
const nodesColl = opts.nodesCollection ?? 'sgdb_nodes';
|
|
15
|
+
const edgesColl = opts.edgesCollection ?? 'sgdb_edges';
|
|
16
|
+
this._nodes = db.collection(nodesColl);
|
|
17
|
+
this._edges = db.collection(edgesColl);
|
|
18
|
+
this._graphId = opts.graphId ?? 'default';
|
|
19
|
+
if (opts.batchSize !== undefined && opts.batchSize <= 0) {
|
|
20
|
+
throw new Error(`batchSize must be a positive integer, got: ${opts.batchSize}`);
|
|
21
|
+
}
|
|
22
|
+
this._batchSize = opts.batchSize ?? 1000;
|
|
23
|
+
if ('client' in db && db.client instanceof mongodb_1.MongoClient) {
|
|
24
|
+
this._client = db.client;
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
async ensureIndexes() {
|
|
28
|
+
await this._nodes.createIndex({ graphId: 1, id: 1 }, { unique: true, name: 'node_graph_id_unique' });
|
|
29
|
+
await this._nodes.createIndex({ graphId: 1, type: 1 }, { name: 'node_graph_type' });
|
|
30
|
+
await this._edges.createIndex({ graphId: 1, id: 1 }, { unique: true, name: 'edge_graph_id_unique' });
|
|
31
|
+
await this._edges.createIndex({ graphId: 1, type: 1 }, { name: 'edge_graph_type' });
|
|
32
|
+
await this._edges.createIndex({ graphId: 1, sourceId: 1, type: 1 }, { name: 'edge_graph_source_type' });
|
|
33
|
+
await this._edges.createIndex({ graphId: 1, targetId: 1, type: 1 }, { name: 'edge_graph_target_type' });
|
|
34
|
+
}
|
|
35
|
+
async clear() {
|
|
36
|
+
await Promise.all([
|
|
37
|
+
this._nodes.deleteMany({ graphId: this._graphId }),
|
|
38
|
+
this._edges.deleteMany({ graphId: this._graphId }),
|
|
39
|
+
]);
|
|
40
|
+
}
|
|
41
|
+
async insertNode(node, transaction) {
|
|
42
|
+
const session = transaction?.context;
|
|
43
|
+
try {
|
|
44
|
+
await this._nodes.insertOne({
|
|
45
|
+
id: node.id,
|
|
46
|
+
graphId: this._graphId,
|
|
47
|
+
type: node.type,
|
|
48
|
+
properties: node.properties,
|
|
49
|
+
}, { session });
|
|
50
|
+
}
|
|
51
|
+
catch (e) {
|
|
52
|
+
if (this._isDuplicateKeyError(e))
|
|
53
|
+
throw new errors_1.NodeAlreadyExistsError(node.id);
|
|
54
|
+
throw e;
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
async deleteNode(id, transaction) {
|
|
58
|
+
const session = transaction?.context;
|
|
59
|
+
await this._nodes.deleteOne({ graphId: this._graphId, id }, { session });
|
|
60
|
+
}
|
|
61
|
+
async hasNode(id, transaction) {
|
|
62
|
+
const session = transaction?.context;
|
|
63
|
+
const doc = await this._nodes.findOne({ graphId: this._graphId, id }, { projection: { _id: 1 }, session });
|
|
64
|
+
return doc !== null;
|
|
65
|
+
}
|
|
66
|
+
async getNode(id, transaction) {
|
|
67
|
+
const session = transaction?.context;
|
|
68
|
+
const doc = await this._nodes.findOne({ graphId: this._graphId, id }, { session });
|
|
69
|
+
return doc ? this._docToNode(doc) : undefined;
|
|
70
|
+
}
|
|
71
|
+
async getAllNodes(limit, transaction) {
|
|
72
|
+
const session = transaction?.context;
|
|
73
|
+
const nodes = [];
|
|
74
|
+
const cursor = this._nodes.find({ graphId: this._graphId }, { session }).batchSize(this._batchSize);
|
|
75
|
+
if (limit)
|
|
76
|
+
cursor.limit(limit);
|
|
77
|
+
for await (const doc of cursor) {
|
|
78
|
+
nodes.push(this._docToNode(doc));
|
|
79
|
+
}
|
|
80
|
+
return nodes;
|
|
81
|
+
}
|
|
82
|
+
async getNodesByType(type, transaction) {
|
|
83
|
+
const session = transaction?.context;
|
|
84
|
+
const docs = await this._nodes.find({ graphId: this._graphId, type }, { session }).toArray();
|
|
85
|
+
return docs.map(d => this._docToNode(d));
|
|
86
|
+
}
|
|
87
|
+
async getNodesByProperty(key, value, nodeType, transaction) {
|
|
88
|
+
const session = transaction?.context;
|
|
89
|
+
const filter = {
|
|
90
|
+
graphId: this._graphId,
|
|
91
|
+
[`properties.${key}`]: value,
|
|
92
|
+
};
|
|
93
|
+
if (nodeType !== undefined) {
|
|
94
|
+
filter.type = nodeType;
|
|
95
|
+
}
|
|
96
|
+
const docs = await this._nodes.find(filter, { session }).toArray();
|
|
97
|
+
return docs.map(d => this._docToNode(d));
|
|
98
|
+
}
|
|
99
|
+
async getEdgesByProperty(key, value, edgeType, transaction) {
|
|
100
|
+
const session = transaction?.context;
|
|
101
|
+
const filter = {
|
|
102
|
+
graphId: this._graphId,
|
|
103
|
+
[`properties.${key}`]: value,
|
|
104
|
+
};
|
|
105
|
+
if (edgeType !== undefined) {
|
|
106
|
+
filter.type = edgeType;
|
|
107
|
+
}
|
|
108
|
+
const docs = await this._edges.find(filter, { session }).toArray();
|
|
109
|
+
return docs.map(d => this._docToEdge(d));
|
|
110
|
+
}
|
|
111
|
+
async insertEdge(edge, transaction) {
|
|
112
|
+
const session = transaction?.context;
|
|
113
|
+
try {
|
|
114
|
+
await this._edges.insertOne({
|
|
115
|
+
id: edge.id,
|
|
116
|
+
graphId: this._graphId,
|
|
117
|
+
sourceId: edge.sourceId,
|
|
118
|
+
targetId: edge.targetId,
|
|
119
|
+
type: edge.type,
|
|
120
|
+
properties: edge.properties,
|
|
121
|
+
}, { session });
|
|
122
|
+
}
|
|
123
|
+
catch (e) {
|
|
124
|
+
if (this._isDuplicateKeyError(e))
|
|
125
|
+
throw new errors_1.EdgeAlreadyExistsError(edge.id);
|
|
126
|
+
throw e;
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
async deleteEdge(id, transaction) {
|
|
130
|
+
const session = transaction?.context;
|
|
131
|
+
await this._edges.deleteOne({ graphId: this._graphId, id }, { session });
|
|
132
|
+
}
|
|
133
|
+
async hasEdge(id, transaction) {
|
|
134
|
+
const session = transaction?.context;
|
|
135
|
+
const doc = await this._edges.findOne({ graphId: this._graphId, id }, { projection: { _id: 1 }, session });
|
|
136
|
+
return doc !== null;
|
|
137
|
+
}
|
|
138
|
+
async getEdge(id, transaction) {
|
|
139
|
+
const session = transaction?.context;
|
|
140
|
+
const doc = await this._edges.findOne({ graphId: this._graphId, id }, { session });
|
|
141
|
+
return doc ? this._docToEdge(doc) : undefined;
|
|
142
|
+
}
|
|
143
|
+
async getAllEdges(transaction) {
|
|
144
|
+
const session = transaction?.context;
|
|
145
|
+
const edges = [];
|
|
146
|
+
const cursor = this._edges.find({ graphId: this._graphId }, { session }).batchSize(this._batchSize);
|
|
147
|
+
for await (const doc of cursor) {
|
|
148
|
+
edges.push(this._docToEdge(doc));
|
|
149
|
+
}
|
|
150
|
+
return edges;
|
|
151
|
+
}
|
|
152
|
+
async getEdgesByType(type, transaction) {
|
|
153
|
+
const session = transaction?.context;
|
|
154
|
+
const docs = await this._edges.find({ graphId: this._graphId, type }, { session }).toArray();
|
|
155
|
+
return docs.map(d => this._docToEdge(d));
|
|
156
|
+
}
|
|
157
|
+
async getEdgesBySource(nodeId, type, transaction) {
|
|
158
|
+
const session = transaction?.context;
|
|
159
|
+
const filter = { graphId: this._graphId, sourceId: nodeId };
|
|
160
|
+
if (type)
|
|
161
|
+
filter.type = type;
|
|
162
|
+
const docs = await this._edges.find(filter, { session }).toArray();
|
|
163
|
+
return docs.map(d => this._docToEdge(d));
|
|
164
|
+
}
|
|
165
|
+
async getEdgesByTarget(nodeId, type, transaction) {
|
|
166
|
+
const session = transaction?.context;
|
|
167
|
+
const filter = { graphId: this._graphId, targetId: nodeId };
|
|
168
|
+
if (type)
|
|
169
|
+
filter.type = type;
|
|
170
|
+
const docs = await this._edges.find(filter, { session }).toArray();
|
|
171
|
+
return docs.map(d => this._docToEdge(d));
|
|
172
|
+
}
|
|
173
|
+
async exportJSON() {
|
|
174
|
+
const nodes = [];
|
|
175
|
+
const edges = [];
|
|
176
|
+
const nodesCursor = this._nodes.find({ graphId: this._graphId }).batchSize(this._batchSize);
|
|
177
|
+
for await (const doc of nodesCursor) {
|
|
178
|
+
nodes.push(this._docToNode(doc));
|
|
179
|
+
}
|
|
180
|
+
const edgesCursor = this._edges.find({ graphId: this._graphId }).batchSize(this._batchSize);
|
|
181
|
+
for await (const doc of edgesCursor) {
|
|
182
|
+
edges.push(this._docToEdge(doc));
|
|
183
|
+
}
|
|
184
|
+
return {
|
|
185
|
+
graphId: this._graphId,
|
|
186
|
+
nodes,
|
|
187
|
+
edges,
|
|
188
|
+
};
|
|
189
|
+
}
|
|
190
|
+
async importJSON(data) {
|
|
191
|
+
const nodeIdSet = new Set();
|
|
192
|
+
for (const n of data.nodes) {
|
|
193
|
+
if (nodeIdSet.has(n.id))
|
|
194
|
+
throw new errors_1.NodeAlreadyExistsError(n.id);
|
|
195
|
+
nodeIdSet.add(n.id);
|
|
196
|
+
}
|
|
197
|
+
const edgeIdSet = new Set();
|
|
198
|
+
for (const e of data.edges) {
|
|
199
|
+
if (edgeIdSet.has(e.id))
|
|
200
|
+
throw new errors_1.EdgeAlreadyExistsError(e.id);
|
|
201
|
+
edgeIdSet.add(e.id);
|
|
202
|
+
}
|
|
203
|
+
const nodeIds = data.nodes.map(n => n.id);
|
|
204
|
+
const edgeIds = data.edges.map(e => e.id);
|
|
205
|
+
const [conflictNode, conflictEdge] = await Promise.all([
|
|
206
|
+
data.nodes.length > 0
|
|
207
|
+
? this._nodes.findOne({ graphId: this._graphId, id: { $in: nodeIds } })
|
|
208
|
+
: Promise.resolve(null),
|
|
209
|
+
data.edges.length > 0
|
|
210
|
+
? this._edges.findOne({ graphId: this._graphId, id: { $in: edgeIds } })
|
|
211
|
+
: Promise.resolve(null),
|
|
212
|
+
]);
|
|
213
|
+
if (conflictNode)
|
|
214
|
+
throw new errors_1.NodeAlreadyExistsError(conflictNode.id);
|
|
215
|
+
if (conflictEdge)
|
|
216
|
+
throw new errors_1.EdgeAlreadyExistsError(conflictEdge.id);
|
|
217
|
+
const referencedIds = [...nodeIdSet];
|
|
218
|
+
for (const e of data.edges) {
|
|
219
|
+
referencedIds.push(e.sourceId, e.targetId);
|
|
220
|
+
}
|
|
221
|
+
const uniqueReferencedIds = [...new Set(referencedIds)];
|
|
222
|
+
const existingIdSet = new Set(await this._nodes
|
|
223
|
+
.find({ graphId: this._graphId, id: { $in: uniqueReferencedIds } }, { projection: { id: 1 } })
|
|
224
|
+
.toArray()
|
|
225
|
+
.then(docs => docs.map(d => d.id)));
|
|
226
|
+
for (const id of nodeIdSet)
|
|
227
|
+
existingIdSet.add(id);
|
|
228
|
+
for (const e of data.edges) {
|
|
229
|
+
if (!existingIdSet.has(e.sourceId))
|
|
230
|
+
throw new errors_1.NodeNotFoundError(e.sourceId);
|
|
231
|
+
if (!existingIdSet.has(e.targetId))
|
|
232
|
+
throw new errors_1.NodeNotFoundError(e.targetId);
|
|
233
|
+
}
|
|
234
|
+
if (data.nodes.length > 0) {
|
|
235
|
+
const nodeDocs = data.nodes.map(n => ({
|
|
236
|
+
id: n.id,
|
|
237
|
+
graphId: this._graphId,
|
|
238
|
+
type: n.type,
|
|
239
|
+
properties: n.properties,
|
|
240
|
+
}));
|
|
241
|
+
for (let i = 0; i < nodeDocs.length; i += this._batchSize) {
|
|
242
|
+
await this._nodes.insertMany(nodeDocs.slice(i, i + this._batchSize));
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
if (data.edges.length > 0) {
|
|
246
|
+
const edgeDocs = data.edges.map(e => ({
|
|
247
|
+
id: e.id,
|
|
248
|
+
graphId: this._graphId,
|
|
249
|
+
sourceId: e.sourceId,
|
|
250
|
+
targetId: e.targetId,
|
|
251
|
+
type: e.type,
|
|
252
|
+
properties: e.properties,
|
|
253
|
+
}));
|
|
254
|
+
for (let i = 0; i < edgeDocs.length; i += this._batchSize) {
|
|
255
|
+
await this._edges.insertMany(edgeDocs.slice(i, i + this._batchSize));
|
|
256
|
+
}
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
async createIndex(target, propertyKey, type) {
|
|
260
|
+
if (target === 'node') {
|
|
261
|
+
const indexFields = { graphId: 1, [`properties.${propertyKey}`]: 1 };
|
|
262
|
+
if (type && type !== '*') {
|
|
263
|
+
indexFields['type'] = 1;
|
|
264
|
+
await this._nodes.createIndex(indexFields, {
|
|
265
|
+
name: `node_graphId_type_${propertyKey}`,
|
|
266
|
+
background: true
|
|
267
|
+
});
|
|
268
|
+
}
|
|
269
|
+
else {
|
|
270
|
+
await this._nodes.createIndex(indexFields, {
|
|
271
|
+
name: `node_graphId_${propertyKey}`,
|
|
272
|
+
background: true
|
|
273
|
+
});
|
|
274
|
+
}
|
|
275
|
+
}
|
|
276
|
+
else {
|
|
277
|
+
const indexFields = { graphId: 1, [`properties.${propertyKey}`]: 1 };
|
|
278
|
+
if (type && type !== '*') {
|
|
279
|
+
indexFields['type'] = 1;
|
|
280
|
+
await this._edges.createIndex(indexFields, {
|
|
281
|
+
name: `edge_graphId_type_${propertyKey}`,
|
|
282
|
+
background: true
|
|
283
|
+
});
|
|
284
|
+
}
|
|
285
|
+
else {
|
|
286
|
+
await this._edges.createIndex(indexFields, {
|
|
287
|
+
name: `edge_graphId_${propertyKey}`,
|
|
288
|
+
background: true
|
|
289
|
+
});
|
|
290
|
+
}
|
|
291
|
+
}
|
|
292
|
+
}
|
|
293
|
+
async addProperty(target, id, key, value, transaction) {
|
|
294
|
+
if (!(0, grafio_1.isPrimitive)(value)) {
|
|
295
|
+
throw new errors_1.InvalidPropertyError(key, value);
|
|
296
|
+
}
|
|
297
|
+
const session = transaction?.context;
|
|
298
|
+
const collection = target === 'node' ? this._nodes : this._edges;
|
|
299
|
+
const result = await collection.updateOne({ graphId: this._graphId, id, [`properties.${key}`]: { $exists: false } }, { $set: { [`properties.${key}`]: value } }, { session });
|
|
300
|
+
if (result.matchedCount === 0) {
|
|
301
|
+
const record = target === 'node' ? await this.getNode(id, transaction) : await this.getEdge(id, transaction);
|
|
302
|
+
if (!record) {
|
|
303
|
+
throw target === 'node' ? new errors_1.NodeNotFoundError(id) : new errors_1.EdgeNotFoundError(id);
|
|
304
|
+
}
|
|
305
|
+
throw new errors_1.PropertyAlreadyExistsError(target, id, key);
|
|
306
|
+
}
|
|
307
|
+
}
|
|
308
|
+
async updateProperty(target, id, key, value, transaction) {
|
|
309
|
+
if (!(0, grafio_1.isPrimitive)(value)) {
|
|
310
|
+
throw new errors_1.InvalidPropertyError(key, value);
|
|
311
|
+
}
|
|
312
|
+
const session = transaction?.context;
|
|
313
|
+
const collection = target === 'node' ? this._nodes : this._edges;
|
|
314
|
+
const result = await collection.updateOne({ graphId: this._graphId, id, [`properties.${key}`]: { $exists: true } }, { $set: { [`properties.${key}`]: value } }, { session });
|
|
315
|
+
if (result.matchedCount === 0) {
|
|
316
|
+
const record = target === 'node' ? await this.getNode(id, transaction) : await this.getEdge(id, transaction);
|
|
317
|
+
if (!record) {
|
|
318
|
+
throw target === 'node' ? new errors_1.NodeNotFoundError(id) : new errors_1.EdgeNotFoundError(id);
|
|
319
|
+
}
|
|
320
|
+
throw new errors_1.PropertyNotFoundError(target, id, key);
|
|
321
|
+
}
|
|
322
|
+
}
|
|
323
|
+
async deleteProperty(target, id, key, transaction) {
|
|
324
|
+
const session = transaction?.context;
|
|
325
|
+
const collection = target === 'node' ? this._nodes : this._edges;
|
|
326
|
+
const record = target === 'node' ? await this.getNode(id, transaction) : await this.getEdge(id, transaction);
|
|
327
|
+
if (!record) {
|
|
328
|
+
if (target === 'node') {
|
|
329
|
+
throw new errors_1.NodeNotFoundError(id);
|
|
330
|
+
}
|
|
331
|
+
else {
|
|
332
|
+
throw new errors_1.EdgeNotFoundError(id);
|
|
333
|
+
}
|
|
334
|
+
}
|
|
335
|
+
await collection.updateOne({ graphId: this._graphId, id }, { $unset: { [`properties.${key}`]: '' } }, { session });
|
|
336
|
+
}
|
|
337
|
+
async clearProperties(target, id, transaction) {
|
|
338
|
+
const session = transaction?.context;
|
|
339
|
+
const collection = target === 'node' ? this._nodes : this._edges;
|
|
340
|
+
const record = target === 'node' ? await this.getNode(id, transaction) : await this.getEdge(id, transaction);
|
|
341
|
+
if (!record) {
|
|
342
|
+
if (target === 'node') {
|
|
343
|
+
throw new errors_1.NodeNotFoundError(id);
|
|
344
|
+
}
|
|
345
|
+
else {
|
|
346
|
+
throw new errors_1.EdgeNotFoundError(id);
|
|
347
|
+
}
|
|
348
|
+
}
|
|
349
|
+
const updateObj = {};
|
|
350
|
+
for (const key of Object.keys(record.properties)) {
|
|
351
|
+
updateObj[`properties.${key}`] = '';
|
|
352
|
+
}
|
|
353
|
+
if (Object.keys(updateObj).length > 0) {
|
|
354
|
+
await collection.updateOne({ graphId: this._graphId, id }, { $unset: updateObj }, { session });
|
|
355
|
+
}
|
|
356
|
+
}
|
|
357
|
+
supportsTransactions() {
|
|
358
|
+
return this._client !== null;
|
|
359
|
+
}
|
|
360
|
+
async beginTransaction() {
|
|
361
|
+
if (!this._client) {
|
|
362
|
+
throw new Error('MongoDB client not available for transactions. Ensure the Db instance has access to a MongoClient.');
|
|
363
|
+
}
|
|
364
|
+
const session = this._client.startSession();
|
|
365
|
+
session.startTransaction();
|
|
366
|
+
return {
|
|
367
|
+
id: `txn-${Date.now()}-${Math.random().toString(36).slice(2, 9)}`,
|
|
368
|
+
context: session,
|
|
369
|
+
};
|
|
370
|
+
}
|
|
371
|
+
async commitTransaction(handle) {
|
|
372
|
+
const session = handle.context;
|
|
373
|
+
if (!session.inTransaction()) {
|
|
374
|
+
throw new Error('No active transaction to commit');
|
|
375
|
+
}
|
|
376
|
+
try {
|
|
377
|
+
await session.commitTransaction();
|
|
378
|
+
}
|
|
379
|
+
finally {
|
|
380
|
+
session.endSession();
|
|
381
|
+
}
|
|
382
|
+
}
|
|
383
|
+
async rollbackTransaction(handle) {
|
|
384
|
+
const session = handle.context;
|
|
385
|
+
if (session.inTransaction()) {
|
|
386
|
+
try {
|
|
387
|
+
await session.abortTransaction();
|
|
388
|
+
}
|
|
389
|
+
finally {
|
|
390
|
+
session.endSession();
|
|
391
|
+
}
|
|
392
|
+
}
|
|
393
|
+
else {
|
|
394
|
+
session.endSession();
|
|
395
|
+
}
|
|
396
|
+
}
|
|
397
|
+
_docToNode(doc) {
|
|
398
|
+
return {
|
|
399
|
+
id: doc.id,
|
|
400
|
+
type: doc.type,
|
|
401
|
+
properties: doc.properties,
|
|
402
|
+
};
|
|
403
|
+
}
|
|
404
|
+
_docToEdge(doc) {
|
|
405
|
+
return {
|
|
406
|
+
id: doc.id,
|
|
407
|
+
sourceId: doc.sourceId,
|
|
408
|
+
targetId: doc.targetId,
|
|
409
|
+
type: doc.type,
|
|
410
|
+
properties: doc.properties,
|
|
411
|
+
};
|
|
412
|
+
}
|
|
413
|
+
_isDuplicateKeyError(e) {
|
|
414
|
+
return e instanceof Error && 'code' in e && e.code === 11000;
|
|
415
|
+
}
|
|
416
|
+
}
|
|
417
|
+
exports.MongoStorageProvider = MongoStorageProvider;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MongoStorageProvider.js","sourceRoot":"","sources":["../src/MongoStorageProvider.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAC9D,YAAY,EAAE,2BAA2B,EAAE,MAAM,wBAAwB,CAAC;AAC1E,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.MongoGraphFactory = exports.MongoStorageProvider = void 0;
|
|
4
|
+
var MongoStorageProvider_1 = require("./MongoStorageProvider");
|
|
5
|
+
Object.defineProperty(exports, "MongoStorageProvider", { enumerable: true, get: function () { return MongoStorageProvider_1.MongoStorageProvider; } });
|
|
6
|
+
var MongoGraphFactory_1 = require("./MongoGraphFactory");
|
|
7
|
+
Object.defineProperty(exports, "MongoGraphFactory", { enumerable: true, get: function () { return MongoGraphFactory_1.MongoGraphFactory; } });
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA,sDAAsD;AACtD,+DAA8D;AAArD,4HAAA,oBAAoB,OAAA;AAE7B,yDAAwD;AAA/C,sHAAA,iBAAiB,OAAA"}
|
package/jest.config.js
ADDED
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/** @type {import('ts-jest').JestConfigWithTsJest} */
|
|
2
|
+
module.exports = {
|
|
3
|
+
preset: 'ts-jest',
|
|
4
|
+
testEnvironment: 'node',
|
|
5
|
+
roots: ['<rootDir>/tests'],
|
|
6
|
+
testMatch: ['**/*.test.ts'],
|
|
7
|
+
moduleFileExtensions: ['ts', 'js', 'json'],
|
|
8
|
+
collectCoverageFrom: ['src/**/*.ts'],
|
|
9
|
+
coveragePathIgnorePatterns: ['/node_modules/', '/dist/'],
|
|
10
|
+
coverageThreshold: {
|
|
11
|
+
global: {
|
|
12
|
+
branches: 80,
|
|
13
|
+
functions: 80,
|
|
14
|
+
lines: 80,
|
|
15
|
+
statements: 80
|
|
16
|
+
}
|
|
17
|
+
},
|
|
18
|
+
testTimeout: 60000,
|
|
19
|
+
maxWorkers: 1,
|
|
20
|
+
coverageReporters: [
|
|
21
|
+
"lcov",
|
|
22
|
+
"json-summary"
|
|
23
|
+
],
|
|
24
|
+
transform: {
|
|
25
|
+
'^.+\\.tsx?$': ['ts-jest', { tsconfig: { resolveJsonModule: true } }],
|
|
26
|
+
},
|
|
27
|
+
};
|
package/package.json
ADDED
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "grafio-mongo",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "MongoDB storage backend for grafio",
|
|
5
|
+
"main": "dist/index.js",
|
|
6
|
+
"types": "dist/index.d.ts",
|
|
7
|
+
"scripts": {
|
|
8
|
+
"build": "tsc",
|
|
9
|
+
"build:prod": "tsc -p tsconfig.prod.json",
|
|
10
|
+
"test": "jest",
|
|
11
|
+
"test:coverage": "jest --coverage --coverageReporters=text-summary --coverageReporters=html"
|
|
12
|
+
},
|
|
13
|
+
"peerDependencies": {
|
|
14
|
+
"grafio": ">=5.0.0",
|
|
15
|
+
"mongodb": ">=5.0.0"
|
|
16
|
+
},
|
|
17
|
+
"devDependencies": {
|
|
18
|
+
"@types/jest": "^29.5.0",
|
|
19
|
+
"@types/node": "^25.6.0",
|
|
20
|
+
"grafio": "^5.4.2",
|
|
21
|
+
"jest": "^29.5.0",
|
|
22
|
+
"mongodb": "^7.2.0",
|
|
23
|
+
"mongodb-memory-server": "^11.1.0",
|
|
24
|
+
"ts-jest": "^29.1.0",
|
|
25
|
+
"ts-node": "^10.9.0",
|
|
26
|
+
"typescript": "^5.0.0"
|
|
27
|
+
},
|
|
28
|
+
"exports": {
|
|
29
|
+
".": {
|
|
30
|
+
"import": "./dist/index.js",
|
|
31
|
+
"require": "./dist/index.js",
|
|
32
|
+
"types": "./dist/index.d.ts"
|
|
33
|
+
}
|
|
34
|
+
},
|
|
35
|
+
"author": "Satya Jugran",
|
|
36
|
+
"license": "MIT",
|
|
37
|
+
"repository": {
|
|
38
|
+
"type": "git",
|
|
39
|
+
"url": "https://github.com/satya-jugran/grafio-mongo"
|
|
40
|
+
}
|
|
41
|
+
}
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
import type { Db } from 'mongodb';
|
|
2
|
+
import {
|
|
3
|
+
MongoStorageProvider,
|
|
4
|
+
type MongoStorageProviderOptions,
|
|
5
|
+
} from './MongoStorageProvider';
|
|
6
|
+
import { Graph, GraphData, IGraphFactory } from 'grafio';
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Factory options for MongoGraphFactory — omits graphId since that is set per-call.
|
|
10
|
+
*/
|
|
11
|
+
type MongoGraphFactoryOptions = Omit<MongoStorageProviderOptions, 'graphId'>;
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* MongoDB-backed factory for `Graph` instances.
|
|
15
|
+
*
|
|
16
|
+
* Holds the long-lived `Db` connection reference. `forGraph(graphId)` returns a
|
|
17
|
+
* lightweight `Graph` scoped to the given partition — no new I/O resources are
|
|
18
|
+
* created on each call (Collection handles are stateless).
|
|
19
|
+
*
|
|
20
|
+
* Call `ensureIndexes()` once at application startup before any graph operations.
|
|
21
|
+
*
|
|
22
|
+
* @example
|
|
23
|
+
* const factory = new MongoGraphFactory(db);
|
|
24
|
+
* await factory.ensureIndexes();
|
|
25
|
+
*
|
|
26
|
+
* const graph = factory.forGraph('user-123');
|
|
27
|
+
* await graph.addNode('Person', { name: 'Alice' });
|
|
28
|
+
*/
|
|
29
|
+
export class MongoGraphFactory implements IGraphFactory {
|
|
30
|
+
private readonly _db: Db;
|
|
31
|
+
private readonly _opts: MongoGraphFactoryOptions;
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
* @param db - An already-connected Mongo `Db` instance. The factory does not
|
|
35
|
+
* manage the connection lifecycle — that is the consumer's responsibility.
|
|
36
|
+
* @param opts - Optional collection name overrides (no graphId here — that is
|
|
37
|
+
* set per-call in `forGraph`).
|
|
38
|
+
*/
|
|
39
|
+
constructor(db: Db, opts: MongoGraphFactoryOptions = {}) {
|
|
40
|
+
this._db = db;
|
|
41
|
+
this._opts = opts;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
/**
|
|
45
|
+
* Creates all required MongoDB indexes.
|
|
46
|
+
*
|
|
47
|
+
* Call ONCE at application startup before any graph operations.
|
|
48
|
+
* Safe to call multiple times (MongoDB's `createIndex` is idempotent).
|
|
49
|
+
*/
|
|
50
|
+
async ensureIndexes(): Promise<void> {
|
|
51
|
+
const probe = new MongoStorageProvider(this._db, { ...this._opts, graphId: 'default' });
|
|
52
|
+
await probe.ensureIndexes();
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
/**
|
|
56
|
+
* Returns a `Graph` instance scoped to the given `graphId`.
|
|
57
|
+
*
|
|
58
|
+
* Cheap to call — creates only stateless `Collection` references, no I/O.
|
|
59
|
+
* Each returned `Graph` operates on its own isolated partition of the same
|
|
60
|
+
* MongoDB collections.
|
|
61
|
+
*
|
|
62
|
+
* @param graphId - Defaults to `"default"` when omitted.
|
|
63
|
+
*/
|
|
64
|
+
forGraph(graphId: string = 'default'): Graph {
|
|
65
|
+
const provider = new MongoStorageProvider(this._db, { ...this._opts, graphId });
|
|
66
|
+
return new Graph(provider);
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
/**
|
|
70
|
+
* Creates a Graph instance and imports the given graph data into it.
|
|
71
|
+
* Convenience method that combines forGraph() + importJSON().
|
|
72
|
+
*
|
|
73
|
+
* @param data - The GraphData to import
|
|
74
|
+
* @param graphId - Graph partition ID (defaults to 'default')
|
|
75
|
+
* @returns A Graph instance with the imported data
|
|
76
|
+
*/
|
|
77
|
+
async fromGraphData(data: GraphData, graphId: string = 'default'): Promise<Graph> {
|
|
78
|
+
const provider = new MongoStorageProvider(this._db, { ...this._opts, graphId });
|
|
79
|
+
const graph = new Graph(provider);
|
|
80
|
+
|
|
81
|
+
// Filter data to only import nodes/edges that belong to this graphId
|
|
82
|
+
// If data.graphId is set and doesn't match, skip (data is from different partition)
|
|
83
|
+
// If data.graphId is not set, import all (backward compatible for legacy data)
|
|
84
|
+
const filteredData: GraphData = {
|
|
85
|
+
graphId,
|
|
86
|
+
nodes: data.graphId === undefined || data.graphId === graphId ? data.nodes : [],
|
|
87
|
+
edges: data.graphId === undefined || data.graphId === graphId ? data.edges : [],
|
|
88
|
+
};
|
|
89
|
+
|
|
90
|
+
await Graph.importJSON(filteredData, provider);
|
|
91
|
+
return graph;
|
|
92
|
+
}
|
|
93
|
+
}
|