xlucene-parser 1.10.1 → 1.10.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.
@@ -1,40 +1,245 @@
1
1
  import { xLuceneTypeConfig, xLuceneVariables } from '@terascope/types';
2
2
  import * as i from './interfaces.js';
3
3
  /**
4
- * Parse a xLucene query
4
+ * Parse a xLucene query and provide methods to traverse and manipulate the resulting AST.
5
+ *
6
+ * The Parser class is the main entry point for parsing xLucene queries. It converts
7
+ * query strings into an Abstract Syntax Tree (AST) that can be traversed, validated,
8
+ * and transformed.
9
+ *
10
+ * @example
11
+ * ```typescript
12
+ * const parser = new Parser('name:John AND age:>=25');
13
+ * console.log(parser.ast); // Access the parsed AST
14
+ *
15
+ * // Iterate over term nodes
16
+ * parser.forTermTypes((node) => {
17
+ * console.log(node.field, node.value);
18
+ * });
19
+ *
20
+ * // Resolve variables
21
+ * const resolved = parser.resolveVariables({ minAge: 25 });
22
+ * ```
5
23
  */
6
24
  export declare class Parser {
7
25
  readonly ast: i.Node;
8
26
  readonly query: string;
9
27
  readonly typeConfig: xLuceneTypeConfig;
10
28
  readonly filterNilVariables: boolean;
29
+ /**
30
+ * Create a new Parser instance.
31
+ *
32
+ * @param { string } query - The xLucene query string to parse
33
+ * @param { i.ParserOptions } options - Optional configuration for parsing behavior
34
+ * @param { xLuceneTypeConfig } options.type_config - Field type configuration for coercion
35
+ * @param { boolean } options.filterNilVariables - Filter out nodes with undefined variables
36
+ * @param { xLuceneVariables } options.variables - Variable values for resolution
37
+ * @param { i.Node } _overrideNode - Internal parameter for creating parser with existing AST
38
+ *
39
+ * @example
40
+ * ```typescript
41
+ * // Basic parsing
42
+ * const parser = new Parser('name:John');
43
+ *
44
+ * // With type configuration
45
+ * const parser = new Parser('age:25', {
46
+ * type_config: { age: 'integer' }
47
+ * });
48
+ *
49
+ * // With variable filtering
50
+ * const parser = new Parser('name:$username', {
51
+ * filterNilVariables: true,
52
+ * variables: { username: 'John' }
53
+ * });
54
+ * ```
55
+ */
11
56
  constructor(query: string, options?: i.ParserOptions, _overrideNode?: i.Node);
12
- filterNodes(ast: i.Node, fn: (node: i.Node, parent?: i.Node) => boolean): i.Node;
13
57
  /**
14
- * Recursively iterate over all or select set of the nodes types
58
+ * Recursively filters nodes in an AST based on a predicate function. Handles logical groups,
59
+ * conjunctions, negations, ranges, and function nodes while preserving tree structure and
60
+ * automatically simplifying when possible (e.g., unwrapping single-node conjunctions).
61
+ *
62
+ * @param {i.Node} ast - The root AST node to filter
63
+ * @param {function(i.Node, i.Node=): boolean} fn - Predicate function that receives
64
+ * (node, parent) and returns true to keep the node, false to remove it
65
+ *
66
+ * @returns {i.Node} New filtered AST containing only nodes that pass the filter criteria.
67
+ * Returns empty node if all nodes are filtered out.
68
+ *
69
+ * @example
70
+ * // Filter out unwanted fields
71
+ * const filtered = filterNodes(ast, (node) => node.field !== 'unwanted');
72
+ *
73
+ * @example
74
+ * // Filter based on parent context
75
+ * const filtered = filterNodes(ast, (node, parent) =>
76
+ * !parent || utils.isLogicalGroup(parent)
77
+ * );
15
78
  */
79
+ filterNodes(ast: i.Node, fn: (node: i.Node, parent?: i.Node) => boolean): i.Node;
80
+ /**
81
+ * Recursively iterate over all nodes of the specified types in the AST.
82
+ *
83
+ * This method performs a depth-first traversal of the AST, calling the callback
84
+ * function for each node whose type matches one of the specified types.
85
+ *
86
+ * @param types - Array of NodeType values to match
87
+ * @param cb - Callback function called for each matching node
88
+ * @param skipFunctionParams - Whether to skip traversing function parameters
89
+ *
90
+ * @example
91
+ * ```typescript
92
+ * // Find all term and wildcard nodes
93
+ * parser.forTypes([NodeType.Term, NodeType.Wildcard], (node) => {
94
+ * console.log('Found node:', node.type);
95
+ * });
96
+ *
97
+ * // Find logical groups, skipping function parameters
98
+ * parser.forTypes([NodeType.LogicalGroup], (node) => {
99
+ * console.log('Logical group with', node.flow.length, 'conjunctions');
100
+ * }, true);
101
+ * ```
102
+ */
16
103
  forTypes<T extends i.NodeType[] | readonly i.NodeType[]>(types: T, cb: (node: i.Node) => void, skipFunctionParams?: boolean): void;
17
104
  /**
18
- * Recursively iterate over all nodes types
19
- */
105
+ * Recursively walk through every node in the AST and call the callback function for each node.
106
+ *
107
+ * This method performs a depth-first traversal of the entire AST, visiting every node
108
+ * exactly once. Unlike `forTypes()` which filters by node type, this method calls the
109
+ * callback for all nodes regardless of their type.
110
+ *
111
+ * @param cb - Callback function called for each node in the AST
112
+ * @param cb.node - The current node being visited
113
+ *
114
+ * @example
115
+ * ```typescript
116
+ * // Log all nodes in the AST
117
+ * parser.walkAST((node) => {
118
+ * console.log(`Node type: ${node.type}`);
119
+ * });
120
+ *
121
+ * // Search for node properties
122
+ * parser.walkAST((node) => {
123
+ * if (isFunctionNode(node) && node.name === 'knn') {
124
+ * hasKNN = true;
125
+ * return;
126
+ * }
127
+ * });
128
+ * ```
129
+ */
20
130
  walkAST(cb: (node: i.Node) => void): void;
21
131
  /**
22
- * Iterate over all of the Term-Like nodes.
23
- */
132
+ * Iterate over all term-like nodes in the AST.
133
+ *
134
+ * Term-like nodes include: Term, Regexp, Range, Wildcard, Function, and TermList.
135
+ * This is a convenience method that filters to nodes representing searchable terms.
136
+ *
137
+ * @param cb - Callback function called for each term-like node
138
+ * @param skipFunctionParams - Whether to skip traversing function parameters (default: true)
139
+ *
140
+ * @example
141
+ * ```typescript
142
+ * // Process all searchable terms
143
+ * parser.forTermTypes((node) => {
144
+ * if (node.field) {
145
+ * console.log(`Field: ${node.field}`);
146
+ * }
147
+ * });
148
+ *
149
+ * // Include function parameters in traversal
150
+ * parser.forTermTypes((node) => {
151
+ * console.log('Term type:', node.type);
152
+ * }, false);
153
+ * ```
154
+ */
24
155
  forTermTypes(cb: (node: i.TermLikeNode) => void, skipFunctionParams?: boolean): void;
25
156
  /**
26
- * Iterate over all of the field value from Term-Like nodes,
27
- * this is useful for validating values and variables.
28
- */
157
+ * Iterate over all field values from term-like nodes.
158
+ *
159
+ * This method extracts and processes all field values from nodes that contain
160
+ * searchable terms. It's particularly useful for validating values and variables,
161
+ * or for collecting all values used in a query.
162
+ *
163
+ * @param cb - Callback function called for each field value
164
+ * @param cb.value - The field value (can be a literal value or variable reference)
165
+ * @param cb.node - The parent node containing this value
166
+ *
167
+ * @example
168
+ * ```typescript
169
+ * // Collect all literal values
170
+ * const values: any[] = [];
171
+ * parser.forEachFieldValue((value, node) => {
172
+ * if (value.type === 'value') {
173
+ * values.push(value.value);
174
+ * }
175
+ * });
176
+ *
177
+ * // Validate variable references
178
+ * parser.forEachFieldValue((value, node) => {
179
+ * if (value.type === 'variable') {
180
+ * console.log(`Variable ${value.value} used in field ${node.field}`);
181
+ * }
182
+ * });
183
+ * ```
184
+ */
29
185
  forEachFieldValue(cb: (value: i.FieldValue<any>, node: i.TermLikeNode) => void): void;
30
186
  forEachTermNode(fieldValidator: (field: string) => void, valueValidator: (fieldValue: i.FieldValue<any>) => void): void;
31
187
  /**
32
- * Validate and resolve the variables, returns a new Parser instance
33
- */
188
+ * Validate and resolve variables in the query, returning a new Parser instance.
189
+ *
190
+ * This method processes all variable references in the AST, replacing them with
191
+ * their actual values. Variable references use `$variableName` syntax, and scoped
192
+ * variables use `@variableName` syntax.
193
+ *
194
+ * @param variables - Object mapping variable names to their values
195
+ * @returns A new Parser instance with resolved variables
196
+ *
197
+ * @example
198
+ * ```typescript
199
+ * // Original query with variables
200
+ * const parser = new Parser('name:$username AND age:>=$minAge');
201
+ *
202
+ * // Resolve variables
203
+ * const resolved = parser.resolveVariables({
204
+ * username: 'John',
205
+ * minAge: 25
206
+ * });
207
+ *
208
+ * // Resolved query equivalent to: name:John AND age:>=25
209
+ * ```
210
+ *
211
+ * @throws {TSError} If variables object is invalid
212
+ */
34
213
  resolveVariables(variables: xLuceneVariables): Parser;
35
214
  /**
36
- * Map the Node and return a new Node
37
- */
215
+ * Transform the AST by applying a mapping function to each node.
216
+ *
217
+ * This method performs a deep traversal of the AST, applying the provided
218
+ * function to each node and rebuilding the tree with the results. The function
219
+ * receives each node and its parent, and should return a transformed node.
220
+ *
221
+ * @param fn - Function to transform each node
222
+ * @param fn.node - The current node being processed
223
+ * @param fn.parent - The parent node (if any)
224
+ * @returns The transformed AST root node
225
+ *
226
+ * @example
227
+ * ```typescript
228
+ * // Transform all string values to lowercase
229
+ * const transformedAST = parser.mapNode((node, parent) => {
230
+ * if (node.type === 'term' && node.value.type === 'value') {
231
+ * return {
232
+ * ...node,
233
+ * value: {
234
+ * ...node.value,
235
+ * value: String(node.value.value).toLowerCase()
236
+ * }
237
+ * };
238
+ * }
239
+ * return node;
240
+ * });
241
+ * ```
242
+ */
38
243
  mapNode(fn: (node: i.Node, parent?: i.Node) => i.Node): i.Node;
39
244
  }
