flowquery 1.0.0 → 1.0.1
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/.github/workflows/npm-publish.yml +2 -0
- package/.github/workflows/release.yml +18 -9
- package/dist/compute/runner.js +75 -0
- package/dist/compute/runner.js.map +1 -0
- package/dist/flowquery.min.js +1 -0
- package/dist/index.browser.js +119 -0
- package/dist/index.browser.js.map +1 -0
- package/dist/index.js +16 -0
- package/dist/index.js.map +1 -0
- package/dist/index.node.js +123 -0
- package/dist/index.node.js.map +1 -0
- package/dist/io/command_line.js +102 -0
- package/dist/io/command_line.js.map +1 -0
- package/dist/parsing/alias.js +23 -0
- package/dist/parsing/alias.js.map +1 -0
- package/dist/parsing/alias_option.js +11 -0
- package/dist/parsing/alias_option.js.map +1 -0
- package/dist/parsing/ast_node.js +145 -0
- package/dist/parsing/ast_node.js.map +1 -0
- package/dist/parsing/base_parser.js +92 -0
- package/dist/parsing/base_parser.js.map +1 -0
- package/dist/parsing/components/csv.js +13 -0
- package/dist/parsing/components/csv.js.map +1 -0
- package/dist/parsing/components/from.js +16 -0
- package/dist/parsing/components/from.js.map +1 -0
- package/dist/parsing/components/headers.js +16 -0
- package/dist/parsing/components/headers.js.map +1 -0
- package/dist/parsing/components/json.js +13 -0
- package/dist/parsing/components/json.js.map +1 -0
- package/dist/parsing/components/null.js +13 -0
- package/dist/parsing/components/null.js.map +1 -0
- package/dist/parsing/components/post.js +13 -0
- package/dist/parsing/components/post.js.map +1 -0
- package/dist/parsing/components/text.js +13 -0
- package/dist/parsing/components/text.js.map +1 -0
- package/dist/parsing/context.js +47 -0
- package/dist/parsing/context.js.map +1 -0
- package/dist/parsing/data_structures/associative_array.js +45 -0
- package/dist/parsing/data_structures/associative_array.js.map +1 -0
- package/dist/parsing/data_structures/json_array.js +35 -0
- package/dist/parsing/data_structures/json_array.js.map +1 -0
- package/dist/parsing/data_structures/key_value_pair.js +41 -0
- package/dist/parsing/data_structures/key_value_pair.js.map +1 -0
- package/dist/parsing/data_structures/lookup.js +44 -0
- package/dist/parsing/data_structures/lookup.js.map +1 -0
- package/dist/parsing/data_structures/range_lookup.js +40 -0
- package/dist/parsing/data_structures/range_lookup.js.map +1 -0
- package/dist/parsing/expressions/expression.js +142 -0
- package/dist/parsing/expressions/expression.js.map +1 -0
- package/dist/parsing/expressions/f_string.js +29 -0
- package/dist/parsing/expressions/f_string.js.map +1 -0
- package/dist/parsing/expressions/identifier.js +26 -0
- package/dist/parsing/expressions/identifier.js.map +1 -0
- package/dist/parsing/expressions/number.js +41 -0
- package/dist/parsing/expressions/number.js.map +1 -0
- package/dist/parsing/expressions/operator.js +180 -0
- package/dist/parsing/expressions/operator.js.map +1 -0
- package/dist/parsing/expressions/reference.js +45 -0
- package/dist/parsing/expressions/reference.js.map +1 -0
- package/dist/parsing/expressions/string.js +34 -0
- package/dist/parsing/expressions/string.js.map +1 -0
- package/dist/parsing/functions/aggregate_function.js +58 -0
- package/dist/parsing/functions/aggregate_function.js.map +1 -0
- package/dist/parsing/functions/async_function.js +119 -0
- package/dist/parsing/functions/async_function.js.map +1 -0
- package/dist/parsing/functions/avg.js +43 -0
- package/dist/parsing/functions/avg.js.map +1 -0
- package/dist/parsing/functions/collect.js +52 -0
- package/dist/parsing/functions/collect.js.map +1 -0
- package/dist/parsing/functions/function.js +59 -0
- package/dist/parsing/functions/function.js.map +1 -0
- package/dist/parsing/functions/function_factory.js +259 -0
- package/dist/parsing/functions/function_factory.js.map +1 -0
- package/dist/parsing/functions/function_metadata.js +159 -0
- package/dist/parsing/functions/function_metadata.js.map +1 -0
- package/dist/parsing/functions/functions.js +47 -0
- package/dist/parsing/functions/functions.js.map +1 -0
- package/dist/parsing/functions/join.js +29 -0
- package/dist/parsing/functions/join.js.map +1 -0
- package/dist/parsing/functions/predicate_function.js +37 -0
- package/dist/parsing/functions/predicate_function.js.map +1 -0
- package/dist/parsing/functions/predicate_function_factory.js +19 -0
- package/dist/parsing/functions/predicate_function_factory.js.map +1 -0
- package/dist/parsing/functions/predicate_sum.js +33 -0
- package/dist/parsing/functions/predicate_sum.js.map +1 -0
- package/dist/parsing/functions/rand.js +17 -0
- package/dist/parsing/functions/rand.js.map +1 -0
- package/dist/parsing/functions/range.js +22 -0
- package/dist/parsing/functions/range.js.map +1 -0
- package/dist/parsing/functions/reducer_element.js +12 -0
- package/dist/parsing/functions/reducer_element.js.map +1 -0
- package/dist/parsing/functions/replace.js +23 -0
- package/dist/parsing/functions/replace.js.map +1 -0
- package/dist/parsing/functions/round.js +21 -0
- package/dist/parsing/functions/round.js.map +1 -0
- package/dist/parsing/functions/size.js +21 -0
- package/dist/parsing/functions/size.js.map +1 -0
- package/dist/parsing/functions/split.js +29 -0
- package/dist/parsing/functions/split.js.map +1 -0
- package/dist/parsing/functions/stringify.js +29 -0
- package/dist/parsing/functions/stringify.js.map +1 -0
- package/dist/parsing/functions/sum.js +38 -0
- package/dist/parsing/functions/sum.js.map +1 -0
- package/dist/parsing/functions/to_json.js +21 -0
- package/dist/parsing/functions/to_json.js.map +1 -0
- package/dist/parsing/functions/value_holder.js +16 -0
- package/dist/parsing/functions/value_holder.js.map +1 -0
- package/dist/parsing/logic/case.js +27 -0
- package/dist/parsing/logic/case.js.map +1 -0
- package/dist/parsing/logic/else.js +16 -0
- package/dist/parsing/logic/else.js.map +1 -0
- package/dist/parsing/logic/end.js +13 -0
- package/dist/parsing/logic/end.js.map +1 -0
- package/dist/parsing/logic/then.js +16 -0
- package/dist/parsing/logic/then.js.map +1 -0
- package/dist/parsing/logic/when.js +16 -0
- package/dist/parsing/logic/when.js.map +1 -0
- package/dist/parsing/operations/aggregated_return.js +35 -0
- package/dist/parsing/operations/aggregated_return.js.map +1 -0
- package/dist/parsing/operations/aggregated_with.js +41 -0
- package/dist/parsing/operations/aggregated_with.js.map +1 -0
- package/dist/parsing/operations/group_by.js +139 -0
- package/dist/parsing/operations/group_by.js.map +1 -0
- package/dist/parsing/operations/limit.js +38 -0
- package/dist/parsing/operations/limit.js.map +1 -0
- package/dist/parsing/operations/load.js +174 -0
- package/dist/parsing/operations/load.js.map +1 -0
- package/dist/parsing/operations/operation.js +81 -0
- package/dist/parsing/operations/operation.js.map +1 -0
- package/dist/parsing/operations/projection.js +21 -0
- package/dist/parsing/operations/projection.js.map +1 -0
- package/dist/parsing/operations/return.js +60 -0
- package/dist/parsing/operations/return.js.map +1 -0
- package/dist/parsing/operations/unwind.js +46 -0
- package/dist/parsing/operations/unwind.js.map +1 -0
- package/dist/parsing/operations/where.js +53 -0
- package/dist/parsing/operations/where.js.map +1 -0
- package/dist/parsing/operations/with.js +36 -0
- package/dist/parsing/operations/with.js.map +1 -0
- package/dist/parsing/parser.js +812 -0
- package/dist/parsing/parser.js.map +1 -0
- package/dist/parsing/token_to_node.js +121 -0
- package/dist/parsing/token_to_node.js.map +1 -0
- package/dist/tokenization/keyword.js +46 -0
- package/dist/tokenization/keyword.js.map +1 -0
- package/dist/tokenization/operator.js +28 -0
- package/dist/tokenization/operator.js.map +1 -0
- package/dist/tokenization/string_walker.js +165 -0
- package/dist/tokenization/string_walker.js.map +1 -0
- package/dist/tokenization/symbol.js +18 -0
- package/dist/tokenization/symbol.js.map +1 -0
- package/dist/tokenization/token.js +484 -0
- package/dist/tokenization/token.js.map +1 -0
- package/dist/tokenization/token_mapper.js +55 -0
- package/dist/tokenization/token_mapper.js.map +1 -0
- package/dist/tokenization/token_type.js +19 -0
- package/dist/tokenization/token_type.js.map +1 -0
- package/dist/tokenization/tokenizer.js +220 -0
- package/dist/tokenization/tokenizer.js.map +1 -0
- package/dist/tokenization/trie.js +111 -0
- package/dist/tokenization/trie.js.map +1 -0
- package/dist/utils/object_utils.js +19 -0
- package/dist/utils/object_utils.js.map +1 -0
- package/dist/utils/string_utils.js +110 -0
- package/dist/utils/string_utils.js.map +1 -0
- package/docs/flowquery.min.js +1 -1
- package/flowquery-vscode/flowQueryEngine/flowquery.min.js +1 -1
- package/package.json +21 -4
- package/src/compute/runner.ts +45 -0
- package/src/index.browser.ts +118 -0
- package/src/index.node.ts +141 -0
- package/src/parsing/functions/async_function.ts +95 -0
- package/src/parsing/functions/function_factory.ts +230 -1
- package/src/parsing/functions/function_metadata.ts +238 -0
- package/src/parsing/functions/functions.ts +43 -0
- package/src/parsing/operations/load.ts +51 -2
- package/src/parsing/parser.ts +46 -5
- package/tests/parsing/function_plugins.test.ts +369 -0
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const ast_node_1 = __importDefault(require("../ast_node"));
|
|
7
|
+
/**
|
|
8
|
+
* Represents a JSON array in the AST.
|
|
9
|
+
*
|
|
10
|
+
* JSON arrays are ordered collections of values.
|
|
11
|
+
*
|
|
12
|
+
* @example
|
|
13
|
+
* ```typescript
|
|
14
|
+
* // For [1, 2, 3]
|
|
15
|
+
* const arr = new JSONArray();
|
|
16
|
+
* arr.addValue(new Number("1"));
|
|
17
|
+
* arr.addValue(new Number("2"));
|
|
18
|
+
* arr.addValue(new Number("3"));
|
|
19
|
+
* ```
|
|
20
|
+
*/
|
|
21
|
+
class JSONArray extends ast_node_1.default {
|
|
22
|
+
/**
|
|
23
|
+
* Adds a value to the array.
|
|
24
|
+
*
|
|
25
|
+
* @param value - The AST node representing the value to add
|
|
26
|
+
*/
|
|
27
|
+
addValue(value) {
|
|
28
|
+
this.addChild(value);
|
|
29
|
+
}
|
|
30
|
+
value() {
|
|
31
|
+
return this.children.map(child => child.value());
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
exports.default = JSONArray;
|
|
35
|
+
//# sourceMappingURL=json_array.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"json_array.js","sourceRoot":"","sources":["../../../src/parsing/data_structures/json_array.ts"],"names":[],"mappings":";;;;;AAAA,2DAAkC;AAElC;;;;;;;;;;;;;GAaG;AACH,MAAM,SAAU,SAAQ,kBAAO;IAC3B;;;;OAIG;IACI,QAAQ,CAAC,KAAc;QAC1B,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IACzB,CAAC;IACM,KAAK;QACR,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC;IACrD,CAAC;CACJ;AAED,kBAAe,SAAS,CAAC"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const ast_node_1 = __importDefault(require("../ast_node"));
|
|
7
|
+
const string_1 = __importDefault(require("../expressions/string"));
|
|
8
|
+
/**
|
|
9
|
+
* Represents a key-value pair in an associative array.
|
|
10
|
+
*
|
|
11
|
+
* Used to build object literals in FlowQuery.
|
|
12
|
+
*
|
|
13
|
+
* @example
|
|
14
|
+
* ```typescript
|
|
15
|
+
* const kvp = new KeyValuePair("name", new String("Alice"));
|
|
16
|
+
* ```
|
|
17
|
+
*/
|
|
18
|
+
class KeyValuePair extends ast_node_1.default {
|
|
19
|
+
/**
|
|
20
|
+
* Creates a new key-value pair.
|
|
21
|
+
*
|
|
22
|
+
* @param key - The key string
|
|
23
|
+
* @param value - The AST node representing the value
|
|
24
|
+
*/
|
|
25
|
+
constructor(key, value) {
|
|
26
|
+
super();
|
|
27
|
+
this.addChild(new string_1.default(key));
|
|
28
|
+
this.addChild(value);
|
|
29
|
+
}
|
|
30
|
+
get key() {
|
|
31
|
+
return this.children[0].value();
|
|
32
|
+
}
|
|
33
|
+
get _value() {
|
|
34
|
+
return this.children[1].value();
|
|
35
|
+
}
|
|
36
|
+
toString() {
|
|
37
|
+
return `KeyValuePair`;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
exports.default = KeyValuePair;
|
|
41
|
+
//# sourceMappingURL=key_value_pair.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"key_value_pair.js","sourceRoot":"","sources":["../../../src/parsing/data_structures/key_value_pair.ts"],"names":[],"mappings":";;;;;AAAA,2DAAkC;AAClC,mEAA2C;AAE3C;;;;;;;;;GASG;AACH,MAAM,YAAa,SAAQ,kBAAO;IAC9B;;;;;OAKG;IACH,YAAY,GAAW,EAAE,KAAc;QACnC,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,QAAQ,CAAC,IAAI,gBAAM,CAAC,GAAG,CAAC,CAAC,CAAC;QAC/B,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IACzB,CAAC;IACD,IAAW,GAAG;QACV,OAAO,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC;IACpC,CAAC;IACD,IAAW,MAAM;QACb,OAAO,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC;IACpC,CAAC;IACM,QAAQ;QACX,OAAO,cAAc,CAAC;IAC1B,CAAC;CACJ;AAED,kBAAe,YAAY,CAAC"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const ast_node_1 = __importDefault(require("../ast_node"));
|
|
7
|
+
/**
|
|
8
|
+
* Represents a lookup operation (array/object indexing) in the AST.
|
|
9
|
+
*
|
|
10
|
+
* Lookups access elements from arrays or properties from objects using an index or key.
|
|
11
|
+
*
|
|
12
|
+
* @example
|
|
13
|
+
* ```typescript
|
|
14
|
+
* // For array[0] or obj.property or obj["key"]
|
|
15
|
+
* const lookup = new Lookup();
|
|
16
|
+
* lookup.variable = arrayOrObjNode;
|
|
17
|
+
* lookup.index = indexNode;
|
|
18
|
+
* ```
|
|
19
|
+
*/
|
|
20
|
+
class Lookup extends ast_node_1.default {
|
|
21
|
+
constructor() {
|
|
22
|
+
super();
|
|
23
|
+
}
|
|
24
|
+
set index(index) {
|
|
25
|
+
this.addChild(index);
|
|
26
|
+
}
|
|
27
|
+
get index() {
|
|
28
|
+
return this.children[0];
|
|
29
|
+
}
|
|
30
|
+
set variable(variable) {
|
|
31
|
+
this.addChild(variable);
|
|
32
|
+
}
|
|
33
|
+
get variable() {
|
|
34
|
+
return this.children[1];
|
|
35
|
+
}
|
|
36
|
+
isOperand() {
|
|
37
|
+
return true;
|
|
38
|
+
}
|
|
39
|
+
value() {
|
|
40
|
+
return this.variable.value()[this.index.value()];
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
exports.default = Lookup;
|
|
44
|
+
//# sourceMappingURL=lookup.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lookup.js","sourceRoot":"","sources":["../../../src/parsing/data_structures/lookup.ts"],"names":[],"mappings":";;;;;AAAA,2DAAkC;AAElC;;;;;;;;;;;;GAYG;AACH,MAAM,MAAO,SAAQ,kBAAO;IACxB;QACI,KAAK,EAAE,CAAC;IACZ,CAAC;IACD,IAAW,KAAK,CAAC,KAAc;QAC3B,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IACzB,CAAC;IACD,IAAW,KAAK;QACZ,OAAO,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;IAC5B,CAAC;IACD,IAAW,QAAQ,CAAC,QAAiB;QACjC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAC5B,CAAC;IACD,IAAW,QAAQ;QACf,OAAO,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;IAC5B,CAAC;IACM,SAAS;QACZ,OAAO,IAAI,CAAC;IAChB,CAAC;IACM,KAAK;QACR,OAAO,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC;IACrD,CAAC;CACJ;AAED,kBAAe,MAAM,CAAC"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const ast_node_1 = __importDefault(require("../ast_node"));
|
|
7
|
+
class RangeLookup extends ast_node_1.default {
|
|
8
|
+
constructor() {
|
|
9
|
+
super();
|
|
10
|
+
}
|
|
11
|
+
set from(from) {
|
|
12
|
+
this.addChild(from);
|
|
13
|
+
}
|
|
14
|
+
get from() {
|
|
15
|
+
return this.children[0];
|
|
16
|
+
}
|
|
17
|
+
set to(to) {
|
|
18
|
+
this.addChild(to);
|
|
19
|
+
}
|
|
20
|
+
get to() {
|
|
21
|
+
return this.children[1];
|
|
22
|
+
}
|
|
23
|
+
set variable(variable) {
|
|
24
|
+
this.addChild(variable);
|
|
25
|
+
}
|
|
26
|
+
get variable() {
|
|
27
|
+
return this.children[2];
|
|
28
|
+
}
|
|
29
|
+
isOperand() {
|
|
30
|
+
return true;
|
|
31
|
+
}
|
|
32
|
+
value() {
|
|
33
|
+
const array = this.variable.value();
|
|
34
|
+
const from = this.from.value() || 0;
|
|
35
|
+
const to = this.to.value() || array.length;
|
|
36
|
+
return this.variable.value().slice(from, to);
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
exports.default = RangeLookup;
|
|
40
|
+
//# sourceMappingURL=range_lookup.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"range_lookup.js","sourceRoot":"","sources":["../../../src/parsing/data_structures/range_lookup.ts"],"names":[],"mappings":";;;;;AAAA,2DAAkC;AAElC,MAAM,WAAY,SAAQ,kBAAO;IAC7B;QACI,KAAK,EAAE,CAAC;IACZ,CAAC;IACD,IAAW,IAAI,CAAC,IAAa;QACzB,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IACxB,CAAC;IACD,IAAW,IAAI;QACX,OAAO,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;IAC5B,CAAC;IACD,IAAW,EAAE,CAAC,EAAW;QACrB,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;IACtB,CAAC;IACD,IAAW,EAAE;QACT,OAAO,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;IAC5B,CAAC;IACD,IAAW,QAAQ,CAAC,QAAiB;QACjC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAC5B,CAAC;IACD,IAAW,QAAQ;QACf,OAAO,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;IAC5B,CAAC;IACM,SAAS;QACZ,OAAO,IAAI,CAAC;IAChB,CAAC;IACM,KAAK;QACR,MAAM,KAAK,GAAU,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;QAC3C,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;QACpC,MAAM,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,IAAI,KAAK,CAAC,MAAM,CAAC;QAC3C,OAAO,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;IACjD,CAAC;CACJ;AAED,kBAAe,WAAW,CAAC"}
|
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const ast_node_1 = __importDefault(require("../ast_node"));
|
|
7
|
+
const aggregate_function_1 = __importDefault(require("../functions/aggregate_function"));
|
|
8
|
+
const reference_1 = __importDefault(require("./reference"));
|
|
9
|
+
/**
|
|
10
|
+
* Represents an expression in the FlowQuery AST.
|
|
11
|
+
*
|
|
12
|
+
* Expressions are built using the Shunting Yard algorithm to handle operator
|
|
13
|
+
* precedence and associativity. They can contain operands (numbers, strings, identifiers)
|
|
14
|
+
* and operators (arithmetic, logical, comparison).
|
|
15
|
+
*
|
|
16
|
+
* @example
|
|
17
|
+
* ```typescript
|
|
18
|
+
* const expr = new Expression();
|
|
19
|
+
* expr.addNode(numberNode);
|
|
20
|
+
* expr.addNode(plusOperator);
|
|
21
|
+
* expr.addNode(anotherNumberNode);
|
|
22
|
+
* expr.finish();
|
|
23
|
+
* ```
|
|
24
|
+
*/
|
|
25
|
+
class Expression extends ast_node_1.default {
|
|
26
|
+
constructor() {
|
|
27
|
+
super(...arguments);
|
|
28
|
+
this.operators = [];
|
|
29
|
+
this.output = [];
|
|
30
|
+
this._alias = null;
|
|
31
|
+
this._overridden = null;
|
|
32
|
+
this._reducers = null;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Adds a node (operand or operator) to the expression.
|
|
36
|
+
*
|
|
37
|
+
* Uses the Shunting Yard algorithm to maintain correct operator precedence.
|
|
38
|
+
*
|
|
39
|
+
* @param node - The AST node to add (operand or operator)
|
|
40
|
+
*/
|
|
41
|
+
addNode(node) {
|
|
42
|
+
/* Implements the Shunting Yard algorithm */
|
|
43
|
+
if (node.isOperand()) {
|
|
44
|
+
this.output.push(node);
|
|
45
|
+
}
|
|
46
|
+
else if (node.isOperator()) {
|
|
47
|
+
const operator1 = node;
|
|
48
|
+
while (this.operators.length > 0) {
|
|
49
|
+
let operator2 = this.operators[this.operators.length - 1];
|
|
50
|
+
if (operator2.precedence > operator1.precedence ||
|
|
51
|
+
(operator2.precedence === operator1.precedence && operator1.leftAssociative)) {
|
|
52
|
+
this.output.push(operator2);
|
|
53
|
+
this.operators.pop();
|
|
54
|
+
}
|
|
55
|
+
else {
|
|
56
|
+
break;
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
this.operators.push(operator1);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Finalizes the expression by converting it to a tree structure.
|
|
64
|
+
*
|
|
65
|
+
* Should be called after all nodes have been added.
|
|
66
|
+
*/
|
|
67
|
+
finish() {
|
|
68
|
+
let last;
|
|
69
|
+
while (last = this.operators.pop()) {
|
|
70
|
+
this.output.push(last);
|
|
71
|
+
}
|
|
72
|
+
;
|
|
73
|
+
this.addChild(this.toTree());
|
|
74
|
+
}
|
|
75
|
+
toTree() {
|
|
76
|
+
const node = this.output.pop() || new ast_node_1.default();
|
|
77
|
+
if (node.isOperator()) {
|
|
78
|
+
const rhs = this.toTree();
|
|
79
|
+
const lhs = this.toTree();
|
|
80
|
+
node.addChild(lhs);
|
|
81
|
+
node.addChild(rhs);
|
|
82
|
+
}
|
|
83
|
+
return node;
|
|
84
|
+
}
|
|
85
|
+
nodesAdded() {
|
|
86
|
+
return this.operators.length > 0 || this.output.length > 0;
|
|
87
|
+
}
|
|
88
|
+
value() {
|
|
89
|
+
if (this._overridden !== null) {
|
|
90
|
+
return this._overridden;
|
|
91
|
+
}
|
|
92
|
+
if (this.childCount() !== 1) {
|
|
93
|
+
throw new Error('Expected one child');
|
|
94
|
+
}
|
|
95
|
+
return this.children[0].value();
|
|
96
|
+
}
|
|
97
|
+
setAlias(alias) {
|
|
98
|
+
this._alias = alias;
|
|
99
|
+
}
|
|
100
|
+
set alias(alias) {
|
|
101
|
+
this._alias = alias;
|
|
102
|
+
}
|
|
103
|
+
get alias() {
|
|
104
|
+
if (this.firstChild() instanceof reference_1.default && this._alias === null) {
|
|
105
|
+
return this.firstChild().identifier;
|
|
106
|
+
}
|
|
107
|
+
return this._alias;
|
|
108
|
+
}
|
|
109
|
+
toString() {
|
|
110
|
+
if (this._alias !== null) {
|
|
111
|
+
return `Expression (${this._alias})`;
|
|
112
|
+
}
|
|
113
|
+
else {
|
|
114
|
+
return 'Expression';
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
reducers() {
|
|
118
|
+
if (this._reducers === null) {
|
|
119
|
+
this._reducers = [...this._extract_reducers()];
|
|
120
|
+
}
|
|
121
|
+
return this._reducers;
|
|
122
|
+
}
|
|
123
|
+
*_extract_reducers(node = this) {
|
|
124
|
+
if (node instanceof aggregate_function_1.default) {
|
|
125
|
+
yield node;
|
|
126
|
+
}
|
|
127
|
+
for (const child of node.getChildren()) {
|
|
128
|
+
yield* this._extract_reducers(child);
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
mappable() {
|
|
132
|
+
return this.reducers().length === 0;
|
|
133
|
+
}
|
|
134
|
+
has_reducers() {
|
|
135
|
+
return this.reducers().length > 0;
|
|
136
|
+
}
|
|
137
|
+
set overridden(value) {
|
|
138
|
+
this._overridden = value;
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
exports.default = Expression;
|
|
142
|
+
//# sourceMappingURL=expression.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"expression.js","sourceRoot":"","sources":["../../../src/parsing/expressions/expression.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const ast_node_1 = __importDefault(require("../ast_node"));
|
|
7
|
+
/**
|
|
8
|
+
* Represents a formatted string (f-string) in the AST.
|
|
9
|
+
*
|
|
10
|
+
* F-strings allow embedding expressions within string literals.
|
|
11
|
+
* Child nodes represent the parts of the f-string (literal strings and expressions).
|
|
12
|
+
*
|
|
13
|
+
* @example
|
|
14
|
+
* ```typescript
|
|
15
|
+
* // For f"Hello {name}!"
|
|
16
|
+
* const fstr = new FString();
|
|
17
|
+
* fstr.addChild(new String("Hello "));
|
|
18
|
+
* fstr.addChild(nameExpression);
|
|
19
|
+
* fstr.addChild(new String("!"));
|
|
20
|
+
* ```
|
|
21
|
+
*/
|
|
22
|
+
class FString extends ast_node_1.default {
|
|
23
|
+
value() {
|
|
24
|
+
const parts = this.getChildren();
|
|
25
|
+
return parts.map((part) => part.value()).join("");
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
exports.default = FString;
|
|
29
|
+
//# sourceMappingURL=f_string.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"f_string.js","sourceRoot":"","sources":["../../../src/parsing/expressions/f_string.ts"],"names":[],"mappings":";;;;;AAAA,2DAAkC;AAGlC;;;;;;;;;;;;;;GAcG;AACH,MAAM,OAAQ,SAAQ,kBAAO;IAClB,KAAK;QACR,MAAM,KAAK,GAAiB,IAAI,CAAC,WAAW,EAAuB,CAAC;QACpE,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACtD,CAAC;CACJ;AAED,kBAAe,OAAO,CAAC"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const string_1 = __importDefault(require("./string"));
|
|
7
|
+
/**
|
|
8
|
+
* Represents an identifier in the AST.
|
|
9
|
+
*
|
|
10
|
+
* Identifiers are used for variable names, property names, and similar constructs.
|
|
11
|
+
*
|
|
12
|
+
* @example
|
|
13
|
+
* ```typescript
|
|
14
|
+
* const id = new Identifier("myVariable");
|
|
15
|
+
* ```
|
|
16
|
+
*/
|
|
17
|
+
class Identifier extends string_1.default {
|
|
18
|
+
toString() {
|
|
19
|
+
return `Identifier (${this._value})`;
|
|
20
|
+
}
|
|
21
|
+
value() {
|
|
22
|
+
return super.value();
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
exports.default = Identifier;
|
|
26
|
+
//# sourceMappingURL=identifier.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"identifier.js","sourceRoot":"","sources":["../../../src/parsing/expressions/identifier.ts"],"names":[],"mappings":";;;;;AAAA,sDAA8B;AAE9B;;;;;;;;;GASG;AACH,MAAM,UAAW,SAAQ,gBAAM;IACpB,QAAQ;QACX,OAAO,eAAe,IAAI,CAAC,MAAM,GAAG,CAAC;IACzC,CAAC;IACM,KAAK;QACR,OAAO,KAAK,CAAC,KAAK,EAAE,CAAC;IACzB,CAAC;CACJ;AAED,kBAAe,UAAU,CAAC"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const ast_node_1 = __importDefault(require("../ast_node"));
|
|
7
|
+
/**
|
|
8
|
+
* Represents a numeric literal in the AST.
|
|
9
|
+
*
|
|
10
|
+
* Parses string representations of numbers into integer or float values.
|
|
11
|
+
*
|
|
12
|
+
* @example
|
|
13
|
+
* ```typescript
|
|
14
|
+
* const num = new Number("42");
|
|
15
|
+
* console.log(num.value()); // 42
|
|
16
|
+
* ```
|
|
17
|
+
*/
|
|
18
|
+
class Number extends ast_node_1.default {
|
|
19
|
+
/**
|
|
20
|
+
* Creates a new Number node by parsing the string value.
|
|
21
|
+
*
|
|
22
|
+
* @param value - The string representation of the number
|
|
23
|
+
*/
|
|
24
|
+
constructor(value) {
|
|
25
|
+
super();
|
|
26
|
+
if (value.indexOf('.') !== -1) {
|
|
27
|
+
this._value = parseFloat(value);
|
|
28
|
+
}
|
|
29
|
+
else {
|
|
30
|
+
this._value = parseInt(value);
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
value() {
|
|
34
|
+
return this._value;
|
|
35
|
+
}
|
|
36
|
+
toString() {
|
|
37
|
+
return `${this.constructor.name} (${this._value})`;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
exports.default = Number;
|
|
41
|
+
//# sourceMappingURL=number.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"number.js","sourceRoot":"","sources":["../../../src/parsing/expressions/number.ts"],"names":[],"mappings":";;;;;AAAA,2DAAkC;AAElC;;;;;;;;;;GAUG;AACH,MAAM,MAAO,SAAQ,kBAAO;IAGxB;;;;OAIG;IACH,YAAY,KAAa;QACrB,KAAK,EAAE,CAAC;QACR,IAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;YAC3B,IAAI,CAAC,MAAM,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC;QACpC,CAAC;aAAM,CAAC;YACJ,IAAI,CAAC,MAAM,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;QAClC,CAAC;IACL,CAAC;IAEM,KAAK;QACR,OAAO,IAAI,CAAC,MAAM,CAAC;IACvB,CAAC;IAES,QAAQ;QACd,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,KAAK,IAAI,CAAC,MAAM,GAAG,CAAC;IACvD,CAAC;CACJ;AAED,kBAAe,MAAM,CAAC"}
|
|
@@ -0,0 +1,180 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.Is = exports.Not = exports.Or = exports.And = exports.LessThanOrEqual = exports.GreaterThanOrEqual = exports.LessThan = exports.GreaterThan = exports.NotEquals = exports.Equals = exports.Power = exports.Modulo = exports.Divide = exports.Multiply = exports.Subtract = exports.Add = exports.Operator = void 0;
|
|
7
|
+
const ast_node_1 = __importDefault(require("../ast_node"));
|
|
8
|
+
class Operator extends ast_node_1.default {
|
|
9
|
+
constructor(precedence, leftAssociative) {
|
|
10
|
+
super();
|
|
11
|
+
this._precedence = 0;
|
|
12
|
+
this._leftAssociative = true;
|
|
13
|
+
this._precedence = precedence;
|
|
14
|
+
this._leftAssociative = leftAssociative;
|
|
15
|
+
}
|
|
16
|
+
isOperator() {
|
|
17
|
+
return true;
|
|
18
|
+
}
|
|
19
|
+
get precedence() {
|
|
20
|
+
return this._precedence;
|
|
21
|
+
}
|
|
22
|
+
get leftAssociative() {
|
|
23
|
+
return this._leftAssociative;
|
|
24
|
+
}
|
|
25
|
+
get lhs() {
|
|
26
|
+
return this.getChildren()[0];
|
|
27
|
+
}
|
|
28
|
+
get rhs() {
|
|
29
|
+
return this.getChildren()[1];
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
exports.Operator = Operator;
|
|
33
|
+
class Add extends Operator {
|
|
34
|
+
constructor() {
|
|
35
|
+
super(1, true);
|
|
36
|
+
}
|
|
37
|
+
value() {
|
|
38
|
+
return this.lhs.value() + this.rhs.value();
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
exports.Add = Add;
|
|
42
|
+
class Subtract extends Operator {
|
|
43
|
+
constructor() {
|
|
44
|
+
super(1, true);
|
|
45
|
+
}
|
|
46
|
+
value() {
|
|
47
|
+
return this.lhs.value() - this.rhs.value();
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
exports.Subtract = Subtract;
|
|
51
|
+
class Multiply extends Operator {
|
|
52
|
+
constructor() {
|
|
53
|
+
super(2, true);
|
|
54
|
+
}
|
|
55
|
+
value() {
|
|
56
|
+
return this.lhs.value() * this.rhs.value();
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
exports.Multiply = Multiply;
|
|
60
|
+
class Divide extends Operator {
|
|
61
|
+
constructor() {
|
|
62
|
+
super(2, true);
|
|
63
|
+
}
|
|
64
|
+
value() {
|
|
65
|
+
return this.lhs.value() / this.rhs.value();
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
exports.Divide = Divide;
|
|
69
|
+
class Modulo extends Operator {
|
|
70
|
+
constructor() {
|
|
71
|
+
super(2, true);
|
|
72
|
+
}
|
|
73
|
+
value() {
|
|
74
|
+
return this.lhs.value() % this.rhs.value();
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
exports.Modulo = Modulo;
|
|
78
|
+
class Power extends Operator {
|
|
79
|
+
constructor() {
|
|
80
|
+
super(3, false);
|
|
81
|
+
}
|
|
82
|
+
value() {
|
|
83
|
+
return Math.pow(this.lhs.value(), this.rhs.value());
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
exports.Power = Power;
|
|
87
|
+
class Equals extends Operator {
|
|
88
|
+
constructor() {
|
|
89
|
+
super(0, true);
|
|
90
|
+
}
|
|
91
|
+
value() {
|
|
92
|
+
return this.lhs.value() === this.rhs.value() ? 1 : 0;
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
exports.Equals = Equals;
|
|
96
|
+
class NotEquals extends Operator {
|
|
97
|
+
constructor() {
|
|
98
|
+
super(0, true);
|
|
99
|
+
}
|
|
100
|
+
value() {
|
|
101
|
+
return this.lhs.value() !== this.rhs.value() ? 1 : 0;
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
exports.NotEquals = NotEquals;
|
|
105
|
+
class GreaterThan extends Operator {
|
|
106
|
+
constructor() {
|
|
107
|
+
super(0, true);
|
|
108
|
+
}
|
|
109
|
+
value() {
|
|
110
|
+
return this.lhs.value() > this.rhs.value() ? 1 : 0;
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
exports.GreaterThan = GreaterThan;
|
|
114
|
+
class LessThan extends Operator {
|
|
115
|
+
constructor() {
|
|
116
|
+
super(0, true);
|
|
117
|
+
}
|
|
118
|
+
value() {
|
|
119
|
+
return this.lhs.value() < this.rhs.value() ? 1 : 0;
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
exports.LessThan = LessThan;
|
|
123
|
+
class GreaterThanOrEqual extends Operator {
|
|
124
|
+
constructor() {
|
|
125
|
+
super(0, true);
|
|
126
|
+
}
|
|
127
|
+
value() {
|
|
128
|
+
return this.lhs.value() >= this.rhs.value() ? 1 : 0;
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
exports.GreaterThanOrEqual = GreaterThanOrEqual;
|
|
132
|
+
class LessThanOrEqual extends Operator {
|
|
133
|
+
constructor() {
|
|
134
|
+
super(0, true);
|
|
135
|
+
}
|
|
136
|
+
value() {
|
|
137
|
+
return this.lhs.value() <= this.rhs.value() ? 1 : 0;
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
exports.LessThanOrEqual = LessThanOrEqual;
|
|
141
|
+
class And extends Operator {
|
|
142
|
+
constructor() {
|
|
143
|
+
super(-1, true);
|
|
144
|
+
}
|
|
145
|
+
value() {
|
|
146
|
+
return this.lhs.value() && this.rhs.value() ? 1 : 0;
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
exports.And = And;
|
|
150
|
+
class Or extends Operator {
|
|
151
|
+
constructor() {
|
|
152
|
+
super(-1, true);
|
|
153
|
+
}
|
|
154
|
+
value() {
|
|
155
|
+
return this.lhs.value() || this.rhs.value() ? 1 : 0;
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
exports.Or = Or;
|
|
159
|
+
class Not extends Operator {
|
|
160
|
+
constructor() {
|
|
161
|
+
super(0, true);
|
|
162
|
+
}
|
|
163
|
+
isOperator() {
|
|
164
|
+
return false;
|
|
165
|
+
}
|
|
166
|
+
value() {
|
|
167
|
+
return !this.lhs.value() ? 1 : 0;
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
exports.Not = Not;
|
|
171
|
+
class Is extends Operator {
|
|
172
|
+
constructor() {
|
|
173
|
+
super(-1, true);
|
|
174
|
+
}
|
|
175
|
+
value() {
|
|
176
|
+
return this.lhs.value() === this.rhs.value() ? 1 : 0;
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
exports.Is = Is;
|
|
180
|
+
//# sourceMappingURL=operator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"operator.js","sourceRoot":"","sources":["../../../src/parsing/expressions/operator.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const identifier_1 = __importDefault(require("./identifier"));
|
|
7
|
+
/**
|
|
8
|
+
* Represents a reference to a previously defined variable or expression.
|
|
9
|
+
*
|
|
10
|
+
* References point to values defined earlier in the query (e.g., in WITH or LOAD statements).
|
|
11
|
+
*
|
|
12
|
+
* @example
|
|
13
|
+
* ```typescript
|
|
14
|
+
* const ref = new Reference("myVar", previousNode);
|
|
15
|
+
* console.log(ref.value()); // Gets value from referred node
|
|
16
|
+
* ```
|
|
17
|
+
*/
|
|
18
|
+
class Reference extends identifier_1.default {
|
|
19
|
+
/**
|
|
20
|
+
* Creates a new Reference to a variable.
|
|
21
|
+
*
|
|
22
|
+
* @param value - The identifier name
|
|
23
|
+
* @param referred - The node this reference points to (optional)
|
|
24
|
+
*/
|
|
25
|
+
constructor(value, referred = undefined) {
|
|
26
|
+
super(value);
|
|
27
|
+
this._referred = undefined;
|
|
28
|
+
this._referred = referred;
|
|
29
|
+
}
|
|
30
|
+
set referred(node) {
|
|
31
|
+
this._referred = node;
|
|
32
|
+
}
|
|
33
|
+
toString() {
|
|
34
|
+
return `Reference (${this._value})`;
|
|
35
|
+
}
|
|
36
|
+
value() {
|
|
37
|
+
var _a;
|
|
38
|
+
return (_a = this._referred) === null || _a === void 0 ? void 0 : _a.value();
|
|
39
|
+
}
|
|
40
|
+
get identifier() {
|
|
41
|
+
return this._value;
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
exports.default = Reference;
|
|
45
|
+
//# sourceMappingURL=reference.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reference.js","sourceRoot":"","sources":["../../../src/parsing/expressions/reference.ts"],"names":[],"mappings":";;;;;AACA,8DAAsC;AAEtC;;;;;;;;;;GAUG;AACH,MAAM,SAAU,SAAQ,oBAAU;IAG9B;;;;;OAKG;IACH,YAAY,KAAa,EAAE,WAAgC,SAAS;QAChE,KAAK,CAAC,KAAK,CAAC,CAAC;QATT,cAAS,GAAwB,SAAS,CAAC;QAU/C,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC;IAC9B,CAAC;IACD,IAAW,QAAQ,CAAC,IAAa;QAC7B,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;IAC1B,CAAC;IACM,QAAQ;QACX,OAAO,cAAc,IAAI,CAAC,MAAM,GAAG,CAAC;IACxC,CAAC;IACM,KAAK;;QACR,OAAO,MAAA,IAAI,CAAC,SAAS,0CAAE,KAAK,EAAE,CAAC;IACnC,CAAC;IACD,IAAW,UAAU;QACjB,OAAO,IAAI,CAAC,MAAM,CAAC;IACvB,CAAC;CACJ;AAED,kBAAe,SAAS,CAAC"}
|