@neo4j-cypher/query-tools 2.0.0-next.21 → 2.0.0-next.23

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 (60) hide show
  1. package/CHANGELOG.md +23 -0
  2. package/dist/cjs/package.json +3 -2
  3. package/dist/cjs/src/cypher-execution/extract-unique-nodes-and-relationships.d.ts +33 -0
  4. package/dist/cjs/src/cypher-execution/extract-unique-nodes-and-relationships.js +93 -0
  5. package/dist/cjs/src/cypher-execution/extract-unique-nodes-and-relationships.js.map +1 -0
  6. package/dist/cjs/src/cypher-execution/extract-unique-nodes-and-relationships.test.d.ts +1 -0
  7. package/dist/cjs/src/cypher-execution/extract-unique-nodes-and-relationships.test.js +127 -0
  8. package/dist/cjs/src/cypher-execution/extract-unique-nodes-and-relationships.test.js.map +1 -0
  9. package/dist/cjs/src/index.d.ts +4 -1
  10. package/dist/cjs/src/index.js +21 -1
  11. package/dist/cjs/src/index.js.map +1 -1
  12. package/dist/cjs/src/metadataPoller.js +1 -4
  13. package/dist/cjs/src/metadataPoller.js.map +1 -1
  14. package/dist/cjs/src/neo4jConnection.d.ts +9 -2
  15. package/dist/cjs/src/neo4jConnection.js +44 -23
  16. package/dist/cjs/src/neo4jConnection.js.map +1 -1
  17. package/dist/cjs/src/queries/version.d.ts +0 -3
  18. package/dist/cjs/src/queries/version.js +4 -28
  19. package/dist/cjs/src/queries/version.js.map +1 -1
  20. package/dist/cjs/src/result-transformers/graph-result-transformer.d.ts +36 -0
  21. package/dist/cjs/src/result-transformers/graph-result-transformer.js +37 -0
  22. package/dist/cjs/src/result-transformers/graph-result-transformer.js.map +1 -0
  23. package/dist/cjs/src/schemaPoller.d.ts +1 -0
  24. package/dist/cjs/src/schemaPoller.js +31 -2
  25. package/dist/cjs/src/schemaPoller.js.map +1 -1
  26. package/dist/cjs/tsconfig.tsbuildinfo +1 -1
  27. package/dist/esm/package.json +3 -2
  28. package/dist/esm/src/cypher-execution/extract-unique-nodes-and-relationships.d.ts +33 -0
  29. package/dist/esm/src/cypher-execution/extract-unique-nodes-and-relationships.js +89 -0
  30. package/dist/esm/src/cypher-execution/extract-unique-nodes-and-relationships.js.map +1 -0
  31. package/dist/esm/src/cypher-execution/extract-unique-nodes-and-relationships.test.d.ts +1 -0
  32. package/dist/esm/src/cypher-execution/extract-unique-nodes-and-relationships.test.js +125 -0
  33. package/dist/esm/src/cypher-execution/extract-unique-nodes-and-relationships.test.js.map +1 -0
  34. package/dist/esm/src/index.d.ts +4 -1
  35. package/dist/esm/src/index.js +4 -1
  36. package/dist/esm/src/index.js.map +1 -1
  37. package/dist/esm/src/metadataPoller.js +2 -5
  38. package/dist/esm/src/metadataPoller.js.map +1 -1
  39. package/dist/esm/src/neo4jConnection.d.ts +9 -2
  40. package/dist/esm/src/neo4jConnection.js +44 -23
  41. package/dist/esm/src/neo4jConnection.js.map +1 -1
  42. package/dist/esm/src/queries/version.d.ts +0 -3
  43. package/dist/esm/src/queries/version.js +4 -27
  44. package/dist/esm/src/queries/version.js.map +1 -1
  45. package/dist/esm/src/result-transformers/graph-result-transformer.d.ts +36 -0
  46. package/dist/esm/src/result-transformers/graph-result-transformer.js +34 -0
  47. package/dist/esm/src/result-transformers/graph-result-transformer.js.map +1 -0
  48. package/dist/esm/src/schemaPoller.d.ts +1 -0
  49. package/dist/esm/src/schemaPoller.js +32 -3
  50. package/dist/esm/src/schemaPoller.js.map +1 -1
  51. package/dist/esm/tsconfig.tsbuildinfo +1 -1
  52. package/package.json +4 -3
  53. package/src/cypher-execution/extract-unique-nodes-and-relationships.test.ts +235 -0
  54. package/src/cypher-execution/extract-unique-nodes-and-relationships.ts +127 -0
  55. package/src/index.ts +7 -1
  56. package/src/metadataPoller.ts +2 -6
  57. package/src/neo4jConnection.ts +67 -29
  58. package/src/queries/version.ts +5 -32
  59. package/src/result-transformers/graph-result-transformer.ts +57 -0
  60. package/src/schemaPoller.ts +45 -6
