@anvailabs/proximadb-client 0.3.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.
Files changed (65) hide show
  1. package/README.md +160 -0
  2. package/dist/client.d.ts +319 -0
  3. package/dist/client.d.ts.map +1 -0
  4. package/dist/client.js +681 -0
  5. package/dist/client.js.map +1 -0
  6. package/dist/collection.d.ts +227 -0
  7. package/dist/collection.d.ts.map +1 -0
  8. package/dist/collection.js +436 -0
  9. package/dist/collection.js.map +1 -0
  10. package/dist/esm/client.js +674 -0
  11. package/dist/esm/client.js.map +1 -0
  12. package/dist/esm/collection.js +428 -0
  13. package/dist/esm/collection.js.map +1 -0
  14. package/dist/esm/filter.js +228 -0
  15. package/dist/esm/filter.js.map +1 -0
  16. package/dist/esm/generated/schema.js +6 -0
  17. package/dist/esm/generated/schema.js.map +1 -0
  18. package/dist/esm/graph.js +678 -0
  19. package/dist/esm/graph.js.map +1 -0
  20. package/dist/esm/index.js +86 -0
  21. package/dist/esm/index.js.map +1 -0
  22. package/dist/esm/search.js +317 -0
  23. package/dist/esm/search.js.map +1 -0
  24. package/dist/esm/transport.js +33 -0
  25. package/dist/esm/transport.js.map +1 -0
  26. package/dist/esm/types.js +181 -0
  27. package/dist/esm/types.js.map +1 -0
  28. package/dist/filter.d.ts +51 -0
  29. package/dist/filter.d.ts.map +1 -0
  30. package/dist/filter.js +241 -0
  31. package/dist/filter.js.map +1 -0
  32. package/dist/generated/schema.d.ts +4271 -0
  33. package/dist/generated/schema.d.ts.map +1 -0
  34. package/dist/generated/schema.js +7 -0
  35. package/dist/generated/schema.js.map +1 -0
  36. package/dist/graph.d.ts +350 -0
  37. package/dist/graph.d.ts.map +1 -0
  38. package/dist/graph.js +690 -0
  39. package/dist/graph.js.map +1 -0
  40. package/dist/index.d.ts +58 -0
  41. package/dist/index.d.ts.map +1 -0
  42. package/dist/index.js +126 -0
  43. package/dist/index.js.map +1 -0
  44. package/dist/search.d.ts +160 -0
  45. package/dist/search.d.ts.map +1 -0
  46. package/dist/search.js +322 -0
  47. package/dist/search.js.map +1 -0
  48. package/dist/transport.d.ts +40 -0
  49. package/dist/transport.d.ts.map +1 -0
  50. package/dist/transport.js +39 -0
  51. package/dist/transport.js.map +1 -0
  52. package/dist/types.d.ts +632 -0
  53. package/dist/types.d.ts.map +1 -0
  54. package/dist/types.js +185 -0
  55. package/dist/types.js.map +1 -0
  56. package/package.json +72 -0
  57. package/src/client.ts +856 -0
  58. package/src/collection.ts +578 -0
  59. package/src/filter.ts +280 -0
  60. package/src/generated/schema.ts +4271 -0
  61. package/src/graph.ts +811 -0
  62. package/src/index.ts +184 -0
  63. package/src/search.ts +401 -0
  64. package/src/transport.ts +52 -0
  65. package/src/types.ts +726 -0
