leangraph 1.1.2 → 1.1.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (40) hide show
  1. package/dist/db.d.ts.map +1 -1
  2. package/dist/db.js +42 -3
  3. package/dist/db.js.map +1 -1
  4. package/dist/engine/hybrid-executor.d.ts +118 -0
  5. package/dist/engine/hybrid-executor.d.ts.map +1 -0
  6. package/dist/engine/hybrid-executor.js +205 -0
  7. package/dist/engine/hybrid-executor.js.map +1 -0
  8. package/dist/engine/index.d.ts +36 -0
  9. package/dist/engine/index.d.ts.map +1 -0
  10. package/dist/engine/index.js +34 -0
  11. package/dist/engine/index.js.map +1 -0
  12. package/dist/engine/memory-graph.d.ts +68 -0
  13. package/dist/engine/memory-graph.d.ts.map +1 -0
  14. package/dist/engine/memory-graph.js +176 -0
  15. package/dist/engine/memory-graph.js.map +1 -0
  16. package/dist/engine/query-planner.d.ts +62 -0
  17. package/dist/engine/query-planner.d.ts.map +1 -0
  18. package/dist/engine/query-planner.js +481 -0
  19. package/dist/engine/query-planner.js.map +1 -0
  20. package/dist/engine/subgraph-loader.d.ts +41 -0
  21. package/dist/engine/subgraph-loader.d.ts.map +1 -0
  22. package/dist/engine/subgraph-loader.js +172 -0
  23. package/dist/engine/subgraph-loader.js.map +1 -0
  24. package/dist/executor.d.ts +17 -0
  25. package/dist/executor.d.ts.map +1 -1
  26. package/dist/executor.js +286 -100
  27. package/dist/executor.js.map +1 -1
  28. package/dist/index.d.ts +2 -0
  29. package/dist/index.d.ts.map +1 -1
  30. package/dist/index.js +2 -0
  31. package/dist/index.js.map +1 -1
  32. package/dist/parser.d.ts +47 -3
  33. package/dist/parser.d.ts.map +1 -1
  34. package/dist/parser.js +228 -41
  35. package/dist/parser.js.map +1 -1
  36. package/dist/translator.d.ts +53 -0
  37. package/dist/translator.d.ts.map +1 -1
  38. package/dist/translator.js +1545 -186
  39. package/dist/translator.js.map +1 -1
  40. package/package.json +9 -3
package/dist/index.d.ts CHANGED
@@ -15,6 +15,8 @@ export { BackupManager } from "./backup.js";
15
15
  export type { BackupResult, BackupStatus, BackupAllOptions } from "./backup.js";
16
16
  export { ApiKeyStore, authMiddleware, generateApiKey } from "./auth.js";
17
17
  export type { ApiKeyConfig, ValidationResult, KeyInfo } from "./auth.js";
18
+ export { MemoryGraph, SubgraphLoader, HybridExecutor } from "./engine/index.js";
19
+ export type { Direction, Path, MemoryNode, MemoryEdge, SubgraphBounds, PropertyFilter, VarLengthPatternParams, PatternResult, } from "./engine/index.js";
18
20
  export declare const VERSION: string;
