flowquery 1.0.46 → 1.0.48
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/flowquery.min.js +1 -1
- package/dist/index.d.ts +0 -7
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +6 -4
- package/dist/index.js.map +1 -1
- package/dist/parsing/data_structures/list_comprehension.d.ts +56 -0
- package/dist/parsing/data_structures/list_comprehension.d.ts.map +1 -0
- package/dist/parsing/data_structures/list_comprehension.js +102 -0
- package/dist/parsing/data_structures/list_comprehension.js.map +1 -0
- package/dist/parsing/parser.d.ts +18 -0
- package/dist/parsing/parser.d.ts.map +1 -1
- package/dist/parsing/parser.js +92 -0
- package/dist/parsing/parser.js.map +1 -1
- package/package.json +4 -1
- package/.editorconfig +0 -21
- package/.gitattributes +0 -3
- package/.github/workflows/npm-publish.yml +0 -32
- package/.github/workflows/python-publish.yml +0 -143
- package/.github/workflows/release.yml +0 -107
- package/.husky/pre-commit +0 -28
- package/.prettierrc +0 -22
- package/CODE_OF_CONDUCT.md +0 -10
- package/FlowQueryLogoIcon.png +0 -0
- package/SECURITY.md +0 -14
- package/SUPPORT.md +0 -13
- package/docs/flowquery.min.js +0 -1
- package/docs/index.html +0 -105
- package/flowquery-py/CONTRIBUTING.md +0 -127
- package/flowquery-py/README.md +0 -67
- package/flowquery-py/misc/data/test.json +0 -10
- package/flowquery-py/misc/data/users.json +0 -242
- package/flowquery-py/notebooks/TestFlowQuery.ipynb +0 -440
- package/flowquery-py/pyproject.toml +0 -121
- package/flowquery-py/setup_env.ps1 +0 -92
- package/flowquery-py/setup_env.sh +0 -87
- package/flowquery-py/src/__init__.py +0 -38
- package/flowquery-py/src/__main__.py +0 -10
- package/flowquery-py/src/compute/__init__.py +0 -6
- package/flowquery-py/src/compute/flowquery.py +0 -68
- package/flowquery-py/src/compute/runner.py +0 -64
- package/flowquery-py/src/extensibility.py +0 -52
- package/flowquery-py/src/graph/__init__.py +0 -31
- package/flowquery-py/src/graph/data.py +0 -136
- package/flowquery-py/src/graph/database.py +0 -141
- package/flowquery-py/src/graph/hops.py +0 -43
- package/flowquery-py/src/graph/node.py +0 -143
- package/flowquery-py/src/graph/node_data.py +0 -26
- package/flowquery-py/src/graph/node_reference.py +0 -50
- package/flowquery-py/src/graph/pattern.py +0 -115
- package/flowquery-py/src/graph/pattern_expression.py +0 -67
- package/flowquery-py/src/graph/patterns.py +0 -42
- package/flowquery-py/src/graph/physical_node.py +0 -41
- package/flowquery-py/src/graph/physical_relationship.py +0 -36
- package/flowquery-py/src/graph/relationship.py +0 -193
- package/flowquery-py/src/graph/relationship_data.py +0 -36
- package/flowquery-py/src/graph/relationship_match_collector.py +0 -85
- package/flowquery-py/src/graph/relationship_reference.py +0 -21
- package/flowquery-py/src/io/__init__.py +0 -5
- package/flowquery-py/src/io/command_line.py +0 -108
- package/flowquery-py/src/parsing/__init__.py +0 -17
- package/flowquery-py/src/parsing/alias.py +0 -20
- package/flowquery-py/src/parsing/alias_option.py +0 -11
- package/flowquery-py/src/parsing/ast_node.py +0 -147
- package/flowquery-py/src/parsing/base_parser.py +0 -84
- package/flowquery-py/src/parsing/components/__init__.py +0 -19
- package/flowquery-py/src/parsing/components/csv.py +0 -8
- package/flowquery-py/src/parsing/components/from_.py +0 -12
- package/flowquery-py/src/parsing/components/headers.py +0 -12
- package/flowquery-py/src/parsing/components/json.py +0 -8
- package/flowquery-py/src/parsing/components/null.py +0 -10
- package/flowquery-py/src/parsing/components/post.py +0 -8
- package/flowquery-py/src/parsing/components/text.py +0 -8
- package/flowquery-py/src/parsing/context.py +0 -50
- package/flowquery-py/src/parsing/data_structures/__init__.py +0 -15
- package/flowquery-py/src/parsing/data_structures/associative_array.py +0 -41
- package/flowquery-py/src/parsing/data_structures/json_array.py +0 -30
- package/flowquery-py/src/parsing/data_structures/key_value_pair.py +0 -38
- package/flowquery-py/src/parsing/data_structures/lookup.py +0 -51
- package/flowquery-py/src/parsing/data_structures/range_lookup.py +0 -42
- package/flowquery-py/src/parsing/expressions/__init__.py +0 -61
- package/flowquery-py/src/parsing/expressions/boolean.py +0 -20
- package/flowquery-py/src/parsing/expressions/expression.py +0 -141
- package/flowquery-py/src/parsing/expressions/expression_map.py +0 -26
- package/flowquery-py/src/parsing/expressions/f_string.py +0 -27
- package/flowquery-py/src/parsing/expressions/identifier.py +0 -21
- package/flowquery-py/src/parsing/expressions/number.py +0 -32
- package/flowquery-py/src/parsing/expressions/operator.py +0 -271
- package/flowquery-py/src/parsing/expressions/reference.py +0 -47
- package/flowquery-py/src/parsing/expressions/string.py +0 -27
- package/flowquery-py/src/parsing/functions/__init__.py +0 -127
- package/flowquery-py/src/parsing/functions/aggregate_function.py +0 -60
- package/flowquery-py/src/parsing/functions/async_function.py +0 -65
- package/flowquery-py/src/parsing/functions/avg.py +0 -55
- package/flowquery-py/src/parsing/functions/coalesce.py +0 -43
- package/flowquery-py/src/parsing/functions/collect.py +0 -75
- package/flowquery-py/src/parsing/functions/count.py +0 -79
- package/flowquery-py/src/parsing/functions/date_.py +0 -61
- package/flowquery-py/src/parsing/functions/datetime_.py +0 -62
- package/flowquery-py/src/parsing/functions/duration.py +0 -159
- package/flowquery-py/src/parsing/functions/element_id.py +0 -50
- package/flowquery-py/src/parsing/functions/function.py +0 -68
- package/flowquery-py/src/parsing/functions/function_factory.py +0 -170
- package/flowquery-py/src/parsing/functions/function_metadata.py +0 -148
- package/flowquery-py/src/parsing/functions/functions.py +0 -67
- package/flowquery-py/src/parsing/functions/head.py +0 -39
- package/flowquery-py/src/parsing/functions/id_.py +0 -49
- package/flowquery-py/src/parsing/functions/join.py +0 -49
- package/flowquery-py/src/parsing/functions/keys.py +0 -34
- package/flowquery-py/src/parsing/functions/last.py +0 -39
- package/flowquery-py/src/parsing/functions/localdatetime.py +0 -60
- package/flowquery-py/src/parsing/functions/localtime.py +0 -57
- package/flowquery-py/src/parsing/functions/max_.py +0 -49
- package/flowquery-py/src/parsing/functions/min_.py +0 -49
- package/flowquery-py/src/parsing/functions/nodes.py +0 -48
- package/flowquery-py/src/parsing/functions/predicate_function.py +0 -47
- package/flowquery-py/src/parsing/functions/predicate_sum.py +0 -49
- package/flowquery-py/src/parsing/functions/properties.py +0 -50
- package/flowquery-py/src/parsing/functions/rand.py +0 -28
- package/flowquery-py/src/parsing/functions/range_.py +0 -41
- package/flowquery-py/src/parsing/functions/reducer_element.py +0 -15
- package/flowquery-py/src/parsing/functions/relationships.py +0 -46
- package/flowquery-py/src/parsing/functions/replace.py +0 -39
- package/flowquery-py/src/parsing/functions/round_.py +0 -34
- package/flowquery-py/src/parsing/functions/schema.py +0 -40
- package/flowquery-py/src/parsing/functions/size.py +0 -34
- package/flowquery-py/src/parsing/functions/split.py +0 -54
- package/flowquery-py/src/parsing/functions/string_distance.py +0 -92
- package/flowquery-py/src/parsing/functions/stringify.py +0 -49
- package/flowquery-py/src/parsing/functions/substring.py +0 -76
- package/flowquery-py/src/parsing/functions/sum.py +0 -51
- package/flowquery-py/src/parsing/functions/tail.py +0 -37
- package/flowquery-py/src/parsing/functions/temporal_utils.py +0 -186
- package/flowquery-py/src/parsing/functions/time_.py +0 -57
- package/flowquery-py/src/parsing/functions/timestamp.py +0 -37
- package/flowquery-py/src/parsing/functions/to_float.py +0 -46
- package/flowquery-py/src/parsing/functions/to_integer.py +0 -46
- package/flowquery-py/src/parsing/functions/to_json.py +0 -35
- package/flowquery-py/src/parsing/functions/to_lower.py +0 -37
- package/flowquery-py/src/parsing/functions/to_string.py +0 -41
- package/flowquery-py/src/parsing/functions/trim.py +0 -37
- package/flowquery-py/src/parsing/functions/type_.py +0 -47
- package/flowquery-py/src/parsing/functions/value_holder.py +0 -24
- package/flowquery-py/src/parsing/logic/__init__.py +0 -15
- package/flowquery-py/src/parsing/logic/case.py +0 -28
- package/flowquery-py/src/parsing/logic/else_.py +0 -12
- package/flowquery-py/src/parsing/logic/end.py +0 -8
- package/flowquery-py/src/parsing/logic/then.py +0 -12
- package/flowquery-py/src/parsing/logic/when.py +0 -12
- package/flowquery-py/src/parsing/operations/__init__.py +0 -46
- package/flowquery-py/src/parsing/operations/aggregated_return.py +0 -25
- package/flowquery-py/src/parsing/operations/aggregated_with.py +0 -22
- package/flowquery-py/src/parsing/operations/call.py +0 -73
- package/flowquery-py/src/parsing/operations/create_node.py +0 -35
- package/flowquery-py/src/parsing/operations/create_relationship.py +0 -35
- package/flowquery-py/src/parsing/operations/delete_node.py +0 -29
- package/flowquery-py/src/parsing/operations/delete_relationship.py +0 -29
- package/flowquery-py/src/parsing/operations/group_by.py +0 -148
- package/flowquery-py/src/parsing/operations/limit.py +0 -33
- package/flowquery-py/src/parsing/operations/load.py +0 -148
- package/flowquery-py/src/parsing/operations/match.py +0 -52
- package/flowquery-py/src/parsing/operations/operation.py +0 -69
- package/flowquery-py/src/parsing/operations/order_by.py +0 -114
- package/flowquery-py/src/parsing/operations/projection.py +0 -21
- package/flowquery-py/src/parsing/operations/return_op.py +0 -88
- package/flowquery-py/src/parsing/operations/union.py +0 -115
- package/flowquery-py/src/parsing/operations/union_all.py +0 -17
- package/flowquery-py/src/parsing/operations/unwind.py +0 -42
- package/flowquery-py/src/parsing/operations/where.py +0 -43
- package/flowquery-py/src/parsing/operations/with_op.py +0 -18
- package/flowquery-py/src/parsing/parser.py +0 -1384
- package/flowquery-py/src/parsing/parser_state.py +0 -26
- package/flowquery-py/src/parsing/token_to_node.py +0 -109
- package/flowquery-py/src/tokenization/__init__.py +0 -23
- package/flowquery-py/src/tokenization/keyword.py +0 -54
- package/flowquery-py/src/tokenization/operator.py +0 -29
- package/flowquery-py/src/tokenization/string_walker.py +0 -158
- package/flowquery-py/src/tokenization/symbol.py +0 -19
- package/flowquery-py/src/tokenization/token.py +0 -693
- package/flowquery-py/src/tokenization/token_mapper.py +0 -53
- package/flowquery-py/src/tokenization/token_type.py +0 -21
- package/flowquery-py/src/tokenization/tokenizer.py +0 -214
- package/flowquery-py/src/tokenization/trie.py +0 -125
- package/flowquery-py/src/utils/__init__.py +0 -6
- package/flowquery-py/src/utils/object_utils.py +0 -20
- package/flowquery-py/src/utils/string_utils.py +0 -113
- package/flowquery-py/tests/__init__.py +0 -1
- package/flowquery-py/tests/compute/__init__.py +0 -1
- package/flowquery-py/tests/compute/test_runner.py +0 -4902
- package/flowquery-py/tests/graph/__init__.py +0 -1
- package/flowquery-py/tests/graph/test_create.py +0 -56
- package/flowquery-py/tests/graph/test_data.py +0 -73
- package/flowquery-py/tests/graph/test_match.py +0 -40
- package/flowquery-py/tests/parsing/__init__.py +0 -1
- package/flowquery-py/tests/parsing/test_context.py +0 -34
- package/flowquery-py/tests/parsing/test_expression.py +0 -248
- package/flowquery-py/tests/parsing/test_parser.py +0 -1237
- package/flowquery-py/tests/test_extensibility.py +0 -611
- package/flowquery-py/tests/tokenization/__init__.py +0 -1
- package/flowquery-py/tests/tokenization/test_token_mapper.py +0 -60
- package/flowquery-py/tests/tokenization/test_tokenizer.py +0 -198
- package/flowquery-py/tests/tokenization/test_trie.py +0 -30
- package/flowquery-vscode/.vscode-test.mjs +0 -5
- package/flowquery-vscode/.vscodeignore +0 -13
- package/flowquery-vscode/LICENSE +0 -21
- package/flowquery-vscode/README.md +0 -11
- package/flowquery-vscode/demo/FlowQueryVSCodeDemo.gif +0 -0
- package/flowquery-vscode/eslint.config.mjs +0 -25
- package/flowquery-vscode/extension.js +0 -508
- package/flowquery-vscode/flowQueryEngine/flowquery.min.js +0 -1
- package/flowquery-vscode/flowquery-worker.js +0 -66
- package/flowquery-vscode/images/FlowQueryLogoIcon.png +0 -0
- package/flowquery-vscode/jsconfig.json +0 -13
- package/flowquery-vscode/libs/page.css +0 -53
- package/flowquery-vscode/libs/table.css +0 -13
- package/flowquery-vscode/libs/tabs.css +0 -66
- package/flowquery-vscode/package-lock.json +0 -2917
- package/flowquery-vscode/package.json +0 -51
- package/flowquery-vscode/test/extension.test.js +0 -196
- package/flowquery-vscode/test/worker.test.js +0 -25
- package/flowquery-vscode/vsc-extension-quickstart.md +0 -42
- package/jest.config.js +0 -14
- package/misc/apps/RAG/README.md +0 -29
- package/misc/apps/RAG/data/chats.json +0 -302
- package/misc/apps/RAG/data/emails.json +0 -182
- package/misc/apps/RAG/data/events.json +0 -226
- package/misc/apps/RAG/data/files.json +0 -172
- package/misc/apps/RAG/data/users.json +0 -158
- package/misc/apps/RAG/jest.config.js +0 -21
- package/misc/apps/RAG/package.json +0 -48
- package/misc/apps/RAG/public/index.html +0 -18
- package/misc/apps/RAG/src/App.css +0 -42
- package/misc/apps/RAG/src/App.tsx +0 -50
- package/misc/apps/RAG/src/components/AdaptiveCardRenderer.css +0 -172
- package/misc/apps/RAG/src/components/AdaptiveCardRenderer.tsx +0 -380
- package/misc/apps/RAG/src/components/ApiKeySettings.tsx +0 -245
- package/misc/apps/RAG/src/components/ChatContainer.css +0 -67
- package/misc/apps/RAG/src/components/ChatContainer.tsx +0 -242
- package/misc/apps/RAG/src/components/ChatInput.css +0 -23
- package/misc/apps/RAG/src/components/ChatInput.tsx +0 -76
- package/misc/apps/RAG/src/components/ChatMessage.css +0 -160
- package/misc/apps/RAG/src/components/ChatMessage.tsx +0 -286
- package/misc/apps/RAG/src/components/FlowQueryAgent.ts +0 -708
- package/misc/apps/RAG/src/components/FlowQueryRunner.css +0 -113
- package/misc/apps/RAG/src/components/FlowQueryRunner.tsx +0 -371
- package/misc/apps/RAG/src/components/index.ts +0 -28
- package/misc/apps/RAG/src/graph/index.ts +0 -19
- package/misc/apps/RAG/src/graph/initializeGraph.ts +0 -254
- package/misc/apps/RAG/src/index.tsx +0 -29
- package/misc/apps/RAG/src/prompts/FlowQuerySystemPrompt.ts +0 -327
- package/misc/apps/RAG/src/prompts/index.ts +0 -10
- package/misc/apps/RAG/src/tests/graph.test.ts +0 -35
- package/misc/apps/RAG/src/utils/FlowQueryExecutor.ts +0 -130
- package/misc/apps/RAG/src/utils/FlowQueryExtractor.ts +0 -208
- package/misc/apps/RAG/src/utils/Llm.ts +0 -248
- package/misc/apps/RAG/src/utils/index.ts +0 -12
- package/misc/apps/RAG/tsconfig.json +0 -22
- package/misc/apps/RAG/webpack.config.js +0 -43
- package/misc/apps/README.md +0 -1
- package/misc/queries/analyze_catfacts.cql +0 -75
- package/misc/queries/azure_openai_completions.cql +0 -13
- package/misc/queries/azure_openai_models.cql +0 -9
- package/misc/queries/mock_pipeline.cql +0 -84
- package/misc/queries/openai_completions.cql +0 -15
- package/misc/queries/openai_models.cql +0 -13
- package/misc/queries/test.cql +0 -6
- package/misc/queries/tool_inference.cql +0 -24
- package/misc/queries/wisdom.cql +0 -6
- package/misc/queries/wisdom_letter_histogram.cql +0 -8
- package/src/compute/flowquery.ts +0 -46
- package/src/compute/runner.ts +0 -66
- package/src/extensibility.ts +0 -45
- package/src/graph/data.ts +0 -130
- package/src/graph/database.ts +0 -143
- package/src/graph/hops.ts +0 -22
- package/src/graph/node.ts +0 -122
- package/src/graph/node_data.ts +0 -18
- package/src/graph/node_reference.ts +0 -38
- package/src/graph/pattern.ts +0 -110
- package/src/graph/pattern_expression.ts +0 -48
- package/src/graph/patterns.ts +0 -36
- package/src/graph/physical_node.ts +0 -23
- package/src/graph/physical_relationship.ts +0 -23
- package/src/graph/relationship.ts +0 -167
- package/src/graph/relationship_data.ts +0 -31
- package/src/graph/relationship_match_collector.ts +0 -64
- package/src/graph/relationship_reference.ts +0 -25
- package/src/index.browser.ts +0 -46
- package/src/index.node.ts +0 -55
- package/src/index.ts +0 -12
- package/src/io/command_line.ts +0 -74
- package/src/parsing/alias.ts +0 -23
- package/src/parsing/alias_option.ts +0 -5
- package/src/parsing/ast_node.ts +0 -153
- package/src/parsing/base_parser.ts +0 -98
- package/src/parsing/components/csv.ts +0 -9
- package/src/parsing/components/from.ts +0 -12
- package/src/parsing/components/headers.ts +0 -12
- package/src/parsing/components/json.ts +0 -9
- package/src/parsing/components/null.ts +0 -9
- package/src/parsing/components/post.ts +0 -9
- package/src/parsing/components/text.ts +0 -9
- package/src/parsing/context.ts +0 -54
- package/src/parsing/data_structures/associative_array.ts +0 -43
- package/src/parsing/data_structures/json_array.ts +0 -31
- package/src/parsing/data_structures/key_value_pair.ts +0 -37
- package/src/parsing/data_structures/lookup.ts +0 -44
- package/src/parsing/data_structures/range_lookup.ts +0 -36
- package/src/parsing/expressions/boolean.ts +0 -21
- package/src/parsing/expressions/expression.ts +0 -150
- package/src/parsing/expressions/expression_map.ts +0 -22
- package/src/parsing/expressions/f_string.ts +0 -26
- package/src/parsing/expressions/identifier.ts +0 -22
- package/src/parsing/expressions/number.ts +0 -40
- package/src/parsing/expressions/operator.ts +0 -354
- package/src/parsing/expressions/reference.ts +0 -45
- package/src/parsing/expressions/string.ts +0 -34
- package/src/parsing/functions/aggregate_function.ts +0 -58
- package/src/parsing/functions/async_function.ts +0 -64
- package/src/parsing/functions/avg.ts +0 -47
- package/src/parsing/functions/coalesce.ts +0 -49
- package/src/parsing/functions/collect.ts +0 -54
- package/src/parsing/functions/count.ts +0 -54
- package/src/parsing/functions/date.ts +0 -63
- package/src/parsing/functions/datetime.ts +0 -63
- package/src/parsing/functions/duration.ts +0 -143
- package/src/parsing/functions/element_id.ts +0 -51
- package/src/parsing/functions/function.ts +0 -60
- package/src/parsing/functions/function_factory.ts +0 -195
- package/src/parsing/functions/function_metadata.ts +0 -217
- package/src/parsing/functions/functions.ts +0 -70
- package/src/parsing/functions/head.ts +0 -42
- package/src/parsing/functions/id.ts +0 -51
- package/src/parsing/functions/join.ts +0 -40
- package/src/parsing/functions/keys.ts +0 -29
- package/src/parsing/functions/last.ts +0 -42
- package/src/parsing/functions/localdatetime.ts +0 -63
- package/src/parsing/functions/localtime.ts +0 -58
- package/src/parsing/functions/max.ts +0 -37
- package/src/parsing/functions/min.ts +0 -37
- package/src/parsing/functions/nodes.ts +0 -54
- package/src/parsing/functions/predicate_function.ts +0 -48
- package/src/parsing/functions/predicate_sum.ts +0 -47
- package/src/parsing/functions/properties.ts +0 -56
- package/src/parsing/functions/rand.ts +0 -21
- package/src/parsing/functions/range.ts +0 -37
- package/src/parsing/functions/reducer_element.ts +0 -10
- package/src/parsing/functions/relationships.ts +0 -52
- package/src/parsing/functions/replace.ts +0 -38
- package/src/parsing/functions/round.ts +0 -28
- package/src/parsing/functions/schema.ts +0 -39
- package/src/parsing/functions/size.ts +0 -28
- package/src/parsing/functions/split.ts +0 -45
- package/src/parsing/functions/string_distance.ts +0 -83
- package/src/parsing/functions/stringify.ts +0 -37
- package/src/parsing/functions/substring.ts +0 -68
- package/src/parsing/functions/sum.ts +0 -41
- package/src/parsing/functions/tail.ts +0 -39
- package/src/parsing/functions/temporal_utils.ts +0 -180
- package/src/parsing/functions/time.ts +0 -58
- package/src/parsing/functions/timestamp.ts +0 -37
- package/src/parsing/functions/to_float.ts +0 -50
- package/src/parsing/functions/to_integer.ts +0 -50
- package/src/parsing/functions/to_json.ts +0 -28
- package/src/parsing/functions/to_lower.ts +0 -28
- package/src/parsing/functions/to_string.ts +0 -32
- package/src/parsing/functions/trim.ts +0 -28
- package/src/parsing/functions/type.ts +0 -39
- package/src/parsing/functions/value_holder.ts +0 -13
- package/src/parsing/logic/case.ts +0 -26
- package/src/parsing/logic/else.ts +0 -12
- package/src/parsing/logic/end.ts +0 -9
- package/src/parsing/logic/then.ts +0 -12
- package/src/parsing/logic/when.ts +0 -12
- package/src/parsing/operations/aggregated_return.ts +0 -22
- package/src/parsing/operations/aggregated_with.ts +0 -18
- package/src/parsing/operations/call.ts +0 -69
- package/src/parsing/operations/create_node.ts +0 -39
- package/src/parsing/operations/create_relationship.ts +0 -38
- package/src/parsing/operations/delete_node.ts +0 -33
- package/src/parsing/operations/delete_relationship.ts +0 -32
- package/src/parsing/operations/group_by.ts +0 -137
- package/src/parsing/operations/limit.ts +0 -31
- package/src/parsing/operations/load.ts +0 -146
- package/src/parsing/operations/match.ts +0 -54
- package/src/parsing/operations/operation.ts +0 -69
- package/src/parsing/operations/order_by.ts +0 -126
- package/src/parsing/operations/projection.ts +0 -18
- package/src/parsing/operations/return.ts +0 -76
- package/src/parsing/operations/union.ts +0 -114
- package/src/parsing/operations/union_all.ts +0 -16
- package/src/parsing/operations/unwind.ts +0 -36
- package/src/parsing/operations/where.ts +0 -42
- package/src/parsing/operations/with.ts +0 -20
- package/src/parsing/parser.ts +0 -1641
- package/src/parsing/parser_state.ts +0 -25
- package/src/parsing/token_to_node.ts +0 -114
- package/src/tokenization/keyword.ts +0 -50
- package/src/tokenization/operator.ts +0 -25
- package/src/tokenization/string_walker.ts +0 -197
- package/src/tokenization/symbol.ts +0 -15
- package/src/tokenization/token.ts +0 -764
- package/src/tokenization/token_mapper.ts +0 -53
- package/src/tokenization/token_type.ts +0 -16
- package/src/tokenization/tokenizer.ts +0 -250
- package/src/tokenization/trie.ts +0 -117
- package/src/utils/object_utils.ts +0 -17
- package/src/utils/string_utils.ts +0 -114
- package/tests/compute/runner.test.ts +0 -4559
- package/tests/extensibility.test.ts +0 -643
- package/tests/graph/create.test.ts +0 -36
- package/tests/graph/data.test.ts +0 -58
- package/tests/graph/match.test.ts +0 -29
- package/tests/parsing/context.test.ts +0 -27
- package/tests/parsing/expression.test.ts +0 -303
- package/tests/parsing/parser.test.ts +0 -1327
- package/tests/tokenization/token_mapper.test.ts +0 -47
- package/tests/tokenization/tokenizer.test.ts +0 -191
- package/tests/tokenization/trie.test.ts +0 -20
- package/tsconfig.json +0 -19
- package/typedoc.json +0 -16
- package/vscode-settings.json.recommended +0 -16
- package/webpack.config.js +0 -26
|
@@ -1,167 +0,0 @@
|
|
|
1
|
-
import ASTNode from "../parsing/ast_node";
|
|
2
|
-
import Expression from "../parsing/expressions/expression";
|
|
3
|
-
import Hops from "./hops";
|
|
4
|
-
import Node from "./node";
|
|
5
|
-
import RelationshipData, { RelationshipRecord } from "./relationship_data";
|
|
6
|
-
import RelationshipMatchCollector, {
|
|
7
|
-
RelationshipMatchRecord,
|
|
8
|
-
} from "./relationship_match_collector";
|
|
9
|
-
|
|
10
|
-
class Relationship extends ASTNode {
|
|
11
|
-
protected _identifier: string | null = null;
|
|
12
|
-
protected _types: string[] = [];
|
|
13
|
-
protected _properties: Map<string, Expression> = new Map();
|
|
14
|
-
protected _hops: Hops = new Hops();
|
|
15
|
-
|
|
16
|
-
protected _value: RelationshipMatchRecord | RelationshipMatchRecord[] | null = null;
|
|
17
|
-
protected _matches: RelationshipMatchCollector = new RelationshipMatchCollector();
|
|
18
|
-
|
|
19
|
-
protected _source: Node | null = null;
|
|
20
|
-
protected _target: Node | null = null;
|
|
21
|
-
protected _direction: "left" | "right" = "right";
|
|
22
|
-
|
|
23
|
-
private _data: RelationshipData | null = null;
|
|
24
|
-
|
|
25
|
-
constructor(identifier: string | null = null, type: string | null = null) {
|
|
26
|
-
super();
|
|
27
|
-
this._identifier = identifier;
|
|
28
|
-
if (type !== null) {
|
|
29
|
-
this._types = [type];
|
|
30
|
-
}
|
|
31
|
-
}
|
|
32
|
-
public set identifier(identifier: string) {
|
|
33
|
-
this._identifier = identifier;
|
|
34
|
-
}
|
|
35
|
-
public get identifier(): string | null {
|
|
36
|
-
return this._identifier;
|
|
37
|
-
}
|
|
38
|
-
public set type(type: string) {
|
|
39
|
-
this._types = [type];
|
|
40
|
-
}
|
|
41
|
-
public get type(): string | null {
|
|
42
|
-
return this._types.length > 0 ? this._types[0] : null;
|
|
43
|
-
}
|
|
44
|
-
public set types(types: string[]) {
|
|
45
|
-
this._types = types;
|
|
46
|
-
}
|
|
47
|
-
public get types(): string[] {
|
|
48
|
-
return this._types;
|
|
49
|
-
}
|
|
50
|
-
public get properties(): Map<string, Expression> {
|
|
51
|
-
return this._properties;
|
|
52
|
-
}
|
|
53
|
-
public set properties(properties: Map<string, Expression>) {
|
|
54
|
-
this._properties = properties;
|
|
55
|
-
}
|
|
56
|
-
private _matchesProperties(hop: number = 0): boolean {
|
|
57
|
-
const data: RelationshipData = this._data!;
|
|
58
|
-
for (const [key, expression] of this._properties) {
|
|
59
|
-
const record: RelationshipRecord = data.current(hop)!;
|
|
60
|
-
if (record === null) {
|
|
61
|
-
throw new Error("No current relationship data available");
|
|
62
|
-
}
|
|
63
|
-
if (!(key in record)) {
|
|
64
|
-
throw new Error("Relationship does not have property");
|
|
65
|
-
}
|
|
66
|
-
return record[key] === expression.value();
|
|
67
|
-
}
|
|
68
|
-
return true;
|
|
69
|
-
}
|
|
70
|
-
public setProperty(key: string, value: Expression): void {
|
|
71
|
-
this._properties.set(key, value);
|
|
72
|
-
}
|
|
73
|
-
public getProperty(key: string): Expression | null {
|
|
74
|
-
return this._properties.get(key) || null;
|
|
75
|
-
}
|
|
76
|
-
public set hops(hops: Hops) {
|
|
77
|
-
this._hops = hops;
|
|
78
|
-
}
|
|
79
|
-
public get hops(): Hops | null {
|
|
80
|
-
return this._hops;
|
|
81
|
-
}
|
|
82
|
-
public setValue(relationship: Relationship, traversalId: string = ""): void {
|
|
83
|
-
const match: RelationshipMatchRecord = this._matches.push(relationship, traversalId);
|
|
84
|
-
this._value = this._matches.value();
|
|
85
|
-
}
|
|
86
|
-
public set source(node: Node | null) {
|
|
87
|
-
this._source = node;
|
|
88
|
-
}
|
|
89
|
-
public get source(): Node | null {
|
|
90
|
-
return this._source;
|
|
91
|
-
}
|
|
92
|
-
public set target(node: Node | null) {
|
|
93
|
-
this._target = node;
|
|
94
|
-
}
|
|
95
|
-
public get target(): Node | null {
|
|
96
|
-
return this._target;
|
|
97
|
-
}
|
|
98
|
-
public set direction(direction: "left" | "right") {
|
|
99
|
-
this._direction = direction;
|
|
100
|
-
}
|
|
101
|
-
public get direction(): "left" | "right" {
|
|
102
|
-
return this._direction;
|
|
103
|
-
}
|
|
104
|
-
public value(): RelationshipMatchRecord | RelationshipMatchRecord[] | null {
|
|
105
|
-
return this._value;
|
|
106
|
-
}
|
|
107
|
-
public get matches(): RelationshipMatchRecord[] {
|
|
108
|
-
return this._matches.matches;
|
|
109
|
-
}
|
|
110
|
-
public setData(data: RelationshipData | null): void {
|
|
111
|
-
this._data = data;
|
|
112
|
-
}
|
|
113
|
-
public getData(): RelationshipData | null {
|
|
114
|
-
return this._data;
|
|
115
|
-
}
|
|
116
|
-
public setEndNode(node: Node): void {
|
|
117
|
-
this._matches.endNode = node;
|
|
118
|
-
}
|
|
119
|
-
public _left_id_or_right_id(): string {
|
|
120
|
-
return this._direction === "left" ? "left_id" : "right_id";
|
|
121
|
-
}
|
|
122
|
-
public async find(left_id: string, hop: number = 0): Promise<void> {
|
|
123
|
-
// Save original source node
|
|
124
|
-
const original = this._source;
|
|
125
|
-
if (hop > 0) {
|
|
126
|
-
// For hops greater than 0, the source becomes the target of the previous hop
|
|
127
|
-
this._source = this._target;
|
|
128
|
-
}
|
|
129
|
-
if (hop === 0) {
|
|
130
|
-
this._data?.reset();
|
|
131
|
-
|
|
132
|
-
// Handle zero-hop case: when min is 0 on a variable-length relationship,
|
|
133
|
-
// match source node as target (no traversal)
|
|
134
|
-
if (this.hops?.multi() && this.hops.min === 0 && this._target) {
|
|
135
|
-
// For zero-hop, target finds the same node as source (left_id)
|
|
136
|
-
// No relationship match is pushed since no edge is traversed
|
|
137
|
-
await this._target.find(left_id, hop);
|
|
138
|
-
}
|
|
139
|
-
}
|
|
140
|
-
while (this._data!.find(left_id, hop, this._direction)) {
|
|
141
|
-
const data: RelationshipRecord = this._data?.current(hop) as RelationshipRecord;
|
|
142
|
-
const id = data[this._left_id_or_right_id()];
|
|
143
|
-
if (hop + 1 >= this.hops!.min) {
|
|
144
|
-
this.setValue(this, left_id);
|
|
145
|
-
if (!this._matchesProperties(hop)) {
|
|
146
|
-
continue;
|
|
147
|
-
}
|
|
148
|
-
await this._target?.find(id, hop);
|
|
149
|
-
if (hop + 1 < this.hops!.max) {
|
|
150
|
-
if (this._matches.isCircular(id)) {
|
|
151
|
-
this._matches.pop();
|
|
152
|
-
continue;
|
|
153
|
-
}
|
|
154
|
-
await this.find(id, hop + 1);
|
|
155
|
-
}
|
|
156
|
-
this._matches.pop();
|
|
157
|
-
} else {
|
|
158
|
-
// Below minimum hops: traverse the edge without yielding a match
|
|
159
|
-
await this.find(id, hop + 1);
|
|
160
|
-
}
|
|
161
|
-
}
|
|
162
|
-
// Restore original source node
|
|
163
|
-
this._source = original;
|
|
164
|
-
}
|
|
165
|
-
}
|
|
166
|
-
|
|
167
|
-
export default Relationship;
|
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
import Data from "./data";
|
|
2
|
-
|
|
3
|
-
export type RelationshipRecord = { left_id: string; right_id: string } & Record<string, any>;
|
|
4
|
-
|
|
5
|
-
class RelationshipData extends Data {
|
|
6
|
-
constructor(records: RelationshipRecord[] = []) {
|
|
7
|
-
super(records);
|
|
8
|
-
super._buildIndex("left_id");
|
|
9
|
-
super._buildIndex("right_id");
|
|
10
|
-
}
|
|
11
|
-
public find(id: string, hop: number = 0, direction: "left" | "right" = "right"): boolean {
|
|
12
|
-
return super._find(id, hop, direction === "left" ? "right_id" : "left_id");
|
|
13
|
-
}
|
|
14
|
-
/*
|
|
15
|
-
** Get the properties of the current relationship record
|
|
16
|
-
'' excluding the left_id and right_id fields
|
|
17
|
-
*/
|
|
18
|
-
public properties(): Record<string, any> | null {
|
|
19
|
-
const current = this.current();
|
|
20
|
-
if (current) {
|
|
21
|
-
const { left_id, right_id, _type, ...props } = current;
|
|
22
|
-
return props;
|
|
23
|
-
}
|
|
24
|
-
return null;
|
|
25
|
-
}
|
|
26
|
-
public current(hop: number = 0): RelationshipRecord | null {
|
|
27
|
-
return super.current(hop) as RelationshipRecord | null;
|
|
28
|
-
}
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
export default RelationshipData;
|
|
@@ -1,64 +0,0 @@
|
|
|
1
|
-
import Relationship from "./relationship";
|
|
2
|
-
|
|
3
|
-
export type RelationshipMatchRecord = {
|
|
4
|
-
type: string;
|
|
5
|
-
startNode: Record<string, any>;
|
|
6
|
-
endNode: Record<string, any> | null;
|
|
7
|
-
properties: Record<string, any>;
|
|
8
|
-
[key: string]: any;
|
|
9
|
-
};
|
|
10
|
-
|
|
11
|
-
class RelationshipMatchCollector {
|
|
12
|
-
private _matches: RelationshipMatchRecord[] = [];
|
|
13
|
-
private _nodeIds: Array<string> = [];
|
|
14
|
-
|
|
15
|
-
public push(relationship: Relationship, traversalId: string): RelationshipMatchRecord {
|
|
16
|
-
const data = relationship.getData();
|
|
17
|
-
const currentRecord = data?.current();
|
|
18
|
-
const actualType =
|
|
19
|
-
currentRecord && "_type" in currentRecord ? currentRecord["_type"] : relationship.type!;
|
|
20
|
-
const relProperties = data?.properties() as Record<string, any>;
|
|
21
|
-
const match: RelationshipMatchRecord = {
|
|
22
|
-
...(relProperties || {}),
|
|
23
|
-
type: actualType,
|
|
24
|
-
startNode: relationship.source?.value() || {},
|
|
25
|
-
endNode: null,
|
|
26
|
-
properties: relProperties,
|
|
27
|
-
};
|
|
28
|
-
this._matches.push(match);
|
|
29
|
-
this._nodeIds.push(traversalId);
|
|
30
|
-
return match;
|
|
31
|
-
}
|
|
32
|
-
public set endNode(node: any) {
|
|
33
|
-
if (this._matches.length > 0) {
|
|
34
|
-
this._matches[this._matches.length - 1].endNode = node.value();
|
|
35
|
-
}
|
|
36
|
-
}
|
|
37
|
-
public pop(): RelationshipMatchRecord | undefined {
|
|
38
|
-
this._nodeIds.pop();
|
|
39
|
-
return this._matches.pop();
|
|
40
|
-
}
|
|
41
|
-
public value(): RelationshipMatchRecord | RelationshipMatchRecord[] | null {
|
|
42
|
-
if (this._matches.length === 0) {
|
|
43
|
-
return null;
|
|
44
|
-
} else if (this._matches.length === 1) {
|
|
45
|
-
const _match = this._matches[0];
|
|
46
|
-
return _match;
|
|
47
|
-
} else {
|
|
48
|
-
const _matches = this._matches;
|
|
49
|
-
return _matches;
|
|
50
|
-
}
|
|
51
|
-
}
|
|
52
|
-
public get matches(): RelationshipMatchRecord[] {
|
|
53
|
-
return this._matches;
|
|
54
|
-
}
|
|
55
|
-
/*
|
|
56
|
-
** Checks if traversing to the given node id would form a cycle
|
|
57
|
-
** in the current traversal path
|
|
58
|
-
*/
|
|
59
|
-
public isCircular(nextId: string): boolean {
|
|
60
|
-
return this._nodeIds.includes(nextId);
|
|
61
|
-
}
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
export default RelationshipMatchCollector;
|
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
import Relationship from "./relationship";
|
|
2
|
-
import { RelationshipRecord } from "./relationship_data";
|
|
3
|
-
|
|
4
|
-
class RelationshipReference extends Relationship {
|
|
5
|
-
private _reference: Relationship | null = null;
|
|
6
|
-
constructor(base: Relationship, reference: Relationship) {
|
|
7
|
-
super();
|
|
8
|
-
this._identifier = base.identifier;
|
|
9
|
-
this._types = base.types;
|
|
10
|
-
this._hops = base.hops!;
|
|
11
|
-
this._source = base.source;
|
|
12
|
-
this._target = base.target;
|
|
13
|
-
this._reference = reference;
|
|
14
|
-
}
|
|
15
|
-
public async find(left_id: string, hop: number = 0): Promise<void> {
|
|
16
|
-
this.setValue(this._reference!);
|
|
17
|
-
const data: RelationshipRecord = this._reference!.getData()?.current(
|
|
18
|
-
hop
|
|
19
|
-
) as RelationshipRecord;
|
|
20
|
-
const followId = this._direction === "left" ? "left_id" : "right_id";
|
|
21
|
-
await this._target?.find(data[followId], hop);
|
|
22
|
-
}
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
export default RelationshipReference;
|
package/src/index.browser.ts
DELETED
|
@@ -1,46 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* FlowQuery - A declarative query language for data processing pipelines.
|
|
3
|
-
*
|
|
4
|
-
* This is the main entry point for the FlowQuery in-browser usage.
|
|
5
|
-
*
|
|
6
|
-
* @packageDocumentation
|
|
7
|
-
*/
|
|
8
|
-
import { default as FlowQuery } from "./compute/flowquery";
|
|
9
|
-
import Function from "./parsing/functions/function";
|
|
10
|
-
import FunctionFactory from "./parsing/functions/function_factory";
|
|
11
|
-
import {
|
|
12
|
-
FunctionMetadata,
|
|
13
|
-
OutputSchema,
|
|
14
|
-
ParameterSchema,
|
|
15
|
-
} from "./parsing/functions/function_metadata";
|
|
16
|
-
|
|
17
|
-
/**
|
|
18
|
-
* List all registered functions with their metadata.
|
|
19
|
-
*
|
|
20
|
-
* @param options - Optional filter options
|
|
21
|
-
* @returns Array of function metadata
|
|
22
|
-
*/
|
|
23
|
-
FlowQuery.listFunctions = function (options?: {
|
|
24
|
-
category?: string;
|
|
25
|
-
asyncOnly?: boolean;
|
|
26
|
-
syncOnly?: boolean;
|
|
27
|
-
}): FunctionMetadata[] {
|
|
28
|
-
return FunctionFactory.listFunctions(options);
|
|
29
|
-
};
|
|
30
|
-
|
|
31
|
-
/**
|
|
32
|
-
* Get metadata for a specific function.
|
|
33
|
-
*
|
|
34
|
-
* @param name - The function name
|
|
35
|
-
* @returns Function metadata or undefined
|
|
36
|
-
*/
|
|
37
|
-
FlowQuery.getFunctionMetadata = function (name: string): FunctionMetadata | undefined {
|
|
38
|
-
return FunctionFactory.getMetadata(name);
|
|
39
|
-
};
|
|
40
|
-
|
|
41
|
-
/**
|
|
42
|
-
* Base Function class for creating custom plugin functions.
|
|
43
|
-
*/
|
|
44
|
-
FlowQuery.Function = Function;
|
|
45
|
-
|
|
46
|
-
export default FlowQuery;
|
package/src/index.node.ts
DELETED
|
@@ -1,55 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* FlowQuery - A declarative query language for data processing pipelines.
|
|
3
|
-
*
|
|
4
|
-
* This is the main entry point for the FlowQuery Node.js library usage.
|
|
5
|
-
*
|
|
6
|
-
* @packageDocumentation
|
|
7
|
-
*/
|
|
8
|
-
import { default as FlowQuery } from "./compute/flowquery";
|
|
9
|
-
import Function from "./parsing/functions/function";
|
|
10
|
-
import FunctionFactory, { AsyncDataProvider } from "./parsing/functions/function_factory";
|
|
11
|
-
import {
|
|
12
|
-
FunctionMetadata,
|
|
13
|
-
OutputSchema,
|
|
14
|
-
ParameterSchema,
|
|
15
|
-
} from "./parsing/functions/function_metadata";
|
|
16
|
-
|
|
17
|
-
/**
|
|
18
|
-
* List all registered functions with their metadata.
|
|
19
|
-
*
|
|
20
|
-
* @param options - Optional filter options
|
|
21
|
-
* @returns Array of function metadata
|
|
22
|
-
*/
|
|
23
|
-
FlowQuery.listFunctions = function (options?: {
|
|
24
|
-
category?: string;
|
|
25
|
-
asyncOnly?: boolean;
|
|
26
|
-
syncOnly?: boolean;
|
|
27
|
-
}): FunctionMetadata[] {
|
|
28
|
-
return FunctionFactory.listFunctions(options);
|
|
29
|
-
};
|
|
30
|
-
|
|
31
|
-
/**
|
|
32
|
-
* Get metadata for a specific function.
|
|
33
|
-
*
|
|
34
|
-
* @param name - The function name
|
|
35
|
-
* @returns Function metadata or undefined
|
|
36
|
-
*/
|
|
37
|
-
FlowQuery.getFunctionMetadata = function (name: string): FunctionMetadata | undefined {
|
|
38
|
-
return FunctionFactory.getMetadata(name);
|
|
39
|
-
};
|
|
40
|
-
|
|
41
|
-
/**
|
|
42
|
-
* Base Function class for creating custom plugin functions.
|
|
43
|
-
*/
|
|
44
|
-
FlowQuery.Function = Function;
|
|
45
|
-
|
|
46
|
-
export default FlowQuery;
|
|
47
|
-
export {
|
|
48
|
-
FlowQuery,
|
|
49
|
-
Function,
|
|
50
|
-
FunctionFactory,
|
|
51
|
-
AsyncDataProvider,
|
|
52
|
-
FunctionMetadata,
|
|
53
|
-
ParameterSchema,
|
|
54
|
-
OutputSchema,
|
|
55
|
-
};
|
package/src/index.ts
DELETED
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* FlowQuery - A declarative query language for data processing pipelines.
|
|
3
|
-
*
|
|
4
|
-
* Main entry point for the FlowQuery command-line interface.
|
|
5
|
-
*
|
|
6
|
-
* @packageDocumentation
|
|
7
|
-
*/
|
|
8
|
-
|
|
9
|
-
import CommandLine from "./io/command_line";
|
|
10
|
-
|
|
11
|
-
const commandLine = new CommandLine();
|
|
12
|
-
commandLine.loop();
|
package/src/io/command_line.ts
DELETED
|
@@ -1,74 +0,0 @@
|
|
|
1
|
-
import Runner from '../compute/runner';
|
|
2
|
-
import * as readline from 'readline';
|
|
3
|
-
|
|
4
|
-
/**
|
|
5
|
-
* Interactive command-line interface for FlowQuery.
|
|
6
|
-
*
|
|
7
|
-
* Provides a REPL (Read-Eval-Print Loop) for executing FlowQuery statements
|
|
8
|
-
* and displaying results.
|
|
9
|
-
*
|
|
10
|
-
* @example
|
|
11
|
-
* ```typescript
|
|
12
|
-
* const cli = new CommandLine();
|
|
13
|
-
* cli.loop(); // Starts interactive mode
|
|
14
|
-
* ```
|
|
15
|
-
*/
|
|
16
|
-
class CommandLine {
|
|
17
|
-
private rl: readline.Interface;
|
|
18
|
-
|
|
19
|
-
/**
|
|
20
|
-
* Creates a new CommandLine interface.
|
|
21
|
-
*/
|
|
22
|
-
constructor() {
|
|
23
|
-
this.rl = readline.createInterface({
|
|
24
|
-
input: process.stdin,
|
|
25
|
-
output: process.stdout
|
|
26
|
-
});
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
/**
|
|
30
|
-
* Starts the interactive command loop.
|
|
31
|
-
*
|
|
32
|
-
* Prompts the user for FlowQuery statements, executes them, and displays results.
|
|
33
|
-
* Type "exit" to quit the loop.
|
|
34
|
-
*/
|
|
35
|
-
public loop() {
|
|
36
|
-
console.log('Welcome to FlowQuery! Type "exit" to quit.');
|
|
37
|
-
this.rl.setPrompt('> ');
|
|
38
|
-
this.rl.prompt();
|
|
39
|
-
|
|
40
|
-
this.rl.on('line', (input: string) => {
|
|
41
|
-
if (input === 'exit') {
|
|
42
|
-
this.rl.close();
|
|
43
|
-
return;
|
|
44
|
-
}
|
|
45
|
-
if(input.trim() === '') {
|
|
46
|
-
this.rl.prompt();
|
|
47
|
-
return;
|
|
48
|
-
}
|
|
49
|
-
try {
|
|
50
|
-
const runner = new Runner(input);
|
|
51
|
-
const promise = runner.run();
|
|
52
|
-
promise.then(
|
|
53
|
-
() => {
|
|
54
|
-
console.log(runner.results);
|
|
55
|
-
}
|
|
56
|
-
);
|
|
57
|
-
promise.catch(
|
|
58
|
-
(e) => console.error(e)
|
|
59
|
-
);
|
|
60
|
-
promise.finally(
|
|
61
|
-
() => this.rl.prompt()
|
|
62
|
-
);
|
|
63
|
-
} catch (e) {
|
|
64
|
-
console.error(e);
|
|
65
|
-
this.rl.prompt();
|
|
66
|
-
}
|
|
67
|
-
}).on('close', () => {
|
|
68
|
-
console.log('Exiting FlowQuery.');
|
|
69
|
-
process.exit(0);
|
|
70
|
-
});
|
|
71
|
-
}
|
|
72
|
-
}
|
|
73
|
-
|
|
74
|
-
export default CommandLine;
|
package/src/parsing/alias.ts
DELETED
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
import ASTNode from "./ast_node";
|
|
2
|
-
|
|
3
|
-
class Alias extends ASTNode {
|
|
4
|
-
private alias: string;
|
|
5
|
-
constructor(alias: string) {
|
|
6
|
-
super();
|
|
7
|
-
this.alias = alias;
|
|
8
|
-
}
|
|
9
|
-
|
|
10
|
-
public toString(): string {
|
|
11
|
-
return `Alias (${this.alias})`;
|
|
12
|
-
}
|
|
13
|
-
|
|
14
|
-
public getAlias(): string {
|
|
15
|
-
return this.alias;
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
public value(): string {
|
|
19
|
-
return this.alias;
|
|
20
|
-
}
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
export default Alias;
|
package/src/parsing/ast_node.ts
DELETED
|
@@ -1,153 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Represents a node in the Abstract Syntax Tree (AST).
|
|
3
|
-
*
|
|
4
|
-
* The AST is a tree representation of the parsed FlowQuery statement structure.
|
|
5
|
-
* Each node can have children and maintains a reference to its parent.
|
|
6
|
-
*
|
|
7
|
-
* @example
|
|
8
|
-
* ```typescript
|
|
9
|
-
* const root = new ASTNode();
|
|
10
|
-
* const child = new ASTNode();
|
|
11
|
-
* root.addChild(child);
|
|
12
|
-
* ```
|
|
13
|
-
*/
|
|
14
|
-
class ASTNode {
|
|
15
|
-
protected _parent: ASTNode | null = null;
|
|
16
|
-
protected children: ASTNode[] = [];
|
|
17
|
-
|
|
18
|
-
/**
|
|
19
|
-
* Adds a child node to this node and sets the child's parent reference.
|
|
20
|
-
*
|
|
21
|
-
* @param child - The child node to add
|
|
22
|
-
*/
|
|
23
|
-
public addChild(child: ASTNode): void {
|
|
24
|
-
child._parent = this;
|
|
25
|
-
this.children.push(child);
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
/**
|
|
29
|
-
* Returns the first child node.
|
|
30
|
-
*
|
|
31
|
-
* @returns The first child node
|
|
32
|
-
* @throws {Error} If the node has no children
|
|
33
|
-
*/
|
|
34
|
-
public firstChild(): ASTNode {
|
|
35
|
-
if(this.children.length === 0) {
|
|
36
|
-
throw new Error('Expected child');
|
|
37
|
-
}
|
|
38
|
-
return this.children[0];
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
/**
|
|
42
|
-
* Returns the last child node.
|
|
43
|
-
*
|
|
44
|
-
* @returns The last child node
|
|
45
|
-
* @throws {Error} If the node has no children
|
|
46
|
-
*/
|
|
47
|
-
public lastChild(): ASTNode {
|
|
48
|
-
if(this.children.length === 0) {
|
|
49
|
-
throw new Error('Expected child');
|
|
50
|
-
}
|
|
51
|
-
return this.children[this.children.length - 1];
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
/**
|
|
55
|
-
* Returns all child nodes.
|
|
56
|
-
*
|
|
57
|
-
* @returns Array of child nodes
|
|
58
|
-
*/
|
|
59
|
-
public getChildren(): ASTNode[] {
|
|
60
|
-
return this.children;
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
/**
|
|
64
|
-
* Returns the number of child nodes.
|
|
65
|
-
*
|
|
66
|
-
* @returns The count of children
|
|
67
|
-
*/
|
|
68
|
-
public childCount(): number {
|
|
69
|
-
return this.children.length;
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
/**
|
|
73
|
-
* Returns the value of this node. Override in subclasses to provide specific values.
|
|
74
|
-
*
|
|
75
|
-
* @returns The node's value, or null if not applicable
|
|
76
|
-
*/
|
|
77
|
-
public value(): any {
|
|
78
|
-
return null;
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
/**
|
|
82
|
-
* Checks if this node represents an operator.
|
|
83
|
-
*
|
|
84
|
-
* @returns True if this is an operator node, false otherwise
|
|
85
|
-
*/
|
|
86
|
-
public isOperator(): boolean {
|
|
87
|
-
return false;
|
|
88
|
-
}
|
|
89
|
-
|
|
90
|
-
/**
|
|
91
|
-
* Checks if this node represents an operand (the opposite of an operator).
|
|
92
|
-
*
|
|
93
|
-
* @returns True if this is an operand node, false otherwise
|
|
94
|
-
*/
|
|
95
|
-
public isOperand(): boolean {
|
|
96
|
-
return !this.isOperator();
|
|
97
|
-
}
|
|
98
|
-
|
|
99
|
-
/**
|
|
100
|
-
* Gets the operator precedence for this node. Higher values indicate higher precedence.
|
|
101
|
-
*
|
|
102
|
-
* @returns The precedence value (0 for non-operators)
|
|
103
|
-
*/
|
|
104
|
-
public get precedence(): number {
|
|
105
|
-
return 0;
|
|
106
|
-
}
|
|
107
|
-
|
|
108
|
-
/**
|
|
109
|
-
* Indicates whether this operator is left-associative.
|
|
110
|
-
*
|
|
111
|
-
* @returns True if left-associative, false otherwise
|
|
112
|
-
*/
|
|
113
|
-
public get leftAssociative(): boolean {
|
|
114
|
-
return false;
|
|
115
|
-
}
|
|
116
|
-
|
|
117
|
-
/**
|
|
118
|
-
* Prints a string representation of the AST tree starting from this node.
|
|
119
|
-
*
|
|
120
|
-
* @returns A formatted string showing the tree structure
|
|
121
|
-
*/
|
|
122
|
-
public print(): string {
|
|
123
|
-
return Array.from(this._print(0)).join('\n');
|
|
124
|
-
}
|
|
125
|
-
|
|
126
|
-
/**
|
|
127
|
-
* Generator function for recursively printing the tree structure.
|
|
128
|
-
*
|
|
129
|
-
* @param indent - The current indentation level
|
|
130
|
-
* @yields Lines representing each node in the tree
|
|
131
|
-
*/
|
|
132
|
-
private *_print(indent: number): Generator<string> {
|
|
133
|
-
if(indent === 0) {
|
|
134
|
-
yield this.constructor.name;
|
|
135
|
-
} else if(indent > 0) {
|
|
136
|
-
yield '-'.repeat(indent) + ` ${this.toString()}`;
|
|
137
|
-
}
|
|
138
|
-
for(const child of this.children) {
|
|
139
|
-
yield* child._print(indent + 1);
|
|
140
|
-
}
|
|
141
|
-
}
|
|
142
|
-
|
|
143
|
-
/**
|
|
144
|
-
* Returns a string representation of this node. Override in subclasses for custom formatting.
|
|
145
|
-
*
|
|
146
|
-
* @returns The string representation
|
|
147
|
-
*/
|
|
148
|
-
protected toString(): string {
|
|
149
|
-
return this.constructor.name;
|
|
150
|
-
}
|
|
151
|
-
}
|
|
152
|
-
|
|
153
|
-
export default ASTNode;
|