@@ -0,0 +1,678 @@
1
+ /**
2
+ * ProximaDB TypeScript SDK - Graph Operations
3
+ *
4
+ * Provides a fluent API for graph database operations including
5
+ * node and edge management, traversal queries, and graph analytics.
6
+ *
7
+ * Copyright 2025 ProximaDB Contributors
8
+ * Licensed under the Apache License, Version 2.0
9
+ */
10
+ import { TraversalDirection, } from "./types";
11
+ // ============================================================================
12
+ // NODE BUILDER
13
+ // ============================================================================
14
+ /**
15
+ * Builder for creating graph nodes
16
+ */
17
+ export class NodeBuilder {
18
+ handle;
19
+ nodeId = null;
20
+ nodeLabel = null;
21
+ nodeProperties = {};
22
+ nodeVector = null;
23
+ constructor(handle) {
24
+ this.handle = handle;
25
+ }
26
+ /**
27
+ * Set the node ID
28
+ */
29
+ id(nodeId) {
30
+ this.nodeId = nodeId;
31
+ return this;
32
+ }
33
+ /**
34
+ * Set the node label (type)
35
+ */
36
+ label(nodeLabel) {
37
+ this.nodeLabel = nodeLabel;
38
+ return this;
39
+ }
40
+ /**
41
+ * Add a property to the node
42
+ */
43
+ property(key, value) {
44
+ this.nodeProperties[key] = value;
45
+ return this;
46
+ }
47
+ /**
48
+ * Add multiple properties at once
49
+ */
50
+ properties(props) {
51
+ Object.assign(this.nodeProperties, props);
52
+ return this;
53
+ }
54
+ /**
55
+ * Set the embedding vector for semantic operations
56
+ */
57
+ vector(vec) {
58
+ this.nodeVector = vec;
59
+ return this;
60
+ }
61
+ /**
62
+ * Execute the node addition.
63
+ *
64
+ * Wire endpoint: POST /api/v2/graphs/{graph_id}/nodes
65
+ * OpenAPI operationId: createNode
66
+ *
67
+ * Body shape (server-true, per `CreateNodeRequest`):
68
+ * `{ node: NodeInput }` — NodeInput = `{ id, labels?, properties?, embedding? }`.
69
+ */
70
+ async execute() {
71
+ if (this.nodeId === null) {
72
+ throw new Error("Node ID is required");
73
+ }
74
+ const node = { id: this.nodeId };
75
+ if (this.nodeLabel !== null) {
76
+ node.labels = [this.nodeLabel];
77
+ }
78
+ if (Object.keys(this.nodeProperties).length > 0) {
79
+ node.properties = this.nodeProperties;
80
+ }
81
+ if (this.nodeVector !== null) {
82
+ const embedding = { vector: this.nodeVector };
83
+ node.embedding = embedding;
84
+ }
85
+ const request = { node };
86
+ await this.handle.getClient().createNodeRequest(this.handle.getName(), request);
87
+ }
88
+ /**
89
+ * Build the node without executing
90
+ */
91
+ build() {
92
+ if (this.nodeId === null) {
93
+ throw new Error("Node ID is required");
94
+ }
95
+ return {
96
+ id: this.nodeId,
97
+ label: this.nodeLabel ?? undefined,
98
+ properties: this.nodeProperties,
99
+ vector: this.nodeVector ?? undefined,
100
+ };
101
+ }
102
+ }
103
+ // ============================================================================
104
+ // EDGE BUILDER
105
+ // ============================================================================
106
+ /**
107
+ * Builder for creating graph edges
108
+ */
109
+ export class EdgeBuilder {
110
+ handle;
111
+ edgeId = null;
112
+ sourceNode = null;
113
+ targetNode = null;
114
+ relationshipType = null;
115
+ edgeProperties = {};
116
+ edgeWeight = null;
117
+ constructor(handle) {
118
+ this.handle = handle;
119
+ }
120
+ /**
121
+ * Set the edge ID (required by server `EdgeInput.id`).
122
+ */
123
+ id(edgeId) {
124
+ this.edgeId = edgeId;
125
+ return this;
126
+ }
127
+ /**
128
+ * Set the source node ID
129
+ */
130
+ from(nodeId) {
131
+ this.sourceNode = nodeId;
132
+ return this;
133
+ }
134
+ /**
135
+ * Set the target node ID
136
+ */
137
+ to(nodeId) {
138
+ this.targetNode = nodeId;
139
+ return this;
140
+ }
141
+ /**
142
+ * Set the relationship / edge type (server field: `edge_type`).
143
+ */
144
+ relationship(relType) {
145
+ this.relationshipType = relType;
146
+ return this;
147
+ }
148
+ /**
149
+ * Alias for `relationship(...)` matching the server-side field name.
150
+ */
151
+ edgeType(edgeType) {
152
+ this.relationshipType = edgeType;
153
+ return this;
154
+ }
155
+ /**
156
+ * Add a property to the edge
157
+ */
158
+ property(key, value) {
159
+ this.edgeProperties[key] = value;
160
+ return this;
161
+ }
162
+ /**
163
+ * Add multiple properties at once
164
+ */
165
+ properties(props) {
166
+ Object.assign(this.edgeProperties, props);
167
+ return this;
168
+ }
169
+ /**
170
+ * Set the edge weight
171
+ */
172
+ weight(w) {
173
+ this.edgeWeight = w;
174
+ return this;
175
+ }
176
+ /**
177
+ * Execute the edge addition.
178
+ *
179
+ * Wire endpoint: POST /api/v2/graphs/{graph_id}/edges
180
+ * OpenAPI operationId: createEdge
181
+ *
182
+ * Body shape (server-true, per `CreateEdgeRequest`):
183
+ * `{ edge: EdgeInput }` — EdgeInput = `{ id, from_node_id, to_node_id,
184
+ * edge_type, properties?, weight? }`.
185
+ */
186
+ async execute() {
187
+ if (this.edgeId === null) {
188
+ throw new Error("Edge ID is required (call .id(...))");
189
+ }
190
+ if (this.sourceNode === null) {
191
+ throw new Error("Source node ID is required");
192
+ }
193
+ if (this.targetNode === null) {
194
+ throw new Error("Target node ID is required");
195
+ }
196
+ if (this.relationshipType === null) {
197
+ throw new Error("Edge type / relationship is required");
198
+ }
199
+ const edge = {
200
+ id: this.edgeId,
201
+ from_node_id: this.sourceNode,
202
+ to_node_id: this.targetNode,
203
+ edge_type: this.relationshipType,
204
+ };
205
+ if (Object.keys(this.edgeProperties).length > 0) {
206
+ edge.properties = this.edgeProperties;
207
+ }
208
+ if (this.edgeWeight !== null) {
209
+ edge.weight = this.edgeWeight;
210
+ }
211
+ const request = { edge };
212
+ await this.handle.getClient().createEdgeRequest(this.handle.getName(), request);
213
+ }
214
+ /**
215
+ * Build the edge without executing
216
+ */
217
+ build() {
218
+ if (this.sourceNode === null) {
219
+ throw new Error("Source node ID is required");
220
+ }
221
+ if (this.targetNode === null) {
222
+ throw new Error("Target node ID is required");
223
+ }
224
+ if (this.relationshipType === null) {
225
+ throw new Error("Relationship type is required");
226
+ }
227
+ return {
228
+ source: this.sourceNode,
229
+ target: this.targetNode,
230
+ relationship: this.relationshipType,
231
+ properties: this.edgeProperties,
232
+ weight: this.edgeWeight ?? undefined,
233
+ };
234
+ }
235
+ }
236
+ // ============================================================================
237
+ // TRAVERSAL BUILDER
238
+ // ============================================================================
239
+ /**
240
+ * Builder for graph traversal queries
241
+ */
242
+ export class TraversalBuilder {
243
+ handle;
244
+ startNodeId = null;
245
+ relationshipTypes = [];
246
+ nodeLabelsList = [];
247
+ traversalDirection = TraversalDirection.Outgoing;
248
+ maxDepthValue = 3;
249
+ limitValue = null;
250
+ algorithmValue = null;
251
+ filterExpr = null;
252
+ constructor(handle) {
253
+ this.handle = handle;
254
+ }
255
+ /**
256
+ * Set the starting node
257
+ */
258
+ start(nodeId) {
259
+ this.startNodeId = nodeId;
260
+ return this;
261
+ }
262
+ /**
263
+ * Add a relationship type to follow
264
+ */
265
+ relationship(relType) {
266
+ this.relationshipTypes.push(relType);
267
+ return this;
268
+ }
269
+ /**
270
+ * Add multiple relationship types
271
+ */
272
+ relationships(relTypes) {
273
+ this.relationshipTypes.push(...relTypes);
274
+ return this;
275
+ }
276
+ /**
277
+ * Set the traversal direction
278
+ */
279
+ direction(dir) {
280
+ this.traversalDirection = dir;
281
+ return this;
282
+ }
283
+ /**
284
+ * Traverse outgoing edges only
285
+ */
286
+ outgoing() {
287
+ this.traversalDirection = TraversalDirection.Outgoing;
288
+ return this;
289
+ }
290
+ /**
291
+ * Traverse incoming edges only
292
+ */
293
+ incoming() {
294
+ this.traversalDirection = TraversalDirection.Incoming;
295
+ return this;
296
+ }
297
+ /**
298
+ * Traverse both directions
299
+ */
300
+ both() {
301
+ this.traversalDirection = TraversalDirection.Both;
302
+ return this;
303
+ }
304
+ /**
305
+ * Set the maximum traversal depth
306
+ */
307
+ maxDepth(depth) {
308
+ this.maxDepthValue = depth;
309
+ return this;
310
+ }
311
+ /**
312
+ * Set the maximum number of results
313
+ */
314
+ limit(lim) {
315
+ this.limitValue = lim;
316
+ return this;
317
+ }
318
+ /**
319
+ * Add a label to filter visited nodes by.
320
+ */
321
+ nodeLabel(label) {
322
+ this.nodeLabelsList.push(label);
323
+ return this;
324
+ }
325
+ /**
326
+ * Replace the set of node-label filters.
327
+ */
328
+ nodeLabels(labels) {
329
+ this.nodeLabelsList = [...labels];
330
+ return this;
331
+ }
332
+ /**
333
+ * Select traversal algorithm (server accepts `bfs`, `dfs`, or `shortest_path`).
334
+ */
335
+ algorithm(name) {
336
+ this.algorithmValue = name;
337
+ return this;
338
+ }
339
+ /**
340
+ * Add a filter expression for nodes (client-side helper, not sent on wire).
341
+ */
342
+ filter(filterStr) {
343
+ this.filterExpr = filterStr;
344
+ return this;
345
+ }
346
+ /**
347
+ * Execute the traversal.
348
+ *
349
+ * Wire endpoint: POST /api/v2/graphs/{graph_id}/traverse
350
+ * OpenAPI operationId: traverseGraph
351
+ *
352
+ * Body shape (server-true, per `TraverseRequest`):
353
+ * `{ start_node_id, max_depth, edge_types?, node_labels?, algorithm?, limit? }`.
354
+ * Note: spec is flat (no `graph` wrapper — `graph_id` is the URL path
355
+ * parameter) and has no `direction` field; legacy `direction` /
356
+ * `start_node` / `relationships` keys are intentionally not sent.
357
+ */
358
+ async execute() {
359
+ if (this.startNodeId === null) {
360
+ throw new Error("Start node is required for traversal");
361
+ }
362
+ const request = {
363
+ start_node_id: this.startNodeId,
364
+ max_depth: this.maxDepthValue,
365
+ };
366
+ if (this.relationshipTypes.length > 0) {
367
+ request.edge_types = this.relationshipTypes;
368
+ }
369
+ if (this.nodeLabelsList.length > 0) {
370
+ request.node_labels = this.nodeLabelsList;
371
+ }
372
+ if (this.algorithmValue !== null) {
373
+ request.algorithm = this.algorithmValue;
374
+ }
375
+ if (this.limitValue !== null) {
376
+ request.limit = this.limitValue;
377
+ }
378
+ // Note: direction (this.traversalDirection) and filter (this.filterExpr)
379
+ // are intentionally NOT sent — the server `TraverseRequest` does not
380
+ // accept them. The setters remain for SDK ergonomic continuity.
381
+ void this.traversalDirection;
382
+ void this.filterExpr;
383
+ const data = await this.handle.getClient().traverseGraphRequest(this.handle.getName(), request);
384
+ return data;
385
+ }
386
+ }
387
+ // ============================================================================
388
+ // GRAPH HANDLE
389
+ // ============================================================================
390
+ /**
391
+ * Handle to a graph for fluent operations
392
+ */
393
+ export class GraphHandle {
394
+ client;
395
+ graphName;
396
+ constructor(client, name) {
397
+ this.client = client;
398
+ this.graphName = name;
399
+ }
400
+ /**
401
+ * Get the graph name
402
+ */
403
+ getName() {
404
+ return this.graphName;
405
+ }
406
+ /**
407
+ * Get the HTTP client (internal use)
408
+ */
409
+ getClient() {
410
+ return this.client;
411
+ }
412
+ /**
413
+ * Start building a node addition
414
+ */
415
+ addNode() {
416
+ return new NodeBuilder(this);
417
+ }
418
+ /**
419
+ * Start building an edge addition
420
+ */
421
+ addEdge() {
422
+ return new EdgeBuilder(this);
423
+ }
424
+ /**
425
+ * Start building a traversal query
426
+ */
427
+ traverse() {
428
+ return new TraversalBuilder(this);
429
+ }
430
+ /**
431
+ * Add a batch of nodes.
432
+ *
433
+ * Wire endpoint: POST /api/v2/graphs/{graph_id}/nodes/batch
434
+ * OpenAPI operationId: batchCreateNodes
435
+ *
436
+ * Body shape (server-true, per `BatchCreateNodesRequest`):
437
+ * `{ nodes: [NodeInput, ...] }`. `graph_id` lives in the URL path.
438
+ *
439
+ * Accepts either spec-true `NodeInput[]` or legacy `GraphNode[]`; the
440
+ * latter is normalized (singular `label` → `labels: [label]`,
441
+ * `vector` → `embedding.vector`).
442
+ */
443
+ async addNodes(nodes) {
444
+ const normalized = nodes.map(n => normalizeNodeInput(n));
445
+ const request = { nodes: normalized };
446
+ const response = (await this.client.batchCreateNodesRequest(this.graphName, request));
447
+ return response?.data?.count ?? response?.count ?? normalized.length;
448
+ }
449
+ /**
450
+ * Add a batch of edges.
451
+ *
452
+ * Wire endpoint: POST /api/v2/graphs/{graph_id}/edges/batch
453
+ * OpenAPI operationId: batchCreateEdges
454
+ *
455
+ * Body shape (server-true, per `BatchCreateEdgesRequest`):
456
+ * `{ edges: [EdgeInput, ...] }`. `graph_id` lives in the URL path.
457
+ *
458
+ * Accepts either spec-true `EdgeInput[]` or legacy `GraphEdge[]`; the
459
+ * latter is normalized (`source` → `from_node_id`, `target` →
460
+ * `to_node_id`, `relationship` → `edge_type`). Legacy `GraphEdge` has no
461
+ * `id` field; callers MUST upgrade to `EdgeInput` for batch use (the
462
+ * normalizer throws if `id` is missing).
463
+ */
464
+ async addEdges(edges) {
465
+ const normalized = edges.map(e => normalizeEdgeInput(e));
466
+ const request = { edges: normalized };
467
+ const response = (await this.client.batchCreateEdgesRequest(this.graphName, request));
468
+ return response?.data?.count ?? response?.count ?? normalized.length;
469
+ }
470
+ /**
471
+ * Get a node by ID
472
+ */
473
+ async getNode(nodeId) {
474
+ try {
475
+ const data = await this.client.getNodeRequest(this.graphName, nodeId);
476
+ return data;
477
+ }
478
+ catch (e) {
479
+ // The facade maps a 404 to a ProximaDBError (statusCode 404, message =
480
+ // server body). Treat "not found" as a null result, preserving the
481
+ // pre-rebase behavior; match on status or the body text.
482
+ const status = e.statusCode;
483
+ if (status === 404) {
484
+ return null;
485
+ }
486
+ if (e instanceof Error && e.message.includes("404")) {
487
+ return null;
488
+ }
489
+ throw e;
490
+ }
491
+ }
492
+ /**
493
+ * Delete a node by ID
494
+ */
495
+ async deleteNode(nodeId) {
496
+ await this.client.deleteNodeRequest(this.graphName, nodeId);
497
+ }
498
+ // deleteEdge is intentionally LEFT facade-built (generic URL path): the
499
+ // generated REST client has no matching typed op for this 3-segment route
500
+ // shape. The OpenAPI spec / generated client model edge deletion as
501
+ // `DELETE /api/v2/graphs/{graph_id}/edges/{edge_id}` (single `edge_id`),
502
+ // whereas this SDK's public signature is `(source, target, relationship)` →
503
+ // `/edges/{source}/{target}/{relationship}`. Until the SDK signature is
504
+ // reconciled to `{edge_id}` (separate change), this cannot route through the
505
+ // generated client. Tracked separately.
506
+ /**
507
+ * Delete an edge
508
+ */
509
+ async deleteEdge(source, target, relationship) {
510
+ const url = this.client.url() + "/api/v2/graphs/" + this.graphName + "/edges/" + source + "/" + target + "/" + relationship;
511
+ await this.client.delete(url);
512
+ }
513
+ /**
514
+ * Get graph statistics.
515
+ *
516
+ * Routed through the generated typed transport (TD-126 Phase 4).
517
+ * Wire endpoint: GET /api/v2/graphs/{graph_id} (getGraph)
518
+ */
519
+ async info() {
520
+ const data = await this.client.getGraphRequest(this.graphName);
521
+ return data;
522
+ }
523
+ }
524
+ // ============================================================================
525
+ // GRAPH BUILDER
526
+ // ============================================================================
527
+ /**
528
+ * Builder for creating graphs
529
+ */
530
+ export class GraphBuilder {
531
+ client;
532
+ graphId;
533
+ graphDisplayName = null;
534
+ graphDescription = null;
535
+ constructor(client, graphId) {
536
+ this.client = client;
537
+ this.graphId = graphId;
538
+ }
539
+ /**
540
+ * Set an optional human-readable name (defaults server-side to graph_id).
541
+ */
542
+ name(displayName) {
543
+ this.graphDisplayName = displayName;
544
+ return this;
545
+ }
546
+ /**
547
+ * Set the graph description
548
+ */
549
+ description(desc) {
550
+ this.graphDescription = desc;
551
+ return this;
552
+ }
553
+ /**
554
+ * Execute the graph creation.
555
+ *
556
+ * Wire endpoint: POST /api/v2/graphs
557
+ * OpenAPI operationId: createGraph
558
+ *
559
+ * Body shape (server-true, per `CreateGraphRequest`):
560
+ * `{ graph_id, name?, description? }`.
561
+ */
562
+ async execute() {
563
+ const request = { graph_id: this.graphId };
564
+ if (this.graphDisplayName !== null) {
565
+ request.name = this.graphDisplayName;
566
+ }
567
+ if (this.graphDescription !== null) {
568
+ request.description = this.graphDescription;
569
+ }
570
+ await this.client.createGraphRequest(request);
571
+ }
572
+ }
573
+ // ============================================================================
574
+ // INTERNAL: legacy -> spec normalizers
575
+ // ============================================================================
576
+ function normalizeNodeInput(input) {
577
+ // Distinguish legacy `GraphNode` (has singular `label` and/or `vector`) from
578
+ // spec-true `NodeInput` (has `labels[]` / `embedding`). Field absence is
579
+ // fine — `NodeInput` only requires `id`.
580
+ const out = { id: input.id };
581
+ // Inline structural check avoids a hard cross-cast.
582
+ const legacy = input;
583
+ const spec = input;
584
+ if (spec.labels !== undefined) {
585
+ out.labels = spec.labels;
586
+ }
587
+ else if (legacy.label !== undefined) {
588
+ out.labels = [legacy.label];
589
+ }
590
+ if (spec.properties !== undefined) {
591
+ out.properties = spec.properties;
592
+ }
593
+ else if (legacy.properties !== undefined) {
594
+ out.properties = legacy.properties;
595
+ }
596
+ if (spec.embedding !== undefined) {
597
+ out.embedding = spec.embedding;
598
+ }
599
+ else if (legacy.vector !== undefined) {
600
+ out.embedding = { vector: legacy.vector };
601
+ }
602
+ return out;
603
+ }
604
+ function normalizeEdgeInput(input) {
605
+ const spec = input;
606
+ const legacy = input;
607
+ // Spec edge has `id` (required), legacy has none. If absent on a legacy
608
+ // value, surface a hard error — server `EdgeInput.id` is required.
609
+ if (spec.id === undefined) {
610
+ throw new Error("addEdges: edge.id is required by EdgeInput (legacy GraphEdge has no id; pass an EdgeInput)");
611
+ }
612
+ const out = {
613
+ id: spec.id,
614
+ from_node_id: spec.from_node_id ?? legacy.source,
615
+ to_node_id: spec.to_node_id ?? legacy.target,
616
+ edge_type: spec.edge_type ?? legacy.relationship,
617
+ };
618
+ if (spec.properties !== undefined) {
619
+ out.properties = spec.properties;
620
+ }
621
+ else if (legacy.properties !== undefined) {
622
+ out.properties = legacy.properties;
623
+ }
624
+ if (spec.weight !== undefined) {
625
+ out.weight = spec.weight;
626
+ }
627
+ else if (legacy.weight !== undefined) {
628
+ out.weight = legacy.weight;
629
+ }
630
+ return out;
631
+ }
632
+ // ============================================================================
633
+ // CONVENIENCE FUNCTIONS
634
+ // ============================================================================
635
+ /**
636
+ * Create a new GraphNode
637
+ */
638
+ export function createNode(id) {
639
+ return {
640
+ id,
641
+ properties: {},
642
+ };
643
+ }
644
+ /**
645
+ * Create a new GraphNode with builder pattern
646
+ */
647
+ export function node(id) {
648
+ const n = { id, properties: {} };
649
+ return {
650
+ label: (l) => { n.label = l; return node(id); },
651
+ property: (k, v) => { n.properties[k] = v; return node(id); },
652
+ vector: (v) => { n.vector = v; return node(id); },
653
+ build: () => n,
654
+ };
655
+ }
656
+ /**
657
+ * Create a new GraphEdge
658
+ */
659
+ export function createEdge(source, target, relationship) {
660
+ return {
661
+ source,
662
+ target,
663
+ relationship,
664
+ properties: {},
665
+ };
666
+ }
667
+ /**
668
+ * Create a new GraphEdge with builder pattern
669
+ */
670
+ export function edge(source, target, relationship) {
671
+ const e = { source, target, relationship, properties: {} };
672
+ return {
673
+ property: (k, v) => { e.properties[k] = v; return edge(source, target, relationship); },
674
+ weight: (w) => { e.weight = w; return edge(source, target, relationship); },
675
+ build: () => e,
676
+ };
677
+ }
678
+ //# sourceMappingURL=graph.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"graph.js","sourceRoot":"","sources":["../../src/graph.ts"],"names":[],"mappings":"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"}