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.
- package/dist/db.d.ts.map +1 -1
- package/dist/db.js +42 -3
- package/dist/db.js.map +1 -1
- package/dist/engine/hybrid-executor.d.ts +118 -0
- package/dist/engine/hybrid-executor.d.ts.map +1 -0
- package/dist/engine/hybrid-executor.js +205 -0
- package/dist/engine/hybrid-executor.js.map +1 -0
- package/dist/engine/index.d.ts +36 -0
- package/dist/engine/index.d.ts.map +1 -0
- package/dist/engine/index.js +34 -0
- package/dist/engine/index.js.map +1 -0
- package/dist/engine/memory-graph.d.ts +68 -0
- package/dist/engine/memory-graph.d.ts.map +1 -0
- package/dist/engine/memory-graph.js +176 -0
- package/dist/engine/memory-graph.js.map +1 -0
- package/dist/engine/query-planner.d.ts +62 -0
- package/dist/engine/query-planner.d.ts.map +1 -0
- package/dist/engine/query-planner.js +481 -0
- package/dist/engine/query-planner.js.map +1 -0
- package/dist/engine/subgraph-loader.d.ts +41 -0
- package/dist/engine/subgraph-loader.d.ts.map +1 -0
- package/dist/engine/subgraph-loader.js +172 -0
- package/dist/engine/subgraph-loader.js.map +1 -0
- package/dist/executor.d.ts +17 -0
- package/dist/executor.d.ts.map +1 -1
- package/dist/executor.js +286 -100
- package/dist/executor.js.map +1 -1
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/parser.d.ts +47 -3
- package/dist/parser.d.ts.map +1 -1
- package/dist/parser.js +228 -41
- package/dist/parser.js.map +1 -1
- package/dist/translator.d.ts +53 -0
- package/dist/translator.d.ts.map +1 -1
- package/dist/translator.js +1545 -186
- package/dist/translator.js.map +1 -1
- 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.
|
package/dist/index.d.ts.map
CHANGED
|
@@ -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;
|
|
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
|
|
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;
|
package/dist/parser.d.ts.map
CHANGED
|
@@ -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":"AAMA,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAC1B,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;IAC3C,eAAe,CAAC,EAAE,YAAY,CAAC;CAChC;AAED,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;IAC3C,SAAS,EAAE,MAAM,GAAG,OAAO,GAAG,MAAM,CAAC;IACrC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,WAAW,CAAC;IACpB,IAAI,EAAE,WAAW,CAAC;IAClB,MAAM,EAAE,WAAW,CAAC;CACrB;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,CAAC,WAAW,GAAG,mBAAmB,CAAC,EAAE,CAAC;IAChD,YAAY,CAAC,EAAE,cAAc,GAAG,kBAAkB,CAAC;CACpD;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,WAAW,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,UAAU,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,UAAU,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,QAAQ,CAAC;IACf,QAAQ,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;IAC5C,IAAI,EAAE,aAAa,CAAC;IACpB,KAAK,EAAE,aAAa,CAAC;CACtB;AAED,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,UAAU,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,aAAa,EAAE,CAAC;CACvB;AAED,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,KAAK,CAAC;IACZ,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;CAC3C;AAED,MAAM,MAAM,aAAa,GACrB,MAAM,GACN,MAAM,GACN,OAAO,GACP,IAAI,GACJ,YAAY,GACZ,WAAW,GACX,WAAW,GACX,mBAAmB,GACnB,gBAAgB,GAChB,qBAAqB,GACrB,aAAa,EAAE,CAAC;AAEpB,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,YAAY,GAAG,KAAK,GAAG,IAAI,GAAG,KAAK,GAAG,UAAU,GAAG,YAAY,GAAG,UAAU,GAAG,QAAQ,GAAG,WAAW,GAAG,QAAQ,GAAG,IAAI,GAAG,eAAe,GAAG,cAAc,GAAG,YAAY,GAAG,OAAO,GAAG,gBAAgB,CAAC;IAC7M,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB,KAAK,CAAC,EAAE,UAAU,CAAC;IACnB,QAAQ,CAAC,EAAE,GAAG,GAAG,IAAI,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,GAAG,IAAI,CAAC;IAChD,UAAU,CAAC,EAAE,cAAc,EAAE,CAAC;IAC9B,SAAS,CAAC,EAAE,cAAc,CAAC;IAE3B,OAAO,CAAC,EAAE,WAAW,GAAG,mBAAmB,CAAC;IAC5C,QAAQ,CAAC,EAAE,CAAC,WAAW,GAAG,mBAAmB,CAAC,EAAE,CAAC;IAEjD,IAAI,CAAC,EAAE,UAAU,CAAC;IAElB,aAAa,CAAC,EAAE,KAAK,GAAG,KAAK,GAAG,MAAM,GAAG,QAAQ,CAAC;IAClD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,UAAU,CAAC;IACtB,eAAe,CAAC,EAAE,cAAc,CAAC;IAEjC,UAAU,CAAC,EAAE,UAAU,CAAC;CACzB;AAED,MAAM,WAAW,QAAQ;IACvB,SAAS,EAAE,cAAc,CAAC;IAC1B,MAAM,EAAE,UAAU,CAAC;CACpB;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,KAAK,EAAE,QAAQ,EAAE,CAAC;IAClB,QAAQ,CAAC,EAAE,UAAU,CAAC;CACvB;AAED,MAAM,WAAW,cAAc;IAC7B,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,UAAU,CAAC;CACnB;AAED,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,UAAU,GAAG,SAAS,GAAG,eAAe,CAAC;IAC/C,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,UAAU,CAAC;CACpB;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,UAAU,GAAG,SAAS,GAAG,WAAW,GAAG,UAAU,GAAG,UAAU,GAAG,MAAM,GAAG,QAAQ,GAAG,QAAQ,GAAG,YAAY,GAAG,mBAAmB,GAAG,eAAe,GAAG,sBAAsB,GAAG,OAAO,GAAG,gBAAgB,GAAG,gBAAgB,GAAG,aAAa,GAAG,IAAI,GAAG,UAAU,GAAG,eAAe,GAAG,aAAa,GAAG,QAAQ,GAAG,QAAQ,GAAG,SAAS,GAAG,eAAe,GAAG,YAAY,GAAG,MAAM,CAAC;IACtX,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,aAAa,CAAC;IACtB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,iBAAiB,CAAC,EAAE,SAAS,GAAG,OAAO,CAAC;IACxC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,IAAI,CAAC,EAAE,UAAU,EAAE,CAAC;IACpB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,IAAI,CAAC,EAAE,OAAO,CAAC;IAEf,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,KAAK,CAAC,EAAE,QAAQ,EAAE,CAAC;IACnB,QAAQ,CAAC,EAAE,UAAU,CAAC;IAEtB,QAAQ,CAAC,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,KAAK,GAAG,IAAI,GAAG,KAAK,GAAG,KAAK,CAAC;IAC5E,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB,KAAK,CAAC,EAAE,UAAU,CAAC;IAEnB,OAAO,CAAC,EAAE,UAAU,CAAC;IAErB,kBAAkB,CAAC,EAAE,GAAG,GAAG,IAAI,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,GAAG,IAAI,GAAG,SAAS,GAAG,aAAa,CAAC;IAEtF,UAAU,CAAC,EAAE,cAAc,EAAE,CAAC;IAE9B,QAAQ,CAAC,EAAE,UAAU,CAAC;IACtB,eAAe,CAAC,EAAE,cAAc,CAAC;IACjC,OAAO,CAAC,EAAE,UAAU,CAAC;IAErB,aAAa,CAAC,EAAE,KAAK,GAAG,KAAK,GAAG,MAAM,GAAG,QAAQ,CAAC;IAGlD,QAAQ,CAAC,EAAE,CAAC,WAAW,GAAG,mBAAmB,CAAC,EAAE,CAAC;IACjD,YAAY,CAAC,EAAE,MAAM,CAAC;IAGtB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAElB,MAAM,CAAC,EAAE,UAAU,CAAC;IAEpB,KAAK,CAAC,EAAE,UAAU,CAAC;IACnB,KAAK,CAAC,EAAE,UAAU,CAAC;IAEnB,IAAI,CAAC,EAAE,UAAU,CAAC;IAElB,cAAc,CAAC,EAAE,UAAU,GAAG,aAAa,GAAG,WAAW,CAAC;IAE1D,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,UAAU,CAAC;IAG1B,UAAU,CAAC,EAAE,UAAU,CAAC;IAExB,gBAAgB,CAAC,EAAE,UAAU,CAAC;IAC9B,eAAe,CAAC,EAAE,iBAAiB,EAAE,CAAC;IAEtC,OAAO,CAAC,EAAE,UAAU,CAAC;IAErB,QAAQ,CAAC,EAAE,UAAU,EAAE,CAAC;CACzB;AAED,MAAM,WAAW,UAAU;IACzB,UAAU,EAAE,UAAU,CAAC;IACvB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;OAEG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,UAAU,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAGD,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,QAAQ,CAAC;IACf,QAAQ,EAAE,CAAC,WAAW,GAAG,mBAAmB,CAAC,EAAE,CAAC;CACjD;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,OAAO,GAAG,gBAAgB,CAAC;IACjC,QAAQ,EAAE,CAAC,WAAW,GAAG,mBAAmB,CAAC,EAAE,CAAC;IAChD,eAAe,CAAC,EAAE,cAAc,EAAE,CAAC;IACnC,KAAK,CAAC,EAAE,cAAc,CAAC;CACxB;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,OAAO,CAAC;IACd,QAAQ,EAAE,CAAC,WAAW,GAAG,mBAAmB,CAAC,EAAE,CAAC;IAChD,eAAe,CAAC,EAAE,cAAc,EAAE,CAAC;IACnC,WAAW,CAAC,EAAE,aAAa,EAAE,CAAC;IAC9B,UAAU,CAAC,EAAE,aAAa,EAAE,CAAC;CAC9B;AAED,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,KAAK,CAAC;IACZ,WAAW,EAAE,aAAa,EAAE,CAAC;CAC9B;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,QAAQ,CAAC;IACf,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,WAAW,CAAC,EAAE,UAAU,EAAE,CAAC;IAC3B,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,UAAU;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;CACnB;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,QAAQ,CAAC;IACf,KAAK,EAAE,UAAU,EAAE,CAAC;CACrB;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,QAAQ,CAAC;IACf,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,KAAK,EAAE,UAAU,EAAE,CAAC;IACpB,OAAO,CAAC,EAAE;QAAE,UAAU,EAAE,UAAU,CAAC;QAAC,SAAS,EAAE,KAAK,GAAG,MAAM,CAAA;KAAE,EAAE,CAAC;IAClE,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB,KAAK,CAAC,EAAE,UAAU,CAAC;CACpB;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,KAAK,EAAE,UAAU,EAAE,CAAC;IACpB,OAAO,CAAC,EAAE;QAAE,UAAU,EAAE,UAAU,CAAC;QAAC,SAAS,EAAE,KAAK,GAAG,MAAM,CAAA;KAAE,EAAE,CAAC;IAClE,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB,KAAK,CAAC,EAAE,UAAU,CAAC;IACnB,KAAK,CAAC,EAAE,cAAc,CAAC;CACxB;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,QAAQ,CAAC;IACf,UAAU,EAAE,UAAU,CAAC;IACvB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,OAAO,CAAC;IACd,GAAG,EAAE,OAAO,CAAC;IACb,IAAI,EAAE,KAAK,CAAC;IACZ,KAAK,EAAE,KAAK,CAAC;CACd;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,UAAU,EAAE,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,KAAK,CAAC,EAAE,cAAc,CAAC;CACxB;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,SAAS,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,UAAU,CAAC;IACvB,IAAI,EAAE,MAAM,EAAE,CAAC;CAChB;AAED,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,cAAc,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1B;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,YAAY,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,MAAM,MAAM,GACd,YAAY,GACZ,WAAW,GACX,WAAW,GACX,SAAS,GACT,YAAY,GACZ,YAAY,GACZ,YAAY,GACZ,UAAU,GACV,YAAY,GACZ,WAAW,GACX,UAAU,GACV,aAAa,GACb,iBAAiB,GACjB,eAAe,CAAC;AAEpB,MAAM,WAAW,KAAK;IACpB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,MAAM,WAAW,GACnB;IAAE,OAAO,EAAE,IAAI,CAAC;IAAC,KAAK,EAAE,KAAK,CAAA;CAAE,GAC/B;IAAE,OAAO,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,UAAU,CAAA;CAAE,CAAC;AAyoB1C,qBAAa,MAAM;IACjB,OAAO,CAAC,MAAM,CAAe;IAC7B,OAAO,CAAC,GAAG,CAAa;IACxB,OAAO,CAAC,cAAc,CAAa;IACnC,OAAO,CAAC,8BAA8B,CAAkB;IACxD,OAAO,CAAC,KAAK,CAAc;IAE3B;;;OAGG;IACH,OAAO,CAAC,WAAW;IAsCnB,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,WAAW;IA4BjC,OAAO,CAAC,UAAU;IA4DlB,OAAO,CAAC,KAAK;IAab,OAAO,CAAC,WAAW;IA0CnB,OAAO,CAAC,WAAW;IA8CnB;;;OAGG;IACH,OAAO,CAAC,gBAAgB;IAoCxB;;;OAGG;IACH,OAAO,CAAC,cAAc;IAetB,OAAO,CAAC,UAAU;IAwClB;;;OAGG;IACH,OAAO,CAAC,kBAAkB;IA4C1B,OAAO,CAAC,kBAAkB;IAK1B;;;;OAIG;IACH,OAAO,CAAC,0CAA0C;IAoDlD,OAAO,CAAC,UAAU;IA+ClB,OAAO,CAAC,QAAQ;IAMhB,OAAO,CAAC,mBAAmB;IAmD3B,OAAO,CAAC,WAAW;IA8BnB,OAAO,CAAC,WAAW;IA2BnB,OAAO,CAAC,iBAAiB;IAwBzB,OAAO,CAAC,WAAW;IAyGnB,OAAO,CAAC,SAAS;IAoHjB,OAAO,CAAC,WAAW;IAWnB,OAAO,CAAC,qBAAqB;IA2C7B,OAAO,CAAC,SAAS;IAkDjB,OAAO,CAAC,YAAY;IA8BpB,OAAO,CAAC,sBAAsB;IA4B9B;;;;OAIG;IACH,OAAO,CAAC,YAAY;IAkBpB;;;OAGG;IACH,OAAO,CAAC,iBAAiB;IAwCzB,OAAO,CAAC,gBAAgB;IA0CxB,OAAO,CAAC,gBAAgB;IA6ExB,OAAO,CAAC,uBAAuB;IAqE/B,OAAO,CAAC,eAAe;IAsBvB,OAAO,CAAC,kBAAkB;IAqB1B,OAAO,CAAC,yBAAyB;IAyFjC,OAAO,CAAC,qBAAqB;IAqB7B,OAAO,CAAC,UAAU;IAiBlB,OAAO,CAAC,mBAAmB;IAI3B,OAAO,CAAC,gBAAgB;IAYxB,OAAO,CAAC,iBAAiB;IAYxB,OAAO,CAAC,iBAAiB;IAUzB;;;OAGG;IACH,OAAO,CAAC,cAAc;IA2BtB,OAAO,CAAC,qBAAqB;IAiC9B,OAAO,CAAC,2BAA2B;IAgCnC,OAAO,CAAC,oBAAoB;IAoB5B,OAAO,CAAC,wBAAwB;IAuHhC,OAAO,CAAC,qBAAqB;IA6B7B,OAAO,CAAC,eAAe;IAKvB,OAAO,CAAC,qBAAqB;IAK7B,OAAO,CAAC,iBAAiB;IAazB,OAAO,CAAC,kBAAkB;IAa1B,OAAO,CAAC,kBAAkB;IAa1B,OAAO,CAAC,kBAAkB;IAW1B,OAAO,CAAC,yBAAyB;IA0CjC,OAAO,CAAC,qBAAqB;IAyE7B,OAAO,CAAC,uBAAuB;IAc/B,OAAO,CAAC,6BAA6B;IAiBrC,OAAO,CAAC,0BAA0B;IAalC,OAAO,CAAC,sBAAsB;IA+G9B;;;;OAIG;IACH,OAAO,CAAC,yBAAyB;IAIjC,OAAO,CAAC,iCAAiC;IAazC,OAAO,CAAC,uCAAuC;IAgB/C,OAAO,CAAC,oCAAoC;IAY5C;;;OAGG;IACH,OAAO,CAAC,gCAAgC;IAoDxC,OAAO,CAAC,sBAAsB;IA6T9B,OAAO,CAAC,mBAAmB;IA2D3B,OAAO,CAAC,kBAAkB;IAuB1B,OAAO,CAAC,0BAA0B;IAuDlC;;;;OAIG;IACH,OAAO,CAAC,sBAAsB;IA6B9B;;;;;OAKG;IACH,OAAO,CAAC,yBAAyB;IA6BjC;;;;OAIG;IACH,OAAO,CAAC,kBAAkB;IAwB1B;;;OAGG;IACH,OAAO,CAAC,+BAA+B;IAIvC;;;OAGG;IACH,OAAO,CAAC,gCAAgC;IAIxC;;;OAGG;IACH,OAAO,CAAC,kBAAkB;IAyC1B,OAAO,CAAC,IAAI;IAIZ,OAAO,CAAC,OAAO;IAOf,OAAO,CAAC,OAAO;IAIf,OAAO,CAAC,KAAK;IAIb,OAAO,CAAC,YAAY;IAKpB,OAAO,CAAC,MAAM;IAQd,OAAO,CAAC,gBAAgB;IAQxB,OAAO,CAAC,yBAAyB;IAWjC,OAAO,CAAC,iBAAiB;CAU1B;AAGD,wBAAgB,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,WAAW,CAEhD"}
|
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
|
-
|
|
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.
|
|
1297
|
-
// Procedure names can have dots
|
|
1298
|
-
let procedureName = this.
|
|
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.
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
//
|
|
1856
|
-
|
|
1857
|
-
|
|
1858
|
-
|
|
1859
|
-
|
|
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
|
|
1915
|
-
|
|
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
|
|
2048
|
-
|
|
2049
|
-
|
|
2050
|
-
|
|
2051
|
-
|
|
2052
|
-
|
|
2053
|
-
|
|
2054
|
-
|
|
2055
|
-
|
|
2056
|
-
|
|
2057
|
-
|
|
2058
|
-
|
|
2059
|
-
|
|
2060
|
-
|
|
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
|
-
|
|
2064
|
-
|
|
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],
|
|
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],
|
|
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];
|