falkordb 6.0.2 → 6.2.0-beta.1

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 (56) hide show
  1. package/README.md +4 -3
  2. package/dist/src/commands/CONFIG_GET.js +2 -2
  3. package/dist/src/commands/CONFIG_SET.js +1 -2
  4. package/dist/src/commands/CONSTRAINT_CREATE.js +2 -2
  5. package/dist/src/commands/CONSTRAINT_DROP.js +1 -2
  6. package/dist/src/commands/COPY.js +1 -2
  7. package/dist/src/commands/DELETE.js +2 -2
  8. package/dist/src/commands/EXPLAIN.js +2 -2
  9. package/dist/src/commands/INFO.js +2 -2
  10. package/dist/src/commands/LIST.js +2 -2
  11. package/dist/src/commands/PROFILE.js +2 -2
  12. package/dist/src/commands/QUERY.js +3 -3
  13. package/dist/src/commands/RO_QUERY.js +2 -2
  14. package/dist/src/commands/SENTINEL_MASTER.js +2 -3
  15. package/dist/src/commands/SENTINEL_MASTERS.js +2 -3
  16. package/dist/src/commands/SLOWLOG.js +3 -3
  17. package/dist/src/commands/index.d.ts +6 -0
  18. package/dist/src/commands/index.js +8 -3
  19. package/dist/src/falkordb.d.ts +6 -3
  20. package/dist/src/falkordb.js +64 -0
  21. package/dist/src/graph.js +36 -2
  22. package/package.json +8 -6
  23. package/dist/index.js.map +0 -1
  24. package/dist/src/commands/CONFIG_GET.js.map +0 -1
  25. package/dist/src/commands/CONFIG_SET.js.map +0 -1
  26. package/dist/src/commands/CONSTRAINT_CREATE.js.map +0 -1
  27. package/dist/src/commands/CONSTRAINT_DROP.js.map +0 -1
  28. package/dist/src/commands/COPY.js.map +0 -1
  29. package/dist/src/commands/DELETE.js.map +0 -1
  30. package/dist/src/commands/EXPLAIN.js.map +0 -1
  31. package/dist/src/commands/INFO.js.map +0 -1
  32. package/dist/src/commands/LIST.js.map +0 -1
  33. package/dist/src/commands/PROFILE.js.map +0 -1
  34. package/dist/src/commands/QUERY.js.map +0 -1
  35. package/dist/src/commands/RO_QUERY.js.map +0 -1
  36. package/dist/src/commands/SENTINEL_MASTER.js.map +0 -1
  37. package/dist/src/commands/SENTINEL_MASTERS.js.map +0 -1
  38. package/dist/src/commands/SLOWLOG.js.map +0 -1
  39. package/dist/src/commands/index.js.map +0 -1
  40. package/dist/src/edge.d.ts +0 -24
  41. package/dist/src/edge.js +0 -48
  42. package/dist/src/falkordb.js.map +0 -1
  43. package/dist/src/graph.js.map +0 -1
  44. package/dist/src/label.d.ts +0 -18
  45. package/dist/src/label.js +0 -20
  46. package/dist/src/node.d.ts +0 -22
  47. package/dist/src/node.js +0 -38
  48. package/dist/src/parser.js +0 -167
  49. package/dist/src/path.d.ts +0 -57
  50. package/dist/src/path.js +0 -80
  51. package/dist/src/record.d.ts +0 -43
  52. package/dist/src/record.js +0 -68
  53. package/dist/src/resultset.d.ts +0 -43
  54. package/dist/src/resultset.js +0 -40
  55. package/dist/src/statistics.d.ts +0 -71
  56. package/dist/src/statistics.js +0 -115