40
245
  //# sourceMappingURL=parser.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"parser.d.ts","sourceRoot":"","sources":["../../src/parser.ts"],"names":[],"mappings":"AAIA,OAAO,EAAoB,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAEzF,OAAO,KAAK,CAAC,MAAM,iBAAiB,CAAC;AAOrC;;EAEE;AACF,qBAAa,MAAM;IACf,QAAQ,CAAC,GAAG,EAAE,CAAC,CAAC,IAAI,CAAC;IACrB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,UAAU,EAAE,iBAAiB,CAAC;IACvC,QAAQ,CAAC,kBAAkB,EAAE,OAAO,CAAC;gBAGjC,KAAK,EAAE,MAAM,EACb,OAAO,CAAC,EAAE,CAAC,CAAC,aAAa,EACzB,aAAa,CAAC,EAAE,CAAC,CAAC,IAAI;IA+D1B,WAAW,CAAC,GAAG,EAAE,CAAC,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC,IAAI,KAAK,OAAO,GAAG,CAAC,CAAC,IAAI;IAwHhF;;MAEE;IACF,QAAQ,CAAC,CAAC,SAAS,CAAC,CAAC,QAAQ,EAAE,GAAG,SAAS,CAAC,CAAC,QAAQ,EAAE,EACnD,KAAK,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,KAAK,IAAI,EAAE,kBAAkB,UAAQ,GACjE,IAAI;IAmCP;;MAEE;IACF,OAAO,CAAC,EAAE,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,KAAK,IAAI;IA0BlC;;MAEE;IACF,YAAY,CACR,EAAE,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC,YAAY,KAAK,IAAI,EAClC,kBAAkB,UAAO,GAC1B,IAAI;IAQP;;;MAGE;IACF,iBAAiB,CAAC,EAAE,EAAE,CAAC,KAAK,EAAE,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,YAAY,KAAK,IAAI,GAAG,IAAI;IAsBrF,eAAe,CACX,cAAc,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,EACvC,cAAc,EAAE,CAAC,UAAU,EAAE,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,IAAI,GACxD,IAAI;IA+DP;;MAEE;IACF,gBAAgB,CAAC,SAAS,EAAE,gBAAgB,GAAG,MAAM;IA8BrD;;MAEE;IACF,OAAO,CAAC,EAAE,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI;CAkCjE"}
