flowquery 1.0.46 → 1.0.47
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/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/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,75 +0,0 @@
|
|
|
1
|
-
/*
|
|
2
|
-
This query demonstrates how to use the OpenAI API in FlowQuery to analyze cat facts.
|
|
3
|
-
|
|
4
|
-
To run this query, you need to create a .env file in the same folder as this query within your VSCode project.
|
|
5
|
-
Create two variables in the .env file:
|
|
6
|
-
OPENAI_API_KEY='YOUR_OPENAI_API_KEY'
|
|
7
|
-
OPENAI_ORGANIZATION_ID='YOUR_OPENAI_ORGANIZATION_ID'
|
|
8
|
-
|
|
9
|
-
This FlowQuery script implements a chain-of-thoughts LLM pipeline which does the following steps:
|
|
10
|
-
1. Fetches 10 cat facts from the Cat Facts API and collects them into a list.
|
|
11
|
-
2. Creates a prompt to analyze the cat facts.
|
|
12
|
-
3. Calls the OpenAI API with the prompt to get an analysis of the cat facts.
|
|
13
|
-
4. Creates a second prompt to extract topics from the analysis.
|
|
14
|
-
5. Calls the OpenAI API with the second prompt to get a list of topics.
|
|
15
|
-
6. Returns the cat facts, the analysis, and the topics.
|
|
16
|
-
*/
|
|
17
|
-
|
|
18
|
-
// Setup OpenAI API key and organization ID (read from .env file in same directory as this query file)
|
|
19
|
-
with
|
|
20
|
-
'$OPENAI_API_KEY' as OPENAI_API_KEY,
|
|
21
|
-
'$OPENAI_ORGANIZATION_ID' as OPENAI_ORGANIZATION_ID
|
|
22
|
-
|
|
23
|
-
// 1. Get 10 cat facts and collect them into a list
|
|
24
|
-
unwind range(0,10) as i
|
|
25
|
-
load json from "https://catfact.ninja/fact" as item
|
|
26
|
-
with collect(item.fact) as catfacts
|
|
27
|
-
|
|
28
|
-
// 2. Create prompt to analyze cat facts
|
|
29
|
-
with f"
|
|
30
|
-
Analyze the following cat facts and answer with a short (1-3 sentences max) summary of the most interesting facts, and what they imply about cats as pets:
|
|
31
|
-
{stringify(catfacts)}
|
|
32
|
-
" as catfacts_analysis_prompt
|
|
33
|
-
|
|
34
|
-
// 3. Call OpenAI API to analyze cat facts
|
|
35
|
-
load json from 'https://api.openai.com/v1/chat/completions'
|
|
36
|
-
headers {
|
|
37
|
-
`Content-Type`: 'application/json',
|
|
38
|
-
Authorization: f'Bearer {OPENAI_API_KEY}',
|
|
39
|
-
`OpenAI-Organization`: OPENAI_ORGANIZATION_ID
|
|
40
|
-
}
|
|
41
|
-
post {
|
|
42
|
-
model: 'gpt-4o-mini',
|
|
43
|
-
messages: [{role: 'user', content: catfacts_analysis_prompt}],
|
|
44
|
-
temperature: 0.7
|
|
45
|
-
} as openai_response
|
|
46
|
-
with openai_response.choices[0].message.content as catfacts_analysis
|
|
47
|
-
|
|
48
|
-
// 4. Create a second prompt to extract topics from the analysis
|
|
49
|
-
with f"
|
|
50
|
-
Extract the main topics from the following analysis of cat facts, only single-word topics. Return the topics as a comma-separated list.
|
|
51
|
-
Analysis:
|
|
52
|
-
{catfacts_analysis}
|
|
53
|
-
" as catfacts_topics_prompt
|
|
54
|
-
|
|
55
|
-
// 5. Call OpenAI API to extract topics
|
|
56
|
-
load json from 'https://api.openai.com/v1/chat/completions'
|
|
57
|
-
headers {
|
|
58
|
-
`Content-Type`: 'application/json',
|
|
59
|
-
Authorization: f'Bearer {OPENAI_API_KEY}',
|
|
60
|
-
`OpenAI-Organization`: OPENAI_ORGANIZATION_ID
|
|
61
|
-
}
|
|
62
|
-
post {
|
|
63
|
-
model: 'gpt-4o-mini',
|
|
64
|
-
messages: [{role: 'user', content: catfacts_topics_prompt}],
|
|
65
|
-
temperature: 0.7
|
|
66
|
-
} as openai_topics_response
|
|
67
|
-
with openai_topics_response.choices[0].message.content as catfacts_topics
|
|
68
|
-
|
|
69
|
-
// 6. Return the analysis
|
|
70
|
-
return
|
|
71
|
-
catfacts as `Cat Facts from API`,
|
|
72
|
-
catfacts_analysis_prompt as `Cat Facts Analysis Prompt`,
|
|
73
|
-
catfacts_analysis as `Cat Facts Analysis by gpt-4o-mini`,
|
|
74
|
-
catfacts_topics_prompt as `Cat Facts Topics Prompt`,
|
|
75
|
-
catfacts_topics as `Cat Facts Topics by gpt-4o-mini`
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
// Test completion from Azure OpenAI API
|
|
2
|
-
with
|
|
3
|
-
'$AZURE_OPENAI_API_KEY' as AZURE_OPENAI_API_KEY
|
|
4
|
-
load json from '$AZURE_OPENAI_ENDPOINT'
|
|
5
|
-
headers {
|
|
6
|
-
`Content-Type`: 'application/json',
|
|
7
|
-
`api-key`: AZURE_OPENAI_API_KEY,
|
|
8
|
-
}
|
|
9
|
-
post {
|
|
10
|
-
messages: [{role: 'user', content: 'Answer with this is a test!'}],
|
|
11
|
-
temperature: 0.7
|
|
12
|
-
} as data
|
|
13
|
-
return data
|
|
@@ -1,84 +0,0 @@
|
|
|
1
|
-
unwind [
|
|
2
|
-
{
|
|
3
|
-
situation_recap: "Once upon a time, there was a conversation. It was a good conversation. There were many objectives in the conversation.",
|
|
4
|
-
objectives: ["Objective 1", "Objective 2"],
|
|
5
|
-
feedbacks: [
|
|
6
|
-
{
|
|
7
|
-
feedbackType: "compliment",
|
|
8
|
-
reasoning: "You conversed well",
|
|
9
|
-
title: "Good job"
|
|
10
|
-
},
|
|
11
|
-
{
|
|
12
|
-
feedbackType: "suggestion",
|
|
13
|
-
reasoning: "Don't forget to remember",
|
|
14
|
-
title: "Don't forget"
|
|
15
|
-
}
|
|
16
|
-
],
|
|
17
|
-
contacts: [
|
|
18
|
-
{email: "bob@mail.com", displayName: "Bob"},
|
|
19
|
-
{email: "jane@mail.com", displayName: "Jane"}
|
|
20
|
-
],
|
|
21
|
-
dimension: "Coaching",
|
|
22
|
-
supporting_messages: [
|
|
23
|
-
{
|
|
24
|
-
text: "This is a supporting message",
|
|
25
|
-
sender: {
|
|
26
|
-
email: "bob@mail.com",
|
|
27
|
-
displayName: "Bob"
|
|
28
|
-
}
|
|
29
|
-
},
|
|
30
|
-
{
|
|
31
|
-
text: "This is another supporting message",
|
|
32
|
-
sender: {
|
|
33
|
-
email: "jane@mail.com",
|
|
34
|
-
displayName: "Jane"
|
|
35
|
-
}
|
|
36
|
-
}
|
|
37
|
-
]
|
|
38
|
-
},
|
|
39
|
-
{
|
|
40
|
-
situation_recap: "The conversation was about a topic. The objectives were clear. The feedbacks were insightful.",
|
|
41
|
-
objectives: ["Objective 3", "Objective 4"],
|
|
42
|
-
feedbacks: [
|
|
43
|
-
{
|
|
44
|
-
feedbackType: "compliment",
|
|
45
|
-
reasoning: "Very funny conversation",
|
|
46
|
-
title: "Good job"
|
|
47
|
-
},
|
|
48
|
-
{
|
|
49
|
-
feedbackType: "suggestion",
|
|
50
|
-
reasoning: "Remember to not forget",
|
|
51
|
-
title: "Remember"
|
|
52
|
-
}
|
|
53
|
-
],
|
|
54
|
-
contacts: [
|
|
55
|
-
{email: "robot@mail.com", displayName: "Robot"},
|
|
56
|
-
{email: "r2d2@mail.com", displayName: "R2D2"}
|
|
57
|
-
],
|
|
58
|
-
dimension: "Coaching",
|
|
59
|
-
supporting_messages: [
|
|
60
|
-
{
|
|
61
|
-
text: "This is a robot supporting message",
|
|
62
|
-
sender: {
|
|
63
|
-
email: "robot@mail.com",
|
|
64
|
-
displayName: "Robot"
|
|
65
|
-
}
|
|
66
|
-
},
|
|
67
|
-
{
|
|
68
|
-
text: "This is a R2D2 supporting message",
|
|
69
|
-
sender: {
|
|
70
|
-
email: "r2d2@mail.com",
|
|
71
|
-
displayName: "R2D2"
|
|
72
|
-
}
|
|
73
|
-
}
|
|
74
|
-
]
|
|
75
|
-
}
|
|
76
|
-
] as coach_note
|
|
77
|
-
return
|
|
78
|
-
coach_note.situation_recap as situation_recap,
|
|
79
|
-
coach_note.objectives as objectives,
|
|
80
|
-
coach_note.feedbacks as feedbacks,
|
|
81
|
-
coach_note.contacts as contacts,
|
|
82
|
-
coach_note.dimension as dimension,
|
|
83
|
-
'AGGREGATE_COACH_NOTE' as type,
|
|
84
|
-
coach_note.supporting_messages as supporting_messages
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
// Test completion from OpenAI API
|
|
2
|
-
with
|
|
3
|
-
'$OPENAI_API_KEY' as OPENAI_API_KEY
|
|
4
|
-
load json from 'https://api.openai.com/v1/chat/completions'
|
|
5
|
-
headers {
|
|
6
|
-
`Content-Type`: 'application/json',
|
|
7
|
-
Authorization: f'Bearer {OPENAI_API_KEY}',
|
|
8
|
-
`OpenAI-Organization`: '$OPENAI_ORGANIZATION_ID' // Must be set to the organization ID
|
|
9
|
-
}
|
|
10
|
-
post {
|
|
11
|
-
model: 'gpt-4o-mini',
|
|
12
|
-
messages: [{role: 'user', content: 'Answer with this is a test!'}],
|
|
13
|
-
temperature: 0.7
|
|
14
|
-
} as data
|
|
15
|
-
return data
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
// Return models from OpenAI API
|
|
2
|
-
with
|
|
3
|
-
'$OPENAI_API_KEY' as OPENAI_API_KEY
|
|
4
|
-
load json from 'https://api.openai.com/v1/models'
|
|
5
|
-
headers {
|
|
6
|
-
Authorization: f'Bearer {OPENAI_API_KEY}'
|
|
7
|
-
} as l
|
|
8
|
-
unwind l.data as model
|
|
9
|
-
return
|
|
10
|
-
model.id as `Model ID`,
|
|
11
|
-
model.object as `Object Type`,
|
|
12
|
-
model.created as `Created Timestamp`,
|
|
13
|
-
model.owned_by as `Owned By`
|
package/misc/queries/test.cql
DELETED
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
with
|
|
2
|
-
'$OPENAI_API_KEY' as OPENAI_API_KEY,
|
|
3
|
-
'$OPENAI_ORGANIZATION_ID' as OPENAI_ORG_ID
|
|
4
|
-
unwind ["Where is my document?", "Who is Niclas?", "Who is my manager?"] as query
|
|
5
|
-
with f`
|
|
6
|
-
If query is people-related, then output:
|
|
7
|
-
people_search('query')
|
|
8
|
-
Otherwise, output:
|
|
9
|
-
search('query')
|
|
10
|
-
|
|
11
|
-
Here is the query: "{query}"
|
|
12
|
-
` as instruction
|
|
13
|
-
load json from 'https://api.openai.com/v1/chat/completions'
|
|
14
|
-
headers {
|
|
15
|
-
`Content-Type`: 'application/json',
|
|
16
|
-
Authorization: f'Bearer {OPENAI_API_KEY}',
|
|
17
|
-
`OpenAI-Organization`: OPENAI_ORG_ID
|
|
18
|
-
}
|
|
19
|
-
post {
|
|
20
|
-
model: 'gpt-4o-mini',
|
|
21
|
-
messages: [{role: 'user', content: instruction}],
|
|
22
|
-
temperature: 0.7
|
|
23
|
-
} as data
|
|
24
|
-
return query, data.choices[0].message.content as tool
|
package/misc/queries/wisdom.cql
DELETED
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
/*
|
|
2
|
-
Collect 10 random pieces of wisdom and create a letter histogram.
|
|
3
|
-
*/
|
|
4
|
-
unwind range(0,10) as i
|
|
5
|
-
load json from "https://api.adviceslip.com/advice" as item
|
|
6
|
-
with join(collect(item.slip.advice),"") as wisdom
|
|
7
|
-
unwind split(wisdom,"") as letter
|
|
8
|
-
return letter, sum(1) as lettercount
|
package/src/compute/flowquery.ts
DELETED
|
@@ -1,46 +0,0 @@
|
|
|
1
|
-
import Function from "../parsing/functions/function";
|
|
2
|
-
import { FunctionMetadata } from "../parsing/functions/function_metadata";
|
|
3
|
-
import Runner from "./runner";
|
|
4
|
-
|
|
5
|
-
/**
|
|
6
|
-
* FlowQuery is the public API surface for the FlowQuery library.
|
|
7
|
-
*
|
|
8
|
-
* It extends {@link Runner} with extensibility features such as function
|
|
9
|
-
* listing and plugin registration, keeping the Runner focused on execution.
|
|
10
|
-
*
|
|
11
|
-
* The static members are assigned dynamically in
|
|
12
|
-
* {@link ../index.browser.ts | index.browser.ts} and
|
|
13
|
-
* {@link ../index.node.ts | index.node.ts}.
|
|
14
|
-
*
|
|
15
|
-
* @example
|
|
16
|
-
* ```typescript
|
|
17
|
-
* const fq = new FlowQuery("WITH 1 as x RETURN x");
|
|
18
|
-
* await fq.run();
|
|
19
|
-
* console.log(fq.results); // [{ x: 1 }]
|
|
20
|
-
*
|
|
21
|
-
* // List all registered functions
|
|
22
|
-
* const functions = FlowQuery.listFunctions();
|
|
23
|
-
* ```
|
|
24
|
-
*/
|
|
25
|
-
class FlowQuery extends Runner {
|
|
26
|
-
/**
|
|
27
|
-
* List all registered functions with their metadata.
|
|
28
|
-
*/
|
|
29
|
-
static listFunctions: (options?: {
|
|
30
|
-
category?: string;
|
|
31
|
-
asyncOnly?: boolean;
|
|
32
|
-
syncOnly?: boolean;
|
|
33
|
-
}) => FunctionMetadata[];
|
|
34
|
-
|
|
35
|
-
/**
|
|
36
|
-
* Get metadata for a specific function.
|
|
37
|
-
*/
|
|
38
|
-
static getFunctionMetadata: (name: string) => FunctionMetadata | undefined;
|
|
39
|
-
|
|
40
|
-
/**
|
|
41
|
-
* Base Function class for creating custom plugin functions.
|
|
42
|
-
*/
|
|
43
|
-
static Function: typeof Function;
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
export default FlowQuery;
|
package/src/compute/runner.ts
DELETED
|
@@ -1,66 +0,0 @@
|
|
|
1
|
-
import ASTNode from "../parsing/ast_node";
|
|
2
|
-
import Operation from "../parsing/operations/operation";
|
|
3
|
-
import Parser from "../parsing/parser";
|
|
4
|
-
|
|
5
|
-
/**
|
|
6
|
-
* Executes a FlowQuery statement and retrieves the results.
|
|
7
|
-
*
|
|
8
|
-
* The Runner class parses a FlowQuery statement into an AST and executes it,
|
|
9
|
-
* managing the execution flow from the first operation to the final return statement.
|
|
10
|
-
*
|
|
11
|
-
* @example
|
|
12
|
-
* ```typescript
|
|
13
|
-
* const runner = new Runner("WITH 1 as x RETURN x");
|
|
14
|
-
* await runner.run();
|
|
15
|
-
* console.log(runner.results); // [{ x: 1 }]
|
|
16
|
-
* ```
|
|
17
|
-
*/
|
|
18
|
-
class Runner {
|
|
19
|
-
private first: Operation;
|
|
20
|
-
private last: Operation;
|
|
21
|
-
|
|
22
|
-
/**
|
|
23
|
-
* Creates a new Runner instance and parses the FlowQuery statement.
|
|
24
|
-
*
|
|
25
|
-
* @param statement - The FlowQuery statement to execute
|
|
26
|
-
* @throws {Error} If the statement is null, empty, or contains syntax errors
|
|
27
|
-
*/
|
|
28
|
-
constructor(statement: string | null = null, ast: ASTNode | null = null) {
|
|
29
|
-
if ((statement === null || statement === "") && ast === null) {
|
|
30
|
-
throw new Error("Either statement or AST must be provided");
|
|
31
|
-
}
|
|
32
|
-
const _ast = ast !== null ? ast : new Parser().parse(statement!);
|
|
33
|
-
this.first = _ast.firstChild() as Operation;
|
|
34
|
-
this.last = _ast.lastChild() as Operation;
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
/**
|
|
38
|
-
* Executes the parsed FlowQuery statement.
|
|
39
|
-
*
|
|
40
|
-
* @returns A promise that resolves when execution completes
|
|
41
|
-
* @throws {Error} If an error occurs during execution
|
|
42
|
-
*/
|
|
43
|
-
public async run(): Promise<void> {
|
|
44
|
-
return new Promise<void>(async (resolve, reject) => {
|
|
45
|
-
try {
|
|
46
|
-
await this.first.initialize();
|
|
47
|
-
await this.first.run();
|
|
48
|
-
await this.first.finish();
|
|
49
|
-
resolve();
|
|
50
|
-
} catch (e) {
|
|
51
|
-
reject(e);
|
|
52
|
-
}
|
|
53
|
-
});
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
/**
|
|
57
|
-
* Gets the results from the executed statement.
|
|
58
|
-
*
|
|
59
|
-
* @returns The results from the last operation (typically a RETURN statement)
|
|
60
|
-
*/
|
|
61
|
-
public get results(): any {
|
|
62
|
-
return this.last.results;
|
|
63
|
-
}
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
export default Runner;
|
package/src/extensibility.ts
DELETED
|
@@ -1,45 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* FlowQuery Extensibility API
|
|
3
|
-
*
|
|
4
|
-
* This module provides all the exports needed to create custom FlowQuery functions.
|
|
5
|
-
*
|
|
6
|
-
* @packageDocumentation
|
|
7
|
-
*
|
|
8
|
-
* @example
|
|
9
|
-
* ```typescript
|
|
10
|
-
* import { Function, FunctionDef } from 'flowquery/extensibility';
|
|
11
|
-
*
|
|
12
|
-
* @FunctionDef({
|
|
13
|
-
* description: "Converts a string to uppercase",
|
|
14
|
-
* category: "string",
|
|
15
|
-
* parameters: [{ name: "text", description: "String to convert", type: "string" }],
|
|
16
|
-
* output: { description: "Uppercase string", type: "string" }
|
|
17
|
-
* })
|
|
18
|
-
* class UpperCase extends Function {
|
|
19
|
-
* constructor() {
|
|
20
|
-
* super("uppercase");
|
|
21
|
-
* this._expectedParameterCount = 1;
|
|
22
|
-
* }
|
|
23
|
-
* public value(): string {
|
|
24
|
-
* return String(this.getChildren()[0].value()).toUpperCase();
|
|
25
|
-
* }
|
|
26
|
-
* }
|
|
27
|
-
* ```
|
|
28
|
-
*/
|
|
29
|
-
|
|
30
|
-
// Base function classes for creating custom functions
|
|
31
|
-
export { default as Function } from "./parsing/functions/function";
|
|
32
|
-
export { default as AggregateFunction } from "./parsing/functions/aggregate_function";
|
|
33
|
-
export { default as AsyncFunction } from "./parsing/functions/async_function";
|
|
34
|
-
export { default as PredicateFunction } from "./parsing/functions/predicate_function";
|
|
35
|
-
export { default as ReducerElement } from "./parsing/functions/reducer_element";
|
|
36
|
-
|
|
37
|
-
// Decorator and metadata types for function registration
|
|
38
|
-
export {
|
|
39
|
-
FunctionDef,
|
|
40
|
-
FunctionMetadata,
|
|
41
|
-
FunctionDefOptions,
|
|
42
|
-
ParameterSchema,
|
|
43
|
-
OutputSchema,
|
|
44
|
-
FunctionCategory
|
|
45
|
-
} from "./parsing/functions/function_metadata";
|
package/src/graph/data.ts
DELETED
|
@@ -1,130 +0,0 @@
|
|
|
1
|
-
class IndexEntry {
|
|
2
|
-
private _positions: number[];
|
|
3
|
-
private _index: number = -1;
|
|
4
|
-
|
|
5
|
-
constructor(positions: number[] = []) {
|
|
6
|
-
this._positions = positions;
|
|
7
|
-
}
|
|
8
|
-
public add(position: number): void {
|
|
9
|
-
this._positions.push(position);
|
|
10
|
-
}
|
|
11
|
-
public get position(): number {
|
|
12
|
-
return this._positions[this._index];
|
|
13
|
-
}
|
|
14
|
-
public reset(): void {
|
|
15
|
-
this._index = -1;
|
|
16
|
-
}
|
|
17
|
-
public next(): boolean {
|
|
18
|
-
if (this._index < this._positions.length - 1) {
|
|
19
|
-
this._index++;
|
|
20
|
-
return true;
|
|
21
|
-
}
|
|
22
|
-
return false;
|
|
23
|
-
}
|
|
24
|
-
public clone(): IndexEntry {
|
|
25
|
-
return new IndexEntry([...this._positions]);
|
|
26
|
-
}
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
class Layer {
|
|
30
|
-
private _indexes: Map<string, Map<string, IndexEntry>> = new Map();
|
|
31
|
-
private _current: number = -1;
|
|
32
|
-
constructor(indexes: Map<string, Map<string, IndexEntry>>) {
|
|
33
|
-
this._indexes = indexes;
|
|
34
|
-
}
|
|
35
|
-
public index(name: string): Map<string, IndexEntry> {
|
|
36
|
-
if (!this._indexes.has(name)) {
|
|
37
|
-
this._indexes.set(name, new Map());
|
|
38
|
-
}
|
|
39
|
-
return this._indexes.get(name)!;
|
|
40
|
-
}
|
|
41
|
-
public get indexes(): Map<string, Map<string, IndexEntry>> {
|
|
42
|
-
return this._indexes;
|
|
43
|
-
}
|
|
44
|
-
public get current(): number {
|
|
45
|
-
return this._current;
|
|
46
|
-
}
|
|
47
|
-
public set current(value: number) {
|
|
48
|
-
this._current = value;
|
|
49
|
-
}
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
class Data {
|
|
53
|
-
protected _records: Record<string, any>[] = [];
|
|
54
|
-
private _layers: Map<number, Layer> = new Map();
|
|
55
|
-
|
|
56
|
-
constructor(records: Record<string, any>[] = []) {
|
|
57
|
-
this._records = records;
|
|
58
|
-
this._layers.set(0, new Layer(new Map()));
|
|
59
|
-
}
|
|
60
|
-
protected _buildIndex(key: string, level: number = 0): void {
|
|
61
|
-
const idx = this.layer(level).index(key);
|
|
62
|
-
idx.clear();
|
|
63
|
-
this._records.forEach((record, i) => {
|
|
64
|
-
if (record.hasOwnProperty(key)) {
|
|
65
|
-
if (!idx.has(record[key])) {
|
|
66
|
-
idx.set(record[key], new IndexEntry());
|
|
67
|
-
}
|
|
68
|
-
idx.get(record[key])!.add(i);
|
|
69
|
-
}
|
|
70
|
-
});
|
|
71
|
-
}
|
|
72
|
-
public layer(level: number = 0): Layer {
|
|
73
|
-
if (!this._layers.has(level)) {
|
|
74
|
-
const first = this._layers.get(0)!;
|
|
75
|
-
const clonedIndexes = new Map<string, Map<string, IndexEntry>>();
|
|
76
|
-
for (const [name, indexMap] of first.indexes) {
|
|
77
|
-
const clonedMap = new Map<string, IndexEntry>();
|
|
78
|
-
for (const [key, entry] of indexMap) {
|
|
79
|
-
clonedMap.set(key, entry.clone());
|
|
80
|
-
}
|
|
81
|
-
clonedIndexes.set(name, clonedMap);
|
|
82
|
-
}
|
|
83
|
-
this._layers.set(level, new Layer(clonedIndexes));
|
|
84
|
-
}
|
|
85
|
-
return this._layers.get(level)!;
|
|
86
|
-
}
|
|
87
|
-
protected _find(key: string, level: number = 0, indexName?: string): boolean {
|
|
88
|
-
const idx = indexName
|
|
89
|
-
? this.layer(level).index(indexName)
|
|
90
|
-
: this.layer(level).indexes.values().next().value;
|
|
91
|
-
if (!idx || !idx.has(key)) {
|
|
92
|
-
this.layer(level).current = this._records.length; // Move to end
|
|
93
|
-
return false;
|
|
94
|
-
} else {
|
|
95
|
-
const entry = idx.get(key)!;
|
|
96
|
-
const more = entry.next();
|
|
97
|
-
if (!more) {
|
|
98
|
-
this.layer(level).current = this._records.length; // Move to end
|
|
99
|
-
return false;
|
|
100
|
-
}
|
|
101
|
-
this.layer(level).current = entry.position;
|
|
102
|
-
return true;
|
|
103
|
-
}
|
|
104
|
-
}
|
|
105
|
-
public reset(): void {
|
|
106
|
-
for (const layer of this._layers.values()) {
|
|
107
|
-
layer.current = -1;
|
|
108
|
-
for (const indexMap of layer.indexes.values()) {
|
|
109
|
-
for (const entry of indexMap.values()) {
|
|
110
|
-
entry.reset();
|
|
111
|
-
}
|
|
112
|
-
}
|
|
113
|
-
}
|
|
114
|
-
}
|
|
115
|
-
public next(level: number = 0): boolean {
|
|
116
|
-
if (this.layer(level).current < this._records.length - 1) {
|
|
117
|
-
this.layer(level).current++;
|
|
118
|
-
return true;
|
|
119
|
-
}
|
|
120
|
-
return false;
|
|
121
|
-
}
|
|
122
|
-
public current(level: number = 0): Record<string, any> | null {
|
|
123
|
-
if (this.layer(level).current < this._records.length) {
|
|
124
|
-
return this._records[this.layer(level).current];
|
|
125
|
-
}
|
|
126
|
-
return null;
|
|
127
|
-
}
|
|
128
|
-
}
|
|
129
|
-
|
|
130
|
-
export default Data;
|