@@ -13,7 +13,7 @@ import {
13
13
  } from './metadataPoller';
14
14
  import { Neo4jConnection } from './neo4jConnection';
15
15
  import { listDatabases } from './queries/databases.js';
16
- import { getCypherVersions } from './queries/version';
16
+ import { getVersion } from './queries/version';
17
17
 
18
18
  export type ConnnectionResult = {
19
19
  success: boolean;
@@ -152,6 +152,29 @@ export class Neo4jSchemaPoller {
152
152
  clearTimeout(this.reconnectionTimeout);
153
153
  }
154
154
 
155
+ private async getAvailableCypherVersions(): Promise<string[]> {
156
+ // We need to use a query we can fire against the system database
157
+ // because we might not have no information on what user database
158
+ // we could use to try a simpler CYPHER 25 RETURN true query
159
+ const { query: cypherVersionQuery, queryConfig: cypherVersionQueryConfig } =
160
+ getVersion();
161
+
162
+ try {
163
+ if (this.driver) {
164
+ await this.driver.executeQuery(
165
+ 'CYPHER 25' + ' ' + cypherVersionQuery,
166
+ {},
167
+ cypherVersionQueryConfig,
168
+ );
169
+ return ['5', '25'];
170
+ }
171
+ } catch (e) {
172
+ return ['5'];
173
+ }
174
+
175
+ return ['5'];
176
+ }
177
+
155
178
  private async connectAndStartMetadataPoller(
156
179
  url: string,
157
180
  credentials: { username: string; password: string },
@@ -180,14 +203,30 @@ export class Neo4jSchemaPoller {
180
203
  database,
181
204
  );
182
205
 
183
- const { query: cypherVersionQuery, queryConfig: cypherVersionQueryConfig } =
184
- getCypherVersions();
185
- const { serverCypherVersions } = await this.driver.executeQuery(
186
- cypherVersionQuery,
206
+ const serverCypherVersions = await this.getAvailableCypherVersions();
207
+
208
+ const { query: serverVersionQuery, queryConfig: serverVersionQueryConfig } =
209
+ getVersion();
210
+ let { serverVersion } = await this.driver.executeQuery(
211
+ serverVersionQuery,
187
212
  {},
188
- cypherVersionQueryConfig,
213
+ serverVersionQueryConfig,
189
214
  );
190
215
 
216
+ // If the server version is 5.27.0 we have to use the agent to
217
+ // really know whether we are in 2025.01, 2025.02 or 2025.03
218
+ if (serverVersion?.startsWith('5.27.0')) {
219
+ const agent = summary.server.agent;
220
+ if (agent) {
221
+ const matchedVersion = agent.match(/\d+\.\d+\.\d+/);
222
+ if (matchedVersion) {
223
+ serverVersion = matchedVersion[0];
224
+ }
225
+ }
226
+ }
227
+
228
+ this.connection.serverVersion = serverVersion;
229
+
191
230
  this.metadata = new ConnectedMetadataPoller(
192
231
  databases,
193
232
  this.parameters,