@anvia/neo4j 1.1.5 → 1.1.7
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/dist/graph-8BTZ0V9h.js +1145 -0
- package/dist/graph-8BTZ0V9h.js.map +1 -0
- package/dist/index.d.ts +240 -254
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +3 -106
- package/dist/src-CxFXzoZ7.js +646 -0
- package/dist/src-CxFXzoZ7.js.map +1 -0
- package/package.json +9 -9
- package/dist/chunk-IVKNAFKG.js +0 -1607
- package/dist/chunk-IVKNAFKG.js.map +0 -1
- package/dist/chunk-QTIUFXDY.js +0 -527
- package/dist/chunk-QTIUFXDY.js.map +0 -1
- package/dist/chunk-V33PR5HS.js +0 -214
- package/dist/chunk-V33PR5HS.js.map +0 -1
- package/dist/explore-PNLRCONH.js +0 -8
- package/dist/explore-PNLRCONH.js.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/retrieve-A6UD55NM.js +0 -8
- package/dist/retrieve-A6UD55NM.js.map +0 -1
package/dist/chunk-V33PR5HS.js
DELETED
|
@@ -1,214 +0,0 @@
|
|
|
1
|
-
import {
|
|
2
|
-
ManagedNeo4jKnowledgeGraph,
|
|
3
|
-
Neo4jKnowledgeGraphBase,
|
|
4
|
-
managedPathPredicate,
|
|
5
|
-
managedScopeParameters,
|
|
6
|
-
managedScopePredicate,
|
|
7
|
-
parseNeo4jProperties,
|
|
8
|
-
quoteIdentifier
|
|
9
|
-
} from "./chunk-IVKNAFKG.js";
|
|
10
|
-
|
|
11
|
-
// src/explore.ts
|
|
12
|
-
import {
|
|
13
|
-
resolveGraphExploreOptions
|
|
14
|
-
} from "@anvia/graph";
|
|
15
|
-
import { int } from "neo4j-driver";
|
|
16
|
-
async function exploreGraph(graph, options) {
|
|
17
|
-
if (!(graph instanceof Neo4jKnowledgeGraphBase)) {
|
|
18
|
-
throw new TypeError("exploreGraph requires a Neo4j knowledge graph registration.");
|
|
19
|
-
}
|
|
20
|
-
const resolved = resolveGraphExploreOptions(graph.schema, options);
|
|
21
|
-
const records = resolved.mode === "overview" ? await overviewNodes(graph, resolved) : await expandedNodes(graph, resolved);
|
|
22
|
-
const nodes = uniqueNodes(
|
|
23
|
-
records.map((record) => nodeFromRecord(record, graph.schema, resolved.includeProvenance))
|
|
24
|
-
);
|
|
25
|
-
const visibleNodes = nodes.slice(0, resolved.maxNodes);
|
|
26
|
-
const relationships = await relationshipsBetween(
|
|
27
|
-
graph,
|
|
28
|
-
visibleNodes.map((node) => node.id),
|
|
29
|
-
resolved.relationships,
|
|
30
|
-
resolved.maxRelationships,
|
|
31
|
-
resolved.includeProvenance,
|
|
32
|
-
resolved.abortSignal
|
|
33
|
-
);
|
|
34
|
-
return {
|
|
35
|
-
nodes: visibleNodes,
|
|
36
|
-
relationships: relationships.slice(0, resolved.maxRelationships),
|
|
37
|
-
truncated: {
|
|
38
|
-
nodes: records.length > resolved.maxNodes || nodes.length > resolved.maxNodes,
|
|
39
|
-
relationships: relationships.length > resolved.maxRelationships
|
|
40
|
-
}
|
|
41
|
-
};
|
|
42
|
-
}
|
|
43
|
-
async function overviewNodes(graph, options) {
|
|
44
|
-
const result = await graph.query(
|
|
45
|
-
`MATCH (node${managedEntityLabel(graph)})
|
|
46
|
-
WHERE any(type IN labels(node) WHERE type IN $nodeTypes)${managedAndPredicate(graph, "node")}
|
|
47
|
-
RETURN elementId(node) AS id, labels(node) AS labels, properties(node) AS properties
|
|
48
|
-
ORDER BY elementId(node)
|
|
49
|
-
LIMIT $nodeLimit`,
|
|
50
|
-
managedParameters(graph, {
|
|
51
|
-
nodeTypes: options.nodeTypes,
|
|
52
|
-
nodeLimit: int(options.maxNodes + 1)
|
|
53
|
-
}),
|
|
54
|
-
options.abortSignal
|
|
55
|
-
);
|
|
56
|
-
return result.records;
|
|
57
|
-
}
|
|
58
|
-
async function expandedNodes(graph, options) {
|
|
59
|
-
const roots = await graph.query(
|
|
60
|
-
`MATCH (node${managedEntityLabel(graph)})
|
|
61
|
-
WHERE elementId(node) IN $nodeIds
|
|
62
|
-
AND any(type IN labels(node) WHERE type IN $nodeTypes)${managedAndPredicate(graph, "node")}
|
|
63
|
-
RETURN elementId(node) AS id, labels(node) AS labels, properties(node) AS properties`,
|
|
64
|
-
managedParameters(graph, { nodeIds: options.nodeIds, nodeTypes: options.nodeTypes }),
|
|
65
|
-
options.abortSignal
|
|
66
|
-
);
|
|
67
|
-
if (options.relationships.length === 0) return roots.records;
|
|
68
|
-
const remainingNodeLimit = options.maxNodes + 1 - roots.records.length;
|
|
69
|
-
if (remainingNodeLimit <= 0) return roots.records;
|
|
70
|
-
const pattern = traversalPattern(options.direction, options.maxDepth);
|
|
71
|
-
const neighbors = await graph.query(
|
|
72
|
-
`MATCH (root${managedEntityLabel(graph)}) WHERE elementId(root) IN $nodeIds${managedAndPredicate(graph, "root")}
|
|
73
|
-
MATCH path = ${pattern}
|
|
74
|
-
WHERE all(rel IN relationships(path) WHERE type(rel) IN $relationshipTypes)
|
|
75
|
-
AND any(type IN labels(node) WHERE type IN $nodeTypes)${managedAndPredicate(graph, "node")}${managedPathAndPredicate(graph)}
|
|
76
|
-
RETURN elementId(node) AS id, labels(node) AS labels, properties(node) AS properties
|
|
77
|
-
LIMIT $nodeLimit`,
|
|
78
|
-
managedParameters(graph, {
|
|
79
|
-
nodeIds: options.nodeIds,
|
|
80
|
-
nodeTypes: options.nodeTypes,
|
|
81
|
-
relationshipTypes: options.relationships,
|
|
82
|
-
nodeLimit: int(remainingNodeLimit)
|
|
83
|
-
}),
|
|
84
|
-
options.abortSignal
|
|
85
|
-
);
|
|
86
|
-
return [...roots.records, ...neighbors.records];
|
|
87
|
-
}
|
|
88
|
-
async function relationshipsBetween(graph, nodeIds, relationshipTypes, maxRelationships, includeProvenance, abortSignal) {
|
|
89
|
-
if (nodeIds.length === 0 || relationshipTypes.length === 0) return [];
|
|
90
|
-
const result = await graph.query(
|
|
91
|
-
`MATCH (from)-[relationship]->(to)
|
|
92
|
-
WHERE elementId(from) IN $nodeIds
|
|
93
|
-
AND elementId(to) IN $nodeIds
|
|
94
|
-
AND type(relationship) IN $relationshipTypes${managedAndPredicate(graph, "from")}${managedAndPredicate(graph, "to")}${managedAndPredicate(graph, "relationship")}
|
|
95
|
-
RETURN elementId(relationship) AS id,
|
|
96
|
-
type(relationship) AS type,
|
|
97
|
-
elementId(from) AS source,
|
|
98
|
-
elementId(to) AS target,
|
|
99
|
-
properties(relationship) AS properties
|
|
100
|
-
ORDER BY elementId(relationship)
|
|
101
|
-
LIMIT $relationshipLimit`,
|
|
102
|
-
managedParameters(graph, {
|
|
103
|
-
nodeIds,
|
|
104
|
-
relationshipTypes,
|
|
105
|
-
relationshipLimit: int(maxRelationships + 1)
|
|
106
|
-
}),
|
|
107
|
-
abortSignal
|
|
108
|
-
);
|
|
109
|
-
return result.records.map((record) => relationshipFromRecord(record, includeProvenance));
|
|
110
|
-
}
|
|
111
|
-
function nodeFromRecord(record, schema, includeProvenance) {
|
|
112
|
-
const id = stringValue(record.get("id"), "Neo4j explorer node id");
|
|
113
|
-
const labels = stringArray(record.get("labels"), "Neo4j explorer node labels");
|
|
114
|
-
const raw = objectValue(record.get("properties"), "Neo4j explorer node properties");
|
|
115
|
-
const type = labels.find((label) => label in schema.nodes);
|
|
116
|
-
if (type === void 0) throw new TypeError("Neo4j explorer node has no registered type.");
|
|
117
|
-
const properties = applicationProperties(raw, "Neo4j explorer node properties");
|
|
118
|
-
const node = {
|
|
119
|
-
id,
|
|
120
|
-
type,
|
|
121
|
-
identity: identityProperties(schema, type, properties),
|
|
122
|
-
properties
|
|
123
|
-
};
|
|
124
|
-
const key = raw.__anvia_key;
|
|
125
|
-
if (typeof key === "string") node.key = key;
|
|
126
|
-
if (includeProvenance) node.provenance = provenanceProperties(raw);
|
|
127
|
-
return node;
|
|
128
|
-
}
|
|
129
|
-
function relationshipFromRecord(record, includeProvenance) {
|
|
130
|
-
const raw = objectValue(record.get("properties"), "Neo4j explorer relationship properties");
|
|
131
|
-
const relationship = {
|
|
132
|
-
id: stringValue(record.get("id"), "Neo4j explorer relationship id"),
|
|
133
|
-
type: stringValue(record.get("type"), "Neo4j explorer relationship type"),
|
|
134
|
-
from: stringValue(record.get("source"), "Neo4j explorer relationship source"),
|
|
135
|
-
to: stringValue(record.get("target"), "Neo4j explorer relationship target"),
|
|
136
|
-
properties: applicationProperties(raw, "Neo4j explorer relationship properties")
|
|
137
|
-
};
|
|
138
|
-
const key = raw.__anvia_key;
|
|
139
|
-
if (typeof key === "string") relationship.key = key;
|
|
140
|
-
if (includeProvenance) relationship.provenance = provenanceProperties(raw);
|
|
141
|
-
return relationship;
|
|
142
|
-
}
|
|
143
|
-
function provenanceProperties(value) {
|
|
144
|
-
return {
|
|
145
|
-
documentIds: optionalStringArray(value.__anvia_source_document_ids),
|
|
146
|
-
chunkIds: optionalStringArray(value.__anvia_source_chunk_ids)
|
|
147
|
-
};
|
|
148
|
-
}
|
|
149
|
-
function optionalStringArray(value) {
|
|
150
|
-
if (value === void 0) return [];
|
|
151
|
-
return stringArray(value, "Neo4j explorer provenance");
|
|
152
|
-
}
|
|
153
|
-
function identityProperties(schema, type, properties) {
|
|
154
|
-
const identity = {};
|
|
155
|
-
const definition = schema.nodes[type];
|
|
156
|
-
if (definition === void 0) return identity;
|
|
157
|
-
for (const property of definition.identity) {
|
|
158
|
-
const value = properties[property];
|
|
159
|
-
if (typeof value === "string" || typeof value === "number" || typeof value === "boolean") {
|
|
160
|
-
identity[property] = value;
|
|
161
|
-
}
|
|
162
|
-
}
|
|
163
|
-
return identity;
|
|
164
|
-
}
|
|
165
|
-
function applicationProperties(value, label) {
|
|
166
|
-
return parseNeo4jProperties(
|
|
167
|
-
Object.fromEntries(Object.entries(value).filter(([key]) => !key.startsWith("__anvia_"))),
|
|
168
|
-
label
|
|
169
|
-
);
|
|
170
|
-
}
|
|
171
|
-
function uniqueNodes(nodes) {
|
|
172
|
-
return [...new Map(nodes.map((node) => [node.id, node])).values()];
|
|
173
|
-
}
|
|
174
|
-
function traversalPattern(direction, maxDepth) {
|
|
175
|
-
if (direction === "outgoing") return `(root)-[*1..${maxDepth}]->(node)`;
|
|
176
|
-
if (direction === "incoming") return `(root)<-[*1..${maxDepth}]-(node)`;
|
|
177
|
-
return `(root)-[*1..${maxDepth}]-(node)`;
|
|
178
|
-
}
|
|
179
|
-
function managedEntityLabel(graph) {
|
|
180
|
-
return graph instanceof ManagedNeo4jKnowledgeGraph ? `:${quoteIdentifier(graph.resources.labels.entity)}` : "";
|
|
181
|
-
}
|
|
182
|
-
function managedParameters(graph, parameters) {
|
|
183
|
-
return managedScopeParameters(managedScope(graph), parameters);
|
|
184
|
-
}
|
|
185
|
-
function managedAndPredicate(graph, variable) {
|
|
186
|
-
return managedScopePredicate(managedScope(graph), variable, " AND");
|
|
187
|
-
}
|
|
188
|
-
function managedPathAndPredicate(graph) {
|
|
189
|
-
return managedPathPredicate(managedScope(graph), true);
|
|
190
|
-
}
|
|
191
|
-
function managedScope(graph) {
|
|
192
|
-
return graph instanceof ManagedNeo4jKnowledgeGraph ? { graph: graph.name, namespace: graph.namespace } : void 0;
|
|
193
|
-
}
|
|
194
|
-
function stringValue(value, label) {
|
|
195
|
-
if (typeof value !== "string") throw new TypeError(`${label} must be a string.`);
|
|
196
|
-
return value;
|
|
197
|
-
}
|
|
198
|
-
function stringArray(value, label) {
|
|
199
|
-
if (!Array.isArray(value) || !value.every((item) => typeof item === "string")) {
|
|
200
|
-
throw new TypeError(`${label} must be a string array.`);
|
|
201
|
-
}
|
|
202
|
-
return value;
|
|
203
|
-
}
|
|
204
|
-
function objectValue(value, label) {
|
|
205
|
-
if (typeof value !== "object" || value === null || Array.isArray(value)) {
|
|
206
|
-
throw new TypeError(`${label} must be an object.`);
|
|
207
|
-
}
|
|
208
|
-
return value;
|
|
209
|
-
}
|
|
210
|
-
|
|
211
|
-
export {
|
|
212
|
-
exploreGraph
|
|
213
|
-
};
|
|
214
|
-
//# sourceMappingURL=chunk-V33PR5HS.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/explore.ts"],"sourcesContent":["import {\n resolveGraphExploreOptions,\n type GraphExploreNode,\n type GraphExploreOptions,\n type GraphExploreRelationship,\n type GraphExploreResult,\n type ResolvedGraphExploreExpandOptions,\n} from \"@anvia/graph\";\nimport { int, type Record as Neo4jRecord } from \"neo4j-driver\";\nimport { ManagedNeo4jKnowledgeGraph, Neo4jKnowledgeGraphBase } from \"./graph.js\";\nimport { quoteIdentifier } from \"./helpers.js\";\nimport {\n managedPathPredicate,\n managedScopeParameters,\n managedScopePredicate,\n type Neo4jManagedScope,\n} from \"./managed-scope.js\";\nimport { parseNeo4jProperties } from \"./schema.js\";\nimport type { Neo4jGraphSchema, Neo4jNodeIdentity } from \"./types.js\";\n\nexport async function exploreGraph<Schema extends Neo4jGraphSchema>(\n graph: Neo4jKnowledgeGraphBase<Schema>,\n options: GraphExploreOptions<Schema>,\n): Promise<GraphExploreResult> {\n if (!(graph instanceof Neo4jKnowledgeGraphBase)) {\n throw new TypeError(\"exploreGraph requires a Neo4j knowledge graph registration.\");\n }\n const resolved = resolveGraphExploreOptions(graph.schema, options);\n const records =\n resolved.mode === \"overview\"\n ? await overviewNodes(graph, resolved)\n : await expandedNodes(graph, resolved);\n const nodes = uniqueNodes(\n records.map((record) => nodeFromRecord(record, graph.schema, resolved.includeProvenance)),\n );\n const visibleNodes = nodes.slice(0, resolved.maxNodes);\n const relationships = await relationshipsBetween(\n graph,\n visibleNodes.map((node) => node.id),\n resolved.relationships,\n resolved.maxRelationships,\n resolved.includeProvenance,\n resolved.abortSignal,\n );\n return {\n nodes: visibleNodes,\n relationships: relationships.slice(0, resolved.maxRelationships),\n truncated: {\n nodes: records.length > resolved.maxNodes || nodes.length > resolved.maxNodes,\n relationships: relationships.length > resolved.maxRelationships,\n },\n };\n}\n\nasync function overviewNodes(\n graph: Neo4jKnowledgeGraphBase,\n options: ReturnType<typeof resolveGraphExploreOptions> & { mode: \"overview\" },\n): Promise<readonly Neo4jRecord[]> {\n const result = await graph.query(\n `MATCH (node${managedEntityLabel(graph)})\nWHERE any(type IN labels(node) WHERE type IN $nodeTypes)${managedAndPredicate(graph, \"node\")}\nRETURN elementId(node) AS id, labels(node) AS labels, properties(node) AS properties\nORDER BY elementId(node)\nLIMIT $nodeLimit`,\n managedParameters(graph, {\n nodeTypes: options.nodeTypes,\n nodeLimit: int(options.maxNodes + 1),\n }),\n options.abortSignal,\n );\n return result.records;\n}\n\nasync function expandedNodes(\n graph: Neo4jKnowledgeGraphBase,\n options: ResolvedGraphExploreExpandOptions,\n): Promise<readonly Neo4jRecord[]> {\n const roots = await graph.query(\n `MATCH (node${managedEntityLabel(graph)})\nWHERE elementId(node) IN $nodeIds\n AND any(type IN labels(node) WHERE type IN $nodeTypes)${managedAndPredicate(graph, \"node\")}\nRETURN elementId(node) AS id, labels(node) AS labels, properties(node) AS properties`,\n managedParameters(graph, { nodeIds: options.nodeIds, nodeTypes: options.nodeTypes }),\n options.abortSignal,\n );\n if (options.relationships.length === 0) return roots.records;\n const remainingNodeLimit = options.maxNodes + 1 - roots.records.length;\n if (remainingNodeLimit <= 0) return roots.records;\n const pattern = traversalPattern(options.direction, options.maxDepth);\n const neighbors = await graph.query(\n `MATCH (root${managedEntityLabel(graph)}) WHERE elementId(root) IN $nodeIds${managedAndPredicate(graph, \"root\")}\nMATCH path = ${pattern}\nWHERE all(rel IN relationships(path) WHERE type(rel) IN $relationshipTypes)\n AND any(type IN labels(node) WHERE type IN $nodeTypes)${managedAndPredicate(graph, \"node\")}${managedPathAndPredicate(graph)}\nRETURN elementId(node) AS id, labels(node) AS labels, properties(node) AS properties\nLIMIT $nodeLimit`,\n managedParameters(graph, {\n nodeIds: options.nodeIds,\n nodeTypes: options.nodeTypes,\n relationshipTypes: options.relationships,\n nodeLimit: int(remainingNodeLimit),\n }),\n options.abortSignal,\n );\n return [...roots.records, ...neighbors.records];\n}\n\nasync function relationshipsBetween(\n graph: Neo4jKnowledgeGraphBase,\n nodeIds: readonly string[],\n relationshipTypes: readonly string[],\n maxRelationships: number,\n includeProvenance: boolean,\n abortSignal?: AbortSignal,\n): Promise<GraphExploreRelationship[]> {\n if (nodeIds.length === 0 || relationshipTypes.length === 0) return [];\n const result = await graph.query(\n `MATCH (from)-[relationship]->(to)\nWHERE elementId(from) IN $nodeIds\n AND elementId(to) IN $nodeIds\n AND type(relationship) IN $relationshipTypes${managedAndPredicate(graph, \"from\")}${managedAndPredicate(graph, \"to\")}${managedAndPredicate(graph, \"relationship\")}\nRETURN elementId(relationship) AS id,\n type(relationship) AS type,\n elementId(from) AS source,\n elementId(to) AS target,\n properties(relationship) AS properties\nORDER BY elementId(relationship)\nLIMIT $relationshipLimit`,\n managedParameters(graph, {\n nodeIds,\n relationshipTypes,\n relationshipLimit: int(maxRelationships + 1),\n }),\n abortSignal,\n );\n return result.records.map((record) => relationshipFromRecord(record, includeProvenance));\n}\n\nfunction nodeFromRecord(\n record: Neo4jRecord,\n schema: Neo4jGraphSchema,\n includeProvenance: boolean,\n): GraphExploreNode {\n const id = stringValue(record.get(\"id\"), \"Neo4j explorer node id\");\n const labels = stringArray(record.get(\"labels\"), \"Neo4j explorer node labels\");\n const raw = objectValue(record.get(\"properties\"), \"Neo4j explorer node properties\");\n const type = labels.find((label) => label in schema.nodes);\n if (type === undefined) throw new TypeError(\"Neo4j explorer node has no registered type.\");\n const properties = applicationProperties(raw, \"Neo4j explorer node properties\");\n const node: {\n id: string;\n key?: string | undefined;\n type: string;\n identity: Neo4jNodeIdentity;\n properties: typeof properties;\n provenance?: { documentIds: string[]; chunkIds: string[] } | undefined;\n } = {\n id,\n type,\n identity: identityProperties(schema, type, properties),\n properties,\n };\n const key = raw.__anvia_key;\n if (typeof key === \"string\") node.key = key;\n if (includeProvenance) node.provenance = provenanceProperties(raw);\n return node;\n}\n\nfunction relationshipFromRecord(\n record: Neo4jRecord,\n includeProvenance: boolean,\n): GraphExploreRelationship {\n const raw = objectValue(record.get(\"properties\"), \"Neo4j explorer relationship properties\");\n const relationship: {\n id: string;\n key?: string | undefined;\n type: string;\n from: string;\n to: string;\n properties: ReturnType<typeof applicationProperties>;\n provenance?: { documentIds: string[]; chunkIds: string[] } | undefined;\n } = {\n id: stringValue(record.get(\"id\"), \"Neo4j explorer relationship id\"),\n type: stringValue(record.get(\"type\"), \"Neo4j explorer relationship type\"),\n from: stringValue(record.get(\"source\"), \"Neo4j explorer relationship source\"),\n to: stringValue(record.get(\"target\"), \"Neo4j explorer relationship target\"),\n properties: applicationProperties(raw, \"Neo4j explorer relationship properties\"),\n };\n const key = raw.__anvia_key;\n if (typeof key === \"string\") relationship.key = key;\n if (includeProvenance) relationship.provenance = provenanceProperties(raw);\n return relationship;\n}\n\nfunction provenanceProperties(value: Record<string, unknown>) {\n return {\n documentIds: optionalStringArray(value.__anvia_source_document_ids),\n chunkIds: optionalStringArray(value.__anvia_source_chunk_ids),\n };\n}\n\nfunction optionalStringArray(value: unknown): string[] {\n if (value === undefined) return [];\n return stringArray(value, \"Neo4j explorer provenance\");\n}\n\nfunction identityProperties(\n schema: Neo4jGraphSchema,\n type: string,\n properties: ReturnType<typeof applicationProperties>,\n): Neo4jNodeIdentity {\n const identity: Record<string, string | number | boolean> = {};\n const definition = schema.nodes[type];\n if (definition === undefined) return identity;\n for (const property of definition.identity) {\n const value = properties[property];\n if (typeof value === \"string\" || typeof value === \"number\" || typeof value === \"boolean\") {\n identity[property] = value;\n }\n }\n return identity;\n}\n\nfunction applicationProperties(value: Record<string, unknown>, label: string) {\n return parseNeo4jProperties(\n Object.fromEntries(Object.entries(value).filter(([key]) => !key.startsWith(\"__anvia_\"))),\n label,\n );\n}\n\nfunction uniqueNodes(nodes: readonly GraphExploreNode[]): GraphExploreNode[] {\n return [...new Map(nodes.map((node) => [node.id, node])).values()];\n}\n\nfunction traversalPattern(direction: \"outgoing\" | \"incoming\" | \"both\", maxDepth: number): string {\n if (direction === \"outgoing\") return `(root)-[*1..${maxDepth}]->(node)`;\n if (direction === \"incoming\") return `(root)<-[*1..${maxDepth}]-(node)`;\n return `(root)-[*1..${maxDepth}]-(node)`;\n}\n\nfunction managedEntityLabel(graph: Neo4jKnowledgeGraphBase): string {\n return graph instanceof ManagedNeo4jKnowledgeGraph\n ? `:${quoteIdentifier(graph.resources.labels.entity)}`\n : \"\";\n}\n\nfunction managedParameters(\n graph: Neo4jKnowledgeGraphBase,\n parameters: Record<string, unknown>,\n): Record<string, unknown> {\n return managedScopeParameters(managedScope(graph), parameters);\n}\n\nfunction managedAndPredicate(graph: Neo4jKnowledgeGraphBase, variable: string): string {\n return managedScopePredicate(managedScope(graph), variable, \" AND\");\n}\n\nfunction managedPathAndPredicate(graph: Neo4jKnowledgeGraphBase): string {\n return managedPathPredicate(managedScope(graph), true);\n}\n\nfunction managedScope(graph: Neo4jKnowledgeGraphBase): Neo4jManagedScope | undefined {\n return graph instanceof ManagedNeo4jKnowledgeGraph\n ? { graph: graph.name, namespace: graph.namespace }\n : undefined;\n}\n\nfunction stringValue(value: unknown, label: string): string {\n if (typeof value !== \"string\") throw new TypeError(`${label} must be a string.`);\n return value;\n}\n\nfunction stringArray(value: unknown, label: string): string[] {\n if (!Array.isArray(value) || !value.every((item) => typeof item === \"string\")) {\n throw new TypeError(`${label} must be a string array.`);\n }\n return value;\n}\n\nfunction objectValue(value: unknown, label: string): Record<string, unknown> {\n if (typeof value !== \"object\" || value === null || Array.isArray(value)) {\n throw new TypeError(`${label} must be an object.`);\n }\n return value as Record<string, unknown>;\n}\n"],"mappings":"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","names":[]}
|
package/dist/explore-PNLRCONH.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
|
package/dist/index.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/client.ts","../src/extract.ts"],"sourcesContent":["import { createHash } from \"node:crypto\";\nimport { auth, driver as createDriver, type Driver } from \"neo4j-driver\";\nimport {\n ManagedNeo4jKnowledgeGraph,\n neo4jTenantScope,\n Neo4jKnowledgeGraph,\n type Neo4jTenantScope,\n} from \"./graph.js\";\nimport type {\n ManagedNeo4jKnowledgeGraphOptions,\n Neo4jClientOptions,\n Neo4jGraphSchema,\n Neo4jKnowledgeGraphOptions,\n} from \"./types.js\";\n\nexport class Neo4jClient {\n private readonly driver: Driver;\n private readonly ownsDriver: boolean;\n private closed = false;\n readonly database: string | undefined;\n\n constructor(options: Neo4jClientOptions) {\n this.database = options.database;\n if (\"driver\" in options) {\n this.driver = options.driver;\n this.ownsDriver = false;\n } else {\n if (typeof options.uri !== \"string\" || options.uri.length === 0) {\n throw new TypeError(\"Neo4jClient uri must be a non-empty string.\");\n }\n if (\n typeof options.auth.username !== \"string\" ||\n options.auth.username.length === 0 ||\n typeof options.auth.password !== \"string\"\n ) {\n throw new TypeError(\"Neo4jClient requires explicit username and password credentials.\");\n }\n this.driver = createDriver(\n options.uri,\n auth.basic(options.auth.username, options.auth.password),\n );\n this.ownsDriver = true;\n }\n }\n\n managedKnowledgeGraph<Schema extends Neo4jGraphSchema>(\n options: ManagedNeo4jKnowledgeGraphOptions<Schema>,\n ): ManagedNeo4jKnowledgeGraph<Schema> {\n this.assertOpen();\n return new ManagedNeo4jKnowledgeGraph(this, options);\n }\n\n tenant(tenantId: string): Neo4jTenant {\n this.assertOpen();\n return new Neo4jTenant(this, neo4jTenantScope(tenantNamespace(tenantId)));\n }\n\n knowledgeGraph<Schema extends Neo4jGraphSchema>(\n options: Neo4jKnowledgeGraphOptions<Schema>,\n ): Neo4jKnowledgeGraph<Schema> {\n this.assertOpen();\n return new Neo4jKnowledgeGraph(this, options);\n }\n\n nativeDriver(): Driver {\n this.assertOpen();\n return this.driver;\n }\n\n async close(): Promise<void> {\n if (this.closed) return;\n this.closed = true;\n if (this.ownsDriver) await this.driver.close();\n }\n\n [Symbol.asyncDispose](): Promise<void> {\n return this.close();\n }\n\n private assertOpen(): void {\n if (this.closed) throw new Error(\"Neo4jClient is closed.\");\n }\n}\n\nexport class Neo4jTenant {\n constructor(\n private readonly owner: Neo4jClient,\n private readonly scope: Neo4jTenantScope,\n ) {}\n\n get namespace(): string {\n return this.scope.namespace;\n }\n\n managedKnowledgeGraph<Schema extends Neo4jGraphSchema>(\n options: ManagedNeo4jKnowledgeGraphOptions<Schema>,\n ): ManagedNeo4jKnowledgeGraph<Schema> {\n this.owner.nativeDriver();\n return new ManagedNeo4jKnowledgeGraph(this.owner, options, this.scope);\n }\n}\n\nfunction tenantNamespace(tenantId: string): string {\n if (typeof tenantId !== \"string\" || tenantId.trim().length === 0)\n throw new TypeError(\"Neo4j tenant id must be a non-empty string.\");\n return createHash(\"sha256\").update(tenantId).digest(\"hex\");\n}\n","import { extractGraphFacts as extractSharedGraphFacts, GraphFactConflictError } from \"@anvia/graph\";\nimport type {\n ExtractGraphFactsOptions,\n ExtractGraphFactsResult,\n Neo4jGraphSchema,\n} from \"./types.js\";\n\nexport { GraphFactConflictError };\n\nexport async function extractGraphFacts<\n Schema extends Neo4jGraphSchema,\n Model extends import(\"@anvia/core\").CompletionModel,\n>(options: ExtractGraphFactsOptions<Schema, Model>): Promise<ExtractGraphFactsResult<Schema>> {\n return extractSharedGraphFacts(options) as Promise<ExtractGraphFactsResult<Schema>>;\n}\n"],"mappings":";;;;;;;;;;;;;;AAAA,SAAS,kBAAkB;AAC3B,SAAS,MAAM,UAAU,oBAAiC;AAcnD,IAAM,cAAN,MAAkB;AAAA,EACN;AAAA,EACA;AAAA,EACT,SAAS;AAAA,EACR;AAAA,EAET,YAAY,SAA6B;AACvC,SAAK,WAAW,QAAQ;AACxB,QAAI,YAAY,SAAS;AACvB,WAAK,SAAS,QAAQ;AACtB,WAAK,aAAa;AAAA,IACpB,OAAO;AACL,UAAI,OAAO,QAAQ,QAAQ,YAAY,QAAQ,IAAI,WAAW,GAAG;AAC/D,cAAM,IAAI,UAAU,6CAA6C;AAAA,MACnE;AACA,UACE,OAAO,QAAQ,KAAK,aAAa,YACjC,QAAQ,KAAK,SAAS,WAAW,KACjC,OAAO,QAAQ,KAAK,aAAa,UACjC;AACA,cAAM,IAAI,UAAU,kEAAkE;AAAA,MACxF;AACA,WAAK,SAAS;AAAA,QACZ,QAAQ;AAAA,QACR,KAAK,MAAM,QAAQ,KAAK,UAAU,QAAQ,KAAK,QAAQ;AAAA,MACzD;AACA,WAAK,aAAa;AAAA,IACpB;AAAA,EACF;AAAA,EAEA,sBACE,SACoC;AACpC,SAAK,WAAW;AAChB,WAAO,IAAI,2BAA2B,MAAM,OAAO;AAAA,EACrD;AAAA,EAEA,OAAO,UAA+B;AACpC,SAAK,WAAW;AAChB,WAAO,IAAI,YAAY,MAAM,iBAAiB,gBAAgB,QAAQ,CAAC,CAAC;AAAA,EAC1E;AAAA,EAEA,eACE,SAC6B;AAC7B,SAAK,WAAW;AAChB,WAAO,IAAI,oBAAoB,MAAM,OAAO;AAAA,EAC9C;AAAA,EAEA,eAAuB;AACrB,SAAK,WAAW;AAChB,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,MAAM,QAAuB;AAC3B,QAAI,KAAK,OAAQ;AACjB,SAAK,SAAS;AACd,QAAI,KAAK,WAAY,OAAM,KAAK,OAAO,MAAM;AAAA,EAC/C;AAAA,EAEA,CAAC,OAAO,YAAY,IAAmB;AACrC,WAAO,KAAK,MAAM;AAAA,EACpB;AAAA,EAEQ,aAAmB;AACzB,QAAI,KAAK,OAAQ,OAAM,IAAI,MAAM,wBAAwB;AAAA,EAC3D;AACF;AAEO,IAAM,cAAN,MAAkB;AAAA,EACvB,YACmB,OACA,OACjB;AAFiB;AACA;AAAA,EAChB;AAAA,EAFgB;AAAA,EACA;AAAA,EAGnB,IAAI,YAAoB;AACtB,WAAO,KAAK,MAAM;AAAA,EACpB;AAAA,EAEA,sBACE,SACoC;AACpC,SAAK,MAAM,aAAa;AACxB,WAAO,IAAI,2BAA2B,KAAK,OAAO,SAAS,KAAK,KAAK;AAAA,EACvE;AACF;AAEA,SAAS,gBAAgB,UAA0B;AACjD,MAAI,OAAO,aAAa,YAAY,SAAS,KAAK,EAAE,WAAW;AAC7D,UAAM,IAAI,UAAU,6CAA6C;AACnE,SAAO,WAAW,QAAQ,EAAE,OAAO,QAAQ,EAAE,OAAO,KAAK;AAC3D;;;AC1GA,SAAS,qBAAqB,yBAAyB,8BAA8B;AASrF,eAAsB,kBAGpB,SAA4F;AAC5F,SAAO,wBAAwB,OAAO;AACxC;","names":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
|