@neo4j-cypher/query-tools 2.0.0-next.37 → 2.0.0-next.39
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/CHANGELOG.md +21 -0
- package/api-extractor/api-report.api.md +340 -0
- package/api-extractor.json +10 -0
- package/checkApiReport.ts +4 -0
- package/dist/cjs/index.cjs +1849 -0
- package/dist/cjs/index.cjs.map +7 -0
- package/dist/esm/package.json +12 -10
- package/dist/esm/src/connectionErrorHandler.d.ts +1 -0
- package/dist/esm/src/connectionErrorHandler.js.map +1 -1
- package/dist/esm/src/cypher-execution/extract-unique-nodes-and-relationships.d.ts +3 -4
- package/dist/esm/src/cypher-execution/extract-unique-nodes-and-relationships.js +2 -3
- package/dist/esm/src/cypher-execution/extract-unique-nodes-and-relationships.js.map +1 -1
- package/dist/esm/src/cypher-execution/extract-unique-nodes-and-relationships.test.js +0 -4
- package/dist/esm/src/cypher-execution/extract-unique-nodes-and-relationships.test.js.map +1 -1
- package/dist/esm/src/cypher-execution/query-result.js +2 -9
- package/dist/esm/src/cypher-execution/query-result.js.map +1 -1
- package/dist/esm/src/data-transforms/cypher-type-names.d.ts +1 -2
- package/dist/esm/src/data-transforms/record-to-string.js +1 -2
- package/dist/esm/src/data-transforms/record-to-string.js.map +1 -1
- package/dist/esm/src/index.d.ts +5 -4
- package/dist/esm/src/index.js +1 -1
- package/dist/esm/src/index.js.map +1 -1
- package/dist/esm/src/metadataPoller.d.ts +4 -4
- package/dist/esm/src/metadataPoller.js +1 -1
- package/dist/esm/src/metadataPoller.js.map +1 -1
- package/dist/esm/src/neo4jConnection.d.ts +6 -7
- package/dist/esm/src/neo4jConnection.js +3 -2
- package/dist/esm/src/neo4jConnection.js.map +1 -1
- package/dist/esm/src/queries/dataSummary.d.ts +1 -1
- package/dist/esm/src/queries/dataSummary.js.map +1 -1
- package/dist/esm/src/queries/databases.d.ts +2 -3
- package/dist/esm/src/queries/databases.js +0 -3
- package/dist/esm/src/queries/databases.js.map +1 -1
- package/dist/esm/src/queries/functions.d.ts +1 -1
- package/dist/esm/src/queries/functions.js +1 -2
- package/dist/esm/src/queries/functions.js.map +1 -1
- package/dist/esm/src/queries/graphSchema.d.ts +1 -1
- package/dist/esm/src/queries/graphSchema.js +1 -1
- package/dist/esm/src/queries/graphSchema.js.map +1 -1
- package/dist/esm/src/queries/procedures.d.ts +1 -1
- package/dist/esm/src/queries/procedures.js +1 -2
- package/dist/esm/src/queries/procedures.js.map +1 -1
- package/dist/esm/src/queries/version.d.ts +1 -1
- package/dist/esm/src/result-transformers/graph-result-transformer.d.ts +4 -5
- package/dist/esm/src/result-transformers/graph-result-transformer.js +2 -2
- package/dist/esm/src/result-transformers/graph-result-transformer.js.map +1 -1
- package/dist/esm/src/schemaPoller.d.ts +3 -3
- package/dist/esm/src/schemaPoller.js.map +1 -1
- package/dist/esm/src/{integration-tests → tests/integration}/pollingIntegrationTests.test.js +1 -1
- package/dist/esm/src/tests/integration/pollingIntegrationTests.test.js.map +1 -0
- package/dist/{types/src/integration-tests → esm/src/tests/integration}/setupTestContainer.d.ts +1 -1
- package/dist/esm/src/{integration-tests → tests/integration}/setupTestContainer.js +1 -1
- package/dist/esm/src/tests/integration/setupTestContainer.js.map +1 -0
- package/dist/esm/src/types/cypher-data-types.d.ts +1 -2
- package/dist/esm/src/types/sdkTypes.d.ts +2 -3
- package/dist/esm/tsconfig.tsbuildinfo +1 -1
- package/dist/esm/vitest.config.d.mts +1 -1
- package/dist/esm/vitest.config.mjs +20 -4
- package/dist/esm/vitest.config.mjs.map +1 -1
- package/dist/types/src/connectionErrorHandler.d.ts +1 -0
- package/dist/types/src/cypher-execution/extract-unique-nodes-and-relationships.d.ts +3 -4
- package/dist/types/src/data-transforms/cypher-type-names.d.ts +1 -2
- package/dist/types/src/index.d.ts +5 -4
- package/dist/types/src/metadataPoller.d.ts +4 -4
- package/dist/types/src/neo4jConnection.d.ts +6 -7
- package/dist/types/src/queries/dataSummary.d.ts +1 -1
- package/dist/types/src/queries/databases.d.ts +2 -3
- package/dist/types/src/queries/functions.d.ts +1 -1
- package/dist/types/src/queries/graphSchema.d.ts +1 -1
- package/dist/types/src/queries/procedures.d.ts +1 -1
- package/dist/types/src/queries/version.d.ts +1 -1
- package/dist/types/src/result-transformers/graph-result-transformer.d.ts +4 -5
- package/dist/types/src/schemaPoller.d.ts +3 -3
- package/dist/{esm/src/integration-tests → types/src/tests/integration}/setupTestContainer.d.ts +1 -1
- package/dist/types/src/types/cypher-data-types.d.ts +1 -2
- package/dist/types/src/types/sdkTypes.d.ts +2 -3
- package/dist/types/tsconfig.tsbuildinfo +1 -1
- package/dist/types/vitest.config.d.mts +1 -1
- package/package.json +13 -11
- package/src/connectionErrorHandler.ts +5 -2
- package/src/cypher-execution/extract-unique-nodes-and-relationships.test.ts +5 -9
- package/src/cypher-execution/extract-unique-nodes-and-relationships.ts +3 -4
- package/src/cypher-execution/query-result.ts +2 -13
- package/src/data-transforms/cypher-type-names.ts +1 -1
- package/src/data-transforms/record-to-string.ts +2 -3
- package/src/index.ts +17 -3
- package/src/metadataPoller.ts +14 -10
- package/src/neo4jConnection.ts +9 -8
- package/src/queries/dataSummary.ts +4 -4
- package/src/queries/databases.ts +3 -5
- package/src/queries/functions.ts +6 -3
- package/src/queries/graphSchema.ts +7 -6
- package/src/queries/procedures.ts +6 -3
- package/src/queries/version.ts +1 -1
- package/src/result-transformers/graph-result-transformer.ts +7 -9
- package/src/schemaPoller.ts +4 -3
- package/src/{integration-tests → tests/integration}/pollingIntegrationTests.test.ts +7 -6
- package/src/{integration-tests → tests/integration}/setupTestContainer.ts +3 -2
- package/src/types/cypher-data-types.ts +1 -1
- package/src/types/sdkTypes.ts +2 -2
- package/tsconfig.json +4 -4
- package/tsconfig.node.json +1 -2
- package/vitest.config.mts +20 -4
- package/dist/cjs/package.json +0 -46
- package/dist/cjs/src/connectionErrorHandler.d.ts +0 -10
- package/dist/cjs/src/connectionErrorHandler.js +0 -40
- package/dist/cjs/src/connectionErrorHandler.js.map +0 -1
- package/dist/cjs/src/cypher-execution/extract-unique-nodes-and-relationships.d.ts +0 -33
- package/dist/cjs/src/cypher-execution/extract-unique-nodes-and-relationships.js +0 -93
- package/dist/cjs/src/cypher-execution/extract-unique-nodes-and-relationships.js.map +0 -1
- package/dist/cjs/src/cypher-execution/extract-unique-nodes-and-relationships.test.d.ts +0 -1
- package/dist/cjs/src/cypher-execution/extract-unique-nodes-and-relationships.test.js +0 -129
- package/dist/cjs/src/cypher-execution/extract-unique-nodes-and-relationships.test.js.map +0 -1
- package/dist/cjs/src/cypher-execution/query-result.d.ts +0 -11
- package/dist/cjs/src/cypher-execution/query-result.js +0 -239
- package/dist/cjs/src/cypher-execution/query-result.js.map +0 -1
- package/dist/cjs/src/data-transforms/clean-type.d.ts +0 -6
- package/dist/cjs/src/data-transforms/clean-type.js +0 -16
- package/dist/cjs/src/data-transforms/clean-type.js.map +0 -1
- package/dist/cjs/src/data-transforms/cypher-type-names.d.ts +0 -6
- package/dist/cjs/src/data-transforms/cypher-type-names.js +0 -91
- package/dist/cjs/src/data-transforms/cypher-type-names.js.map +0 -1
- package/dist/cjs/src/data-transforms/format-float.d.ts +0 -1
- package/dist/cjs/src/data-transforms/format-float.js +0 -14
- package/dist/cjs/src/data-transforms/format-float.js.map +0 -1
- package/dist/cjs/src/data-transforms/record-to-string.d.ts +0 -8
- package/dist/cjs/src/data-transforms/record-to-string.js +0 -185
- package/dist/cjs/src/data-transforms/record-to-string.js.map +0 -1
- package/dist/cjs/src/index.d.ts +0 -17
- package/dist/cjs/src/index.js +0 -33
- package/dist/cjs/src/index.js.map +0 -1
- package/dist/cjs/src/integration-tests/pollingIntegrationTests.test.js +0 -42
- package/dist/cjs/src/integration-tests/pollingIntegrationTests.test.js.map +0 -1
- package/dist/cjs/src/integration-tests/setupTestContainer.d.ts +0 -10
- package/dist/cjs/src/integration-tests/setupTestContainer.js +0 -23
- package/dist/cjs/src/integration-tests/setupTestContainer.js.map +0 -1
- package/dist/cjs/src/metadataPoller.d.ts +0 -34
- package/dist/cjs/src/metadataPoller.js +0 -214
- package/dist/cjs/src/metadataPoller.js.map +0 -1
- package/dist/cjs/src/neo4jConnection.d.ts +0 -36
- package/dist/cjs/src/neo4jConnection.js +0 -128
- package/dist/cjs/src/neo4jConnection.js.map +0 -1
- package/dist/cjs/src/queries/dataSummary.d.ts +0 -7
- package/dist/cjs/src/queries/dataSummary.js +0 -33
- package/dist/cjs/src/queries/dataSummary.js.map +0 -1
- package/dist/cjs/src/queries/databases.d.ts +0 -28
- package/dist/cjs/src/queries/databases.js +0 -112
- package/dist/cjs/src/queries/databases.js.map +0 -1
- package/dist/cjs/src/queries/functions.d.ts +0 -14
- package/dist/cjs/src/queries/functions.js +0 -87
- package/dist/cjs/src/queries/functions.js.map +0 -1
- package/dist/cjs/src/queries/graphSchema.d.ts +0 -28
- package/dist/cjs/src/queries/graphSchema.js +0 -88
- package/dist/cjs/src/queries/graphSchema.js.map +0 -1
- package/dist/cjs/src/queries/procedures.d.ts +0 -14
- package/dist/cjs/src/queries/procedures.js +0 -105
- package/dist/cjs/src/queries/procedures.js.map +0 -1
- package/dist/cjs/src/queries/roles.d.ts +0 -11
- package/dist/cjs/src/queries/roles.js +0 -24
- package/dist/cjs/src/queries/roles.js.map +0 -1
- package/dist/cjs/src/queries/users.d.ts +0 -15
- package/dist/cjs/src/queries/users.js +0 -24
- package/dist/cjs/src/queries/users.js.map +0 -1
- package/dist/cjs/src/queries/version.d.ts +0 -7
- package/dist/cjs/src/queries/version.js +0 -32
- package/dist/cjs/src/queries/version.js.map +0 -1
- package/dist/cjs/src/result-transformers/graph-result-transformer.d.ts +0 -37
- package/dist/cjs/src/result-transformers/graph-result-transformer.js +0 -37
- package/dist/cjs/src/result-transformers/graph-result-transformer.js.map +0 -1
- package/dist/cjs/src/schemaPoller.d.ts +0 -45
- package/dist/cjs/src/schemaPoller.js +0 -199
- package/dist/cjs/src/schemaPoller.js.map +0 -1
- package/dist/cjs/src/types/cypher-data-types.d.ts +0 -41
- package/dist/cjs/src/types/cypher-data-types.js +0 -47
- package/dist/cjs/src/types/cypher-data-types.js.map +0 -1
- package/dist/cjs/src/types/sdkTypes.d.ts +0 -18
- package/dist/cjs/src/types/sdkTypes.js +0 -11
- package/dist/cjs/src/types/sdkTypes.js.map +0 -1
- package/dist/cjs/tsconfig.tsbuildinfo +0 -1
- package/dist/cjs/vitest.config.d.mts +0 -2
- package/dist/cjs/vitest.config.mjs +0 -10
- package/dist/cjs/vitest.config.mjs.map +0 -1
- package/dist/esm/src/integration-tests/pollingIntegrationTests.test.js.map +0 -1
- package/dist/esm/src/integration-tests/setupTestContainer.js.map +0 -1
- package/dist/types/src/integration-tests/pollingIntegrationTests.test.d.ts +0 -1
- /package/dist/{cjs/src/integration-tests → esm/src/tests/integration}/pollingIntegrationTests.test.d.ts +0 -0
- /package/dist/{esm/src/integration-tests → types/src/tests/integration}/pollingIntegrationTests.test.d.ts +0 -0
|
@@ -1,112 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.listDatabases = listDatabases;
|
|
4
|
-
const neo4j_driver_1 = require("neo4j-driver");
|
|
5
|
-
const sdkTypes_js_1 = require("../types/sdkTypes.js");
|
|
6
|
-
const findComposite = (databases, alias) => {
|
|
7
|
-
const compositeDatabases = databases.filter((db) => db.type === 'composite');
|
|
8
|
-
return compositeDatabases.find((db) => db.constituents?.includes(alias));
|
|
9
|
-
};
|
|
10
|
-
const isCompositeAlias = (databases, alias) => findComposite(databases, alias) !== undefined;
|
|
11
|
-
const removeCompositeAliases = (databases) => {
|
|
12
|
-
return databases.map(({ aliases, ...db }) => ({
|
|
13
|
-
...db,
|
|
14
|
-
aliases: aliases?.filter((alias) => !isCompositeAlias(databases, alias)),
|
|
15
|
-
}));
|
|
16
|
-
};
|
|
17
|
-
const removeSPDShards = (databases) => {
|
|
18
|
-
return databases.filter((db) => {
|
|
19
|
-
return !(db.type !== undefined &&
|
|
20
|
-
(db.type === sdkTypes_js_1.DbType.GRAPH_SHARD || db.type === sdkTypes_js_1.DbType.PROPERTY_SHARD));
|
|
21
|
-
});
|
|
22
|
-
};
|
|
23
|
-
/**
|
|
24
|
-
* List available databases in your dbms
|
|
25
|
-
* https://neo4j.com/docs/cypher-manual/current/administration/databases/#administration-databases-show-databases
|
|
26
|
-
*/
|
|
27
|
-
function listDatabases() {
|
|
28
|
-
const query = 'SHOW DATABASES YIELD *';
|
|
29
|
-
const resultTransformer = neo4j_driver_1.resultTransformers.mapped({
|
|
30
|
-
map(record) {
|
|
31
|
-
const obj = record.toObject();
|
|
32
|
-
if (obj.defaultLanguage) {
|
|
33
|
-
obj.defaultLanguage = obj.defaultLanguage.toUpperCase();
|
|
34
|
-
}
|
|
35
|
-
return obj;
|
|
36
|
-
},
|
|
37
|
-
collect(databases, summary) {
|
|
38
|
-
const instancesRecord = databases.reduce((acc, db) => {
|
|
39
|
-
const instanceId = `${db.name}@${db.address}`;
|
|
40
|
-
acc[instanceId] = db;
|
|
41
|
-
return acc;
|
|
42
|
-
}, {});
|
|
43
|
-
const logicalDatabases = getLogicalDatabases(instancesRecord);
|
|
44
|
-
const uiDatabases = removeSPDShards(removeCompositeAliases(Object.values(logicalDatabases)));
|
|
45
|
-
return {
|
|
46
|
-
databases: sortDatabases(uiDatabases),
|
|
47
|
-
summary,
|
|
48
|
-
};
|
|
49
|
-
},
|
|
50
|
-
});
|
|
51
|
-
return {
|
|
52
|
-
query,
|
|
53
|
-
queryConfig: { resultTransformer, routing: 'READ', database: 'system' },
|
|
54
|
-
};
|
|
55
|
-
}
|
|
56
|
-
/**
|
|
57
|
-
* In clustered environments a single logical database can be backed by multiple physical database instances
|
|
58
|
-
* running on a different servers.
|
|
59
|
-
* This function returns a record of logical databases.
|
|
60
|
-
* A database instance is uniquely identified by its name and address.
|
|
61
|
-
* A logical database is uniquely identified by its name.
|
|
62
|
-
* @input instances - a record of database instances
|
|
63
|
-
* @output a record of logical databases
|
|
64
|
-
*/
|
|
65
|
-
function getLogicalDatabases(instances) {
|
|
66
|
-
// Two databases with the same name but different properties will be merged into one
|
|
67
|
-
// merging rules:
|
|
68
|
-
// - if writer (leader) is present, use it, otherwise use the first one
|
|
69
|
-
// Merge db2 into db1
|
|
70
|
-
const mergeDatabases = (db1, db2) => {
|
|
71
|
-
let mergedDatabase = { ...db1 };
|
|
72
|
-
if (db2.role === 'leader' || db2.writer === true) {
|
|
73
|
-
mergedDatabase = { ...db2 };
|
|
74
|
-
}
|
|
75
|
-
return mergedDatabase;
|
|
76
|
-
};
|
|
77
|
-
return Object.values(instances).reduce((databases, instance) => {
|
|
78
|
-
const key = instance.name;
|
|
79
|
-
const existingDatabase = databases[key];
|
|
80
|
-
const mergedDatabase = existingDatabase
|
|
81
|
-
? mergeDatabases(existingDatabase, instance)
|
|
82
|
-
: instance;
|
|
83
|
-
return {
|
|
84
|
-
...databases,
|
|
85
|
-
[key]: mergedDatabase,
|
|
86
|
-
};
|
|
87
|
-
}, {});
|
|
88
|
-
}
|
|
89
|
-
function sortDatabases(databases) {
|
|
90
|
-
function databaseComparator(a, b) {
|
|
91
|
-
// disable eslint to make code more readable
|
|
92
|
-
/* eslint-disable curly */
|
|
93
|
-
// home is greater than default
|
|
94
|
-
if (a.default && b.home)
|
|
95
|
-
return 1;
|
|
96
|
-
// otherwiser default is greater than anything else
|
|
97
|
-
if (a.default)
|
|
98
|
-
return -1;
|
|
99
|
-
if (b.default)
|
|
100
|
-
return 1;
|
|
101
|
-
// system is less than anything else
|
|
102
|
-
if (a.name === 'system')
|
|
103
|
-
return 1;
|
|
104
|
-
if (b.name === 'system')
|
|
105
|
-
return -1;
|
|
106
|
-
/* eslint-enable curly */
|
|
107
|
-
// else sort alphabetically
|
|
108
|
-
return a.name.localeCompare(b.name);
|
|
109
|
-
}
|
|
110
|
-
return databases.sort(databaseComparator);
|
|
111
|
-
}
|
|
112
|
-
//# sourceMappingURL=databases.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"databases.js","sourceRoot":"","sources":["../../../../src/queries/databases.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
import { CypherVersion, Neo4jFunction } from '@neo4j-cypher/language-support';
|
|
2
|
-
import type { ExecuteQueryArgs } from '../types/sdkTypes.js';
|
|
3
|
-
type ListFunctionArgs = {
|
|
4
|
-
executableByMe: boolean;
|
|
5
|
-
cypherVersion?: CypherVersion;
|
|
6
|
-
};
|
|
7
|
-
/**
|
|
8
|
-
* Gets available functions in your database
|
|
9
|
-
* https://neo4j.com/docs/cypher-manual/current/clauses/listing-functions/
|
|
10
|
-
*/
|
|
11
|
-
export declare function listFunctions({ executableByMe, cypherVersion }?: ListFunctionArgs): ExecuteQueryArgs<{
|
|
12
|
-
functions: Neo4jFunction[];
|
|
13
|
-
}>;
|
|
14
|
-
export {};
|
|
@@ -1,87 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
-
};
|
|
5
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.listFunctions = listFunctions;
|
|
7
|
-
const ajv_1 = __importDefault(require("ajv"));
|
|
8
|
-
const neo4j_driver_1 = require("neo4j-driver");
|
|
9
|
-
const clean_type_js_1 = require("../data-transforms/clean-type.js");
|
|
10
|
-
function cleanTypes(result) {
|
|
11
|
-
return {
|
|
12
|
-
...result,
|
|
13
|
-
argumentDescription: result.argumentDescription.map(clean_type_js_1.cleanTypeDescription),
|
|
14
|
-
returnDescription: (0, clean_type_js_1.cleanType)(result.returnDescription),
|
|
15
|
-
};
|
|
16
|
-
}
|
|
17
|
-
const functionSchema = {
|
|
18
|
-
type: 'object',
|
|
19
|
-
properties: {
|
|
20
|
-
aggregating: { type: 'boolean' },
|
|
21
|
-
argumentDescription: {
|
|
22
|
-
type: 'array',
|
|
23
|
-
items: {
|
|
24
|
-
type: 'object',
|
|
25
|
-
properties: {
|
|
26
|
-
name: { type: 'string' },
|
|
27
|
-
description: { type: 'string' },
|
|
28
|
-
type: { type: 'string' },
|
|
29
|
-
default: { type: 'string', nullable: true },
|
|
30
|
-
isDeprecated: { type: 'boolean', default: false },
|
|
31
|
-
},
|
|
32
|
-
required: ['name', 'description', 'type', 'isDeprecated'],
|
|
33
|
-
},
|
|
34
|
-
},
|
|
35
|
-
category: { type: 'string' },
|
|
36
|
-
description: { type: 'string' },
|
|
37
|
-
isBuiltIn: { type: 'boolean' },
|
|
38
|
-
name: { type: 'string' },
|
|
39
|
-
returnDescription: { type: 'string' },
|
|
40
|
-
signature: { type: 'string' },
|
|
41
|
-
isDeprecated: { type: 'boolean', default: false },
|
|
42
|
-
deprecatedBy: { type: 'string', nullable: true },
|
|
43
|
-
},
|
|
44
|
-
required: [
|
|
45
|
-
'aggregating',
|
|
46
|
-
'argumentDescription',
|
|
47
|
-
'category',
|
|
48
|
-
'description',
|
|
49
|
-
'isBuiltIn',
|
|
50
|
-
'isDeprecated',
|
|
51
|
-
'name',
|
|
52
|
-
'returnDescription',
|
|
53
|
-
'signature',
|
|
54
|
-
],
|
|
55
|
-
additionalProperties: true,
|
|
56
|
-
};
|
|
57
|
-
const validateFunction = new ajv_1.default({ useDefaults: true }).compile(functionSchema);
|
|
58
|
-
/**
|
|
59
|
-
* Gets available functions in your database
|
|
60
|
-
* https://neo4j.com/docs/cypher-manual/current/clauses/listing-functions/
|
|
61
|
-
*/
|
|
62
|
-
function listFunctions({ executableByMe, cypherVersion } = {
|
|
63
|
-
executableByMe: false,
|
|
64
|
-
cypherVersion: undefined,
|
|
65
|
-
}) {
|
|
66
|
-
const query = `${cypherVersion ? cypherVersion + ' ' : ''}
|
|
67
|
-
SHOW FUNCTIONS
|
|
68
|
-
${executableByMe ? 'EXECUTABLE BY CURRENT USER' : ''}
|
|
69
|
-
YIELD *`;
|
|
70
|
-
const resultTransformer = neo4j_driver_1.resultTransformers.mapped({
|
|
71
|
-
map(record) {
|
|
72
|
-
const objResult = record.toObject();
|
|
73
|
-
validateFunction(objResult);
|
|
74
|
-
// eslint-disable-next-line @typescript-eslint/consistent-type-assertions
|
|
75
|
-
const result = cleanTypes(objResult);
|
|
76
|
-
return result;
|
|
77
|
-
},
|
|
78
|
-
collect(functions, summary) {
|
|
79
|
-
return { functions, summary };
|
|
80
|
-
},
|
|
81
|
-
});
|
|
82
|
-
return {
|
|
83
|
-
query,
|
|
84
|
-
queryConfig: { resultTransformer, routing: 'READ', database: 'system' },
|
|
85
|
-
};
|
|
86
|
-
}
|
|
87
|
-
//# sourceMappingURL=functions.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"functions.js","sourceRoot":"","sources":["../../../../src/queries/functions.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
import { ExecuteQueryArgs } from '../types/sdkTypes.js';
|
|
2
|
-
type NeoNode = {
|
|
3
|
-
labels: string[];
|
|
4
|
-
elementId: string;
|
|
5
|
-
};
|
|
6
|
-
type NeoRel = {
|
|
7
|
-
type: string;
|
|
8
|
-
endNodeElementId: string;
|
|
9
|
-
startNodeElementId: string;
|
|
10
|
-
};
|
|
11
|
-
export type GraphSchema = {
|
|
12
|
-
nodes: NeoNode[];
|
|
13
|
-
relationships: NeoRel[];
|
|
14
|
-
};
|
|
15
|
-
export declare const validateGraphSchema: import("ajv").ValidateFunction<GraphSchema>;
|
|
16
|
-
export declare function listGraphSchema(database: string | undefined): ExecuteQueryArgs<{
|
|
17
|
-
graphSchema: {
|
|
18
|
-
from: string;
|
|
19
|
-
to: string;
|
|
20
|
-
relType: string;
|
|
21
|
-
}[];
|
|
22
|
-
}>;
|
|
23
|
-
export declare function extractRelationshipsWithNamedNodes(graphSchemas: GraphSchema[]): {
|
|
24
|
-
from: string;
|
|
25
|
-
to: string;
|
|
26
|
-
relType: string;
|
|
27
|
-
}[];
|
|
28
|
-
export {};
|
|
@@ -1,88 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
-
};
|
|
5
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.validateGraphSchema = void 0;
|
|
7
|
-
exports.listGraphSchema = listGraphSchema;
|
|
8
|
-
exports.extractRelationshipsWithNamedNodes = extractRelationshipsWithNamedNodes;
|
|
9
|
-
const neo4j_driver_1 = require("neo4j-driver");
|
|
10
|
-
const ajv_1 = __importDefault(require("ajv"));
|
|
11
|
-
const graphSchemaSchema = {
|
|
12
|
-
type: 'object',
|
|
13
|
-
properties: {
|
|
14
|
-
nodes: {
|
|
15
|
-
type: 'array',
|
|
16
|
-
items: {
|
|
17
|
-
type: 'object',
|
|
18
|
-
properties: {
|
|
19
|
-
labels: {
|
|
20
|
-
type: 'array',
|
|
21
|
-
items: { type: 'string' },
|
|
22
|
-
},
|
|
23
|
-
elementId: { type: 'string' },
|
|
24
|
-
},
|
|
25
|
-
required: ['labels', 'elementId'],
|
|
26
|
-
additionalProperties: true,
|
|
27
|
-
},
|
|
28
|
-
},
|
|
29
|
-
relationships: {
|
|
30
|
-
type: 'array',
|
|
31
|
-
items: {
|
|
32
|
-
type: 'object',
|
|
33
|
-
properties: {
|
|
34
|
-
type: { type: 'string' },
|
|
35
|
-
endNodeElementId: { type: 'string' },
|
|
36
|
-
startNodeElementId: { type: 'string' },
|
|
37
|
-
},
|
|
38
|
-
required: ['type', 'endNodeElementId', 'startNodeElementId'],
|
|
39
|
-
additionalProperties: true,
|
|
40
|
-
},
|
|
41
|
-
},
|
|
42
|
-
},
|
|
43
|
-
required: ['nodes', 'relationships'],
|
|
44
|
-
additionalProperties: true,
|
|
45
|
-
};
|
|
46
|
-
//exported for testing
|
|
47
|
-
exports.validateGraphSchema = new ajv_1.default({ useDefaults: true }).compile(graphSchemaSchema);
|
|
48
|
-
function listGraphSchema(database) {
|
|
49
|
-
const query = `CALL db.schema.visualization() YIELD *`;
|
|
50
|
-
const resultTransformer = neo4j_driver_1.resultTransformers.mapped({
|
|
51
|
-
map(record) {
|
|
52
|
-
const objResult = record.toObject();
|
|
53
|
-
(0, exports.validateGraphSchema)(objResult);
|
|
54
|
-
return objResult;
|
|
55
|
-
},
|
|
56
|
-
collect(records, summary) {
|
|
57
|
-
return {
|
|
58
|
-
summary,
|
|
59
|
-
graphSchema: extractRelationshipsWithNamedNodes(records),
|
|
60
|
-
};
|
|
61
|
-
},
|
|
62
|
-
});
|
|
63
|
-
return {
|
|
64
|
-
query,
|
|
65
|
-
queryConfig: { resultTransformer, routing: 'READ', database },
|
|
66
|
-
};
|
|
67
|
-
}
|
|
68
|
-
//exported for testing
|
|
69
|
-
function extractRelationshipsWithNamedNodes(graphSchemas) {
|
|
70
|
-
const items = [];
|
|
71
|
-
if (graphSchemas.length !== 1) {
|
|
72
|
-
return items;
|
|
73
|
-
}
|
|
74
|
-
const graphSchema = graphSchemas[0];
|
|
75
|
-
const nodes = {};
|
|
76
|
-
for (const node of graphSchema.nodes) {
|
|
77
|
-
//Query should only return 1 label
|
|
78
|
-
nodes[node.elementId] = node.labels[0];
|
|
79
|
-
}
|
|
80
|
-
for (const rel of graphSchema.relationships) {
|
|
81
|
-
const from = nodes[rel.startNodeElementId];
|
|
82
|
-
const to = nodes[rel.endNodeElementId];
|
|
83
|
-
const relType = rel.type;
|
|
84
|
-
items.push({ from, to, relType });
|
|
85
|
-
}
|
|
86
|
-
return items;
|
|
87
|
-
}
|
|
88
|
-
//# sourceMappingURL=graphSchema.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"graphSchema.js","sourceRoot":"","sources":["../../../../src/queries/graphSchema.ts"],"names":[],"mappings":";;;;;;AA6DA,0CAwBC;AAGD,gFAuBC;AA/GD,+CAAkD;AAElD,8CAA0C;AAkB1C,MAAM,iBAAiB,GAAgC;IACrD,IAAI,EAAE,QAAQ;IACd,UAAU,EAAE;QACV,KAAK,EAAE;YACL,IAAI,EAAE,OAAO;YACb,KAAK,EAAE;gBACL,IAAI,EAAE,QAAQ;gBACd,UAAU,EAAE;oBACV,MAAM,EAAE;wBACN,IAAI,EAAE,OAAO;wBACb,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;qBAC1B;oBACD,SAAS,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;iBAC9B;gBACD,QAAQ,EAAE,CAAC,QAAQ,EAAE,WAAW,CAAC;gBACjC,oBAAoB,EAAE,IAAI;aAC3B;SACF;QACD,aAAa,EAAE;YACb,IAAI,EAAE,OAAO;YACb,KAAK,EAAE;gBACL,IAAI,EAAE,QAAQ;gBACd,UAAU,EAAE;oBACV,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;oBACxB,gBAAgB,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;oBACpC,kBAAkB,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;iBACvC;gBACD,QAAQ,EAAE,CAAC,MAAM,EAAE,kBAAkB,EAAE,oBAAoB,CAAC;gBAC5D,oBAAoB,EAAE,IAAI;aAC3B;SACF;KACF;IACD,QAAQ,EAAE,CAAC,OAAO,EAAE,eAAe,CAAC;IACpC,oBAAoB,EAAE,IAAI;CAC3B,CAAC;AAEF,sBAAsB;AACT,QAAA,mBAAmB,GAAG,IAAI,aAAG,CAAC,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC,OAAO,CACvE,iBAAiB,CAClB,CAAC;AAEF,SAAgB,eAAe,CAC7B,QAA4B;IAI5B,MAAM,KAAK,GAAG,wCAAwC,CAAC;IACvD,MAAM,iBAAiB,GAAG,iCAAkB,CAAC,MAAM,CAAC;QAClD,GAAG,CAAC,MAAM;YACR,MAAM,SAAS,GAAG,MAAM,CAAC,QAAQ,EAAE,CAAC;YACpC,IAAA,2BAAmB,EAAC,SAAS,CAAC,CAAC;YAC/B,OAAO,SAAwB,CAAC;QAClC,CAAC;QACD,OAAO,CAAC,OAAO,EAAE,OAAO;YACtB,OAAO;gBACL,OAAO;gBACP,WAAW,EAAE,kCAAkC,CAAC,OAAO,CAAC;aACzD,CAAC;QACJ,CAAC;KACF,CAAC,CAAC;IAEH,OAAO;QACL,KAAK;QACL,WAAW,EAAE,EAAE,iBAAiB,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE;KAC9D,CAAC;AACJ,CAAC;AAED,sBAAsB;AACtB,SAAgB,kCAAkC,CAChD,YAA2B;IAE3B,MAAM,KAAK,GAAoD,EAAE,CAAC;IAElE,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC9B,OAAO,KAAK,CAAC;IACf,CAAC;IACD,MAAM,WAAW,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC;IACpC,MAAM,KAAK,GAA2B,EAAE,CAAC;IAEzC,KAAK,MAAM,IAAI,IAAI,WAAW,CAAC,KAAK,EAAE,CAAC;QACrC,kCAAkC;QAClC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;IACzC,CAAC;IACD,KAAK,MAAM,GAAG,IAAI,WAAW,CAAC,aAAa,EAAE,CAAC;QAC5C,MAAM,IAAI,GAAG,KAAK,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC;QAC3C,MAAM,EAAE,GAAG,KAAK,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;QACvC,MAAM,OAAO,GAAG,GAAG,CAAC,IAAI,CAAC;QACzB,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC;IACpC,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC"}
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
import { CypherVersion, Neo4jProcedure } from '@neo4j-cypher/language-support';
|
|
2
|
-
import type { ExecuteQueryArgs } from '../types/sdkTypes.js';
|
|
3
|
-
type ListProcedureArgs = {
|
|
4
|
-
executableByMe: boolean;
|
|
5
|
-
cypherVersion?: CypherVersion;
|
|
6
|
-
};
|
|
7
|
-
/**
|
|
8
|
-
* Gets available procedures on your database
|
|
9
|
-
* https://neo4j.com/docs/cypher-manual/current/clauses/listing-procedures/
|
|
10
|
-
*/
|
|
11
|
-
export declare function listProcedures({ executableByMe, cypherVersion }?: ListProcedureArgs): ExecuteQueryArgs<{
|
|
12
|
-
procedures: Neo4jProcedure[];
|
|
13
|
-
}>;
|
|
14
|
-
export {};
|
|
@@ -1,105 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
-
};
|
|
5
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.listProcedures = listProcedures;
|
|
7
|
-
const ajv_1 = __importDefault(require("ajv"));
|
|
8
|
-
const neo4j_driver_1 = require("neo4j-driver");
|
|
9
|
-
const clean_type_js_1 = require("../data-transforms/clean-type.js");
|
|
10
|
-
const procedureSchema = {
|
|
11
|
-
type: 'object',
|
|
12
|
-
properties: {
|
|
13
|
-
admin: { type: 'boolean' },
|
|
14
|
-
argumentDescription: {
|
|
15
|
-
type: 'array',
|
|
16
|
-
items: {
|
|
17
|
-
type: 'object',
|
|
18
|
-
properties: {
|
|
19
|
-
name: { type: 'string' },
|
|
20
|
-
description: { type: 'string' },
|
|
21
|
-
type: { type: 'string' },
|
|
22
|
-
default: { type: 'string', nullable: true },
|
|
23
|
-
isDeprecated: { type: 'boolean', default: false },
|
|
24
|
-
},
|
|
25
|
-
required: ['name', 'description', 'type', 'isDeprecated'],
|
|
26
|
-
},
|
|
27
|
-
},
|
|
28
|
-
description: { type: 'string' },
|
|
29
|
-
mode: { type: 'string' },
|
|
30
|
-
name: { type: 'string' },
|
|
31
|
-
option: { type: 'object' },
|
|
32
|
-
returnDescription: {
|
|
33
|
-
type: 'array',
|
|
34
|
-
items: {
|
|
35
|
-
type: 'object',
|
|
36
|
-
properties: {
|
|
37
|
-
name: { type: 'string' },
|
|
38
|
-
description: { type: 'string' },
|
|
39
|
-
type: { type: 'string' },
|
|
40
|
-
isDeprecated: { type: 'boolean', default: false },
|
|
41
|
-
},
|
|
42
|
-
required: ['name', 'description', 'type', 'isDeprecated'],
|
|
43
|
-
},
|
|
44
|
-
},
|
|
45
|
-
signature: { type: 'string' },
|
|
46
|
-
worksOnSystem: { type: 'boolean' },
|
|
47
|
-
deprecatedBy: { type: 'string', nullable: true },
|
|
48
|
-
},
|
|
49
|
-
required: [
|
|
50
|
-
'admin',
|
|
51
|
-
'argumentDescription',
|
|
52
|
-
'description',
|
|
53
|
-
'mode',
|
|
54
|
-
'name',
|
|
55
|
-
'option',
|
|
56
|
-
'returnDescription',
|
|
57
|
-
'signature',
|
|
58
|
-
'worksOnSystem',
|
|
59
|
-
],
|
|
60
|
-
additionalProperties: true,
|
|
61
|
-
};
|
|
62
|
-
const validateProcedure = new ajv_1.default({ useDefaults: true }).compile(procedureSchema);
|
|
63
|
-
function cleanTypes(result) {
|
|
64
|
-
return {
|
|
65
|
-
...result,
|
|
66
|
-
argumentDescription: result.argumentDescription.map(clean_type_js_1.cleanTypeDescription),
|
|
67
|
-
returnDescription: result.returnDescription.map(clean_type_js_1.cleanTypeDescription),
|
|
68
|
-
};
|
|
69
|
-
}
|
|
70
|
-
/**
|
|
71
|
-
* Gets available procedures on your database
|
|
72
|
-
* https://neo4j.com/docs/cypher-manual/current/clauses/listing-procedures/
|
|
73
|
-
*/
|
|
74
|
-
function listProcedures({ executableByMe, cypherVersion } = {
|
|
75
|
-
executableByMe: false,
|
|
76
|
-
cypherVersion: undefined,
|
|
77
|
-
}) {
|
|
78
|
-
const query = `${cypherVersion ? cypherVersion + ' ' : ''}
|
|
79
|
-
SHOW PROCEDURES
|
|
80
|
-
${executableByMe ? 'EXECUTABLE BY CURRENT USER' : ''}
|
|
81
|
-
YIELD *`;
|
|
82
|
-
const resultTransformer = neo4j_driver_1.resultTransformers.mapped({
|
|
83
|
-
map(record) {
|
|
84
|
-
// Assign default values (e.g. isDeprecated) in case they are not present
|
|
85
|
-
const objResult = record.toObject();
|
|
86
|
-
validateProcedure(objResult);
|
|
87
|
-
// Type is verified in integration tests
|
|
88
|
-
// eslint-disable-next-line @typescript-eslint/consistent-type-assertions
|
|
89
|
-
const result = cleanTypes(objResult);
|
|
90
|
-
return result;
|
|
91
|
-
},
|
|
92
|
-
collect(procedures, summary) {
|
|
93
|
-
return { procedures, summary };
|
|
94
|
-
},
|
|
95
|
-
});
|
|
96
|
-
return {
|
|
97
|
-
query,
|
|
98
|
-
queryConfig: {
|
|
99
|
-
routing: 'READ',
|
|
100
|
-
database: 'system',
|
|
101
|
-
resultTransformer,
|
|
102
|
-
},
|
|
103
|
-
};
|
|
104
|
-
}
|
|
105
|
-
//# sourceMappingURL=procedures.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"procedures.js","sourceRoot":"","sources":["../../../../src/queries/procedures.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
import type { ExecuteQueryArgs } from '../types/sdkTypes.js';
|
|
2
|
-
export type Neo4jRole = {
|
|
3
|
-
role: string;
|
|
4
|
-
};
|
|
5
|
-
/**
|
|
6
|
-
* Gets available roles in your database
|
|
7
|
-
* https://neo4j.com/docs/operations-manual/current/authentication-authorization/manage-roles/#access-control-list-roles
|
|
8
|
-
*/
|
|
9
|
-
export declare function listRoles(): ExecuteQueryArgs<{
|
|
10
|
-
roles: Neo4jRole[];
|
|
11
|
-
}>;
|
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.listRoles = listRoles;
|
|
4
|
-
const neo4j_driver_1 = require("neo4j-driver");
|
|
5
|
-
/**
|
|
6
|
-
* Gets available roles in your database
|
|
7
|
-
* https://neo4j.com/docs/operations-manual/current/authentication-authorization/manage-roles/#access-control-list-roles
|
|
8
|
-
*/
|
|
9
|
-
function listRoles() {
|
|
10
|
-
const query = `SHOW ROLES`;
|
|
11
|
-
const resultTransformer = neo4j_driver_1.resultTransformers.mapped({
|
|
12
|
-
map(record) {
|
|
13
|
-
return record.toObject();
|
|
14
|
-
},
|
|
15
|
-
collect(roles, summary) {
|
|
16
|
-
return { roles, summary };
|
|
17
|
-
},
|
|
18
|
-
});
|
|
19
|
-
return {
|
|
20
|
-
query,
|
|
21
|
-
queryConfig: { resultTransformer, routing: 'READ', database: 'system' },
|
|
22
|
-
};
|
|
23
|
-
}
|
|
24
|
-
//# sourceMappingURL=roles.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"roles.js","sourceRoot":"","sources":["../../../../src/queries/roles.ts"],"names":[],"mappings":";;AAWA,8BAkBC;AA7BD,+CAAkD;AAOlD;;;GAGG;AACH,SAAgB,SAAS;IAGvB,MAAM,KAAK,GAAG,YAAY,CAAC;IAE3B,MAAM,iBAAiB,GAAG,iCAAkB,CAAC,MAAM,CAAC;QAClD,GAAG,CAAC,MAAM;YACR,OAAO,MAAM,CAAC,QAAQ,EAAe,CAAC;QACxC,CAAC;QACD,OAAO,CAAC,KAAK,EAAE,OAAO;YACpB,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC;QAC5B,CAAC;KACF,CAAC,CAAC;IAEH,OAAO;QACL,KAAK;QACL,WAAW,EAAE,EAAE,iBAAiB,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE;KACxE,CAAC;AACJ,CAAC"}
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
import type { ExecuteQueryArgs } from '../types/sdkTypes.js';
|
|
2
|
-
export type Neo4jUser = {
|
|
3
|
-
user: string;
|
|
4
|
-
roles: string[];
|
|
5
|
-
passwordChangeRequired: string;
|
|
6
|
-
suspended?: boolean;
|
|
7
|
-
home?: string;
|
|
8
|
-
};
|
|
9
|
-
/**
|
|
10
|
-
* Gets available users in your database
|
|
11
|
-
* https://neo4j.com/docs/cypher-manual/current/administration/access-control/manage-users/#access-control-list-users
|
|
12
|
-
*/
|
|
13
|
-
export declare function listUsers(): ExecuteQueryArgs<{
|
|
14
|
-
users: Neo4jUser[];
|
|
15
|
-
}>;
|
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.listUsers = listUsers;
|
|
4
|
-
const neo4j_driver_1 = require("neo4j-driver");
|
|
5
|
-
/**
|
|
6
|
-
* Gets available users in your database
|
|
7
|
-
* https://neo4j.com/docs/cypher-manual/current/administration/access-control/manage-users/#access-control-list-users
|
|
8
|
-
*/
|
|
9
|
-
function listUsers() {
|
|
10
|
-
const query = `SHOW USERS`;
|
|
11
|
-
const resultTransformer = neo4j_driver_1.resultTransformers.mapped({
|
|
12
|
-
map(record) {
|
|
13
|
-
return record.toObject();
|
|
14
|
-
},
|
|
15
|
-
collect(users, summary) {
|
|
16
|
-
return { users, summary };
|
|
17
|
-
},
|
|
18
|
-
});
|
|
19
|
-
return {
|
|
20
|
-
query,
|
|
21
|
-
queryConfig: { resultTransformer, routing: 'READ', database: 'system' },
|
|
22
|
-
};
|
|
23
|
-
}
|
|
24
|
-
//# sourceMappingURL=users.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"users.js","sourceRoot":"","sources":["../../../../src/queries/users.ts"],"names":[],"mappings":";;AAgBA,8BAkBC;AAlCD,+CAAkD;AAYlD;;;GAGG;AACH,SAAgB,SAAS;IAGvB,MAAM,KAAK,GAAG,YAAY,CAAC;IAE3B,MAAM,iBAAiB,GAAG,iCAAkB,CAAC,MAAM,CAAC;QAClD,GAAG,CAAC,MAAM;YACR,OAAO,MAAM,CAAC,QAAQ,EAAe,CAAC;QACxC,CAAC;QACD,OAAO,CAAC,KAAK,EAAE,OAAO;YACpB,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC;QAC5B,CAAC;KACF,CAAC,CAAC;IAEH,OAAO;QACL,KAAK;QACL,WAAW,EAAE,EAAE,iBAAiB,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE;KACxE,CAAC;AACJ,CAAC"}
|
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.getVersion = getVersion;
|
|
4
|
-
const neo4j_driver_1 = require("neo4j-driver");
|
|
5
|
-
/**
|
|
6
|
-
* Get dbms version
|
|
7
|
-
*/
|
|
8
|
-
function getVersion() {
|
|
9
|
-
const query = 'CALL dbms.components() YIELD name, versions';
|
|
10
|
-
const resultTransformer = neo4j_driver_1.resultTransformers.mapped({
|
|
11
|
-
map(record) {
|
|
12
|
-
const obj = record.toObject();
|
|
13
|
-
const name = obj.name;
|
|
14
|
-
const versions = obj.versions;
|
|
15
|
-
return { name, versions };
|
|
16
|
-
},
|
|
17
|
-
collect(rows, summary) {
|
|
18
|
-
for (const row of rows) {
|
|
19
|
-
if (row.name === 'Neo4j Kernel') {
|
|
20
|
-
return { serverVersion: row.versions[0], summary };
|
|
21
|
-
}
|
|
22
|
-
}
|
|
23
|
-
//We should not reach this unless the "name" field changes
|
|
24
|
-
return { serverVersion: undefined, summary };
|
|
25
|
-
},
|
|
26
|
-
});
|
|
27
|
-
return {
|
|
28
|
-
query,
|
|
29
|
-
queryConfig: { resultTransformer, routing: 'READ', database: 'system' },
|
|
30
|
-
};
|
|
31
|
-
}
|
|
32
|
-
//# sourceMappingURL=version.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"version.js","sourceRoot":"","sources":["../../../../src/queries/version.ts"],"names":[],"mappings":";;AAMA,gCA4BC;AAlCD,+CAAkD;AAGlD;;GAEG;AACH,SAAgB,UAAU;IAGxB,MAAM,KAAK,GAAG,6CAA6C,CAAC;IAE5D,MAAM,iBAAiB,GAAG,iCAAkB,CAAC,MAAM,CAAC;QAClD,GAAG,CAAC,MAAM;YACR,MAAM,GAAG,GAAG,MAAM,CAAC,QAAQ,EAAE,CAAC;YAC9B,MAAM,IAAI,GAAG,GAAG,CAAC,IAAc,CAAC;YAChC,MAAM,QAAQ,GAAG,GAAG,CAAC,QAAoB,CAAC;YAC1C,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;QAC5B,CAAC;QACD,OAAO,CAAC,IAAI,EAAE,OAAO;YACnB,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;gBACvB,IAAI,GAAG,CAAC,IAAI,KAAK,cAAc,EAAE,CAAC;oBAChC,OAAO,EAAE,aAAa,EAAE,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC;gBACrD,CAAC;YACH,CAAC;YAED,0DAA0D;YAC1D,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC;QAC/C,CAAC;KACF,CAAC,CAAC;IAEH,OAAO;QACL,KAAK;QACL,WAAW,EAAE,EAAE,iBAAiB,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE;KACxE,CAAC;AACJ,CAAC"}
|
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
import { Integer, Record, ResultSummary } from 'neo4j-driver';
|
|
2
|
-
import { DeduplicatedNodesAndRels } from '../cypher-execution/extract-unique-nodes-and-relationships.js';
|
|
3
|
-
/**
|
|
4
|
-
* Result type for graph queries that includes deduplicated nodes and relationships
|
|
5
|
-
* along with the original records and query summary.
|
|
6
|
-
*
|
|
7
|
-
* See {@link DeduplicatedNodesAndRels} for the type of the nodes and relationships.
|
|
8
|
-
*/
|
|
9
|
-
type GraphResult = DeduplicatedNodesAndRels & {
|
|
10
|
-
/** Original Neo4j records returned by the query */
|
|
11
|
-
records: Record[];
|
|
12
|
-
summary: ResultSummary<Integer>;
|
|
13
|
-
};
|
|
14
|
-
/**
|
|
15
|
-
* A result transformer that processes Neo4j query results into a graph format
|
|
16
|
-
* with deduplicated nodes and relationships.
|
|
17
|
-
*
|
|
18
|
-
* This transformer extracts unique nodes and relationships from query records
|
|
19
|
-
* while preserving the original records and summary information. It's particularly
|
|
20
|
-
* useful for graph visualization and analysis where duplicate entities need to be
|
|
21
|
-
* consolidated.
|
|
22
|
-
*
|
|
23
|
-
* @example
|
|
24
|
-
* ```typescript
|
|
25
|
-
* const result: GraphResult = await driver.executeQuery(
|
|
26
|
-
* 'MATCH p=(name: $name)-[]->() RETURN p',
|
|
27
|
-
* { name: 'John' },
|
|
28
|
-
* { resultTransformer: graphResultTransformer },
|
|
29
|
-
* );
|
|
30
|
-
*
|
|
31
|
-
* console.log(result.nodes, result.relationships);
|
|
32
|
-
* ```
|
|
33
|
-
*
|
|
34
|
-
* @returns ResultTransformer producing {@link GraphResult}
|
|
35
|
-
*/
|
|
36
|
-
export declare const graphResultTransformer: import("neo4j-driver").ResultTransformer<GraphResult>;
|
|
37
|
-
export {};
|