19
21
  /**
20
22
  * Create a LeanGraph client.
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AASpE,YAAY,EACV,gBAAgB,EAChB,eAAe,EACf,aAAa,EACb,cAAc,EACd,UAAU,GACX,MAAM,YAAY,CAAC;AAEpB,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAO5C,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACpC,YAAY,EACV,KAAK,EACL,MAAM,EACN,YAAY,EACZ,WAAW,EACX,WAAW,EACX,SAAS,EACT,YAAY,EACZ,YAAY,EACZ,WAAW,EACX,mBAAmB,EACnB,WAAW,EACX,cAAc,EACd,UAAU,EACV,aAAa,EACb,YAAY,EACZ,WAAW,EACX,UAAU,GACX,MAAM,aAAa,CAAC;AAGrB,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AACxD,YAAY,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAGvE,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AACzD,YAAY,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAGzE,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AACvD,YAAY,EACV,eAAe,EACf,cAAc,EACd,aAAa,IAAI,mBAAmB,GACrC,MAAM,eAAe,CAAC;AAGvB,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AACtD,YAAY,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAG/D,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,YAAY,EAAE,YAAY,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAGhF,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AACxE,YAAY,EAAE,YAAY,EAAE,gBAAgB,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAMzE,eAAO,MAAM,OAAO,EAAE,MAAoB,CAAC;AAM3C;;;;;;;;;;;;;;GAcG;AACH,wBAAsB,SAAS,CAAC,OAAO,GAAE,gBAAqB,GAAG,OAAO,CAAC,eAAe,CAAC,CAoBxF;AAGD,eAAe,SAAS,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AASpE,YAAY,EACV,gBAAgB,EAChB,eAAe,EACf,aAAa,EACb,cAAc,EACd,UAAU,GACX,MAAM,YAAY,CAAC;AAEpB,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAO5C,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACpC,YAAY,EACV,KAAK,EACL,MAAM,EACN,YAAY,EACZ,WAAW,EACX,WAAW,EACX,SAAS,EACT,YAAY,EACZ,YAAY,EACZ,WAAW,EACX,mBAAmB,EACnB,WAAW,EACX,cAAc,EACd,UAAU,EACV,aAAa,EACb,YAAY,EACZ,WAAW,EACX,UAAU,GACX,MAAM,aAAa,CAAC;AAGrB,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AACxD,YAAY,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAGvE,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AACzD,YAAY,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAGzE,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AACvD,YAAY,EACV,eAAe,EACf,cAAc,EACd,aAAa,IAAI,mBAAmB,GACrC,MAAM,eAAe,CAAC;AAGvB,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AACtD,YAAY,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAG/D,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,YAAY,EAAE,YAAY,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAGhF,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AACxE,YAAY,EAAE,YAAY,EAAE,gBAAgB,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAGzE,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAChF,YAAY,EACV,SAAS,EACT,IAAI,EACJ,UAAU,EACV,UAAU,EACV,cAAc,EACd,cAAc,EACd,sBAAsB,EACtB,aAAa,GACd,MAAM,mBAAmB,CAAC;AAM3B,eAAO,MAAM,OAAO,EAAE,MAAoB,CAAC;AAM3C;;;;;;;;;;;;;;GAcG;AACH,wBAAsB,SAAS,CAAC,OAAO,GAAE,gBAAqB,GAAG,OAAO,CAAC,eAAe,CAAC,CAoBxF;AAGD,eAAe,SAAS,CAAC"}
package/dist/index.js CHANGED
@@ -22,6 +22,8 @@ export { createApp, createServer } from "./routes.js";
22
22
  export { BackupManager } from "./backup.js";
23
23
  // Auth
24
24
  export { ApiKeyStore, authMiddleware, generateApiKey } from "./auth.js";
25
+ // Hybrid Engine (experimental)
26
+ export { MemoryGraph, SubgraphLoader, HybridExecutor } from "./engine/index.js";
25
27
  // ============================================================================
26
28
  // Version
27
29
  // ============================================================================
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,8BAA8B;AAC9B,6EAA6E;AAE7E,OAAO,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAC;AACvC,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAGjD,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC/C,MAAM,GAAG,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAAC;AAcvC,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAE5C,+EAA+E;AAC/E,mDAAmD;AACnD,+EAA+E;AAE/E,SAAS;AACT,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAqBpC,aAAa;AACb,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAGxD,WAAW;AACX,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAGzD,WAAW;AACX,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAOvD,kBAAkB;AAClB,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAGtD,SAAS;AACT,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAG5C,OAAO;AACP,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAGxE,+EAA+E;AAC/E,UAAU;AACV,+EAA+E;AAE/E,MAAM,CAAC,MAAM,OAAO,GAAW,GAAG,CAAC,OAAO,CAAC;AAE3C,+EAA+E;AAC/E,wBAAwB;AACxB,+EAA+E;AAE/E;;;;;;;;;;;;;;GAcG;AACH,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,UAA4B,EAAE;IAC5D,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,IAAK,OAAO,CAAC,GAAG,CAAC,cAA8C,IAAI,OAAO,CAAC;IAEpG,IAAI,IAAI,KAAK,QAAQ,EAAE,CAAC;QACtB,OAAO,kBAAkB,CAAC,OAAO,CAAC,CAAC;IACrC,CAAC;SAAM,CAAC;QACN,8EAA8E;QAC9E,IAAI,CAAC;YACH,MAAM,EAAE,iBAAiB,EAAE,GAAG,MAAM,MAAM,CAAC,YAAY,CAAC,CAAC;YACzD,OAAO,iBAAiB,CAAC,EAAE,GAAG,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;QACjD,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,GAAG,YAAY,KAAK,IAAI,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAC,EAAE,CAAC;gBACnE,MAAM,IAAI,KAAK,CACb,wFAAwF;oBACxF,0DAA0D,CAC3D,CAAC;YACJ,CAAC;YACD,MAAM,GAAG,CAAC;QACZ,CAAC;IACH,CAAC;AACH,CAAC;AAED,iBAAiB;AACjB,eAAe,SAAS,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,8BAA8B;AAC9B,6EAA6E;AAE7E,OAAO,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAC;AACvC,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAGjD,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC/C,MAAM,GAAG,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAAC;AAcvC,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAE5C,+EAA+E;AAC/E,mDAAmD;AACnD,+EAA+E;AAE/E,SAAS;AACT,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAqBpC,aAAa;AACb,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAGxD,WAAW;AACX,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAGzD,WAAW;AACX,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAOvD,kBAAkB;AAClB,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAGtD,SAAS;AACT,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAG5C,OAAO;AACP,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAGxE,+BAA+B;AAC/B,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAYhF,+EAA+E;AAC/E,UAAU;AACV,+EAA+E;AAE/E,MAAM,CAAC,MAAM,OAAO,GAAW,GAAG,CAAC,OAAO,CAAC;AAE3C,+EAA+E;AAC/E,wBAAwB;AACxB,+EAA+E;AAE/E;;;;;;;;;;;;;;GAcG;AACH,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,UAA4B,EAAE;IAC5D,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,IAAK,OAAO,CAAC,GAAG,CAAC,cAA8C,IAAI,OAAO,CAAC;IAEpG,IAAI,IAAI,KAAK,QAAQ,EAAE,CAAC;QACtB,OAAO,kBAAkB,CAAC,OAAO,CAAC,CAAC;IACrC,CAAC;SAAM,CAAC;QACN,8EAA8E;QAC9E,IAAI,CAAC;YACH,MAAM,EAAE,iBAAiB,EAAE,GAAG,MAAM,MAAM,CAAC,YAAY,CAAC,CAAC;YACzD,OAAO,iBAAiB,CAAC,EAAE,GAAG,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;QACjD,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,GAAG,YAAY,KAAK,IAAI,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAC,EAAE,CAAC;gBACnE,MAAM,IAAI,KAAK,CACb,wFAAwF;oBACxF,0DAA0D,CAC3D,CAAC;YACJ,CAAC;YACD,MAAM,GAAG,CAAC;QACZ,CAAC;IACH,CAAC;AACH,CAAC;AAED,iBAAiB;AACjB,eAAe,SAAS,CAAC"}
package/dist/parser.d.ts CHANGED
@@ -2,6 +2,7 @@ export interface NodePattern {
2
2
  variable?: string;
3
3
  label?: string | string[];
4
4
  properties?: Record<string, PropertyValue>;
5
+ propertiesParam?: ParameterRef;
5
6
  }
6
7
  export interface EdgePattern {
7
8
  variable?: string;
@@ -53,7 +54,7 @@ export interface MapPropertyValue {
53
54
  }
54
55
  export type PropertyValue = string | number | boolean | null | ParameterRef | VariableRef | PropertyRef | BinaryPropertyValue | MapPropertyValue | FunctionPropertyValue | PropertyValue[];
55
56
  export interface WhereCondition {
56
- type: "comparison" | "and" | "or" | "not" | "contains" | "startsWith" | "endsWith" | "isNull" | "isNotNull" | "exists" | "in" | "listPredicate" | "patternMatch" | "expression" | "regex";
57
+ type: "comparison" | "and" | "or" | "not" | "contains" | "startsWith" | "endsWith" | "isNull" | "isNotNull" | "exists" | "in" | "listPredicate" | "patternMatch" | "expression" | "regex" | "propertyExists";
57
58
  left?: Expression;
58
59
  right?: Expression;
59
60
  operator?: "=" | "<>" | "<" | ">" | "<=" | ">=";
@@ -66,6 +67,7 @@ export interface WhereCondition {
66
67
  variable?: string;
67
68
  listExpr?: Expression;
68
69
  filterCondition?: WhereCondition;
70
+ expression?: Expression;
69
71
  }
70
72
  export interface CaseWhen {
71
73
  condition: WhereCondition;
@@ -81,8 +83,14 @@ export interface ObjectProperty {
81
83
  key: string;
82
84
  value: Expression;
83
85
  }
86
+ export interface MapProjectionItem {
87
+ type: "property" | "literal" | "allProperties";
88
+ property?: string;
89
+ key?: string;
90
+ value?: Expression;
91
+ }
84
92
  export interface Expression {
85
- type: "property" | "literal" | "parameter" | "variable" | "function" | "case" | "binary" | "object" | "comparison" | "listComprehension" | "listPredicate" | "patternComprehension" | "unary" | "labelPredicate" | "propertyAccess" | "indexAccess" | "in" | "stringOp" | "existsPattern" | "reduce" | "filter" | "extract";
93
+ type: "property" | "literal" | "parameter" | "variable" | "function" | "case" | "binary" | "object" | "comparison" | "listComprehension" | "listPredicate" | "patternComprehension" | "unary" | "labelPredicate" | "propertyAccess" | "indexAccess" | "in" | "stringOp" | "existsPattern" | "sizePattern" | "reduce" | "filter" | "extract" | "mapProjection" | "regexMatch" | "list";
86
94
  variable?: string;
87
95
  property?: string;
88
96
  value?: PropertyValue;
@@ -118,10 +126,18 @@ export interface Expression {
118
126
  accumulator?: string;
119
127
  initialValue?: Expression;
120
128
  reduceExpr?: Expression;
129
+ projectionSource?: Expression;
130
+ projectionItems?: MapProjectionItem[];
131
+ pattern?: Expression;
132
+ elements?: Expression[];
121
133
  }
122
134
  export interface ReturnItem {
123
135
  expression: Expression;
124
136
  alias?: string;
137
+ /**
138
+ * Exact expression text as written in the query (used for unaliased RETURN column names).
139
+ */
140
+ rawExpression?: string;
125
141
  }