1
+ {"version":3,"file":"parser.d.ts","sourceRoot":"","sources":["../../src/parser.ts"],"names":[],"mappings":"AAIA,OAAO,EAAoB,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAEzF,OAAO,KAAK,CAAC,MAAM,iBAAiB,CAAC;AAOrC;;;;;;;;;;;;;;;;;;;;EAoBE;AACF,qBAAa,MAAM;IACf,QAAQ,CAAC,GAAG,EAAE,CAAC,CAAC,IAAI,CAAC;IACrB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,UAAU,EAAE,iBAAiB,CAAC;IACvC,QAAQ,CAAC,kBAAkB,EAAE,OAAO,CAAC;IAErC;;;;;;;;;;;;;;;;;;;;;;;;;;OA0BG;gBAEC,KAAK,EAAE,MAAM,EACb,OAAO,CAAC,EAAE,CAAC,CAAC,aAAa,EACzB,aAAa,CAAC,EAAE,CAAC,CAAC,IAAI;IA+D1B;;;;;;;;;;;;;;;;;;;;;MAqBE;IACF,WAAW,CAAC,GAAG,EAAE,CAAC,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC,IAAI,KAAK,OAAO,GAAG,CAAC,CAAC,IAAI;IAwHhF;;;;;;;;;;;;;;;;;;;;;;OAsBG;IACH,QAAQ,CAAC,CAAC,SAAS,CAAC,CAAC,QAAQ,EAAE,GAAG,SAAS,CAAC,CAAC,QAAQ,EAAE,EACnD,KAAK,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,KAAK,IAAI,EAAE,kBAAkB,UAAQ,GACjE,IAAI;IAmCP;;;;;;;;;;;;;;;;;;;;;;;;;OAyBG;IACH,OAAO,CAAC,EAAE,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,KAAK,IAAI;IA0BlC;;;;;;;;;;;;;;;;;;;;;;;OAuBG;IACH,YAAY,CACR,EAAE,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC,YAAY,KAAK,IAAI,EAClC,kBAAkB,UAAO,GAC1B,IAAI;IAQP;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA4BG;IACH,iBAAiB,CAAC,EAAE,EAAE,CAAC,KAAK,EAAE,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,YAAY,KAAK,IAAI,GAAG,IAAI;IAsBrF,eAAe,CACX,cAAc,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,EACvC,cAAc,EAAE,CAAC,UAAU,EAAE,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,IAAI,GACxD,IAAI;IA+DP;;;;;;;;;;;;;;;;;;;;;;;;;OAyBG;IACH,gBAAgB,CAAC,SAAS,EAAE,gBAAgB,GAAG,MAAM;IA8BrD;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA4BG;IACH,OAAO,CAAC,EAAE,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI;CAkCjE"}
@@ -5,13 +5,58 @@ import * as i from './interfaces.js';
5
5
  import * as utils from './utils.js';
6
6
  const termTypes = new Set(utils.termTypes.filter((type) => (type !== i.NodeType.Range && type !== i.NodeType.Function)));
7
7
  /**
8
- * Parse a xLucene query
8
+ * Parse a xLucene query and provide methods to traverse and manipulate the resulting AST.
9
+ *
10
+ * The Parser class is the main entry point for parsing xLucene queries. It converts
11
+ * query strings into an Abstract Syntax Tree (AST) that can be traversed, validated,
12
+ * and transformed.
13
+ *
14
+ * @example
15
+ * ```typescript
16
+ * const parser = new Parser('name:John AND age:>=25');
17
+ * console.log(parser.ast); // Access the parsed AST
18
+ *
19
+ * // Iterate over term nodes
20
+ * parser.forTermTypes((node) => {
21
+ * console.log(node.field, node.value);
22
+ * });
23
+ *
24
+ * // Resolve variables
25
+ * const resolved = parser.resolveVariables({ minAge: 25 });
26
+ * ```
9
27
  */
10
28
  export class Parser {
11
29
  ast;
12
30
  query;
13
31
  typeConfig;
14
32
  filterNilVariables;
33
+ /**
34
+ * Create a new Parser instance.
35
+ *
36
+ * @param { string } query - The xLucene query string to parse
37
+ * @param { i.ParserOptions } options - Optional configuration for parsing behavior
38
+ * @param { xLuceneTypeConfig } options.type_config - Field type configuration for coercion
39
+ * @param { boolean } options.filterNilVariables - Filter out nodes with undefined variables
40
+ * @param { xLuceneVariables } options.variables - Variable values for resolution
41
+ * @param { i.Node } _overrideNode - Internal parameter for creating parser with existing AST
42
+ *
43
+ * @example
44
+ * ```typescript
45
+ * // Basic parsing
46
+ * const parser = new Parser('name:John');
47
+ *
48
+ * // With type configuration
49
+ * const parser = new Parser('age:25', {
50
+ * type_config: { age: 'integer' }
51
+ * });
52
+ *
53
+ * // With variable filtering
54
+ * const parser = new Parser('name:$username', {
55
+ * filterNilVariables: true,
56
+ * variables: { username: 'John' }
57
+ * });
58
+ * ```
59
+ */
15
60
  constructor(query, options, _overrideNode) {
16
61
  this.query = trim(query || '');
17
62
  this.filterNilVariables = !!options?.filterNilVariables;
@@ -70,6 +115,28 @@ export class Parser {
70
115
  });
71
116
  }
72
117
  }
