@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.
- package/CHANGELOG.md +23 -0
- package/dist/cjs/package.json +3 -2
- package/dist/cjs/src/cypher-execution/extract-unique-nodes-and-relationships.d.ts +33 -0
- package/dist/cjs/src/cypher-execution/extract-unique-nodes-and-relationships.js +93 -0
- package/dist/cjs/src/cypher-execution/extract-unique-nodes-and-relationships.js.map +1 -0
- package/dist/cjs/src/cypher-execution/extract-unique-nodes-and-relationships.test.d.ts +1 -0
- package/dist/cjs/src/cypher-execution/extract-unique-nodes-and-relationships.test.js +127 -0
- package/dist/cjs/src/cypher-execution/extract-unique-nodes-and-relationships.test.js.map +1 -0
- package/dist/cjs/src/index.d.ts +4 -1
- package/dist/cjs/src/index.js +21 -1
- package/dist/cjs/src/index.js.map +1 -1
- package/dist/cjs/src/metadataPoller.js +1 -4
- package/dist/cjs/src/metadataPoller.js.map +1 -1
- package/dist/cjs/src/neo4jConnection.d.ts +9 -2
- package/dist/cjs/src/neo4jConnection.js +44 -23
- package/dist/cjs/src/neo4jConnection.js.map +1 -1
- package/dist/cjs/src/queries/version.d.ts +0 -3
- package/dist/cjs/src/queries/version.js +4 -28
- package/dist/cjs/src/queries/version.js.map +1 -1
- package/dist/cjs/src/result-transformers/graph-result-transformer.d.ts +36 -0
- package/dist/cjs/src/result-transformers/graph-result-transformer.js +37 -0
- package/dist/cjs/src/result-transformers/graph-result-transformer.js.map +1 -0
- package/dist/cjs/src/schemaPoller.d.ts +1 -0
- package/dist/cjs/src/schemaPoller.js +31 -2
- package/dist/cjs/src/schemaPoller.js.map +1 -1
- package/dist/cjs/tsconfig.tsbuildinfo +1 -1
- package/dist/esm/package.json +3 -2
- package/dist/esm/src/cypher-execution/extract-unique-nodes-and-relationships.d.ts +33 -0
- package/dist/esm/src/cypher-execution/extract-unique-nodes-and-relationships.js +89 -0
- package/dist/esm/src/cypher-execution/extract-unique-nodes-and-relationships.js.map +1 -0
- package/dist/esm/src/cypher-execution/extract-unique-nodes-and-relationships.test.d.ts +1 -0
- package/dist/esm/src/cypher-execution/extract-unique-nodes-and-relationships.test.js +125 -0
- package/dist/esm/src/cypher-execution/extract-unique-nodes-and-relationships.test.js.map +1 -0
- package/dist/esm/src/index.d.ts +4 -1
- package/dist/esm/src/index.js +4 -1
- package/dist/esm/src/index.js.map +1 -1
- package/dist/esm/src/metadataPoller.js +2 -5
- package/dist/esm/src/metadataPoller.js.map +1 -1
- package/dist/esm/src/neo4jConnection.d.ts +9 -2
- package/dist/esm/src/neo4jConnection.js +44 -23
- package/dist/esm/src/neo4jConnection.js.map +1 -1
- package/dist/esm/src/queries/version.d.ts +0 -3
- package/dist/esm/src/queries/version.js +4 -27
- package/dist/esm/src/queries/version.js.map +1 -1
- package/dist/esm/src/result-transformers/graph-result-transformer.d.ts +36 -0
- package/dist/esm/src/result-transformers/graph-result-transformer.js +34 -0
- package/dist/esm/src/result-transformers/graph-result-transformer.js.map +1 -0
- package/dist/esm/src/schemaPoller.d.ts +1 -0
- package/dist/esm/src/schemaPoller.js +32 -3
- package/dist/esm/src/schemaPoller.js.map +1 -1
- package/dist/esm/tsconfig.tsbuildinfo +1 -1
- package/package.json +4 -3
- package/src/cypher-execution/extract-unique-nodes-and-relationships.test.ts +235 -0
- package/src/cypher-execution/extract-unique-nodes-and-relationships.ts +127 -0
- package/src/index.ts +7 -1
- package/src/metadataPoller.ts +2 -6
- package/src/neo4jConnection.ts +67 -29
- package/src/queries/version.ts +5 -32
- package/src/result-transformers/graph-result-transformer.ts +57 -0
- package/src/schemaPoller.ts +45 -6
package/dist/esm/package.json
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
"description": "",
|
|
4
4
|
"author": "Neo4j Inc.",
|
|
5
5
|
"license": "Apache-2.0",
|
|
6
|
-
"version": "2.0.0-next.
|
|
6
|
+
"version": "2.0.0-next.23",
|
|
7
7
|
"main": "./dist/cjs/src/index.js",
|
|
8
8
|
"module": "./dist/esm/src/index.js",
|
|
9
9
|
"exports": {
|
|
@@ -34,6 +34,7 @@
|
|
|
34
34
|
"build-esm": "tsc --module esnext --outDir dist/esm",
|
|
35
35
|
"build-commonjs": "tsc --module commonjs --outDir dist/cjs",
|
|
36
36
|
"dev": "concurrently 'npm:build-esm -- --watch' 'npm:build-commonjs -- --watch'",
|
|
37
|
-
"clean": "rm -rf {dist,tsconfig.tsbuildinfo}"
|
|
37
|
+
"clean": "rm -rf {dist,tsconfig.tsbuildinfo}",
|
|
38
|
+
"test": "vitest"
|
|
38
39
|
}
|
|
39
40
|
}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import type { Integer, Node, Record, RecordShape, Relationship } from 'neo4j-driver';
|
|
2
|
+
import { CypherProperty } from '../data-types/cypher-data-types';
|
|
3
|
+
export type Properties = RecordShape<string, CypherProperty>;
|
|
4
|
+
/**
|
|
5
|
+
* Result type containing deduplicated nodes and relationships extracted from Neo4j records.
|
|
6
|
+
*/
|
|
7
|
+
export type DeduplicatedNodesAndRels = {
|
|
8
|
+
/** Array of unique nodes found in the records */
|
|
9
|
+
nodes: Node<Integer, Properties, string>[];
|
|
10
|
+
/** Array of unique relationships found in the records */
|
|
11
|
+
relationships: Relationship<Integer, Properties, string>[];
|
|
12
|
+
/** Whether the max node limit was reached during extraction */
|
|
13
|
+
limitHit: boolean;
|
|
14
|
+
};
|
|
15
|
+
/**
|
|
16
|
+
* Extracts and deduplicates nodes and relationships from Neo4j query records.
|
|
17
|
+
*
|
|
18
|
+
* This function processes Neo4j records to find all nodes and relationships,
|
|
19
|
+
* removing duplicates based on their element IDs. It can handle various data
|
|
20
|
+
* structures including individual nodes/relationships, paths, arrays, and
|
|
21
|
+
* nested objects.
|
|
22
|
+
*
|
|
23
|
+
* @param records - Array of Neo4j records to process
|
|
24
|
+
* @param options - Configuration options for extraction
|
|
25
|
+
* @param options.nodeLimit - Maximum number of unique nodes to extract (optional)
|
|
26
|
+
* @param options.keepDanglingRels - Whether to keep relationships whose start/end nodes are missing (default: false)
|
|
27
|
+
*
|
|
28
|
+
* @returns The {@link DeduplicatedNodesAndRels} containing unique nodes and relationships
|
|
29
|
+
*/
|
|
30
|
+
export declare const extractUniqueNodesAndRels: (records: Record[], { nodeLimit, keepDanglingRels, }?: {
|
|
31
|
+
nodeLimit?: number;
|
|
32
|
+
keepDanglingRels?: boolean;
|
|
33
|
+
}) => DeduplicatedNodesAndRels;
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
import { isNode, isPath, isRelationship } from 'neo4j-driver';
|
|
2
|
+
/**
|
|
3
|
+
* Extracts and deduplicates nodes and relationships from Neo4j query records.
|
|
4
|
+
*
|
|
5
|
+
* This function processes Neo4j records to find all nodes and relationships,
|
|
6
|
+
* removing duplicates based on their element IDs. It can handle various data
|
|
7
|
+
* structures including individual nodes/relationships, paths, arrays, and
|
|
8
|
+
* nested objects.
|
|
9
|
+
*
|
|
10
|
+
* @param records - Array of Neo4j records to process
|
|
11
|
+
* @param options - Configuration options for extraction
|
|
12
|
+
* @param options.nodeLimit - Maximum number of unique nodes to extract (optional)
|
|
13
|
+
* @param options.keepDanglingRels - Whether to keep relationships whose start/end nodes are missing (default: false)
|
|
14
|
+
*
|
|
15
|
+
* @returns The {@link DeduplicatedNodesAndRels} containing unique nodes and relationships
|
|
16
|
+
*/
|
|
17
|
+
export const extractUniqueNodesAndRels = (records, { nodeLimit, keepDanglingRels = false, } = {}) => {
|
|
18
|
+
let limitHit = false;
|
|
19
|
+
const items = new Set();
|
|
20
|
+
for (const record of records) {
|
|
21
|
+
for (const key of record.keys) {
|
|
22
|
+
items.add(record.get(key));
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
const paths = [];
|
|
26
|
+
const nodeMap = new Map();
|
|
27
|
+
function addNode(n) {
|
|
28
|
+
if (!limitHit) {
|
|
29
|
+
const id = n.elementId.toString();
|
|
30
|
+
if (!nodeMap.has(id)) {
|
|
31
|
+
nodeMap.set(id, n);
|
|
32
|
+
}
|
|
33
|
+
if (typeof nodeLimit === 'number' && nodeMap.size === nodeLimit) {
|
|
34
|
+
limitHit = true;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
const relMap = new Map();
|
|
39
|
+
function addRel(r) {
|
|
40
|
+
const id = r.elementId.toString();
|
|
41
|
+
if (!relMap.has(id)) {
|
|
42
|
+
relMap.set(id, r);
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
const findAllEntities = (item) => {
|
|
46
|
+
if (typeof item !== 'object' || !item) {
|
|
47
|
+
return;
|
|
48
|
+
}
|
|
49
|
+
if (isRelationship(item)) {
|
|
50
|
+
addRel(item);
|
|
51
|
+
}
|
|
52
|
+
else if (isNode(item)) {
|
|
53
|
+
addNode(item);
|
|
54
|
+
}
|
|
55
|
+
else if (isPath(item)) {
|
|
56
|
+
paths.push(item);
|
|
57
|
+
}
|
|
58
|
+
else if (Array.isArray(item)) {
|
|
59
|
+
item.forEach(findAllEntities);
|
|
60
|
+
}
|
|
61
|
+
else {
|
|
62
|
+
Object.values(item).forEach(findAllEntities);
|
|
63
|
+
}
|
|
64
|
+
};
|
|
65
|
+
findAllEntities(Array.from(items));
|
|
66
|
+
for (const path of paths) {
|
|
67
|
+
addNode(path.start);
|
|
68
|
+
addNode(path.end);
|
|
69
|
+
for (const segment of path.segments) {
|
|
70
|
+
addNode(segment.start);
|
|
71
|
+
addNode(segment.end);
|
|
72
|
+
addRel(segment.relationship);
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
const nodes = Array.from(nodeMap.values());
|
|
76
|
+
const relationships = Array.from(relMap.values()).filter((item) => {
|
|
77
|
+
if (keepDanglingRels) {
|
|
78
|
+
return true;
|
|
79
|
+
}
|
|
80
|
+
// We'd get dangling relationships from
|
|
81
|
+
// match ()-[a:ACTED_IN]->() return a;
|
|
82
|
+
// or from hitting the node limit
|
|
83
|
+
const start = item.startNodeElementId.toString();
|
|
84
|
+
const end = item.endNodeElementId.toString();
|
|
85
|
+
return nodeMap.has(start) && nodeMap.has(end);
|
|
86
|
+
});
|
|
87
|
+
return { nodes, relationships, limitHit };
|
|
88
|
+
};
|
|
89
|
+
//# sourceMappingURL=extract-unique-nodes-and-relationships.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"extract-unique-nodes-and-relationships.js","sourceRoot":"","sources":["../../../../src/cypher-execution/extract-unique-nodes-and-relationships.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
import { Node, Path, PathSegment, Relationship } from 'neo4j-driver';
|
|
2
|
+
import { describe, expect, test } from 'vitest';
|
|
3
|
+
import { extractUniqueNodesAndRels } from './extract-unique-nodes-and-relationships';
|
|
4
|
+
describe('extractNodesAndRels', () => {
|
|
5
|
+
test('should map bolt records with a path to nodes and relationships', () => {
|
|
6
|
+
const startNode = new Node(1, ['Person'], {
|
|
7
|
+
prop1: 'prop1',
|
|
8
|
+
}, 'node1');
|
|
9
|
+
const endNode = new Node(2, ['Movie'], {
|
|
10
|
+
prop2: 'prop2',
|
|
11
|
+
}, 'node2');
|
|
12
|
+
const relationship = new Relationship(3, 1, 2, 'ACTED_IN', {}, 'rel1', 'node1', 'node2');
|
|
13
|
+
const pathSegment = new PathSegment(startNode, relationship, endNode);
|
|
14
|
+
const path = new Path(startNode, endNode, [pathSegment]);
|
|
15
|
+
// eslint-disable-next-line @typescript-eslint/consistent-type-assertions
|
|
16
|
+
const boltRecord = {
|
|
17
|
+
keys: ['p'],
|
|
18
|
+
get: () => path,
|
|
19
|
+
};
|
|
20
|
+
const { nodes, relationships } = extractUniqueNodesAndRels([boltRecord]);
|
|
21
|
+
const [graphNodeStart] = nodes.filter((node) => node.elementId.toString() === 'node1');
|
|
22
|
+
const [graphNodeEnd] = nodes.filter((node) => node.elementId.toString() === 'node2');
|
|
23
|
+
const [firstRel] = relationships;
|
|
24
|
+
if (graphNodeStart === undefined ||
|
|
25
|
+
graphNodeEnd === undefined ||
|
|
26
|
+
firstRel === undefined) {
|
|
27
|
+
throw new Error('Error in test data, got undefined');
|
|
28
|
+
}
|
|
29
|
+
expect(nodes.length).toBe(2);
|
|
30
|
+
expect(graphNodeStart.labels).toEqual(['Person']);
|
|
31
|
+
expect(graphNodeStart.properties).toEqual({ prop1: 'prop1' });
|
|
32
|
+
expect(graphNodeEnd.labels).toEqual(['Movie']);
|
|
33
|
+
expect(graphNodeEnd.properties).toEqual({ prop2: 'prop2' });
|
|
34
|
+
expect(relationships.length).toBe(1);
|
|
35
|
+
expect(firstRel.elementId.toString()).toEqual('rel1');
|
|
36
|
+
expect(firstRel.startNodeElementId.toString()).toEqual('node1');
|
|
37
|
+
expect(firstRel.endNodeElementId.toString()).toEqual('node2');
|
|
38
|
+
expect(firstRel.type).toEqual('ACTED_IN');
|
|
39
|
+
expect(firstRel.properties).toEqual({});
|
|
40
|
+
});
|
|
41
|
+
test('should deduplicate bolt records based on node id and filter out dangling relationships', () => {
|
|
42
|
+
const node1 = new Node(1, ['Person'], {
|
|
43
|
+
prop1: 'prop1',
|
|
44
|
+
}, 'node1');
|
|
45
|
+
const node2 = new Node(1, ['Person'], {
|
|
46
|
+
prop1: 'prop1',
|
|
47
|
+
}, 'node1');
|
|
48
|
+
const relationship = new Relationship(2, 1, 34, 'ACTED_IN', {}, 'rel1', 'node1', 'node34');
|
|
49
|
+
// eslint-disable-next-line @typescript-eslint/consistent-type-assertions
|
|
50
|
+
const boltRecord = {
|
|
51
|
+
keys: ['n'],
|
|
52
|
+
get: () => [node1, node2, relationship],
|
|
53
|
+
};
|
|
54
|
+
const { nodes, relationships, limitHit } = extractUniqueNodesAndRels([
|
|
55
|
+
boltRecord,
|
|
56
|
+
]);
|
|
57
|
+
expect(limitHit).toBe(false);
|
|
58
|
+
expect(nodes.length).toBe(1);
|
|
59
|
+
expect(relationships.length).toBe(0);
|
|
60
|
+
});
|
|
61
|
+
test('should respect the max nodes limit and filter out dangling relations', () => {
|
|
62
|
+
const startNode = new Node(1, ['Person'], {
|
|
63
|
+
prop1: 'prop1',
|
|
64
|
+
}, 'node1');
|
|
65
|
+
const endNode = new Node(2, ['Movie'], {
|
|
66
|
+
prop2: 'prop2',
|
|
67
|
+
}, 'node2');
|
|
68
|
+
const relationship = new Relationship(3, 1, 2, 'ACTED_IN', {}, 'rel1', 'node1', 'node2');
|
|
69
|
+
const pathSegment = new PathSegment(startNode, relationship, endNode);
|
|
70
|
+
const path = new Path(startNode, endNode, [pathSegment]);
|
|
71
|
+
// eslint-disable-next-line @typescript-eslint/consistent-type-assertions
|
|
72
|
+
const boltRecord = {
|
|
73
|
+
keys: ['p'],
|
|
74
|
+
get: () => path,
|
|
75
|
+
};
|
|
76
|
+
const { nodes, relationships, limitHit } = extractUniqueNodesAndRels([boltRecord], { nodeLimit: 1 });
|
|
77
|
+
expect(limitHit).toBe(true);
|
|
78
|
+
expect(nodes.length).toBe(1);
|
|
79
|
+
const [graphNodeStart] = nodes;
|
|
80
|
+
expect(graphNodeStart).toBeDefined();
|
|
81
|
+
if (graphNodeStart === undefined) {
|
|
82
|
+
throw new Error('Error in test data, got undefined');
|
|
83
|
+
}
|
|
84
|
+
expect(graphNodeStart.labels).toEqual(['Person']);
|
|
85
|
+
expect(graphNodeStart.properties).toEqual({ prop1: 'prop1' });
|
|
86
|
+
expect(relationships.length).toBe(0);
|
|
87
|
+
});
|
|
88
|
+
test('should respect the max nodes limit and not filter out dangling relations when asked to keep them', () => {
|
|
89
|
+
const startNode = new Node(1, ['Person'], {
|
|
90
|
+
prop1: 'prop1',
|
|
91
|
+
}, 'node1');
|
|
92
|
+
const endNode = new Node(2, ['Movie'], {
|
|
93
|
+
prop2: 'prop2',
|
|
94
|
+
}, 'node2');
|
|
95
|
+
const relationship = new Relationship(3, 1, 2, 'ACTED_IN', {}, 'rel1', 'node1', 'node2');
|
|
96
|
+
const pathSegment = new PathSegment(startNode, relationship, endNode);
|
|
97
|
+
const path = new Path(startNode, endNode, [pathSegment]);
|
|
98
|
+
// eslint-disable-next-line @typescript-eslint/consistent-type-assertions
|
|
99
|
+
const boltRecord = {
|
|
100
|
+
keys: ['p'],
|
|
101
|
+
get: () => path,
|
|
102
|
+
};
|
|
103
|
+
const { nodes, relationships, limitHit } = extractUniqueNodesAndRels([boltRecord], {
|
|
104
|
+
nodeLimit: 1,
|
|
105
|
+
keepDanglingRels: true,
|
|
106
|
+
});
|
|
107
|
+
expect(limitHit).toBe(true);
|
|
108
|
+
expect(nodes.length).toBe(1);
|
|
109
|
+
const [graphNodeStart] = nodes;
|
|
110
|
+
expect(graphNodeStart).toBeDefined();
|
|
111
|
+
if (graphNodeStart === undefined) {
|
|
112
|
+
throw new Error('Error in test data, got undefined');
|
|
113
|
+
}
|
|
114
|
+
expect(graphNodeStart.labels).toEqual(['Person']);
|
|
115
|
+
expect(graphNodeStart.properties).toEqual({ prop1: 'prop1' });
|
|
116
|
+
expect(relationships.length).toBe(1);
|
|
117
|
+
});
|
|
118
|
+
test('should handle empty results', () => {
|
|
119
|
+
const { nodes, relationships, limitHit } = extractUniqueNodesAndRels([]);
|
|
120
|
+
expect(limitHit).toBe(false);
|
|
121
|
+
expect(nodes.length).toBe(0);
|
|
122
|
+
expect(relationships.length).toBe(0);
|
|
123
|
+
});
|
|
124
|
+
});
|
|
125
|
+
//# sourceMappingURL=extract-unique-nodes-and-relationships.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"extract-unique-nodes-and-relationships.test.js","sourceRoot":"","sources":["../../../../src/cypher-execution/extract-unique-nodes-and-relationships.test.ts"],"names":[],"mappings":"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"}
|
package/dist/esm/src/index.d.ts
CHANGED
|
@@ -1,14 +1,17 @@
|
|
|
1
1
|
export { FRIENDLY_ERROR_MESSAGES } from './connectionErrorHandler';
|
|
2
2
|
export type { ConnectionError } from './connectionErrorHandler';
|
|
3
|
+
export * from './cypher-execution/extract-unique-nodes-and-relationships';
|
|
3
4
|
export { deserializeTypeAnnotations, serializeTypeAnnotations, } from './cypher-execution/query-result';
|
|
4
5
|
export type { Neo4jType } from './cypher-execution/query-result';
|
|
5
|
-
export { getCypherTypeName } from './data-transforms/cypher-type-names';
|
|
6
|
+
export { getCypherTypeName, getPropertyTypeDisplayName, } from './data-transforms/cypher-type-names';
|
|
6
7
|
export type { CypherDataTypeName } from './data-transforms/cypher-type-names';
|
|
7
8
|
export { cypherDataToString } from './data-transforms/record-to-string';
|
|
8
9
|
export type { CypherProperty } from './data-types/cypher-data-types';
|
|
9
10
|
export type { ConnectedMetadataPoller as CypherMetadataPoller, DisconnectedMetadataPoller as EmptyMetadataPoller, MetadataPoller, } from './metadataPoller';
|
|
10
11
|
export type { Neo4jConnection, QueryResultWithLimit } from './neo4jConnection';
|
|
11
12
|
export type { Database } from './queries/databases';
|
|
13
|
+
export { graphResultTransformer } from './result-transformers/graph-result-transformer';
|
|
12
14
|
export { Neo4jSchemaPoller } from './schemaPoller';
|
|
13
15
|
export type { ConnnectionResult } from './schemaPoller';
|
|
14
16
|
export type { CypherDataType } from './types/cypher-data-types';
|
|
17
|
+
export { getVersion } from './queries/version';
|
package/dist/esm/src/index.js
CHANGED
|
@@ -1,6 +1,9 @@
|
|
|
1
1
|
export { FRIENDLY_ERROR_MESSAGES } from './connectionErrorHandler';
|
|
2
|
+
export * from './cypher-execution/extract-unique-nodes-and-relationships';
|
|
2
3
|
export { deserializeTypeAnnotations, serializeTypeAnnotations, } from './cypher-execution/query-result';
|
|
3
|
-
export { getCypherTypeName } from './data-transforms/cypher-type-names';
|
|
4
|
+
export { getCypherTypeName, getPropertyTypeDisplayName, } from './data-transforms/cypher-type-names';
|
|
4
5
|
export { cypherDataToString } from './data-transforms/record-to-string';
|
|
6
|
+
export { graphResultTransformer } from './result-transformers/graph-result-transformer';
|
|
5
7
|
export { Neo4jSchemaPoller } from './schemaPoller';
|
|
8
|
+
export { getVersion } from './queries/version';
|
|
6
9
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,uBAAuB,EAAE,MAAM,0BAA0B,CAAC;AAEnE,OAAO,EACL,0BAA0B,EAC1B,wBAAwB,GACzB,MAAM,iCAAiC,CAAC;AAEzC,OAAO,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,uBAAuB,EAAE,MAAM,0BAA0B,CAAC;AAEnE,cAAc,2DAA2D,CAAC;AAC1E,OAAO,EACL,0BAA0B,EAC1B,wBAAwB,GACzB,MAAM,iCAAiC,CAAC;AAEzC,OAAO,EACL,iBAAiB,EACjB,0BAA0B,GAC3B,MAAM,qCAAqC,CAAC;AAE7C,OAAO,EAAE,kBAAkB,EAAE,MAAM,oCAAoC,CAAC;AASxE,OAAO,EAAE,sBAAsB,EAAE,MAAM,gDAAgD,CAAC;AACxF,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAGnD,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { allCypherVersions, } from '@neo4j-cypher/language-support';
|
|
2
2
|
import { listDatabases } from './queries/databases.js';
|
|
3
3
|
import { getDataSummary } from './queries/dataSummary.js';
|
|
4
4
|
import { listFunctions } from './queries/functions.js';
|
|
@@ -73,7 +73,6 @@ export class ConnectedMetadataPoller extends MetadataPoller {
|
|
|
73
73
|
super();
|
|
74
74
|
this.connection = connection;
|
|
75
75
|
this.events = events;
|
|
76
|
-
const supportsCypherAnnotation = _internalFeatureFlags.cypher25 || serverCypherVersions?.includes('25');
|
|
77
76
|
this.dbSchema.parameters = parameters;
|
|
78
77
|
this.databases = new QueryPoller({
|
|
79
78
|
connection,
|
|
@@ -121,9 +120,7 @@ export class ConnectedMetadataPoller extends MetadataPoller {
|
|
|
121
120
|
}
|
|
122
121
|
},
|
|
123
122
|
});
|
|
124
|
-
const versions =
|
|
125
|
-
? allCypherVersions
|
|
126
|
-
: [undefined];
|
|
123
|
+
const versions = serverCypherVersions?.includes('25') ? allCypherVersions : [undefined];
|
|
127
124
|
versions.forEach((cypherVersion) => {
|
|
128
125
|
const effectiveCypherVersion = cypherVersion ?? 'CYPHER 5';
|
|
129
126
|
this.procedures[effectiveCypherVersion] = new QueryPoller({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"metadataPoller.js","sourceRoot":"","sources":["../../../src/metadataPoller.ts"],"names":[],"mappings":"AACA,OAAO,EACL,
|
|
1
|
+
{"version":3,"file":"metadataPoller.js","sourceRoot":"","sources":["../../../src/metadataPoller.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Driver, QueryResult } from 'neo4j-driver';
|
|
1
|
+
import { Driver, ManagedTransaction, QueryResult, RecordShape, Session } from 'neo4j-driver';
|
|
2
2
|
import { Database } from './queries/databases.js';
|
|
3
3
|
import { ExecuteQueryArgs, QueryType } from './types/sdkTypes';
|
|
4
4
|
type SdkQueryArgs = {
|
|
@@ -10,6 +10,7 @@ type RunCypherQueryArgs = {
|
|
|
10
10
|
parameters: Record<string, unknown>;
|
|
11
11
|
database?: string;
|
|
12
12
|
abortSignal?: AbortSignal;
|
|
13
|
+
implicitTransaction?: boolean;
|
|
13
14
|
};
|
|
14
15
|
export type QueryResultWithLimit = QueryResult & {
|
|
15
16
|
recordLimitHit: boolean;
|
|
@@ -20,8 +21,14 @@ export declare class Neo4jConnection {
|
|
|
20
21
|
databases: Database[];
|
|
21
22
|
driver: Driver;
|
|
22
23
|
currentDb: string | undefined;
|
|
24
|
+
serverVersion: string | undefined;
|
|
23
25
|
constructor(connectedUser: string, protocolVersion: string, databases: Database[], driver: Driver, database?: string);
|
|
24
|
-
|
|
26
|
+
evalQuery(session: Session, query: string, parameters: Record<string, unknown>, metadata: object, tx?: ManagedTransaction): Promise<{
|
|
27
|
+
records: import("neo4j-driver").Record<RecordShape, PropertyKey, RecordShape<PropertyKey, number>>[];
|
|
28
|
+
summary: import("neo4j-driver").ResultSummary<import("neo4j-driver").Integer>;
|
|
29
|
+
recordLimitHit: boolean;
|
|
30
|
+
}>;
|
|
31
|
+
runCypherQuery({ query, parameters, database, abortSignal, implicitTransaction, }: RunCypherQueryArgs): Promise<QueryResultWithLimit>;
|
|
25
32
|
runSdkQuery<T>({ query, queryConfig }: ExecuteQueryArgs<T>, { queryType, abortSignal }: SdkQueryArgs): Promise<T>;
|
|
26
33
|
healthcheck(): Promise<boolean>;
|
|
27
34
|
dispose(): void;
|
|
@@ -19,14 +19,40 @@ export class Neo4jConnection {
|
|
|
19
19
|
databases;
|
|
20
20
|
driver;
|
|
21
21
|
currentDb;
|
|
22
|
+
serverVersion;
|
|
22
23
|
constructor(connectedUser, protocolVersion, databases, driver, database) {
|
|
23
24
|
this.connectedUser = connectedUser;
|
|
24
25
|
this.protocolVersion = protocolVersion;
|
|
25
26
|
this.databases = databases;
|
|
26
27
|
this.driver = driver;
|
|
27
28
|
this.currentDb = resolveInitialDatabase(databases, database);
|
|
29
|
+
this.serverVersion = undefined;
|
|
28
30
|
}
|
|
29
|
-
async
|
|
31
|
+
async evalQuery(session, query, parameters, metadata, tx) {
|
|
32
|
+
let result;
|
|
33
|
+
if (!tx) {
|
|
34
|
+
result = session.run(query, parameters, {
|
|
35
|
+
metadata,
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
else {
|
|
39
|
+
result = tx.run(query, parameters);
|
|
40
|
+
}
|
|
41
|
+
const records = [];
|
|
42
|
+
let recordLimitHit = false;
|
|
43
|
+
for await (const record of result) {
|
|
44
|
+
if (records.length < RECORD_LIMIT) {
|
|
45
|
+
records.push(record);
|
|
46
|
+
}
|
|
47
|
+
else {
|
|
48
|
+
recordLimitHit = true;
|
|
49
|
+
break;
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
const summary = await result.summary();
|
|
53
|
+
return { records, summary, recordLimitHit };
|
|
54
|
+
}
|
|
55
|
+
async runCypherQuery({ query, parameters, database, abortSignal, implicitTransaction = false, }) {
|
|
30
56
|
// we'd like to use the drivers `executeQuery` method, but it doesn't support transaction metadata or cancelations yet
|
|
31
57
|
const session = this.driver.session({
|
|
32
58
|
database: database ?? this.currentDb,
|
|
@@ -36,29 +62,24 @@ export class Neo4jConnection {
|
|
|
36
62
|
void session.close();
|
|
37
63
|
});
|
|
38
64
|
}
|
|
65
|
+
const metadata = {
|
|
66
|
+
...METADATA_BASE,
|
|
67
|
+
type: 'user-direct',
|
|
68
|
+
};
|
|
39
69
|
try {
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
const summary = await result.summary();
|
|
54
|
-
return { records, summary, recordLimitHit };
|
|
55
|
-
}, {
|
|
56
|
-
metadata: {
|
|
57
|
-
...METADATA_BASE,
|
|
58
|
-
type: 'user-direct',
|
|
59
|
-
},
|
|
60
|
-
});
|
|
61
|
-
return result;
|
|
70
|
+
let result;
|
|
71
|
+
if (implicitTransaction) {
|
|
72
|
+
result = this.evalQuery(session, query, parameters, metadata);
|
|
73
|
+
}
|
|
74
|
+
else {
|
|
75
|
+
result = session.executeWrite(async (tx) => {
|
|
76
|
+
const result = this.evalQuery(session, query, parameters, metadata, tx);
|
|
77
|
+
return result;
|
|
78
|
+
}, {
|
|
79
|
+
metadata,
|
|
80
|
+
});
|
|
81
|
+
}
|
|
82
|
+
return await result;
|
|
62
83
|
}
|
|
63
84
|
finally {
|
|
64
85
|
await session.close();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"neo4jConnection.js","sourceRoot":"","sources":["../../../src/neo4jConnection.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"neo4jConnection.js","sourceRoot":"","sources":["../../../src/neo4jConnection.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAI1C,MAAM,aAAa,GAAG;IACpB,GAAG,EAAE,WAAW;IAChB,OAAO,EAAE,OAAO;CACjB,CAAC;AACF,MAAM,YAAY,GAAG,IAAI,CAAC;AAE1B,SAAS,sBAAsB,CAC7B,SAAqB,EACrB,QAAiB;IAEjB,IAAI,QAAQ,EAAE,CAAC;QACb,OAAO,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC,EAAE,IAAI,CAAC;IAC1D,CAAC;IAED,MAAM,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IAC3C,MAAM,GAAG,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;IAC7C,MAAM,MAAM,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC;IAE1D,OAAO,IAAI,EAAE,IAAI,IAAI,GAAG,EAAE,IAAI,IAAI,MAAM,EAAE,IAAI,IAAI,SAAS,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC;AACvE,CAAC;AAgBD,MAAM,OAAO,eAAe;IAKjB;IACA;IACA;IACA;IAPF,SAAS,CAAqB;IAC9B,aAAa,CAAqB;IAEzC,YACS,aAAqB,EACrB,eAAuB,EACvB,SAAqB,EACrB,MAAc,EACrB,QAAiB;QAJV,kBAAa,GAAb,aAAa,CAAQ;QACrB,oBAAe,GAAf,eAAe,CAAQ;QACvB,cAAS,GAAT,SAAS,CAAY;QACrB,WAAM,GAAN,MAAM,CAAQ;QAGrB,IAAI,CAAC,SAAS,GAAG,sBAAsB,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;QAC7D,IAAI,CAAC,aAAa,GAAG,SAAS,CAAC;IACjC,CAAC;IAED,KAAK,CAAC,SAAS,CACb,OAAgB,EAChB,KAAa,EACb,UAAmC,EACnC,QAAgB,EAChB,EAAuB;QAEvB,IAAI,MAA2B,CAAC;QAChC,IAAI,CAAC,EAAE,EAAE,CAAC;YACR,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,UAAU,EAAE;gBACtC,QAAQ;aACT,CAAC,CAAC;QACL,CAAC;aAAM,CAAC;YACN,MAAM,GAAG,EAAE,CAAC,GAAG,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;QACrC,CAAC;QACD,MAAM,OAAO,GAAG,EAAE,CAAC;QACnB,IAAI,cAAc,GAAG,KAAK,CAAC;QAE3B,IAAI,KAAK,EAAE,MAAM,MAAM,IAAI,MAAM,EAAE,CAAC;YAClC,IAAI,OAAO,CAAC,MAAM,GAAG,YAAY,EAAE,CAAC;gBAClC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACvB,CAAC;iBAAM,CAAC;gBACN,cAAc,GAAG,IAAI,CAAC;gBACtB,MAAM;YACR,CAAC;QACH,CAAC;QACD,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,OAAO,EAAE,CAAC;QAEvC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,cAAc,EAAE,CAAC;IAC9C,CAAC;IAED,KAAK,CAAC,cAAc,CAAC,EACnB,KAAK,EACL,UAAU,EACV,QAAQ,EACR,WAAW,EACX,mBAAmB,GAAG,KAAK,GACR;QACnB,sHAAsH;QACtH,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC;YAClC,QAAQ,EAAE,QAAQ,IAAI,IAAI,CAAC,SAAS;SACrC,CAAC,CAAC;QAEH,IAAI,WAAW,KAAK,SAAS,EAAE,CAAC;YAC9B,WAAW,CAAC,gBAAgB,CAAC,OAAO,EAAE,GAAG,EAAE;gBACzC,KAAK,OAAO,CAAC,KAAK,EAAE,CAAC;YACvB,CAAC,CAAC,CAAC;QACL,CAAC;QACD,MAAM,QAAQ,GAAG;YACf,GAAG,aAAa;YAChB,IAAI,EAAE,aAAiC;SACxC,CAAC;QACF,IAAI,CAAC;YACH,IAAI,MAAqC,CAAC;YAC1C,IAAI,mBAAmB,EAAE,CAAC;gBACxB,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,QAAQ,CAAC,CAAC;YAChE,CAAC;iBAAM,CAAC;gBACN,MAAM,GAAG,OAAO,CAAC,YAAY,CAC3B,KAAK,EAAE,EAAE,EAAE,EAAE;oBACX,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAC3B,OAAO,EACP,KAAK,EACL,UAAU,EACV,QAAQ,EACR,EAAE,CACH,CAAC;oBACF,OAAO,MAAM,CAAC;gBAChB,CAAC,EACD;oBACE,QAAQ;iBACT,CACF,CAAC;YACJ,CAAC;YACD,OAAO,MAAM,MAAM,CAAC;QACtB,CAAC;gBAAS,CAAC;YACT,MAAM,OAAO,CAAC,KAAK,EAAE,CAAC;QACxB,CAAC;IACH,CAAC;IAED,KAAK,CAAC,WAAW,CACf,EAAE,KAAK,EAAE,WAAW,EAAuB,EAC3C,EAAE,SAAS,EAAE,WAAW,EAAgB;QAExC,sHAAsH;QACtH,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC;YAClC,QAAQ,EAAE,WAAW,EAAE,QAAQ,IAAI,IAAI,CAAC,SAAS;SAClD,CAAC,CAAC;QAEH,IAAI,WAAW,KAAK,SAAS,EAAE,CAAC;YAC9B,WAAW,CAAC,gBAAgB,CAAC,OAAO,EAAE,GAAG,EAAE;gBACzC,KAAK,OAAO,CAAC,KAAK,EAAE,CAAC;YACvB,CAAC,CAAC,CAAC;QACL,CAAC;QAED,IAAI,CAAC;YACH,MAAM,oBAAoB,GACxB,WAAW,CAAC,OAAO,KAAK,MAAM;gBAC5B,CAAC,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC;gBACnC,CAAC,CAAC,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAEzC,OAAO,MAAM,oBAAoB,CAC/B,KAAK,EAAE,EAAE,EAAE,EAAE;gBACX,MAAM,MAAM,GAAG,EAAE,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;gBACjC,OAAO,MAAM,WAAW,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC;YACrD,CAAC,EACD,EAAE,QAAQ,EAAE,EAAE,GAAG,aAAa,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,CACpD,CAAC;QACJ,CAAC;gBAAS,CAAC;YACT,MAAM,OAAO,CAAC,KAAK,EAAE,CAAC;QACxB,CAAC;IACH,CAAC;IAED,KAAK,CAAC,WAAW;QACf,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,MAAM,CAAC,kBAAkB,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC;YACnE,OAAO,IAAI,CAAC;QACd,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IAED,OAAO;QACL,KAAK,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,CAAC;IAC5B,CAAC;CACF"}
|
|
@@ -5,6 +5,3 @@ import { ExecuteQueryArgs } from '../types/sdkTypes';
|
|
|
5
5
|
export declare function getVersion(): ExecuteQueryArgs<{
|
|
6
6
|
serverVersion: string | undefined;
|
|
7
7
|
}>;
|
|
8
|
-
export declare function getCypherVersions(): ExecuteQueryArgs<{
|
|
9
|
-
serverCypherVersions: string[] | undefined;
|
|
10
|
-
}>;
|
|
@@ -3,7 +3,7 @@ import { resultTransformers } from 'neo4j-driver';
|
|
|
3
3
|
* Get dbms version
|
|
4
4
|
*/
|
|
5
5
|
export function getVersion() {
|
|
6
|
-
const query = 'CALL dbms.components() YIELD versions';
|
|
6
|
+
const query = 'CALL dbms.components() YIELD name, versions';
|
|
7
7
|
const resultTransformer = resultTransformers.mappedResultTransformer({
|
|
8
8
|
map(record) {
|
|
9
9
|
const obj = record.toObject();
|
|
@@ -12,11 +12,11 @@ export function getVersion() {
|
|
|
12
12
|
return { name, versions };
|
|
13
13
|
},
|
|
14
14
|
collect(rows, summary) {
|
|
15
|
-
|
|
15
|
+
for (const row of rows) {
|
|
16
16
|
if (row.name === 'Neo4j Kernel') {
|
|
17
|
-
return { serverVersion: row.versions, summary };
|
|
17
|
+
return { serverVersion: row.versions[0], summary };
|
|
18
18
|
}
|
|
19
|
-
}
|
|
19
|
+
}
|
|
20
20
|
//We should not reach this unless the "name" field changes
|
|
21
21
|
return { serverVersion: undefined, summary };
|
|
22
22
|
},
|
|
@@ -26,27 +26,4 @@ export function getVersion() {
|
|
|
26
26
|
queryConfig: { resultTransformer, routing: 'READ', database: 'system' },
|
|
27
27
|
};
|
|
28
28
|
}
|
|
29
|
-
export function getCypherVersions() {
|
|
30
|
-
const query = 'CALL dbms.components() YIELD name, versions';
|
|
31
|
-
const resultTransformer = resultTransformers.mappedResultTransformer({
|
|
32
|
-
map(record) {
|
|
33
|
-
const obj = record.toObject();
|
|
34
|
-
const name = obj.name;
|
|
35
|
-
const versions = obj.versions;
|
|
36
|
-
return { name, versions };
|
|
37
|
-
},
|
|
38
|
-
collect(rows, summary) {
|
|
39
|
-
rows.forEach((row) => {
|
|
40
|
-
if (row.name === 'Cypher') {
|
|
41
|
-
return { serverCypherVersions: row.versions, summary };
|
|
42
|
-
}
|
|
43
|
-
});
|
|
44
|
-
return { serverCypherVersions: ['5'], summary };
|
|
45
|
-
},
|
|
46
|
-
});
|
|
47
|
-
return {
|
|
48
|
-
query,
|
|
49
|
-
queryConfig: { resultTransformer, routing: 'READ', database: 'system' },
|
|
50
|
-
};
|
|
51
|
-
}
|
|
52
29
|
//# sourceMappingURL=version.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"version.js","sourceRoot":"","sources":["../../../../src/queries/version.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAGlD;;GAEG;AACH,MAAM,UAAU,UAAU;IAGxB,MAAM,KAAK,GAAG,
|
|
1
|
+
{"version":3,"file":"version.js","sourceRoot":"","sources":["../../../../src/queries/version.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAGlD;;GAEG;AACH,MAAM,UAAU,UAAU;IAGxB,MAAM,KAAK,GAAG,6CAA6C,CAAC;IAE5D,MAAM,iBAAiB,GAAG,kBAAkB,CAAC,uBAAuB,CAAC;QACnE,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"}
|