126
142
  export interface SetAssignment {
127
143
  variable: string;
@@ -214,9 +230,20 @@ export interface ForeachClause {
214
230
  expression: Expression;
215
231
  body: Clause[];
216
232
  }
217
- export type Clause = CreateClause | MatchClause | MergeClause | SetClause | DeleteClause | RemoveClause | ReturnClause | WithClause | UnwindClause | UnionClause | CallClause | ForeachClause;
233
+ export interface CreateIndexClause {
234
+ type: "CREATE_INDEX";
235
+ property: string;
236
+ indexName: string | null;
237
+ }
238
+ export interface DropIndexClause {
239
+ type: "DROP_INDEX";
240
+ indexName: string;
241
+ }
242
+ export type Clause = CreateClause | MatchClause | MergeClause | SetClause | DeleteClause | RemoveClause | ReturnClause | WithClause | UnwindClause | UnionClause | CallClause | ForeachClause | CreateIndexClause | DropIndexClause;
218
243
  export interface Query {
219
244
  clauses: Clause[];
245
+ explain?: boolean;
246
+ profile?: boolean;
220
247
  }
221
248
  export interface ParseError {
222
249
  message: string;
@@ -235,6 +262,8 @@ export declare class Parser {
235
262
  private tokens;
236
263
  private pos;
237
264
  private anonVarCounter;
265
+ private allowParameterMapInNodePattern;
266
+ private input;
238
267
  /**
239
268
  * Parse a number string, validating that integers are within int64 range.
240
269
  * Throws SyntaxError for overflow.
@@ -245,6 +274,16 @@ export declare class Parser {
245
274
  private error;
246
275
  private parseClause;
247
276
  private parseCreate;
277
+ /**
278
+ * Parse CREATE INDEX statement
279
+ * Syntax: CREATE INDEX [name] ON [:Label](property)
280
+ */
281
+ private parseCreateIndex;
282
+ /**
283
+ * Parse DROP INDEX statement
284
+ * Syntax: DROP INDEX name
285
+ */
286
+ private parseDropIndex;
248
287
  private parseMatch;
249
288
  /**
250
289
  * Parse either a regular pattern chain or a named path expression.
@@ -363,6 +402,11 @@ export declare class Parser {
363
402
  * Similar to parseExpression but the variable is in scope.
364
403
  */
365
404
  private parseListComprehensionExpression;
405
+ /**
406
+ * Parse a map projection: p {.name, .age} or p {.name, years: p.age}
407
+ * This syntax allows projecting selected properties from a node/map.
408
+ */
409
+ private parseMapProjection;
366
410
  private peek;
367
411
  private advance;
368
412
  private isAtEnd;
@@ -1 +1 @@
1
- {"version":3,"file":"parser.d.ts","sourceRoot":"","sources":["../src/parser.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"parser.d.ts","sourceRoot":"","sources":["../src/parser.ts"],"names":[],"mappings":"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"}
package/dist/parser.js CHANGED
@@ -50,6 +50,10 @@ const KEYWORDS = new Set([
50
50
  "YIELD",
51
51
  "REMOVE",
52
52
  "FOREACH",
53
+ "EXPLAIN",
54
+ "PROFILE",
55
+ "INDEX",
56
+ "DROP",
53
57
  ]);
54
58
  class Tokenizer {
55
59
  input;
@@ -556,7 +560,13 @@ class Tokenizer {
556
560
  return char >= "0" && char <= "9";
557
561
  }
558
562
  isIdentifierStart(char) {
559
- return (char >= "a" && char <= "z") || (char >= "A" && char <= "Z") || char === "_";
563
+ // Support ASCII letters, underscore, and Unicode letters (for property names like "données")
564
+ if ((char >= "a" && char <= "z") || (char >= "A" && char <= "Z") || char === "_") {
565
+ return true;
566
+ }
567
+ // Use Unicode property escape for letter categories (Lu, Ll, Lt, Lm, Lo, Nl)
568
+ // This covers accented letters, Greek, Cyrillic, CJK, etc.
569
+ return /^\p{L}$/u.test(char);
560
570
  }
561
571
  isIdentifierChar(char) {
562
572
  return this.isIdentifierStart(char) || this.isDigit(char);
@@ -572,6 +582,8 @@ export class Parser {
572
582
  tokens = [];
573
583
  pos = 0;
574
584
  anonVarCounter = 0;
585
+ allowParameterMapInNodePattern = false;
586
+ input = "";
575
587
  /**
576
588
  * Parse a number string, validating that integers are within int64 range.
577
589
  * Throws SyntaxError for overflow.
@@ -616,6 +628,7 @@ export class Parser {
616
628
  }
617
629
  parse(input) {
618
630
  try {
631
+ this.input = input;
619
632
  const tokenizer = new Tokenizer(input);
620
633
  this.tokens = tokenizer.tokenize();
621
634
  this.pos = 0;
@@ -639,6 +652,17 @@ export class Parser {
639
652
  }
640
653
  }
641
654
  parseQuery() {
655
+ // Check for EXPLAIN or PROFILE prefix
656
+ let explain = false;
657
+ let profile = false;
658
+ if (this.checkKeyword("EXPLAIN")) {
659
+ this.advance();
660
+ explain = true;
661
+ }
662
+ else if (this.checkKeyword("PROFILE")) {
663
+ this.advance();
664
+ profile = true;
665
+ }
642
666
  // Parse clauses until we hit UNION or end
643
667
  const clauses = [];
644
668
  while (!this.isAtEnd() && !this.checkKeyword("UNION")) {
@@ -673,9 +697,9 @@ export class Parser {
673
697
  left: { clauses },
674
698
  right: rightQuery,
675
699
  };
676
- return { clauses: [unionClause] };
700
+ return { clauses: [unionClause], explain, profile };
677
701
  }
678
- return { clauses };
702
+ return { clauses, explain, profile };
679
703
  }
680
704
  error(message) {
681
705
  const currentToken = this.tokens[this.pos] || this.tokens[this.tokens.length - 1];
@@ -722,18 +746,27 @@ export class Parser {
722
746
  return this.parseCall();
723
747
  case "FOREACH":
724
748
  return this.parseForeach();
749
+ case "DROP":
750
+ return this.parseDropIndex();
725
751
  default:
726
752
  throw new Error(`Unexpected keyword '${token.value}'`);
727
753
  }
728
754
  }
729
755
  parseCreate() {
730
756
  this.expect("KEYWORD", "CREATE");
757
+ // Check if this is CREATE INDEX
758
+ if (this.check("KEYWORD") && this.peek().value === "INDEX") {
759
+ return this.parseCreateIndex();
760
+ }
731
761
  const patterns = [];
762
+ const prevAllowParamMap = this.allowParameterMapInNodePattern;
763
+ this.allowParameterMapInNodePattern = true;
732
764
  patterns.push(...this.parsePatternChain());
733
765
  while (this.check("COMMA")) {
734
766
  this.advance();
735
767
  patterns.push(...this.parsePatternChain());
736
768
  }
769
+ this.allowParameterMapInNodePattern = prevAllowParamMap;
737
770
  // Validate: CREATE requires relationship type and direction
738
771
  for (const pattern of patterns) {
739
772
  if ("edge" in pattern) {
@@ -756,6 +789,55 @@ export class Parser {
756
789
  }
757
790
  return { type: "CREATE", patterns };
758
791
  }
792
+ /**
793
+ * Parse CREATE INDEX statement
794
+ * Syntax: CREATE INDEX [name] ON [:Label](property)
795
+ */
796
+ parseCreateIndex() {
797
+ this.expect("KEYWORD", "INDEX");
798
+ let indexName = null;
799
+ // Check if there's a custom index name before ON
800
+ if (this.check("IDENTIFIER")) {
801
+ indexName = this.advance().value;
802
+ }
803
+ this.expect("KEYWORD", "ON");
804
+ // Optional :Label - we parse it but don't use it (global index)
805
+ if (this.check("COLON")) {
806
+ this.advance(); // consume :
807
+ if (this.check("IDENTIFIER") || this.check("KEYWORD")) {
808
+ this.advance(); // consume label name, but we ignore it
809
+ }
810
+ }
811
+ // Parse (property)
812
+ this.expect("LPAREN");
813
+ const propertyToken = this.advance();
814
+ if (propertyToken.type !== "IDENTIFIER" && propertyToken.type !== "KEYWORD") {
815
+ throw new Error(`Expected property name, got ${propertyToken.type}`);
816
+ }
817
+ const property = propertyToken.value;
818
+ this.expect("RPAREN");
819
+ return {
820
+ type: "CREATE_INDEX",
821
+ property,
822
+ indexName,
823
+ };
824
+ }
825
+ /**
826
+ * Parse DROP INDEX statement
827
+ * Syntax: DROP INDEX name
828
+ */
829
+ parseDropIndex() {
830
+ this.expect("KEYWORD", "DROP");
831
+ this.expect("KEYWORD", "INDEX");
832
+ const nameToken = this.advance();
833
+ if (nameToken.type !== "IDENTIFIER" && nameToken.type !== "KEYWORD") {
834
+ throw new Error(`Expected index name, got ${nameToken.type}`);
835
+ }
836
+ return {
837
+ type: "DROP_INDEX",
838
+ indexName: nameToken.value,
839
+ };
840
+ }
759
841
  parseMatch(optional = false) {
760
842
  this.expect("KEYWORD", "MATCH");
761
843
  const patterns = [];
@@ -1084,13 +1166,16 @@ export class Parser {
1084
1166
  this.expect("COMMA");
1085
1167
  }
1086
1168
  // Use parseReturnExpression to allow comparisons in RETURN items
1169
+ const expressionStart = this.peek().position;
1087
1170
  const expression = this.parseReturnExpression();
1171
+ const expressionEnd = this.peek().position;
1172
+ const rawExpression = this.input.slice(expressionStart, expressionEnd).trim();
1088
1173
  let alias;
1089
1174
  if (this.checkKeyword("AS")) {
1090
1175
  this.advance();
1091
1176
  alias = this.expectIdentifierOrKeyword();
1092
1177
  }
1093
- items.push({ expression, alias });
1178
+ items.push({ expression, alias, rawExpression });
1094
1179
  } while (this.check("COMMA"));
1095
1180
  }
1096
1181
  // Parse ORDER BY
@@ -1293,12 +1378,12 @@ export class Parser {
1293
1378
  }
1294
1379
  parseCall() {
1295
1380
  this.expect("KEYWORD", "CALL");
1296
- // Parse procedure name (e.g., "db.labels" or "db.relationshipTypes")
1297
- // Procedure names can have dots, so we parse identifier.identifier...
1298
- let procedureName = this.expectIdentifier();
1381
+ // Parse procedure name (e.g., "db.labels" or "db.index.fulltext.queryNodes")
1382
+ // Procedure names can have dots and may contain keywords like "index"
1383
+ let procedureName = this.expectIdentifierOrKeyword();
1299
1384
  while (this.check("DOT")) {
1300
1385
  this.advance();
1301
- procedureName += "." + this.expectIdentifier();
1386
+ procedureName += "." + this.expectIdentifierOrKeyword();
1302
1387
  }
1303
1388
  // Parse arguments in parentheses
1304
1389
  this.expect("LPAREN");
@@ -1438,9 +1523,11 @@ export class Parser {
1438
1523
  parseNodePattern() {
1439
1524
  this.expect("LPAREN");
1440
1525
  const pattern = {};
1441
- // Variable name
1442
- if (this.check("IDENTIFIER")) {
1443
- pattern.variable = this.advance().value;
1526
+ // Variable name (allow keywords like 'end' as variable names)
1527
+ if (this.check("IDENTIFIER") || this.check("KEYWORD")) {
1528
+ const token = this.advance();
1529
+ // Use originalValue for keywords to preserve original casing (e.g., 'end' not 'END')
1530
+ pattern.variable = token.originalValue || token.value;
1444
1531
  }
1445
1532
  // Labels (can be multiple: :A:B:C)
1446
1533
  if (this.check("COLON")) {
@@ -1456,6 +1543,14 @@ export class Parser {
1456
1543
  if (this.check("LBRACE")) {
1457
1544
  pattern.properties = this.parseProperties();
1458
1545
  }
1546
+ // Parameter map properties: (n:Label $props)
1547
+ if (this.allowParameterMapInNodePattern && this.check("PARAMETER")) {
1548
+ if (pattern.properties) {
1549
+ throw new Error("Cannot use both literal properties and parameter map in node pattern");
1550
+ }
1551
+ const paramToken = this.advance();
1552
+ pattern.propertiesParam = { type: "parameter", name: paramToken.value };
1553
+ }
1459
1554
  this.expect("RPAREN");
1460
1555
  return pattern;
1461
1556
  }
@@ -1473,9 +1568,11 @@ export class Parser {
1473
1568
  // Edge details in brackets
1474
1569
  if (this.check("LBRACKET")) {
1475
1570
  this.advance();
1476
- // Variable name
1477
- if (this.check("IDENTIFIER")) {
1478
- edge.variable = this.advance().value;
1571
+ // Variable name (allow keywords as variable names)
1572
+ if (this.check("IDENTIFIER") || this.check("KEYWORD")) {
1573
+ const token = this.advance();
1574
+ // Use originalValue for keywords to preserve original casing
1575
+ edge.variable = token.originalValue || token.value;
1479
1576
  }
1480
1577
  // Type (can be identifier or keyword, or multiple types separated by |)
1481
1578
  if (this.check("COLON")) {
@@ -1852,11 +1949,21 @@ export class Parser {
1852
1949
  parseExistsCondition() {
1853
1950
  this.expect("KEYWORD", "EXISTS");
1854
1951
  this.expect("LPAREN"); // outer (
1855
- // Parse the pattern inside EXISTS((pattern))
1856
- const patterns = this.parsePatternChain();
1857
- const pattern = patterns.length === 1 ? patterns[0] : patterns[0]; // Use first pattern for now
1858
- this.expect("RPAREN"); // outer )
1859
- return { type: "exists", pattern };
1952
+ // Check if this is property existence (e.g., exists(n.property))
1953
+ // or pattern existence (e.g., exists((n)-[:REL]->()))
1954
+ if (this.check("LPAREN")) {
1955
+ // Pattern existence: EXISTS((pattern))
1956
+ const patterns = this.parsePatternChain();
1957
+ const pattern = patterns.length === 1 ? patterns[0] : patterns[0]; // Use first pattern for now
1958
+ this.expect("RPAREN"); // outer )
1959
+ return { type: "exists", pattern };
1960
+ }
1961
+ else {
1962
+ // Property existence: EXISTS(n.property)
1963
+ const expr = this.parseExpression();
1964
+ this.expect("RPAREN"); // outer )
1965
+ return { type: "propertyExists", expression: expr };
1966
+ }
1860
1967
  }
1861
1968
  parseComparisonCondition() {
1862
1969
  const left = this.parseExpression();
@@ -1911,8 +2018,12 @@ export class Parser {
1911
2018
  // Check for IN operator
1912
2019
  if (this.checkKeyword("IN")) {
1913
2020
  this.advance();
1914
- // IN can be followed by a list literal [...] or a parameter $param
1915
- const listExpr = this.parseInListExpression();
2021
+ // IN can be followed by any expression that evaluates to a list:
2022
+ // - list literal [...]
2023
+ // - parameter $param
2024
+ // - variable reference
2025
+ // - function call like labels(n), keys(n), etc.
2026
+ const listExpr = this.parseExpression();
1916
2027
  return { type: "in", left, list: listExpr };
1917
2028
  }
1918
2029
  // Check for regex operator =~
@@ -2040,28 +2151,45 @@ export class Parser {
2040
2151
  }
2041
2152
  return this.parseComparisonExpression();
2042
2153
  }
2043
- // Handle comparison operators
2154
+ // Handle comparison operators (including chained comparisons like 1 <= n <= 10)
2044
2155
  parseComparisonExpression() {
2045
2156
  let left = this.parseIsNullExpression();
2046
2157
  // Check for comparison operators
2047
- const opToken = this.peek();
2048
- let comparisonOperator;
2049
- if (opToken.type === "EQUALS")
2050
- comparisonOperator = "=";
2051
- else if (opToken.type === "NOT_EQUALS")
2052
- comparisonOperator = "<>";
2053
- else if (opToken.type === "LT")
2054
- comparisonOperator = "<";
2055
- else if (opToken.type === "GT")
2056
- comparisonOperator = ">";
2057
- else if (opToken.type === "LTE")
2058
- comparisonOperator = "<=";
2059
- else if (opToken.type === "GTE")
2060
- comparisonOperator = ">=";
2158
+ const getComparisonOperator = () => {
2159
+ const opToken = this.peek();
2160
+ if (opToken.type === "EQUALS")
2161
+ return "=";
2162
+ if (opToken.type === "NOT_EQUALS")
2163
+ return "<>";
2164
+ if (opToken.type === "LT")
2165
+ return "<";
2166
+ if (opToken.type === "GT")
2167
+ return ">";
2168
+ if (opToken.type === "LTE")
2169
+ return "<=";
2170
+ if (opToken.type === "GTE")
2171
+ return ">=";
2172
+ return undefined;
2173
+ };
2174
+ let comparisonOperator = getComparisonOperator();
2061
2175
  if (comparisonOperator) {
2062
2176
  this.advance();
2063
- const right = this.parseIsNullExpression();
2064
- return { type: "comparison", comparisonOperator, left, right };
2177
+ let middle = this.parseIsNullExpression();
2178
+ let result = { type: "comparison", comparisonOperator, left, right: middle };
2179
+ // Check for chained comparisons like 1 <= n <= 10
2180
+ // This should be parsed as (1 <= n) AND (n <= 10)
2181
+ let nextOp = getComparisonOperator();
2182
+ while (nextOp) {
2183
+ this.advance();
2184
+ const right = this.parseIsNullExpression();
2185
+ // Chain: (previous result) AND (middle op right)
2186
+ const newComparison = { type: "comparison", comparisonOperator: nextOp, left: middle, right };
2187
+ result = { type: "binary", operator: "AND", left: result, right: newComparison };
2188
+ // For further chains, the 'right' becomes the new 'middle'
2189
+ middle = right;
2190
+ nextOp = getComparisonOperator();
2191
+ }
2192
+ return result;
2065
2193
  }
2066
2194
  return left;
2067
2195
  }
@@ -2123,6 +2251,12 @@ export class Parser {
2123
2251
  const right = this.parseAdditiveExpression();
2124
2252
  return { type: "stringOp", stringOperator: "ENDS WITH", left, right };
2125
2253
  }
2254
+ // Handle regex operator: =~
2255
+ if (this.check("REGEX_MATCH")) {
2256
+ this.advance();
2257
+ const right = this.parseAdditiveExpression();
2258
+ return { type: "regexMatch", pattern: right, left };
2259
+ }
2126
2260
  return left;
2127
2261
  }
2128
2262
  // Handle + and - (lower precedence)
@@ -2163,11 +2297,16 @@ export class Parser {
2163
2297
  }
2164
2298
  return left;
2165
2299
  }
2166
- // Handle postfix operations: list indexing like expr[0] or expr[1..3], and chained property access like a.b.c
2300
+ // Handle postfix operations: list indexing like expr[0] or expr[1..3], chained property access like a.b.c, and map projection like p {.name, .age}
2167
2301
  parsePostfixExpression() {
2168
2302
  let expr = this.parsePrimaryExpression();
2169
- // Handle list/map indexing: expr[index] or expr[start..end], and chained property access: expr.prop
2170
- while (this.check("LBRACKET") || this.check("DOT")) {
2303
+ // Handle list/map indexing: expr[index] or expr[start..end], chained property access: expr.prop, and map projection: expr {.prop1, .prop2}
2304
+ while (this.check("LBRACKET") || this.check("DOT") || this.check("LBRACE")) {
2305
+ if (this.check("LBRACE")) {
2306
+ // Map projection: p {.name, .age} or p {.name, years: p.age}
2307
+ expr = this.parseMapProjection(expr);
2308
+ continue;
2309
+ }
2171
2310
  if (this.check("DOT")) {
2172
2311
  this.advance(); // consume .
2173
2312
  // Property access - property names can be keywords too
@@ -2425,6 +2564,15 @@ export class Parser {
2425
2564
  return { type: "existsPattern", patterns };
2426
2565
  }
2427
2566
  }
2567
+ // Check if this is SIZE with a pattern expression
2568
+ if (functionName === "SIZE") {
2569
+ // SIZE((pattern)) - count matching relationships
2570
+ if (this.check("LPAREN") && this.isPatternStart()) {
2571
+ const patterns = this.parsePatternChain();
2572
+ this.expect("RPAREN");
2573
+ return { type: "sizePattern", patterns };
2574
+ }
2575
+ }
2428
2576
  // Check if this is a list predicate: ALL, ANY, NONE, SINGLE
2429
2577
  const listPredicates = ["ALL", "ANY", "NONE", "SINGLE"];
2430
2578
  if (listPredicates.includes(functionName)) {
@@ -2838,6 +2986,45 @@ export class Parser {
2838
2986
  parseListComprehensionExpression(variable) {
2839
2987
  return this.parseExpression();
2840
2988
  }
2989
+ /**
2990
+ * Parse a map projection: p {.name, .age} or p {.name, years: p.age}
2991
+ * This syntax allows projecting selected properties from a node/map.
2992
+ */
2993
+ parseMapProjection(source) {
2994
+ this.expect("LBRACE"); // consume {
2995
+ const items = [];
2996
+ while (!this.check("RBRACE") && !this.isAtEnd()) {
2997
+ if (items.length > 0) {
2998
+ this.expect("COMMA");
2999
+ }
3000
+ // Check for .* (project all properties)
3001
+ if (this.check("DOT")) {
3002
+ this.advance(); // consume .
3003
+ if (this.check("STAR")) {
3004
+ this.advance(); // consume *
3005
+ items.push({ type: "allProperties" });
3006
+ }
3007
+ else {
3008
+ // .property shorthand
3009
+ const property = this.expectIdentifierOrKeyword();
3010
+ items.push({ type: "property", property });
3011
+ }
3012
+ }
3013
+ else {
3014
+ // key: value syntax
3015
+ const key = this.expectIdentifierOrKeyword();
3016
+ this.expect("COLON");
3017
+ const value = this.parseExpression();
3018
+ items.push({ type: "literal", key, value });
3019
+ }
3020
+ }
3021
+ this.expect("RBRACE"); // consume }
3022
+ return {
3023
+ type: "mapProjection",
3024
+ projectionSource: source,
3025
+ projectionItems: items,
3026
+ };
3027
+ }
2841
3028
  // Token helpers
2842
3029
  peek() {
2843
3030
  return this.tokens[this.pos];