118
+ /**
119
+ * Recursively filters nodes in an AST based on a predicate function. Handles logical groups,
120
+ * conjunctions, negations, ranges, and function nodes while preserving tree structure and
121
+ * automatically simplifying when possible (e.g., unwrapping single-node conjunctions).
122
+ *
123
+ * @param {i.Node} ast - The root AST node to filter
124
+ * @param {function(i.Node, i.Node=): boolean} fn - Predicate function that receives
125
+ * (node, parent) and returns true to keep the node, false to remove it
126
+ *
127
+ * @returns {i.Node} New filtered AST containing only nodes that pass the filter criteria.
128
+ * Returns empty node if all nodes are filtered out.
129
+ *
130
+ * @example
131
+ * // Filter out unwanted fields
132
+ * const filtered = filterNodes(ast, (node) => node.field !== 'unwanted');
133
+ *
134
+ * @example
135
+ * // Filter based on parent context
136
+ * const filtered = filterNodes(ast, (node, parent) =>
137
+ * !parent || utils.isLogicalGroup(parent)
138
+ * );
139
+ */
73
140
  filterNodes(ast, fn) {
74
141
  const filterNode = (ogNode, parent) => {
75
142
  const clone = cloneDeep(ogNode);
@@ -176,8 +243,28 @@ export class Parser {
176
243
  return filterNode(ast);
177
244
  }
178
245
  /**
179
- * Recursively iterate over all or select set of the nodes types
180
- */
246
+ * Recursively iterate over all nodes of the specified types in the AST.
247
+ *
248
+ * This method performs a depth-first traversal of the AST, calling the callback
249
+ * function for each node whose type matches one of the specified types.
250
+ *
251
+ * @param types - Array of NodeType values to match
252
+ * @param cb - Callback function called for each matching node
253
+ * @param skipFunctionParams - Whether to skip traversing function parameters
254
+ *
255
+ * @example
256
+ * ```typescript
257
+ * // Find all term and wildcard nodes
258
+ * parser.forTypes([NodeType.Term, NodeType.Wildcard], (node) => {
259
+ * console.log('Found node:', node.type);
260
+ * });
261
+ *
262
+ * // Find logical groups, skipping function parameters
263
+ * parser.forTypes([NodeType.LogicalGroup], (node) => {
264
+ * console.log('Logical group with', node.flow.length, 'conjunctions');
265
+ * }, true);
266
+ * ```
267
+ */
181
268
  forTypes(types, cb, skipFunctionParams = false) {
182
269
  const walkNode = (node) => {
183
270
  if (types.includes(node.type)) {
@@ -208,8 +295,31 @@ export class Parser {
208
295
  walkNode(this.ast);
209
296
  }
210
297
  /**
211
- * Recursively iterate over all nodes types
212
- */
298
+ * Recursively walk through every node in the AST and call the callback function for each node.
299
+ *
300
+ * This method performs a depth-first traversal of the entire AST, visiting every node
301
+ * exactly once. Unlike `forTypes()` which filters by node type, this method calls the
302
+ * callback for all nodes regardless of their type.
303
+ *
304
+ * @param cb - Callback function called for each node in the AST
305
+ * @param cb.node - The current node being visited
306
+ *
307
+ * @example
308
+ * ```typescript
309
+ * // Log all nodes in the AST
310
+ * parser.walkAST((node) => {
311
+ * console.log(`Node type: ${node.type}`);
312
+ * });
313
+ *
314
+ * // Search for node properties
315
+ * parser.walkAST((node) => {
316
+ * if (isFunctionNode(node) && node.name === 'knn') {
317
+ * hasKNN = true;
318
+ * return;
319
+ * }
320
+ * });
321
+ * ```
322
+ */
213
323
  walkAST(cb) {
214
324
  const walkNode = (node) => {
215
325
  cb(node);
@@ -232,15 +342,61 @@ export class Parser {
232
342
  walkNode(this.ast);
233
343
  }
234
344
  /**
235
- * Iterate over all of the Term-Like nodes.
236
- */
345
+ * Iterate over all term-like nodes in the AST.
346
+ *
347
+ * Term-like nodes include: Term, Regexp, Range, Wildcard, Function, and TermList.
348
+ * This is a convenience method that filters to nodes representing searchable terms.
349
+ *
350
+ * @param cb - Callback function called for each term-like node
351
+ * @param skipFunctionParams - Whether to skip traversing function parameters (default: true)
352
+ *
353
+ * @example
354
+ * ```typescript
355
+ * // Process all searchable terms
356
+ * parser.forTermTypes((node) => {
357
+ * if (node.field) {
358
+ * console.log(`Field: ${node.field}`);
359
+ * }
360
+ * });
361
+ *
362
+ * // Include function parameters in traversal
363
+ * parser.forTermTypes((node) => {
364
+ * console.log('Term type:', node.type);
365
+ * }, false);
366
+ * ```
367
+ */
237
368
  forTermTypes(cb, skipFunctionParams = true) {
238
369
  this.forTypes(utils.termTypes, cb, skipFunctionParams);
239
370
  }
240
371
  /**
241
- * Iterate over all of the field value from Term-Like nodes,
242
- * this is useful for validating values and variables.
243
- */
372
+ * Iterate over all field values from term-like nodes.
373
+ *
374
+ * This method extracts and processes all field values from nodes that contain
375
+ * searchable terms. It's particularly useful for validating values and variables,
376
+ * or for collecting all values used in a query.
377
+ *
378
+ * @param cb - Callback function called for each field value
379
+ * @param cb.value - The field value (can be a literal value or variable reference)
380
+ * @param cb.node - The parent node containing this value
381
+ *
382
+ * @example
383
+ * ```typescript
384
+ * // Collect all literal values
385
+ * const values: any[] = [];
386
+ * parser.forEachFieldValue((value, node) => {
387
+ * if (value.type === 'value') {
388
+ * values.push(value.value);
389
+ * }
390
+ * });
391
+ *
392
+ * // Validate variable references
393
+ * parser.forEachFieldValue((value, node) => {
394
+ * if (value.type === 'variable') {
395
+ * console.log(`Variable ${value.value} used in field ${node.field}`);
396
+ * }
397
+ * });
398
+ * ```
399
+ */
244
400
  forEachFieldValue(cb) {
245
401
  this.forTermTypes((node) => {
246
402
  if (utils.isFunctionNode(node))
@@ -317,8 +473,31 @@ export class Parser {
317
473
  walkNode(this.ast);
318
474
  }
319
475
  /**
320
- * Validate and resolve the variables, returns a new Parser instance
321
- */
476
+ * Validate and resolve variables in the query, returning a new Parser instance.
477
+ *
478
+ * This method processes all variable references in the AST, replacing them with
479
+ * their actual values. Variable references use `$variableName` syntax, and scoped
480
+ * variables use `@variableName` syntax.
481
+ *
482
+ * @param variables - Object mapping variable names to their values
483
+ * @returns A new Parser instance with resolved variables
484
+ *
485
+ * @example
486
+ * ```typescript
487
+ * // Original query with variables
488
+ * const parser = new Parser('name:$username AND age:>=$minAge');
489
+ *
490
+ * // Resolve variables
491
+ * const resolved = parser.resolveVariables({
492
+ * username: 'John',
493
+ * minAge: 25
494
+ * });
495
+ *
496
+ * // Resolved query equivalent to: name:John AND age:>=25
497
+ * ```
498
+ *
499
+ * @throws {TSError} If variables object is invalid
500
+ */
322
501
  resolveVariables(variables) {
323
502
  const validatedVariables = utils.validateVariables(variables);
324
503
  const ast = this.mapNode((node, parent) => {
@@ -340,8 +519,34 @@ export class Parser {
340
519
  }, ast);
341
520
  }
342
521
  /**
343
- * Map the Node and return a new Node
344
- */
522
+ * Transform the AST by applying a mapping function to each node.
523
+ *
524
+ * This method performs a deep traversal of the AST, applying the provided
525
+ * function to each node and rebuilding the tree with the results. The function
526
+ * receives each node and its parent, and should return a transformed node.
527
+ *
528
+ * @param fn - Function to transform each node
529
+ * @param fn.node - The current node being processed
530
+ * @param fn.parent - The parent node (if any)
531
+ * @returns The transformed AST root node
532
+ *
533
+ * @example
534
+ * ```typescript
535
+ * // Transform all string values to lowercase
536
+ * const transformedAST = parser.mapNode((node, parent) => {
537
+ * if (node.type === 'term' && node.value.type === 'value') {
538
+ * return {
539
+ * ...node,
540
+ * value: {
541
+ * ...node.value,
542
+ * value: String(node.value.value).toLowerCase()
543
+ * }
544
+ * };
545
+ * }
546
+ * return node;
547
+ * });
548
+ * ```
549
+ */
345
550
  mapNode(fn) {
346
551
  const mapNode = (ogNode, parent) => {
347
552
  const node = fn({ ...ogNode }, parent);
@@ -1 +1 @@
1
- {"version":3,"file":"parser.js","sourceRoot":"","sources":["../../src/parser.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"parser.js","sourceRoot":"","sources":["../../src/parser.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,OAAO,EAAE,IAAI,EAAE,YAAY,EAC3B,SAAS,EAAE,KAAK,EAAE,GAAG,EACxB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,gBAAgB,EAAuC,MAAM,kBAAkB,CAAC;AACzF,OAAO,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AACxC,OAAO,KAAK,CAAC,MAAM,iBAAiB,CAAC;AACrC,OAAO,KAAK,KAAK,MAAM,YAAY,CAAC;AAEpC,MAAM,SAAS,GAAG,IAAI,GAAG,CAAa,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CACnE,IAAI,KAAK,CAAC,CAAC,QAAQ,CAAC,KAAK,IAAI,IAAI,KAAK,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAC5D,CAAC,CAAC,CAAC;AAEJ;;;;;;;;;;;;;;;;;;;;EAoBE;AACF,MAAM,OAAO,MAAM;IACN,GAAG,CAAS;IACZ,KAAK,CAAS;IACd,UAAU,CAAoB;IAC9B,kBAAkB,CAAU;IAErC;;;;;;;;;;;;;;;;;;;;;;;;;;OA0BG;IACH,YACI,KAAa,EACb,OAAyB,EACzB,aAAsB;QAEtB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;QAC/B,IAAI,CAAC,kBAAkB,GAAG,CAAC,CAAC,OAAO,EAAE,kBAAkB,CAAC;QAExD,IAAI,CAAC,UAAU,GAAG,EAAE,GAAG,OAAO,EAAE,WAAW,EAAE,CAAC;QAC9C,IAAI,aAAa,EAAE,CAAC;YAChB,IAAI,CAAC,GAAG,GAAG,aAAa,CAAC;YACzB,OAAO;QACX,CAAC;QAED,MAAM,UAAU,GAAiB;YAC7B,UAAU,EAAE,IAAI,CAAC,UAAU;SAC9B,CAAC;QAEF,IAAI,CAAC;YACD,IAAI,CAAC,GAAG,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,UAAU,EAAE,CAAC,CAAC;YAE7C,IAAI,OAAO,EAAE,kBAAkB,EAAE,CAAC;gBAC9B,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC;oBACrB,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,iJAAiJ,CAAC,CAAC;gBACzK,CAAC;gBACD,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,KAAU,EAAE,EAAE;oBACjD,IAAI,IAAI,GAAG,EAAE,CAAC;oBACd,IAAI,KAAK,GAAQ,EAAE,CAAC;oBACpB,IAAI,IAAI,GAAG,KAAK,CAAC;oBACjB,IAAI,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;wBACzB,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC;oBACtB,CAAC;oBACD,IAAI,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;wBACrB,IAAK,IAAI,CAAC,KAA8B,CAAC,MAAM;4BAAE,OAAO,IAAI,CAAC;wBAC7D,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;wBACvB,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC;oBAC7B,CAAC;oBACD,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;wBACtB,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,IAAI,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC;wBACtD,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC;oBAC7D,CAAC;oBAED,SAAS,IAAI,CAAC,QAAgB,EAAE,YAAoB;wBAChD,IAAI,QAAQ,KAAK,UAAU;4BAAE,OAAO,IAAI,CAAC;wBACzC,IAAI,YAAY,IAAI,CAAC,OAAO,EAAE,SAAS,IAAI,EAAE,CAAC;4BAAE,OAAO,IAAI,CAAC;wBAC5D,OAAO,KAAK,CAAC;oBACjB,CAAC;oBACD,OAAO,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;gBAC7B,CAAC,CAAC,CAAC;YACP,CAAC;YAED,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC;gBAC9B,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;gBAClD,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,MAAM,EAAE,OAAO,CAAC,CAAC;YAClF,CAAC;QACL,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACX,IAAI,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC;gBAC5C,GAAG,CAAC,OAAO,GAAG,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,YAAY,EAAE,UAAU,CAAC,CAAC;YAChE,CAAC;YAED,MAAM,IAAI,OAAO,CAAC,GAAG,EAAE;gBACnB,MAAM,EAAE,mCAAmC,IAAI,CAAC,KAAK,GAAG;aAC3D,CAAC,CAAC;QACP,CAAC;IACL,CAAC;IAED;;;;;;;;;;;;;;;;;;;;;MAqBE;IACF,WAAW,CAAC,GAAW,EAAE,EAA8C;QACnE,MAAM,UAAU,GAAG,CAAC,MAAc,EAAE,MAAe,EAAU,EAAE;YAC3D,MAAM,KAAK,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC;YAEhC,IAAI,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,YAAY,CAAC,KAAK,CAAC,EAAE,CAAC;gBAC3D,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI;qBACtB,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;oBACP,MAAM,KAAK,GAAG,CAAC,CAAC,KAAK;yBAChB,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;wBACP,IAAI,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,CAAC;4BACpD,gDAAgD;4BAChD,OAAO,UAAU,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;wBAChC,CAAC;wBACD,IAAI,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC;+BAChB,CACC,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,cAAc,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,EAClE,CAAC;4BACC,MAAM,KAAK,GAAG,UAAU,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;4BACxC,IAAI,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC;gCAAE,OAAO;4BACrC,OAAO;gCACH,GAAG,CAAC;gCACJ,IAAI,EAAE,KAAK;6BACd,CAAC;wBACN,CAAC;wBAED,2CAA2C;wBAC3C,IAAI,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,EAAE,MAAM,CAAC;4BAAE,OAAO,CAAC,CAAC;wBACnC,OAAO;oBACX,CAAC,CAAC;yBACD,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,kCAAkC;oBAExD,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;wBACf,OAAO,EAAE,GAAG,CAAC,EAAE,KAAK,EAAE,CAAC;oBAC3B,CAAC;oBACD,OAAO;gBACX,CAAC,CAAC;qBACD,MAAM,CAAE,mCAAmC;gBACxC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,MAAM,CAC3C,CAAC;gBAEN,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC;oBACnB,OAAO;wBACH,IAAI,EAAE,CAAC,CAAC,QAAQ,CAAC,KAAK;qBACzB,CAAC;gBACN,CAAC;gBAED,KAAK,CAAC,IAAI,GAAG,QAA2B,CAAC;gBAEzC,4DAA4D;gBAC5D,IAAI,KAAK,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;oBAC9D,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;gBAClC,CAAC;gBAED,OAAO,KAAK,CAAC;YACjB,CAAC;YAED,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;gBACvB,MAAM,QAAQ,GAAG,EAAE,CAAC,KAAK,CAAC,IAAW,EAAE,KAAK,CAAC,CAAC;gBAE9C,IAAI,SAAS,GAAG,KAAK,CAAC;gBACtB,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;oBACd,SAAS,GAAG,EAAE,CAAC,KAAK,CAAC,KAAY,EAAE,KAAK,CAAC,CAAC;oBAC1C,IAAI,CAAC,SAAS,EAAE,CAAC;wBACb,KAAK,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;oBAC1B,CAAC;gBACL,CAAC;gBAED,IAAI,CAAC,QAAQ,EAAE,CAAC;oBACZ,KAAK,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;oBACrB,IAAI,SAAS,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;wBAC3B,KAAK,CAAC,IAAI,GAAG,EAAE,GAAG,KAAK,CAAC,KAAK,EAAE,CAAC;oBACpC,CAAC;gBACL,CAAC;gBAED,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC;oBACb,OAAO,KAAK,CAAC;gBACjB,CAAC;gBACD,kDAAkD;YACtD,CAAC;YAED,IAAI,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,EAAE,CAAC;gBAC9B,MAAM,QAAQ,GAAG,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;oBACpC,IAAI,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC;wBACtB,MAAM,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;4BAC5B,MAAM,IAAI,GAAG,EAAE,CAAC;gCACZ,GAAG,CAAC;gCACJ,IAAI,EAAE,CAAC,CAAC,QAAQ,CAAC,IAAI;gCACrB,KAAK,EAAE,EAAE,GAAG,CAAC,EAAE;6BACR,EAAE,MAAM,CAAC,CAAC;4BACrB,IAAI,IAAI;gCAAE,OAAO,CAAC,CAAC;4BACnB,OAAO;wBACX,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAwB,CAAC;wBAC1C,IAAI,CAAC,KAAK,CAAC,MAAM;4BAAE,OAAO;wBAC1B,CAAC,CAAC,KAAK,GAAG,KAAK,CAAC;wBAChB,OAAO,CAAC,CAAC;oBACb,CAAC;oBACD,MAAM,IAAI,GAAG,EAAE,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;oBAC3B,IAAI,IAAI;wBAAE,OAAO,CAAC,CAAC;oBACnB,OAAO;gBACX,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAA4B,CAAC;gBAE9C,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC;oBACnB,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;gBACtC,CAAC;gBACD,KAAK,CAAC,MAAM,GAAG,QAAQ,CAAC;gBACxB,OAAO,KAAK,CAAC;YACjB,CAAC;YAED,IAAI,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC;gBACrB,OAAO,KAAK,CAAC;YACjB,CAAC;YAED,OAAO;gBACH,IAAI,EAAE,CAAC,CAAC,QAAQ,CAAC,KAAK;aACzB,CAAC;QACN,CAAC,CAAC;QAEF,OAAO,UAAU,CAAC,GAAG,CAAC,CAAC;IAC3B,CAAC;IAED;;;;;;;;;;;;;;;;;;;;;;OAsBG;IACH,QAAQ,CACJ,KAAQ,EAAE,EAA0B,EAAE,kBAAkB,GAAG,KAAK;QAEhE,MAAM,QAAQ,GAAG,CAAC,IAAY,EAAE,EAAE;YAC9B,IAAI,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC5B,EAAE,CAAC,IAAI,CAAC,CAAC;YACb,CAAC;YAED,IAAI,CAAC,kBAAkB,IAAI,KAAK,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,CAAC;gBACpD,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;oBAC9B,QAAQ,CAAC,KAAK,CAAC,CAAC;gBACpB,CAAC;gBACD,OAAO;YACX,CAAC;YAED,IAAI,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;gBACzB,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACpB,OAAO;YACX,CAAC;YAED,IAAI,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC1B,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;oBAC3B,QAAQ,CAAC,IAAI,CAAC,CAAC;gBACnB,CAAC;gBACD,OAAO;YACX,CAAC;YAED,IAAI,KAAK,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC5B,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;oBAC5B,QAAQ,CAAC,IAAI,CAAC,CAAC;gBACnB,CAAC;YACL,CAAC;QACL,CAAC,CAAC;QAEF,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACvB,CAAC;IAED;;;;;;;;;;;;;;;;;;;;;;;;;OAyBG;IACH,OAAO,CAAC,EAA0B;QAC9B,MAAM,QAAQ,GAAG,CAAC,IAAY,EAAE,EAAE;YAC9B,EAAE,CAAC,IAAI,CAAC,CAAC;YAET,IAAI,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;gBACzB,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACpB,OAAO;YACX,CAAC;YAED,IAAI,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC1B,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;oBAC3B,QAAQ,CAAC,IAAI,CAAC,CAAC;gBACnB,CAAC;gBACD,OAAO;YACX,CAAC;YAED,IAAI,KAAK,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC5B,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;oBAC5B,QAAQ,CAAC,IAAI,CAAC,CAAC;gBACnB,CAAC;YACL,CAAC;QACL,CAAC,CAAC;QAEF,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACvB,CAAC;IAED;;;;;;;;;;;;;;;;;;;;;;;OAuBG;IACH,YAAY,CACR,EAAkC,EAClC,kBAAkB,GAAG,IAAI;QAEzB,IAAI,CAAC,QAAQ,CACT,KAAK,CAAC,SAAS,EACf,EAA4B,EAC5B,kBAAkB,CACrB,CAAC;IACN,CAAC;IAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA4BG;IACH,iBAAiB,CAAC,EAA4D;QAC1E,IAAI,CAAC,YAAY,CAAC,CAAC,IAAI,EAAE,EAAE;YACvB,IAAI,KAAK,CAAC,cAAc,CAAC,IAAI,CAAC;gBAAE,OAAO;YACvC,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;gBACtB,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;gBAC1B,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;oBACb,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;gBAC/B,CAAC;gBACD,OAAO;YACX,CAAC;YAED,IAAI,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;gBACzB,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE;oBACzB,EAAE,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;gBACpB,CAAC,CAAC,CAAC;gBACH,OAAO;YACX,CAAC;YAED,EAAE,CAAE,IAAe,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;QACrC,CAAC,EAAE,KAAK,CAAC,CAAC;IACd,CAAC;IAED,eAAe,CACX,cAAuC,EACvC,cAAuD;QAEvD,SAAS,iBAAiB,CAAC,IAAkC;YACzD,IAAI,OAAO,IAAI,IAAI,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;gBAChC,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAC/B,CAAC;QACL,CAAC;QAED,SAAS,iBAAiB,CAAC,IAA0B;YACjD,IAAI,OAAO,IAAI,IAAI,EAAE,CAAC;gBAClB,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;oBAC5B,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;gBACvC,CAAC;qBAAM,CAAC;oBACJ,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBAC/B,CAAC;YACL,CAAC;QACL,CAAC;QAED,MAAM,QAAQ,GAAG,CAAC,IAAY,EAAE,EAAE;YAC9B,IAAI,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC3B,iBAAiB,CAAC,IAAsB,CAAC,CAAC;gBAC1C,iBAAiB,CAAC,IAAI,CAAC,CAAC;gBACxB,OAAO;YACX,CAAC;YAED,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;gBACtB,iBAAiB,CAAC,IAAI,CAAC,CAAC;gBACxB,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBAC7B,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;oBACb,iBAAiB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBAClC,CAAC;gBACD,OAAO;YACX,CAAC;YAED,IAAI,KAAK,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC7B,iBAAiB,CAAC,IAAI,CAAC,CAAC;gBACxB,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;oBAC9B,iBAAiB,CAAC,KAAK,CAAC,CAAC;gBAC7B,CAAC;gBACD,OAAO;YACX,CAAC;YAED,IAAI,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;gBACzB,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACpB,OAAO;YACX,CAAC;YAED,IAAI,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC1B,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;oBAC3B,QAAQ,CAAC,IAAI,CAAC,CAAC;gBACnB,CAAC;gBACD,OAAO;YACX,CAAC;YAED,IAAI,KAAK,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC5B,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;oBAC5B,QAAQ,CAAC,IAAI,CAAC,CAAC;gBACnB,CAAC;YACL,CAAC;QACL,CAAC,CAAC;QAEF,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACvB,CAAC;IAED;;;;;;;;;;;;;;;;;;;;;;;;;OAyBG;IACH,gBAAgB,CAAC,SAA2B;QACxC,MAAM,kBAAkB,GAAG,KAAK,CAAC,iBAAiB,CAAC,SAAS,CAAC,CAAC;QAE9D,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE;YACtC,MAAM,QAAQ,GAAG,MAAM,EAAE,IAAI,KAAK,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC;YAEzD,IAAI,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;gBACzB,OAAO,cAAc,CAAC,IAAI,EAAE,kBAAkB,CAAC,CAAC;YACpD,CAAC;YACD,IAAI,OAAO,IAAI,IAAI,EAAE,CAAC;gBAClB,OAAO,eAAe,CAClB,IAAsC,EACtC,kBAAkB,EAClB,MAAM,EAAE,IAAI,KAAK,CAAC,CAAC,QAAQ,CAAC,QAAQ,EACpC,QAAQ,CACX,CAAC;YACN,CAAC;YACD,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;gBACtB,WAAW,CAAC,IAAI,EAAE,kBAAkB,EAAE,QAAQ,CAAC,CAAC;YACpD,CAAC;YAED,OAAO,IAAI,CAAC;QAChB,CAAC,CAAC,CAAC;QAEH,OAAO,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE;YAC1B,WAAW,EAAE,IAAI,CAAC,UAAU;YAC5B,kBAAkB,EAAE,IAAI,CAAC,kBAAkB;SAC9C,EAAE,GAAG,CAAC,CAAC;IACZ,CAAC;IAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA4BG;IACH,OAAO,CAAC,EAA6C;QACjD,MAAM,OAAO,GAAG,CAAC,MAAc,EAAE,MAAe,EAAU,EAAE;YACxD,MAAM,IAAI,GAAG,EAAE,CAAC,EAAE,GAAG,MAAM,EAAE,EAAE,MAAM,CAAC,CAAC;YAEvC,IAAI,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;gBACzB,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;YACzC,CAAC;iBAAM,IAAI,KAAK,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,CAAC;gBACpC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;oBACnC,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;oBACpC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;wBACvD,MAAM,IAAI,KAAK,CACX,UAAU,CAAC,CAAC,QAAQ,CAAC,IAAI,OAAO,CAAC,CAAC,QAAQ,CAAC,QAAQ,mCAAmC,OAAO,CAAC,IAAI,EAAE,CACvG,CAAC;oBACN,CAAC;oBACD,OAAO,OAAO,CAAC;gBACnB,CAAC,CAAC,CAAC;YACP,CAAC;iBAAM,IAAI,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC;gBACjC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;oBAC/B,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;oBACpC,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,OAAO,CAAC,EAAE,CAAC;wBAChC,MAAM,IAAI,KAAK,CACX,UAAU,CAAC,CAAC,QAAQ,CAAC,WAAW,mCAAmC,OAAO,CAAC,IAAI,EAAE,CACpF,CAAC;oBACN,CAAC;oBACD,OAAO,OAAO,CAAC;gBACnB,CAAC,CAAC,CAAC;YACP,CAAC;iBAAM,IAAI,KAAK,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,CAAC;gBACnC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;YAC/D,CAAC;YACD,OAAO,IAAI,CAAC;QAChB,CAAC,CAAC;QAEF,OAAO,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC7B,CAAC;CACJ;AAED,SAAS,cAAc,CAAC,IAAgB,EAAE,SAA2B;IACjE,MAAM,MAAM,GAAG,KAAK,CAAC,aAAa,CAAM,IAAI,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;IAC/D,OAAO;QACH,GAAG,IAAI;QACP,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;YAC3B,IAAI,EAAE,OAAO;YACb,KAAK;SACR,CAAC,CAAC;KACN,CAAC;AACN,CAAC;AAED,SAAS,WAAW,CAAC,IAAa,EAAE,SAA2B,EAAE,QAAkB;IAC/E,IAAI,CAAC,IAAI,GAAG,eAAe,CACvB,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE,IAAI,CACxB,CAAC;IAE5B,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;QACb,IAAI,CAAC,KAAK,GAAG,eAAe,CACxB,IAAI,CAAC,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE,IAAI,CACzB,CAAC;IAChC,CAAC;IAED,OAAO,IAAI,CAAC;AAChB,CAAC;AAED,SAAS,eAAe,CACpB,IAAkD,EAClD,SAA2B,EAC3B,kBAA4B,EAC5B,QAAkB,EAClB,OAAO,GAAG,KAAK;IAEf,MAAM,KAAK,GAAG,KAAK,CAAC,aAAa,CAC7B,IAAI,CAAC,KAAK,EAAE,SAAS,EAAE,QAAQ,CAClC,CAAC;IACF,IAAI,OAAO,IAAI,KAAK,KAAK,QAAQ,EAAE,CAAC;QAChC,OAAO,IAAc,CAAC,CAAC,0BAA0B;IACrD,CAAC;IAED,MAAM,QAAQ,GAAG,QAAQ,IAAI,KAAK,IAAI,IAAI;QACtC,CAAC,CAAC,GAAG,EAAE,CAAC,IAAI;QACZ,CAAC,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IAE1C,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IAC/B,MAAM,KAAK,GAAW,GAAG,CAAC,IAAI,EAAE,OAAO,EAAE,EAAE,CAAC,CAAC;IAE7C,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACvB,IAAI,kBAAkB,EAAE,CAAC;YACrB,OAAO;gBACH,GAAG,IAAI;gBACP,KAAK,EAAE;oBACH,IAAI,EAAE,OAAO;oBACb,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAQ;iBACpC;aACM,CAAC;QAChB,CAAC;QAED,MAAM,UAAU,GAAiB;YAC7B,IAAI,EAAE,CAAC,CAAC,QAAQ,CAAC,UAAU;YAC3B,KAAK;YACL,UAAU,EAAE,IAAI,CAAC,UAAU;YAC3B,IAAI,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,GAAQ,EAAE,EAAE,CAAC,CAAC;gBAC3B,IAAI,EAAE,CAAC,CAAC,QAAQ,CAAC,WAAW;gBAC5B,KAAK,EAAE,CAAC;wBACJ,GAAG,IAAI;wBACP,KAAK,EAAE;4BACH,IAAI,EAAE,OAAO;4BACb,KAAK,EAAE,QAAQ,CAAC,GAAG,CAAC;yBACvB;qBACM,CAAC;aACG,CAAA,CAAC;SACvB,CAAC;QACF,OAAO,UAAU,CAAC;IACtB,CAAC;IAED,IAAI,IAAI,KAAK,CAAC,CAAC,QAAQ,CAAC,MAAM,IAAI,YAAY,CAAC,KAAK,CAAC,EAAE,CAAC;QACpD,OAAO;YACH,IAAI,EAAE,CAAC,CAAC,QAAQ,CAAC,MAAM;YACvB,KAAK;YACL,UAAU,EAAE,IAAI,CAAC,UAAqC;YACtD,MAAM,EAAE,KAAK;YACb,KAAK,EAAE;gBACH,IAAI,EAAE,OAAO;gBACb,KAAK,EAAE,kBAAkB,CAAC,KAAK,CAAC;aACnC;SACQ,CAAC;IAClB,CAAC;IAED,IAAI,IAAI,CAAC,UAAU,KAAK,gBAAgB,CAAC,OAAO,EAAE,CAAC;QAC/C,OAAO,KAAK,CAAC,qBAAqB,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IACpD,CAAC;IAED,OAAO;QACH,GAAG,IAAI;QACP,KAAK,EAAE;YACH,IAAI,EAAE,OAAO;YACb,KAAK,EAAE,QAAQ,CAAC,KAAK,CAAC;SACzB;KACM,CAAC;AAChB,CAAC;AAED,SAAS,kBAAkB,CAAC,GAAoB;IAC5C,IAAI,GAAG,CAAC,MAAM;QAAE,OAAO,GAAG,CAAC,MAAM,CAAC;IAClC,MAAM,OAAO,GAAG,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACrC,IAAI,OAAO;QAAE,OAAO,OAAO,CAAC,CAAC,CAAC,CAAC;IAC/B,OAAO,GAAG,CAAC;AACf,CAAC"}