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,37 +0,0 @@
|
|
|
1
|
-
import AggregateFunction from "./aggregate_function";
|
|
2
|
-
import { FunctionDef } from "./function_metadata";
|
|
3
|
-
import ReducerElement from "./reducer_element";
|
|
4
|
-
|
|
5
|
-
class MinReducerElement extends ReducerElement {
|
|
6
|
-
private _value: any = null;
|
|
7
|
-
public get value(): any {
|
|
8
|
-
return this._value;
|
|
9
|
-
}
|
|
10
|
-
public set value(value: any) {
|
|
11
|
-
if (this._value === null || value < this._value) {
|
|
12
|
-
this._value = value;
|
|
13
|
-
}
|
|
14
|
-
}
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
@FunctionDef({
|
|
18
|
-
description: "Returns the minimum value across grouped rows",
|
|
19
|
-
category: "aggregate",
|
|
20
|
-
parameters: [{ name: "value", description: "Value to compare", type: "number" }],
|
|
21
|
-
output: { description: "Minimum value", type: "number", example: 1 },
|
|
22
|
-
examples: ["WITH [3, 1, 2] AS nums UNWIND nums AS n RETURN min(n)"],
|
|
23
|
-
})
|
|
24
|
-
class Min extends AggregateFunction {
|
|
25
|
-
constructor() {
|
|
26
|
-
super("min");
|
|
27
|
-
this._expectedParameterCount = 1;
|
|
28
|
-
}
|
|
29
|
-
public reduce(element: MinReducerElement): void {
|
|
30
|
-
element.value = this.firstChild().value();
|
|
31
|
-
}
|
|
32
|
-
public element(): MinReducerElement {
|
|
33
|
-
return new MinReducerElement();
|
|
34
|
-
}
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
export default Min;
|
|
@@ -1,54 +0,0 @@
|
|
|
1
|
-
import Function from "./function";
|
|
2
|
-
import { FunctionDef } from "./function_metadata";
|
|
3
|
-
|
|
4
|
-
@FunctionDef({
|
|
5
|
-
description: "Returns all nodes in a path as an array",
|
|
6
|
-
category: "scalar",
|
|
7
|
-
parameters: [
|
|
8
|
-
{
|
|
9
|
-
name: "path",
|
|
10
|
-
description: "A path value returned from a graph pattern match",
|
|
11
|
-
type: "array",
|
|
12
|
-
},
|
|
13
|
-
],
|
|
14
|
-
output: {
|
|
15
|
-
description: "Array of node records",
|
|
16
|
-
type: "array",
|
|
17
|
-
example: "[{ id: 1, name: 'Alice' }, { id: 2, name: 'Bob' }]",
|
|
18
|
-
},
|
|
19
|
-
examples: ["MATCH p=(:Person)-[:KNOWS]-(:Person) RETURN nodes(p)"],
|
|
20
|
-
})
|
|
21
|
-
class Nodes extends Function {
|
|
22
|
-
constructor() {
|
|
23
|
-
super("nodes");
|
|
24
|
-
this._expectedParameterCount = 1;
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
public value(): any {
|
|
28
|
-
const path = this.getChildren()[0].value();
|
|
29
|
-
if (path === null || path === undefined) {
|
|
30
|
-
return [];
|
|
31
|
-
}
|
|
32
|
-
if (!Array.isArray(path)) {
|
|
33
|
-
throw new Error("nodes() expects a path (array)");
|
|
34
|
-
}
|
|
35
|
-
// A path is an array of alternating node and relationship objects:
|
|
36
|
-
// [node, rel, node, rel, node, ...]
|
|
37
|
-
// Nodes are plain NodeRecords (have 'id' but not 'type'/'startNode'/'endNode')
|
|
38
|
-
// Relationships are RelationshipMatchRecords (have 'type', 'startNode', 'endNode', 'properties')
|
|
39
|
-
return path.filter((element: any) => {
|
|
40
|
-
if (element === null || element === undefined || typeof element !== "object") {
|
|
41
|
-
return false;
|
|
42
|
-
}
|
|
43
|
-
// A RelationshipMatchRecord has type, startNode, endNode, properties
|
|
44
|
-
return !(
|
|
45
|
-
"type" in element &&
|
|
46
|
-
"startNode" in element &&
|
|
47
|
-
"endNode" in element &&
|
|
48
|
-
"properties" in element
|
|
49
|
-
);
|
|
50
|
-
});
|
|
51
|
-
}
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
export default Nodes;
|
|
@@ -1,48 +0,0 @@
|
|
|
1
|
-
import ASTNode from "../ast_node";
|
|
2
|
-
import Expression from "../expressions/expression";
|
|
3
|
-
import Reference from "../expressions/reference";
|
|
4
|
-
import Where from "../operations/where";
|
|
5
|
-
import ValueHolder from "./value_holder";
|
|
6
|
-
|
|
7
|
-
class PredicateFunction extends ASTNode {
|
|
8
|
-
private _name: string;
|
|
9
|
-
protected _valueHolder: ValueHolder = new ValueHolder();
|
|
10
|
-
|
|
11
|
-
constructor(name?: string) {
|
|
12
|
-
super();
|
|
13
|
-
this._name = name || this.constructor.name;
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
public get name(): string {
|
|
17
|
-
return this._name;
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
protected get reference(): Reference {
|
|
21
|
-
return this.firstChild() as Reference;
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
protected get array(): ASTNode {
|
|
25
|
-
return this.getChildren()[1].firstChild();
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
protected get _return(): Expression {
|
|
29
|
-
return this.getChildren()[2] as Expression;
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
protected get where(): Where | null {
|
|
33
|
-
if (this.getChildren().length === 4) {
|
|
34
|
-
return this.getChildren()[3] as Where;
|
|
35
|
-
}
|
|
36
|
-
return null;
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
public value(): any {
|
|
40
|
-
throw new Error("Method not implemented.");
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
public toString(): string {
|
|
44
|
-
return `PredicateFunction (${this._name})`;
|
|
45
|
-
}
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
export default PredicateFunction;
|
|
@@ -1,47 +0,0 @@
|
|
|
1
|
-
import { FunctionDef } from "./function_metadata";
|
|
2
|
-
import PredicateFunction from "./predicate_function";
|
|
3
|
-
|
|
4
|
-
@FunctionDef({
|
|
5
|
-
description:
|
|
6
|
-
"Calculates the sum of values in an array with optional filtering. Uses list comprehension syntax: sum(variable IN array [WHERE condition] | expression)",
|
|
7
|
-
category: "predicate",
|
|
8
|
-
parameters: [
|
|
9
|
-
{ name: "variable", description: "Variable name to bind each element", type: "string" },
|
|
10
|
-
{ name: "array", description: "Array to iterate over", type: "array" },
|
|
11
|
-
{ name: "expression", description: "Expression to sum for each element", type: "any" },
|
|
12
|
-
{
|
|
13
|
-
name: "where",
|
|
14
|
-
description: "Optional filter condition",
|
|
15
|
-
type: "boolean",
|
|
16
|
-
required: false,
|
|
17
|
-
},
|
|
18
|
-
],
|
|
19
|
-
output: { description: "Sum of the evaluated expressions", type: "number", example: 6 },
|
|
20
|
-
examples: [
|
|
21
|
-
"WITH [1, 2, 3] AS nums RETURN sum(n IN nums | n)",
|
|
22
|
-
"WITH [1, 2, 3, 4] AS nums RETURN sum(n IN nums WHERE n > 1 | n * 2)",
|
|
23
|
-
],
|
|
24
|
-
})
|
|
25
|
-
class PredicateSum extends PredicateFunction {
|
|
26
|
-
constructor() {
|
|
27
|
-
super("sum");
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
public value(): any {
|
|
31
|
-
this.reference.referred = this._valueHolder;
|
|
32
|
-
const array = this.array.value();
|
|
33
|
-
if (array === null || !Array.isArray(array)) {
|
|
34
|
-
throw new Error("Invalid array for sum function");
|
|
35
|
-
}
|
|
36
|
-
let _sum: number = 0;
|
|
37
|
-
for (let i = 0; i < array.length; i++) {
|
|
38
|
-
this._valueHolder.holder = array[i];
|
|
39
|
-
if (this.where === null || this.where.value()) {
|
|
40
|
-
_sum += this._return.value();
|
|
41
|
-
}
|
|
42
|
-
}
|
|
43
|
-
return _sum;
|
|
44
|
-
}
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
export default PredicateSum;
|
|
@@ -1,56 +0,0 @@
|
|
|
1
|
-
import Function from "./function";
|
|
2
|
-
import { FunctionDef } from "./function_metadata";
|
|
3
|
-
|
|
4
|
-
@FunctionDef({
|
|
5
|
-
description:
|
|
6
|
-
"Returns a map containing all the properties of a node, relationship, or map. For nodes and relationships, internal identifiers are excluded.",
|
|
7
|
-
category: "scalar",
|
|
8
|
-
parameters: [
|
|
9
|
-
{
|
|
10
|
-
name: "entity",
|
|
11
|
-
description: "A node, relationship, or map to extract properties from",
|
|
12
|
-
type: "object",
|
|
13
|
-
},
|
|
14
|
-
],
|
|
15
|
-
output: {
|
|
16
|
-
description: "Map of properties",
|
|
17
|
-
type: "object",
|
|
18
|
-
example: "{ name: 'Alice', age: 30 }",
|
|
19
|
-
},
|
|
20
|
-
examples: [
|
|
21
|
-
"MATCH (n:Person) RETURN properties(n)",
|
|
22
|
-
"WITH { name: 'Alice', age: 30 } AS obj RETURN properties(obj)",
|
|
23
|
-
],
|
|
24
|
-
})
|
|
25
|
-
class Properties extends Function {
|
|
26
|
-
constructor() {
|
|
27
|
-
super("properties");
|
|
28
|
-
this._expectedParameterCount = 1;
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
public value(): any {
|
|
32
|
-
const obj = this.getChildren()[0].value();
|
|
33
|
-
if (obj === null || obj === undefined) {
|
|
34
|
-
return null;
|
|
35
|
-
}
|
|
36
|
-
if (typeof obj !== "object" || Array.isArray(obj)) {
|
|
37
|
-
throw new Error("properties() expects a node, relationship, or map");
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
// If it's a RelationshipMatchRecord (has type, startNode, endNode, properties)
|
|
41
|
-
if ("type" in obj && "startNode" in obj && "endNode" in obj && "properties" in obj) {
|
|
42
|
-
return obj.properties;
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
// If it's a node record (has id field), exclude id
|
|
46
|
-
if ("id" in obj) {
|
|
47
|
-
const { id, ...props } = obj;
|
|
48
|
-
return props;
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
// Otherwise, treat as a plain map and return a copy
|
|
52
|
-
return { ...obj };
|
|
53
|
-
}
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
export default Properties;
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
import Function from "./function";
|
|
2
|
-
import { FunctionDef } from "./function_metadata";
|
|
3
|
-
|
|
4
|
-
@FunctionDef({
|
|
5
|
-
description: "Generates a random number between 0 and 1",
|
|
6
|
-
category: "scalar",
|
|
7
|
-
parameters: [],
|
|
8
|
-
output: { description: "Random number between 0 and 1", type: "number", example: 0.7234 },
|
|
9
|
-
examples: ["WITH rand() AS r RETURN r"]
|
|
10
|
-
})
|
|
11
|
-
class Rand extends Function {
|
|
12
|
-
constructor() {
|
|
13
|
-
super("rand");
|
|
14
|
-
this._expectedParameterCount = 0;
|
|
15
|
-
}
|
|
16
|
-
public value(): any {
|
|
17
|
-
return Math.random();
|
|
18
|
-
}
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
export default Rand;
|
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
import Function from "./function";
|
|
2
|
-
import { FunctionDef } from "./function_metadata";
|
|
3
|
-
|
|
4
|
-
@FunctionDef({
|
|
5
|
-
description: "Generates an array of sequential integers",
|
|
6
|
-
category: "scalar",
|
|
7
|
-
parameters: [
|
|
8
|
-
{ name: "start", description: "Starting number (inclusive)", type: "number" },
|
|
9
|
-
{ name: "end", description: "Ending number (inclusive)", type: "number" },
|
|
10
|
-
],
|
|
11
|
-
output: {
|
|
12
|
-
description: "Array of integers from start to end",
|
|
13
|
-
type: "array",
|
|
14
|
-
items: { type: "number" },
|
|
15
|
-
example: [1, 2, 3, 4, 5],
|
|
16
|
-
},
|
|
17
|
-
examples: ["WITH range(1, 5) AS nums RETURN nums"],
|
|
18
|
-
})
|
|
19
|
-
class Range extends Function {
|
|
20
|
-
constructor() {
|
|
21
|
-
super("range");
|
|
22
|
-
this._expectedParameterCount = 2;
|
|
23
|
-
}
|
|
24
|
-
public value(): any {
|
|
25
|
-
const start = this.getChildren()[0].value();
|
|
26
|
-
const end = this.getChildren()[1].value();
|
|
27
|
-
if (start === null || start === undefined || end === null || end === undefined) {
|
|
28
|
-
return null;
|
|
29
|
-
}
|
|
30
|
-
if (typeof start !== "number" || typeof end !== "number") {
|
|
31
|
-
throw new Error("Invalid arguments for range function");
|
|
32
|
-
}
|
|
33
|
-
return Array.from({ length: end - start + 1 }, (_, i) => start + i);
|
|
34
|
-
}
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
export default Range;
|
|
@@ -1,52 +0,0 @@
|
|
|
1
|
-
import Function from "./function";
|
|
2
|
-
import { FunctionDef } from "./function_metadata";
|
|
3
|
-
|
|
4
|
-
@FunctionDef({
|
|
5
|
-
description: "Returns all relationships in a path as an array",
|
|
6
|
-
category: "scalar",
|
|
7
|
-
parameters: [
|
|
8
|
-
{
|
|
9
|
-
name: "path",
|
|
10
|
-
description: "A path value returned from a graph pattern match",
|
|
11
|
-
type: "array",
|
|
12
|
-
},
|
|
13
|
-
],
|
|
14
|
-
output: {
|
|
15
|
-
description: "Array of relationship records",
|
|
16
|
-
type: "array",
|
|
17
|
-
example: "[{ type: 'KNOWS', properties: { since: '2020' } }]",
|
|
18
|
-
},
|
|
19
|
-
examples: ["MATCH p=(:Person)-[:KNOWS]-(:Person) RETURN relationships(p)"],
|
|
20
|
-
})
|
|
21
|
-
class Relationships extends Function {
|
|
22
|
-
constructor() {
|
|
23
|
-
super("relationships");
|
|
24
|
-
this._expectedParameterCount = 1;
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
public value(): any {
|
|
28
|
-
const path = this.getChildren()[0].value();
|
|
29
|
-
if (path === null || path === undefined) {
|
|
30
|
-
return [];
|
|
31
|
-
}
|
|
32
|
-
if (!Array.isArray(path)) {
|
|
33
|
-
throw new Error("relationships() expects a path (array)");
|
|
34
|
-
}
|
|
35
|
-
// A path is an array of alternating node and relationship objects:
|
|
36
|
-
// [node, rel, node, rel, node, ...]
|
|
37
|
-
// Relationships are RelationshipMatchRecords (have 'type', 'startNode', 'endNode', 'properties')
|
|
38
|
-
return path.filter((element: any) => {
|
|
39
|
-
if (element === null || element === undefined || typeof element !== "object") {
|
|
40
|
-
return false;
|
|
41
|
-
}
|
|
42
|
-
return (
|
|
43
|
-
"type" in element &&
|
|
44
|
-
"startNode" in element &&
|
|
45
|
-
"endNode" in element &&
|
|
46
|
-
"properties" in element
|
|
47
|
-
);
|
|
48
|
-
});
|
|
49
|
-
}
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
export default Relationships;
|
|
@@ -1,38 +0,0 @@
|
|
|
1
|
-
import Function from "./function";
|
|
2
|
-
import { FunctionDef } from "./function_metadata";
|
|
3
|
-
|
|
4
|
-
@FunctionDef({
|
|
5
|
-
description: "Replaces occurrences of a pattern in a string",
|
|
6
|
-
category: "scalar",
|
|
7
|
-
parameters: [
|
|
8
|
-
{ name: "text", description: "Source string", type: "string" },
|
|
9
|
-
{ name: "pattern", description: "Pattern to find", type: "string" },
|
|
10
|
-
{ name: "replacement", description: "Replacement string", type: "string" },
|
|
11
|
-
],
|
|
12
|
-
output: { description: "String with replacements", type: "string", example: "hello world" },
|
|
13
|
-
examples: ["WITH 'hello there' AS s RETURN replace(s, 'there', 'world')"],
|
|
14
|
-
})
|
|
15
|
-
class Replace extends Function {
|
|
16
|
-
constructor() {
|
|
17
|
-
super("replace");
|
|
18
|
-
this._expectedParameterCount = 3;
|
|
19
|
-
}
|
|
20
|
-
public value(): any {
|
|
21
|
-
const str = this.getChildren()[0].value();
|
|
22
|
-
const search = this.getChildren()[1].value();
|
|
23
|
-
const replacement = this.getChildren()[2].value();
|
|
24
|
-
if (str === null || str === undefined) {
|
|
25
|
-
return null;
|
|
26
|
-
}
|
|
27
|
-
if (
|
|
28
|
-
typeof str !== "string" ||
|
|
29
|
-
typeof search !== "string" ||
|
|
30
|
-
typeof replacement !== "string"
|
|
31
|
-
) {
|
|
32
|
-
throw new Error("Invalid arguments for replace function");
|
|
33
|
-
}
|
|
34
|
-
return str.replace(new RegExp(search, "g"), replacement);
|
|
35
|
-
}
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
export default Replace;
|
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
import Function from "./function";
|
|
2
|
-
import { FunctionDef } from "./function_metadata";
|
|
3
|
-
|
|
4
|
-
@FunctionDef({
|
|
5
|
-
description: "Rounds a number to the nearest integer",
|
|
6
|
-
category: "scalar",
|
|
7
|
-
parameters: [{ name: "value", description: "Number to round", type: "number" }],
|
|
8
|
-
output: { description: "Rounded integer", type: "number", example: 4 },
|
|
9
|
-
examples: ["WITH 3.7 AS n RETURN round(n)"],
|
|
10
|
-
})
|
|
11
|
-
class Round extends Function {
|
|
12
|
-
constructor() {
|
|
13
|
-
super("round");
|
|
14
|
-
this._expectedParameterCount = 1;
|
|
15
|
-
}
|
|
16
|
-
public value(): any {
|
|
17
|
-
const value = this.getChildren()[0].value();
|
|
18
|
-
if (value === null || value === undefined) {
|
|
19
|
-
return null;
|
|
20
|
-
}
|
|
21
|
-
if (typeof value !== "number") {
|
|
22
|
-
throw new Error("Invalid argument for round function");
|
|
23
|
-
}
|
|
24
|
-
return Math.round(value);
|
|
25
|
-
}
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
export default Round;
|
|
@@ -1,39 +0,0 @@
|
|
|
1
|
-
import Database from "../../graph/database";
|
|
2
|
-
import AsyncFunction from "./async_function";
|
|
3
|
-
import { FunctionDef } from "./function_metadata";
|
|
4
|
-
|
|
5
|
-
/**
|
|
6
|
-
* Built-in function that returns the graph schema of the database.
|
|
7
|
-
*
|
|
8
|
-
* Lists all nodes and relationships with their labels/types, properties,
|
|
9
|
-
* and a sample of their data (excluding id from nodes, left_id and right_id from relationships).
|
|
10
|
-
*
|
|
11
|
-
* Nodes: {label, properties, sample}
|
|
12
|
-
* Relationships: {type, from_label, to_label, properties, sample}
|
|
13
|
-
*
|
|
14
|
-
* @example
|
|
15
|
-
* ```
|
|
16
|
-
* LOAD FROM schema() AS s RETURN s
|
|
17
|
-
* ```
|
|
18
|
-
*/
|
|
19
|
-
@FunctionDef({
|
|
20
|
-
description:
|
|
21
|
-
"Returns the graph schema listing all nodes and relationships with their properties and a sample of their data.",
|
|
22
|
-
category: "async",
|
|
23
|
-
parameters: [],
|
|
24
|
-
output: {
|
|
25
|
-
description: "Schema entry with label/type, properties, and optional sample data",
|
|
26
|
-
type: "object",
|
|
27
|
-
},
|
|
28
|
-
examples: ["LOAD FROM schema() AS s RETURN s"],
|
|
29
|
-
})
|
|
30
|
-
class Schema extends AsyncFunction {
|
|
31
|
-
public async *generate(): AsyncGenerator<any> {
|
|
32
|
-
const entries = await Database.getInstance().schema();
|
|
33
|
-
for (const entry of entries) {
|
|
34
|
-
yield entry;
|
|
35
|
-
}
|
|
36
|
-
}
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
export default Schema;
|
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
import Function from "./function";
|
|
2
|
-
import { FunctionDef } from "./function_metadata";
|
|
3
|
-
|
|
4
|
-
@FunctionDef({
|
|
5
|
-
description: "Returns the length of an array or string",
|
|
6
|
-
category: "scalar",
|
|
7
|
-
parameters: [{ name: "value", description: "Array or string to measure", type: "array" }],
|
|
8
|
-
output: { description: "Length of the input", type: "number", example: 3 },
|
|
9
|
-
examples: ["WITH [1, 2, 3] AS arr RETURN size(arr)"],
|
|
10
|
-
})
|
|
11
|
-
class Size extends Function {
|
|
12
|
-
constructor() {
|
|
13
|
-
super("size");
|
|
14
|
-
this._expectedParameterCount = 1;
|
|
15
|
-
}
|
|
16
|
-
public value(): any {
|
|
17
|
-
const arr = this.getChildren()[0].value();
|
|
18
|
-
if (arr === null || arr === undefined) {
|
|
19
|
-
return null;
|
|
20
|
-
}
|
|
21
|
-
if (!Array.isArray(arr)) {
|
|
22
|
-
throw new Error("Invalid argument for size function");
|
|
23
|
-
}
|
|
24
|
-
return arr.length;
|
|
25
|
-
}
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
export default Size;
|
|
@@ -1,45 +0,0 @@
|
|
|
1
|
-
import ASTNode from "../ast_node";
|
|
2
|
-
import String from "../expressions/string";
|
|
3
|
-
import Function from "./function";
|
|
4
|
-
import { FunctionDef } from "./function_metadata";
|
|
5
|
-
|
|
6
|
-
@FunctionDef({
|
|
7
|
-
description: "Splits a string into an array by a delimiter",
|
|
8
|
-
category: "scalar",
|
|
9
|
-
parameters: [
|
|
10
|
-
{ name: "text", description: "String to split", type: "string" },
|
|
11
|
-
{ name: "delimiter", description: "Delimiter to split by", type: "string" },
|
|
12
|
-
],
|
|
13
|
-
output: {
|
|
14
|
-
description: "Array of string parts",
|
|
15
|
-
type: "array",
|
|
16
|
-
items: { type: "string" },
|
|
17
|
-
example: ["a", "b", "c"],
|
|
18
|
-
},
|
|
19
|
-
examples: ["WITH 'a,b,c' AS s RETURN split(s, ',')"],
|
|
20
|
-
})
|
|
21
|
-
class Split extends Function {
|
|
22
|
-
constructor() {
|
|
23
|
-
super("split");
|
|
24
|
-
this._expectedParameterCount = 2;
|
|
25
|
-
}
|
|
26
|
-
public set parameters(nodes: ASTNode[]) {
|
|
27
|
-
if (nodes.length === 1) {
|
|
28
|
-
nodes.push(new String(""));
|
|
29
|
-
}
|
|
30
|
-
super.parameters = nodes;
|
|
31
|
-
}
|
|
32
|
-
public value(): any {
|
|
33
|
-
const str = this.getChildren()[0].value();
|
|
34
|
-
const delimiter = this.getChildren()[1].value();
|
|
35
|
-
if (str === null || str === undefined) {
|
|
36
|
-
return null;
|
|
37
|
-
}
|
|
38
|
-
if (typeof str !== "string" || typeof delimiter !== "string") {
|
|
39
|
-
throw new Error("Invalid arguments for split function");
|
|
40
|
-
}
|
|
41
|
-
return str.split(delimiter);
|
|
42
|
-
}
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
export default Split;
|
|
@@ -1,83 +0,0 @@
|
|
|
1
|
-
import Function from "./function";
|
|
2
|
-
import { FunctionDef } from "./function_metadata";
|
|
3
|
-
|
|
4
|
-
/**
|
|
5
|
-
* Computes the normalized Levenshtein distance between two strings.
|
|
6
|
-
* The Levenshtein distance is the minimum number of single-character edits
|
|
7
|
-
* (insertions, deletions, or substitutions) required to change one string into the other.
|
|
8
|
-
* The result is normalized to [0, 1] by dividing by the length of the longer string.
|
|
9
|
-
*
|
|
10
|
-
* @param a - First string
|
|
11
|
-
* @param b - Second string
|
|
12
|
-
* @returns The normalized Levenshtein distance (0 = identical, 1 = completely different)
|
|
13
|
-
*/
|
|
14
|
-
function levenshteinDistance(a: string, b: string): number {
|
|
15
|
-
const m = a.length;
|
|
16
|
-
const n = b.length;
|
|
17
|
-
|
|
18
|
-
// Both empty strings are identical
|
|
19
|
-
if (m === 0 && n === 0) return 0;
|
|
20
|
-
|
|
21
|
-
// Create a matrix of size (m+1) x (n+1)
|
|
22
|
-
const dp: number[][] = Array.from({ length: m + 1 }, () => new Array(n + 1).fill(0));
|
|
23
|
-
|
|
24
|
-
// Base cases: transforming empty string to/from a prefix
|
|
25
|
-
for (let i = 0; i <= m; i++) dp[i][0] = i;
|
|
26
|
-
for (let j = 0; j <= n; j++) dp[0][j] = j;
|
|
27
|
-
|
|
28
|
-
// Fill in the rest of the matrix
|
|
29
|
-
for (let i = 1; i <= m; i++) {
|
|
30
|
-
for (let j = 1; j <= n; j++) {
|
|
31
|
-
const cost = a[i - 1] === b[j - 1] ? 0 : 1;
|
|
32
|
-
dp[i][j] = Math.min(
|
|
33
|
-
dp[i - 1][j] + 1, // deletion
|
|
34
|
-
dp[i][j - 1] + 1, // insertion
|
|
35
|
-
dp[i - 1][j - 1] + cost // substitution
|
|
36
|
-
);
|
|
37
|
-
}
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
// Normalize by the length of the longer string
|
|
41
|
-
return dp[m][n] / Math.max(m, n);
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
@FunctionDef({
|
|
45
|
-
description:
|
|
46
|
-
"Computes the normalized Levenshtein distance between two strings. Returns a value in [0, 1] where 0 means identical and 1 means completely different.",
|
|
47
|
-
category: "scalar",
|
|
48
|
-
parameters: [
|
|
49
|
-
{ name: "string1", description: "First string", type: "string" },
|
|
50
|
-
{ name: "string2", description: "Second string", type: "string" },
|
|
51
|
-
],
|
|
52
|
-
output: {
|
|
53
|
-
description: "Normalized Levenshtein distance (0 = identical, 1 = completely different)",
|
|
54
|
-
type: "number",
|
|
55
|
-
example: 0.43,
|
|
56
|
-
},
|
|
57
|
-
examples: [
|
|
58
|
-
"RETURN string_distance('kitten', 'sitting')",
|
|
59
|
-
"WITH 'hello' AS a, 'hallo' AS b RETURN string_distance(a, b)",
|
|
60
|
-
],
|
|
61
|
-
})
|
|
62
|
-
class StringDistance extends Function {
|
|
63
|
-
constructor() {
|
|
64
|
-
super("string_distance");
|
|
65
|
-
this._expectedParameterCount = 2;
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
public value(): any {
|
|
69
|
-
const str1 = this.getChildren()[0].value();
|
|
70
|
-
const str2 = this.getChildren()[1].value();
|
|
71
|
-
if (str1 === null || str1 === undefined || str2 === null || str2 === undefined) {
|
|
72
|
-
return null;
|
|
73
|
-
}
|
|
74
|
-
if (typeof str1 !== "string" || typeof str2 !== "string") {
|
|
75
|
-
throw new Error(
|
|
76
|
-
"Invalid arguments for string_distance function: both arguments must be strings"
|
|
77
|
-
);
|
|
78
|
-
}
|
|
79
|
-
return levenshteinDistance(str1, str2);
|
|
80
|
-
}
|
|
81
|
-
}
|
|
82
|
-
|
|
83
|
-
export default StringDistance;
|
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
import ASTNode from "../ast_node";
|
|
2
|
-
import Number from "../expressions/number";
|
|
3
|
-
import Function from "./function";
|
|
4
|
-
import { FunctionDef } from "./function_metadata";
|
|
5
|
-
|
|
6
|
-
@FunctionDef({
|
|
7
|
-
description: "Converts a value to its JSON string representation",
|
|
8
|
-
category: "scalar",
|
|
9
|
-
parameters: [{ name: "value", description: "Value to stringify", type: "any" }],
|
|
10
|
-
output: { description: "JSON string", type: "string", example: '{"a":1}' },
|
|
11
|
-
examples: ["WITH {a: 1} AS obj RETURN stringify(obj)"],
|
|
12
|
-
})
|
|
13
|
-
class Stringify extends Function {
|
|
14
|
-
constructor() {
|
|
15
|
-
super("stringify");
|
|
16
|
-
this._expectedParameterCount = 2;
|
|
17
|
-
}
|
|
18
|
-
public set parameters(nodes: ASTNode[]) {
|
|
19
|
-
if (nodes.length === 1) {
|
|
20
|
-
nodes.push(new Number("3")); // Default to 3 if only one parameter is provided
|
|
21
|
-
}
|
|
22
|
-
super.parameters = nodes;
|
|
23
|
-
}
|
|
24
|
-
public value(): any {
|
|
25
|
-
const value = this.getChildren()[0].value();
|
|
26
|
-
const indent = parseInt(this.getChildren()[1].value());
|
|
27
|
-
if (value === null || value === undefined) {
|
|
28
|
-
return null;
|
|
29
|
-
}
|
|
30
|
-
if (typeof value !== "object") {
|
|
31
|
-
throw new Error("Invalid argument for stringify function");
|
|
32
|
-
}
|
|
33
|
-
return JSON.stringify(value, null, indent);
|
|
34
|
-
}
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
export default Stringify;
|