package/README.md CHANGED
@@ -1,12 +1,13 @@
1
- # falkordb-ts
2
-
3
1
  [![Tests](https://img.shields.io/github/actions/workflow/status/falkordb/falkordb-ts/node.js.yml?branch=main)](https://github.com/falkordb/falkordb-ts/actions/workflows/node.js.yml)
4
2
  [![Coverage](https://codecov.io/gh/falkordb/falkordb-ts/branch/main/graph/badge.svg?token=nNxm2N0Xrl)](https://codecov.io/gh/falkordb/falkordb-ts)
5
3
  [![License](https://img.shields.io/github/license/falkordb/falkordb-ts.svg)](https://github.com/falkordb/falkordb-ts/blob/main/LICENSE)
6
-
7
4
  [![Discord](https://img.shields.io/discord/1146782921294884966.svg?style=social&logo=discord)](https://discord.com/invite/99y2Ubh6tg)
8
5
  [![Twitter](https://img.shields.io/twitter/follow/falkordb?style=social)](https://twitter.com/falkordb)
9
6
 
7
+ # falkordb-ts
8
+
9
+ [![Try Free](https://img.shields.io/badge/Try%20Free-FalkorDB%20Cloud-FF8101?labelColor=FDE900&style=for-the-badge&link=https://app.falkordb.cloud)](https://app.falkordb.cloud)
10
+
10
11
  `falkordb` is a [FalkorDB](https://www.falkordb.com) client for Node.js.
11
12
 
12
13
  ## Installation
@@ -1,8 +1,8 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.transformArguments = exports.IS_READ_ONLY = void 0;
3
+ exports.IS_READ_ONLY = void 0;
4
+ exports.transformArguments = transformArguments;
4
5
  exports.IS_READ_ONLY = true;
5
6
  function transformArguments(configKey) {
6
7
  return ['GRAPH.CONFIG', 'GET', configKey];
7
8
  }
8
- exports.transformArguments = transformArguments;
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.transformArguments = void 0;
3
+ exports.transformArguments = transformArguments;
4
4
  function transformArguments(configKey, value) {
5
5
  return [
6
6
  'GRAPH.CONFIG',
@@ -9,4 +9,3 @@ function transformArguments(configKey, value) {
9
9
  value.toString()
10
10
  ];
11
11
  }
12
- exports.transformArguments = transformArguments;
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.transformArguments = exports.EntityType = exports.ConstraintType = void 0;
3
+ exports.EntityType = exports.ConstraintType = void 0;
4
+ exports.transformArguments = transformArguments;
4
5
  var ConstraintType;
5
6
  (function (ConstraintType) {
6
7
  ConstraintType["MANDATORY"] = "MANDATORY";
@@ -19,4 +20,3 @@ function transformArguments(key, constraintType, entityType, label, ...propertie
19
20
  'PROPERTIES', properties.length.toString(), ...properties
20
21
  ];
21
22
  }
22
- exports.transformArguments = transformArguments;
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.transformArguments = void 0;
3
+ exports.transformArguments = transformArguments;
4
4
  // GRAPH.CONSTRAINT DROP key constraintType {NODE label | RELATIONSHIP reltype} PROPERTIES propCount prop [prop...]
5
5
  function transformArguments(key, constraintType, entityType, label, ...properties) {
6
6
  return [
@@ -9,4 +9,3 @@ function transformArguments(key, constraintType, entityType, label, ...propertie
9
9
  'PROPERTIES', properties.length.toString(), ...properties
10
10
  ];
11
11
  }
12
- exports.transformArguments = transformArguments;
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.transformArguments = void 0;
3
+ exports.transformArguments = transformArguments;
4
4
  function transformArguments(srcGraph, destGraph) {
5
5
  return [
6
6
  'GRAPH.COPY',
@@ -8,4 +8,3 @@ function transformArguments(srcGraph, destGraph) {
8
8
  destGraph
9
9
  ];
10
10
  }
11
- exports.transformArguments = transformArguments;
@@ -1,8 +1,8 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.transformArguments = exports.FIRST_KEY_INDEX = void 0;
3
+ exports.FIRST_KEY_INDEX = void 0;
4
+ exports.transformArguments = transformArguments;
4
5
  exports.FIRST_KEY_INDEX = 1;
5
6
  function transformArguments(key) {
6
7
  return ['GRAPH.DELETE', key];
7
8
  }
8
- exports.transformArguments = transformArguments;
@@ -1,9 +1,9 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.transformArguments = exports.IS_READ_ONLY = exports.FIRST_KEY_INDEX = void 0;
3
+ exports.IS_READ_ONLY = exports.FIRST_KEY_INDEX = void 0;
4
+ exports.transformArguments = transformArguments;
4
5
  exports.FIRST_KEY_INDEX = 1;
5
6
  exports.IS_READ_ONLY = true;
6
7
  function transformArguments(key, query) {
7
8
  return ['GRAPH.EXPLAIN', key, query];
8
9
  }
9
- exports.transformArguments = transformArguments;
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.transformArguments = exports.IS_READ_ONLY = void 0;
3
+ exports.IS_READ_ONLY = void 0;
4
+ exports.transformArguments = transformArguments;
4
5
  exports.IS_READ_ONLY = true;
5
6
  function transformArguments(section) {
6
7
  const args = ['GRAPH.INFO'];
@@ -9,4 +10,3 @@ function transformArguments(section) {
9
10
  }
10
11
  return args;
11
12
  }
12
- exports.transformArguments = transformArguments;
@@ -1,8 +1,8 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.transformArguments = exports.IS_READ_ONLY = void 0;
3
+ exports.IS_READ_ONLY = void 0;
4
+ exports.transformArguments = transformArguments;
4
5
  exports.IS_READ_ONLY = true;
5
6
  function transformArguments() {
6
7
  return ['GRAPH.LIST'];
7
8
  }
8
- exports.transformArguments = transformArguments;
@@ -1,9 +1,9 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.transformArguments = exports.IS_READ_ONLY = exports.FIRST_KEY_INDEX = void 0;
3
+ exports.IS_READ_ONLY = exports.FIRST_KEY_INDEX = void 0;
4
+ exports.transformArguments = transformArguments;
4
5
  exports.FIRST_KEY_INDEX = 1;
5
6
  exports.IS_READ_ONLY = true;
6
7
  function transformArguments(key, query) {
7
8
  return ['GRAPH.PROFILE', key, query];
8
9
  }
9
- exports.transformArguments = transformArguments;
@@ -1,12 +1,13 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.transformReply = exports.transformArguments = exports.FIRST_KEY_INDEX = void 0;
3
+ exports.FIRST_KEY_INDEX = void 0;
4
+ exports.transformArguments = transformArguments;
5
+ exports.transformReply = transformReply;
4
6
  const _1 = require(".");
5
7
  exports.FIRST_KEY_INDEX = 1;
6
8
  function transformArguments(graph, query, options, compact) {
7
9
  return (0, _1.pushQueryArguments)(['GRAPH.QUERY'], graph, query, options, compact);
8
10
  }
9
- exports.transformArguments = transformArguments;
10
11
  function transformReply(reply) {
11
12
  return reply.length === 1 ? {
12
13
  headers: undefined,
@@ -18,4 +19,3 @@ function transformReply(reply) {
18
19
  metadata: reply[2]
19
20
  };
20
21
  }
21
- exports.transformReply = transformReply;
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.transformReply = exports.transformArguments = exports.IS_READ_ONLY = exports.FIRST_KEY_INDEX = void 0;
3
+ exports.transformReply = exports.IS_READ_ONLY = exports.FIRST_KEY_INDEX = void 0;
4
+ exports.transformArguments = transformArguments;
4
5
  const _1 = require(".");
5
6
  var QUERY_1 = require("./QUERY");
6
7
  Object.defineProperty(exports, "FIRST_KEY_INDEX", { enumerable: true, get: function () { return QUERY_1.FIRST_KEY_INDEX; } });
@@ -8,6 +9,5 @@ exports.IS_READ_ONLY = true;
8
9
  function transformArguments(graph, query, options, compact) {
9
10
  return (0, _1.pushQueryArguments)(['GRAPH.RO_QUERY'], graph, query, options, compact);
10
11
  }
11
- exports.transformArguments = transformArguments;
12
12
  var QUERY_2 = require("./QUERY");
13
13
  Object.defineProperty(exports, "transformReply", { enumerable: true, get: function () { return QUERY_2.transformReply; } });
@@ -1,9 +1,8 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.transformArguments = exports.IS_READ_ONLY = void 0;
3
+ exports.IS_READ_ONLY = void 0;
4
+ exports.transformArguments = transformArguments;
4
5
  exports.IS_READ_ONLY = true;
5
6
  function transformArguments(dbname) {
6
7
  return ['SENTINEL', 'MASTER', dbname];
7
8
  }
8
- exports.transformArguments = transformArguments;
9
- //# sourceMappingURL=SENTINEL_MASTER.js.map
@@ -1,9 +1,8 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.transformArguments = exports.IS_READ_ONLY = void 0;
3
+ exports.IS_READ_ONLY = void 0;
4
+ exports.transformArguments = transformArguments;
4
5
  exports.IS_READ_ONLY = true;
5
6
  function transformArguments() {
6
7
  return ['SENTINEL', 'MASTERS'];
7
8
  }
8
- exports.transformArguments = transformArguments;
9
- //# sourceMappingURL=SENTINEL_MASTERS.js.map
@@ -1,12 +1,13 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.transformReply = exports.transformArguments = exports.FIRST_KEY_INDEX = exports.IS_READ_ONLY = void 0;
3
+ exports.FIRST_KEY_INDEX = exports.IS_READ_ONLY = void 0;
4
+ exports.transformArguments = transformArguments;
5
+ exports.transformReply = transformReply;
4
6
  exports.IS_READ_ONLY = true;
5
7
  exports.FIRST_KEY_INDEX = 1;
6
8
  function transformArguments(key) {
7
9
  return ['GRAPH.SLOWLOG', key];
8
10
  }
9
- exports.transformArguments = transformArguments;
10
11
  function transformReply(logs) {
11
12
  return logs.map(([timestamp, command, query, took]) => ({
12
13
  timestamp: new Date(Number(timestamp) * 1000),
@@ -15,4 +16,3 @@ function transformReply(logs) {
15
16
  took: Number(took)
16
17
  }));
17
18
  }
18
- exports.transformReply = transformReply;
@@ -11,6 +11,8 @@ import * as SLOWLOG from './SLOWLOG';
11
11
  import * as CONSTRAINT_CREATE from './CONSTRAINT_CREATE';
12
12
  import * as CONSTRAINT_DROP from './CONSTRAINT_DROP';
13
13
  import * as COPY from './COPY';
14
+ import * as SENTINEL_MASTER from './SENTINEL_MASTER';
15
+ import * as SENTINEL_MASTERS from './SENTINEL_MASTERS';
14
16
  import { RedisCommandArgument, RedisCommandArguments } from '@redis/client/dist/lib/commands';
15
17
  declare const _default: {
16
18
  CONFIG_GET: typeof CONFIG_GET;
@@ -39,6 +41,10 @@ declare const _default: {
39
41
  constraintDrop: typeof CONSTRAINT_DROP;
40
42
  COPY: typeof COPY;
41
43
  copy: typeof COPY;
44
+ SENTINEL_MASTER: typeof SENTINEL_MASTER;
45
+ sentinelMaster: typeof SENTINEL_MASTER;
46
+ SENTINEL_MASTERS: typeof SENTINEL_MASTERS;
47
+ sentinelMasters: typeof SENTINEL_MASTERS;
42
48
  };
43
49
  export default _default;
44
50
  type QueryParam = null | string | number | boolean | QueryParams | Array<QueryParam>;
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.pushQueryArguments = void 0;
3
+ exports.pushQueryArguments = pushQueryArguments;
4
4
  const CONFIG_GET = require("./CONFIG_GET");
5
5
  const CONFIG_SET = require("./CONFIG_SET");
6
6
  const DELETE = require("./DELETE");
@@ -14,6 +14,8 @@ const SLOWLOG = require("./SLOWLOG");
14
14
  const CONSTRAINT_CREATE = require("./CONSTRAINT_CREATE");
15
15
  const CONSTRAINT_DROP = require("./CONSTRAINT_DROP");
16
16
  const COPY = require("./COPY");
17
+ const SENTINEL_MASTER = require("./SENTINEL_MASTER");
18
+ const SENTINEL_MASTERS = require("./SENTINEL_MASTERS");
17
19
  exports.default = {
18
20
  CONFIG_GET,
19
21
  configGet: CONFIG_GET,
@@ -40,7 +42,11 @@ exports.default = {
40
42
  CONSTRAINT_DROP,
41
43
  constraintDrop: CONSTRAINT_DROP,
42
44
  COPY,
43
- copy: COPY
45
+ copy: COPY,
46
+ SENTINEL_MASTER,
47
+ sentinelMaster: SENTINEL_MASTER,
48
+ SENTINEL_MASTERS,
49
+ sentinelMasters: SENTINEL_MASTERS
44
50
  };
45
51
  function pushQueryArguments(args, graph, query, options, compact) {
46
52
  args.push(graph);
@@ -61,7 +67,6 @@ function pushQueryArguments(args, graph, query, options, compact) {
61
67
  }
62
68
  return args;
63
69
  }
64
- exports.pushQueryArguments = pushQueryArguments;
65
70
  function pushTimeout(args, timeout) {
66
71
  args.push('TIMEOUT', timeout.toString());
67
72
  }
@@ -1,10 +1,8 @@
1
- /// <reference types="node" />
2
- /// <reference types="node" />
3
- /// <reference types="node" />
4
1
  import * as tls from 'tls';
5
2
  import * as net from 'net';
6
3
  import { EventEmitter } from 'events';
7
4
  import Graph, { GraphConnection } from './graph';
5
+ import { Options as PoolOptions } from 'generic-pool';
8
6
  type NetSocketOptions = Partial<net.SocketConnectOpts> & {
9
7
  tls?: false;
10
8
  };
@@ -68,10 +66,15 @@ export interface FalkorDBOptions {
68
66
  * Tag to append to library name that is sent to the Redis server
69
67
  */
70
68
  clientInfoTag?: string;
69
+ /**
70
+ * Connection pool options
71
+ */
72
+ poolOptions?: PoolOptions;
71
73
  }
72
74
  export default class FalkorDB extends EventEmitter {
73
75
  #private;
74
76
  private constructor();
77
+ private connectServer;
75
78
  static connect(options?: FalkorDBOptions): Promise<FalkorDB>;
76
79
  selectGraph(graphId: string): Graph;
77
80
  get connection(): GraphConnection;
@@ -4,12 +4,66 @@ const events_1 = require("events");
4
4
  const redis_1 = require("redis");
5
5
  const graph_1 = require("./graph");
6
6
  const commands_1 = require("./commands");
7
+ function extractDetails(masters) {
8
+ const allDetails = [];
9
+ for (const master of masters) {
10
+ const details = {};
11
+ for (let i = 0; i < master.length; i += 2) {
12
+ details[master[i]] = master[i + 1];
13
+ }
14
+ allDetails.push(details);
15
+ }
16
+ return allDetails;
17
+ }
7
18
  class FalkorDB extends events_1.EventEmitter {
8
19
  #client;
20
+ #sentinel;
9
21
  constructor(client) {
10
22
  super();
11
23
  this.#client = client;
12
24
  }
25
+ async connectServer(client, redisOption) {
26
+ // If not connected to sentinel, throws an error on missing command
27
+ const masters = await client.falkordb.sentinelMasters();
28
+ const details = extractDetails(masters);
29
+ if (details.length > 1) {
30
+ throw new Error('Multiple masters are not supported');
31
+ }
32
+ // Connect to the server with the details from sentinel
33
+ const socketOptions = {
34
+ ...redisOption.socket,
35
+ host: details[0]['ip'],
36
+ port: parseInt(details[0]['port'])
37
+ };
38
+ const serverOptions = {
39
+ ...redisOption,
40
+ socket: socketOptions
41
+ };
42
+ const realClient = (0, redis_1.createClient)(serverOptions);
43
+ // Set original client as sentinel and server client as client
44
+ this.#sentinel = client;
45
+ this.#client = realClient;
46
+ await realClient
47
+ .on('error', async (err) => {
48
+ console.debug('Error on server connection', err);
49
+ // Disconnect the client to avoid further errors and retries
50
+ realClient.disconnect();
51
+ // If error occurs on previous server connection, no need to reconnect
52
+ if (this.#client !== realClient) {
53
+ return;
54
+ }
55
+ try {
56
+ await this.connectServer(client, redisOption);
57
+ console.debug('Connected to server');
58
+ }
59
+ catch (e) {
60
+ console.debug('Error on server reconnect', e);
61
+ // Forward errors if reconnection fails
62
+ this.emit('error', err);
63
+ }
64
+ })
65
+ .connect();
66
+ }
13
67
  static async connect(options) {
14
68
  const redisOption = (options ?? {});
15
69
  // If the URL is provided, and the protocol is `falkor` replaces it with `redis` for the underline redis client
@@ -17,6 +71,10 @@ class FalkorDB extends events_1.EventEmitter {
17
71
  if (redisOption.url && redisOption.url.startsWith('falkor')) {
18
72
  redisOption.url = redisOption.url.replace('falkor', 'redis');
19
73
  }
74
+ // Just copy the pool options to the isolation pool options as expected by the redis client
75
+ if (options?.poolOptions) {
76
+ redisOption.isolationPoolOptions = options.poolOptions;
77
+ }
20
78
  redisOption.modules = {
21
79
  falkordb: commands_1.default
22
80
  };
@@ -25,6 +83,12 @@ class FalkorDB extends events_1.EventEmitter {
25
83
  await client
26
84
  .on('error', err => falkordb.emit('error', err)) // Forward errors
27
85
  .connect();
86
+ try {
87
+ await falkordb.connectServer(client, redisOption);
88
+ }
89
+ catch (e) {
90
+ console.debug('Error in connecting to sentinel, connecting to server directly');
91
+ }
28
92
  return falkordb;
29
93
  }
30
94
  selectGraph(graphId) {
package/dist/src/graph.js CHANGED
@@ -24,26 +24,60 @@ class Graph {
24
24
  #client;
25
25
  #name;
26
26
  #metadata;
27
+ #usePool;
27
28
  constructor(client, name) {
28
29
  this.#client = client;
29
30
  this.#name = name;
31
+ this.#usePool = !!(this.#client.options?.isolationPoolOptions);
30
32
  }
31
33
  async query(query, options) {
32
- return this.#parseReply(await this.#client.falkordb.query(this.#name, query, options, true));
34
+ const reply = this.#usePool ?
35
+ await this.#client.executeIsolated(async (isolatedClient) => {
36
+ return isolatedClient.falkordb.query(this.#name, query, options, true);
37
+ })
38
+ :
39
+ await this.#client.falkordb.query(this.#name, query, options, true);
40
+ return this.#parseReply(reply);
33
41
  }
34
42
  async roQuery(query, options) {
35
- return this.#parseReply(await this.#client.falkordb.roQuery(this.#name, query, options, true));
43
+ const reply = this.#usePool ?
44
+ await this.#client.executeIsolated(async (isolatedClient) => {
45
+ return isolatedClient.falkordb.roQuery(this.#name, query, options, true);
46
+ })
47
+ :
48
+ await this.#client.falkordb.roQuery(this.#name, query, options, true);
49
+ return this.#parseReply(reply);
36
50
  }
37
51
  async delete() {
52
+ if (this.#usePool) {
53
+ return this.#client.executeIsolated(async (isolatedClient) => {
54
+ return isolatedClient.falkordb.delete(this.#name);
55
+ });
56
+ }
38
57
  return this.#client.falkordb.delete(this.#name);
39
58
  }
40
59
  async explain(query) {
60
+ if (this.#usePool) {
61
+ return this.#client.executeIsolated(async (isolatedClient) => {
62
+ return isolatedClient.falkordb.explain(this.#name, query);
63
+ });
64
+ }
41
65
  return this.#client.falkordb.explain(this.#name, query);
42
66
  }
43
67
  async profile(query) {
68
+ if (this.#usePool) {
69
+ return this.#client.executeIsolated(async (isolatedClient) => {
70
+ return isolatedClient.falkordb.profile(this.#name, query);
71
+ });
72
+ }
44
73
  return this.#client.falkordb.profile(this.#name, query);
45
74
  }
46
75
  async slowLog() {
76
+ if (this.#usePool) {
77
+ return this.#client.executeIsolated(async (isolatedClient) => {
78
+ return isolatedClient.falkordb.slowLog(this.#name);
79
+ });
80
+ }
47
81
  return this.#client.falkordb.slowLog(this.#name);
48
82
  }
49
83
  async constraintCreate(constraintType, entityType, label, ...properties) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "falkordb",
3
- "version": "6.0.2",
3
+ "version": "6.2.0-beta.1",
4
4
  "description": "A FalkorDB javascript library",
5
5
  "license": "MIT",
6
6
  "main": "./dist/index.js",
@@ -34,16 +34,18 @@
34
34
  ],
35
35
  "devDependencies": {
36
36
  "@tsconfig/node14": "^14.1.0",
37
+ "@types/jest": "^29.5.12",
37
38
  "@types/node": "^20.11.28",
38
- "@typescript-eslint/eslint-plugin": "^7.2.0",
39
- "@typescript-eslint/parser": "^7.2.0",
39
+ "@typescript-eslint/eslint-plugin": "^7.16.0",
40
+ "@typescript-eslint/parser": "^7.18.0",
40
41
  "eslint": "^8.57.0",
41
42
  "gh-pages": "^6.0.0",
42
- "release-it": "^17.1.1",
43
+ "release-it": "^17.6.0",
43
44
  "typescript": "^5.4.2"
44
45
  },
45
46
  "dependencies": {
46
- "redis": "^4.6.13",
47
- "@redis/client": "*"
47
+ "@redis/client": "^1.6.0",
48
+ "generic-pool": "^3.9.0",
49
+ "redis": "^4.7.0"
48
50
  }
49
51
  }
package/dist/index.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":";;;AAAA,qCAA+C;AAAtC,8FAAA,OAAO,OAAS;AACzB,qCAAyD;AAAhD,uGAAA,cAAc,OAAA;AAAE,mGAAA,UAAU,OAAA;AACnC,2CAAqD;AAA5C,oGAAA,OAAO,OAAY"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"CONFIG_GET.js","sourceRoot":"","sources":["../../../src/commands/CONFIG_GET.ts"],"names":[],"mappings":";;;AAAa,QAAA,YAAY,GAAG,IAAI,CAAC;AAEjC,SAAgB,kBAAkB,CAAC,SAAiB;IAChD,OAAO,CAAC,cAAc,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC;AAC9C,CAAC;AAFD,gDAEC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"CONFIG_SET.js","sourceRoot":"","sources":["../../../src/commands/CONFIG_SET.ts"],"names":[],"mappings":";;;AAAA,SAAgB,kBAAkB,CAAC,SAAiB,EAAE,KAAa;IAC/D,OAAO;QACH,cAAc;QACd,KAAK;QACL,SAAS;QACT,KAAK,CAAC,QAAQ,EAAE;KACnB,CAAC;AACN,CAAC;AAPD,gDAOC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"CONSTRAINT_CREATE.js","sourceRoot":"","sources":["../../../src/commands/CONSTRAINT_CREATE.ts"],"names":[],"mappings":";;;AACA,IAAY,cAGX;AAHD,WAAY,cAAc;IACtB,yCAAuB,CAAA;IACvB,mCAAiB,CAAA;AACrB,CAAC,EAHW,cAAc,8BAAd,cAAc,QAGzB;AAED,IAAY,UAGX;AAHD,WAAY,UAAU;IAClB,2BAAa,CAAA;IACb,2CAA6B,CAAA;AACjC,CAAC,EAHW,UAAU,0BAAV,UAAU,QAGrB;AAED,qHAAqH;AACrH,SAAgB,kBAAkB,CAC9B,GAAW,EACX,cAA8B,EAC9B,UAAsB,EACtB,KAAa,EACb,GAAG,UAAoB;IACvB,OAAO;QACC,kBAAkB,EAAE,QAAQ;QAC5B,GAAG,EAAE,cAAc,EAAE,UAAU,EAAE,KAAK;QACtC,YAAY,EAAE,UAAU,CAAC,MAAM,CAAC,QAAQ,EAAE,EAAE,GAAG,UAAU;KAChE,CAAC;AACN,CAAC;AAXD,gDAWC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"CONSTRAINT_DROP.js","sourceRoot":"","sources":["../../../src/commands/CONSTRAINT_DROP.ts"],"names":[],"mappings":";;;AAEA,mHAAmH;AACnH,SAAgB,kBAAkB,CAC9B,GAAW,EACX,cAA8B,EAC9B,UAAsB,EACtB,KAAa,EACb,GAAG,UAAoB;IACvB,OAAO;QACC,kBAAkB,EAAE,MAAM;QAC1B,GAAG,EAAE,cAAc,EAAE,UAAU,EAAE,KAAK;QACtC,YAAY,EAAE,UAAU,CAAC,MAAM,CAAC,QAAQ,EAAE,EAAE,GAAG,UAAU;KAChE,CAAC;AACN,CAAC;AAXD,gDAWC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"COPY.js","sourceRoot":"","sources":["../../../src/commands/COPY.ts"],"names":[],"mappings":";;;AACA,SAAgB,kBAAkB,CAAE,QAAgB,EAAE,SAAiB;IACnE,OAAO;QACH,YAAY;QACZ,QAAQ;QACR,SAAS;KACZ,CAAC;AACN,CAAC;AAND,gDAMC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"DELETE.js","sourceRoot":"","sources":["../../../src/commands/DELETE.ts"],"names":[],"mappings":";;;AAAa,QAAA,eAAe,GAAG,CAAC,CAAC;AAEjC,SAAgB,kBAAkB,CAAC,GAAW;IAC1C,OAAO,CAAC,cAAc,EAAE,GAAG,CAAC,CAAC;AACjC,CAAC;AAFD,gDAEC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"EXPLAIN.js","sourceRoot":"","sources":["../../../src/commands/EXPLAIN.ts"],"names":[],"mappings":";;;AAAa,QAAA,eAAe,GAAG,CAAC,CAAC;AAEpB,QAAA,YAAY,GAAG,IAAI,CAAC;AAEjC,SAAgB,kBAAkB,CAAC,GAAW,EAAE,KAAa;IACzD,OAAO,CAAC,eAAe,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;AACzC,CAAC;AAFD,gDAEC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"INFO.js","sourceRoot":"","sources":["../../../src/commands/INFO.ts"],"names":[],"mappings":";;;AAAa,QAAA,YAAY,GAAG,IAAI,CAAC;AAEjC,SAAgB,kBAAkB,CAAC,OAAgB;IAC/C,MAAM,IAAI,GAAG,CAAC,YAAY,CAAC,CAAC;IAE5B,IAAI,OAAO,EAAE,CAAC;QACV,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACvB,CAAC;IAED,OAAO,IAAI,CAAC;AAChB,CAAC;AARD,gDAQC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"LIST.js","sourceRoot":"","sources":["../../../src/commands/LIST.ts"],"names":[],"mappings":";;;AAAa,QAAA,YAAY,GAAG,IAAI,CAAC;AAEjC,SAAgB,kBAAkB;IAC9B,OAAO,CAAC,YAAY,CAAC,CAAC;AAC1B,CAAC;AAFD,gDAEC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"PROFILE.js","sourceRoot":"","sources":["../../../src/commands/PROFILE.ts"],"names":[],"mappings":";;;AAAa,QAAA,eAAe,GAAG,CAAC,CAAC;AAEpB,QAAA,YAAY,GAAG,IAAI,CAAC;AAEjC,SAAgB,kBAAkB,CAAC,GAAW,EAAE,KAAa;IACzD,OAAO,CAAC,eAAe,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;AACzC,CAAC;AAFD,gDAEC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"QUERY.js","sourceRoot":"","sources":["../../../src/commands/QUERY.ts"],"names":[],"mappings":";;;AACA,wBAAuE;AAE1D,QAAA,eAAe,GAAG,CAAC,CAAC;AAEjC,SAAgB,kBAAkB,CAC9B,KAA2B,EAC3B,KAA2B,EAC3B,OAAwC,EACxC,OAAiB;IAEjB,OAAO,IAAA,qBAAkB,EACrB,CAAC,aAAa,CAAC,EACf,KAAK,EACL,KAAK,EACL,OAAO,EACP,OAAO,CACV,CAAC;AACN,CAAC;AAbD,gDAaC;AA0BD,SAAgB,cAAc,CAAC,KAAoB;IAC/C,OAAO,KAAK,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC;QACxB,OAAO,EAAE,SAAS;QAClB,IAAI,EAAE,SAAS;QACf,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC;KACrB,CAAC,CAAC,CAAC;QACA,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC;QACjB,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC;QACd,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC;KACrB,CAAC;AACN,CAAC;AAVD,wCAUC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"RO_QUERY.js","sourceRoot":"","sources":["../../../src/commands/RO_QUERY.ts"],"names":[],"mappings":";;;AACA,wBAAuE;AAEvE,iCAA0C;AAAjC,wGAAA,eAAe,OAAA;AAEX,QAAA,YAAY,GAAG,IAAI,CAAC;AAEjC,SAAgB,kBAAkB,CAC9B,KAA2B,EAC3B,KAA2B,EAC3B,OAAwC,EACxC,OAAiB;IAEjB,OAAO,IAAA,qBAAkB,EACrB,CAAC,gBAAgB,CAAC,EAClB,KAAK,EACL,KAAK,EACL,OAAO,EACP,OAAO,CACV,CAAC;AACN,CAAC;AAbD,gDAaC;AAED,iCAAyC;AAAhC,uGAAA,cAAc,OAAA"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"SENTINEL_MASTER.js","sourceRoot":"","sources":["../../../src/commands/SENTINEL_MASTER.ts"],"names":[],"mappings":";;;AAAa,QAAA,YAAY,GAAG,IAAI,CAAC;AAEjC,SAAgB,kBAAkB,CAAC,MAAc;IACzC,OAAO,CAAC,UAAU,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;AAC9C,CAAC;AAFD,gDAEC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"SENTINEL_MASTERS.js","sourceRoot":"","sources":["../../../src/commands/SENTINEL_MASTERS.ts"],"names":[],"mappings":";;;AAAa,QAAA,YAAY,GAAG,IAAI,CAAC;AAEjC,SAAgB,kBAAkB;IAC1B,OAAO,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC;AACvC,CAAC;AAFD,gDAEC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"SLOWLOG.js","sourceRoot":"","sources":["../../../src/commands/SLOWLOG.ts"],"names":[],"mappings":";;;AAAa,QAAA,YAAY,GAAG,IAAI,CAAC;AAEpB,QAAA,eAAe,GAAG,CAAC,CAAC;AAEjC,SAAgB,kBAAkB,CAAC,GAAW;IAC1C,OAAO,CAAC,eAAe,EAAE,GAAG,CAAC,CAAC;AAClC,CAAC;AAFD,gDAEC;AAgBD,SAAgB,cAAc,CAAC,IAAqB;IAChD,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC;QACpD,SAAS,EAAE,IAAI,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC;QAC7C,OAAO;QACP,KAAK;QACL,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC;KACrB,CAAC,CAAC,CAAC;AACR,CAAC;AAPD,wCAOC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/index.ts"],"names":[],"mappings":"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"}
@@ -1,24 +0,0 @@
1
- import { GraphEntityProperties } from "./parser";
2
- /**
3
- * An edge connecting two nodes.
4
- */
5
- export default class Edge {
6
- #private;
7
- /**
8
- * Builds an Edge object.
9
- * @param {number} srcId - Source node of the edge.
10
- * @param {string} relationshipType - Relationship type of the edge.
11
- * @param {number} destId - Destination node of the edge.
12
- * @param {GraphEntityProperties} properties - Properties map of the edge.
13
- */
14
- constructor(id: number, srcId: number, relationshipType: string, destId: number, properties: GraphEntityProperties);
15
- get id(): number;
16
- get relationshipId(): string;
17
- get srcId(): number;
18
- get destId(): number;
19
- get properties(): GraphEntityProperties;
20
- /**
21
- * @returns The string representation of the edge.
22
- */
23
- toString(): string;
24
- }