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.
Files changed (422) hide show
  1. package/dist/flowquery.min.js +1 -1
  2. package/dist/index.d.ts +0 -7
  3. package/dist/index.d.ts.map +1 -1
  4. package/dist/index.js +6 -4
  5. package/dist/index.js.map +1 -1
  6. package/dist/parsing/data_structures/list_comprehension.d.ts +56 -0
  7. package/dist/parsing/data_structures/list_comprehension.d.ts.map +1 -0
  8. package/dist/parsing/data_structures/list_comprehension.js +102 -0
  9. package/dist/parsing/data_structures/list_comprehension.js.map +1 -0
  10. package/dist/parsing/parser.d.ts +18 -0
  11. package/dist/parsing/parser.d.ts.map +1 -1
  12. package/dist/parsing/parser.js +92 -0
  13. package/dist/parsing/parser.js.map +1 -1
  14. package/package.json +4 -1
  15. package/.editorconfig +0 -21
  16. package/.gitattributes +0 -3
  17. package/.github/workflows/npm-publish.yml +0 -32
  18. package/.github/workflows/python-publish.yml +0 -143
  19. package/.github/workflows/release.yml +0 -107
  20. package/.husky/pre-commit +0 -28
  21. package/.prettierrc +0 -22
  22. package/CODE_OF_CONDUCT.md +0 -10
  23. package/FlowQueryLogoIcon.png +0 -0
  24. package/SECURITY.md +0 -14
  25. package/SUPPORT.md +0 -13
  26. package/docs/flowquery.min.js +0 -1
  27. package/docs/index.html +0 -105
  28. package/flowquery-py/CONTRIBUTING.md +0 -127
  29. package/flowquery-py/README.md +0 -67
  30. package/flowquery-py/misc/data/test.json +0 -10
  31. package/flowquery-py/misc/data/users.json +0 -242
  32. package/flowquery-py/notebooks/TestFlowQuery.ipynb +0 -440
  33. package/flowquery-py/pyproject.toml +0 -121
  34. package/flowquery-py/setup_env.ps1 +0 -92
  35. package/flowquery-py/setup_env.sh +0 -87
  36. package/flowquery-py/src/__init__.py +0 -38
  37. package/flowquery-py/src/__main__.py +0 -10
  38. package/flowquery-py/src/compute/__init__.py +0 -6
  39. package/flowquery-py/src/compute/flowquery.py +0 -68
  40. package/flowquery-py/src/compute/runner.py +0 -64
  41. package/flowquery-py/src/extensibility.py +0 -52
  42. package/flowquery-py/src/graph/__init__.py +0 -31
  43. package/flowquery-py/src/graph/data.py +0 -136
  44. package/flowquery-py/src/graph/database.py +0 -141
  45. package/flowquery-py/src/graph/hops.py +0 -43
  46. package/flowquery-py/src/graph/node.py +0 -143
  47. package/flowquery-py/src/graph/node_data.py +0 -26
  48. package/flowquery-py/src/graph/node_reference.py +0 -50
  49. package/flowquery-py/src/graph/pattern.py +0 -115
  50. package/flowquery-py/src/graph/pattern_expression.py +0 -67
  51. package/flowquery-py/src/graph/patterns.py +0 -42
  52. package/flowquery-py/src/graph/physical_node.py +0 -41
  53. package/flowquery-py/src/graph/physical_relationship.py +0 -36
  54. package/flowquery-py/src/graph/relationship.py +0 -193
  55. package/flowquery-py/src/graph/relationship_data.py +0 -36
  56. package/flowquery-py/src/graph/relationship_match_collector.py +0 -85
  57. package/flowquery-py/src/graph/relationship_reference.py +0 -21
  58. package/flowquery-py/src/io/__init__.py +0 -5
  59. package/flowquery-py/src/io/command_line.py +0 -108
  60. package/flowquery-py/src/parsing/__init__.py +0 -17
  61. package/flowquery-py/src/parsing/alias.py +0 -20
  62. package/flowquery-py/src/parsing/alias_option.py +0 -11
  63. package/flowquery-py/src/parsing/ast_node.py +0 -147
  64. package/flowquery-py/src/parsing/base_parser.py +0 -84
  65. package/flowquery-py/src/parsing/components/__init__.py +0 -19
  66. package/flowquery-py/src/parsing/components/csv.py +0 -8
  67. package/flowquery-py/src/parsing/components/from_.py +0 -12
  68. package/flowquery-py/src/parsing/components/headers.py +0 -12
  69. package/flowquery-py/src/parsing/components/json.py +0 -8
  70. package/flowquery-py/src/parsing/components/null.py +0 -10
  71. package/flowquery-py/src/parsing/components/post.py +0 -8
  72. package/flowquery-py/src/parsing/components/text.py +0 -8
  73. package/flowquery-py/src/parsing/context.py +0 -50
  74. package/flowquery-py/src/parsing/data_structures/__init__.py +0 -15
  75. package/flowquery-py/src/parsing/data_structures/associative_array.py +0 -41
  76. package/flowquery-py/src/parsing/data_structures/json_array.py +0 -30
  77. package/flowquery-py/src/parsing/data_structures/key_value_pair.py +0 -38
  78. package/flowquery-py/src/parsing/data_structures/lookup.py +0 -51
  79. package/flowquery-py/src/parsing/data_structures/range_lookup.py +0 -42
  80. package/flowquery-py/src/parsing/expressions/__init__.py +0 -61
  81. package/flowquery-py/src/parsing/expressions/boolean.py +0 -20
  82. package/flowquery-py/src/parsing/expressions/expression.py +0 -141
  83. package/flowquery-py/src/parsing/expressions/expression_map.py +0 -26
  84. package/flowquery-py/src/parsing/expressions/f_string.py +0 -27
  85. package/flowquery-py/src/parsing/expressions/identifier.py +0 -21
  86. package/flowquery-py/src/parsing/expressions/number.py +0 -32
  87. package/flowquery-py/src/parsing/expressions/operator.py +0 -271
  88. package/flowquery-py/src/parsing/expressions/reference.py +0 -47
  89. package/flowquery-py/src/parsing/expressions/string.py +0 -27
  90. package/flowquery-py/src/parsing/functions/__init__.py +0 -127
  91. package/flowquery-py/src/parsing/functions/aggregate_function.py +0 -60
  92. package/flowquery-py/src/parsing/functions/async_function.py +0 -65
  93. package/flowquery-py/src/parsing/functions/avg.py +0 -55
  94. package/flowquery-py/src/parsing/functions/coalesce.py +0 -43
  95. package/flowquery-py/src/parsing/functions/collect.py +0 -75
  96. package/flowquery-py/src/parsing/functions/count.py +0 -79
  97. package/flowquery-py/src/parsing/functions/date_.py +0 -61
  98. package/flowquery-py/src/parsing/functions/datetime_.py +0 -62
  99. package/flowquery-py/src/parsing/functions/duration.py +0 -159
  100. package/flowquery-py/src/parsing/functions/element_id.py +0 -50
  101. package/flowquery-py/src/parsing/functions/function.py +0 -68
  102. package/flowquery-py/src/parsing/functions/function_factory.py +0 -170
  103. package/flowquery-py/src/parsing/functions/function_metadata.py +0 -148
  104. package/flowquery-py/src/parsing/functions/functions.py +0 -67
  105. package/flowquery-py/src/parsing/functions/head.py +0 -39
  106. package/flowquery-py/src/parsing/functions/id_.py +0 -49
  107. package/flowquery-py/src/parsing/functions/join.py +0 -49
  108. package/flowquery-py/src/parsing/functions/keys.py +0 -34
  109. package/flowquery-py/src/parsing/functions/last.py +0 -39
  110. package/flowquery-py/src/parsing/functions/localdatetime.py +0 -60
  111. package/flowquery-py/src/parsing/functions/localtime.py +0 -57
  112. package/flowquery-py/src/parsing/functions/max_.py +0 -49
  113. package/flowquery-py/src/parsing/functions/min_.py +0 -49
  114. package/flowquery-py/src/parsing/functions/nodes.py +0 -48
  115. package/flowquery-py/src/parsing/functions/predicate_function.py +0 -47
  116. package/flowquery-py/src/parsing/functions/predicate_sum.py +0 -49
  117. package/flowquery-py/src/parsing/functions/properties.py +0 -50
  118. package/flowquery-py/src/parsing/functions/rand.py +0 -28
  119. package/flowquery-py/src/parsing/functions/range_.py +0 -41
  120. package/flowquery-py/src/parsing/functions/reducer_element.py +0 -15
  121. package/flowquery-py/src/parsing/functions/relationships.py +0 -46
  122. package/flowquery-py/src/parsing/functions/replace.py +0 -39
  123. package/flowquery-py/src/parsing/functions/round_.py +0 -34
  124. package/flowquery-py/src/parsing/functions/schema.py +0 -40
  125. package/flowquery-py/src/parsing/functions/size.py +0 -34
  126. package/flowquery-py/src/parsing/functions/split.py +0 -54
  127. package/flowquery-py/src/parsing/functions/string_distance.py +0 -92
  128. package/flowquery-py/src/parsing/functions/stringify.py +0 -49
  129. package/flowquery-py/src/parsing/functions/substring.py +0 -76
  130. package/flowquery-py/src/parsing/functions/sum.py +0 -51
  131. package/flowquery-py/src/parsing/functions/tail.py +0 -37
  132. package/flowquery-py/src/parsing/functions/temporal_utils.py +0 -186
  133. package/flowquery-py/src/parsing/functions/time_.py +0 -57
  134. package/flowquery-py/src/parsing/functions/timestamp.py +0 -37
  135. package/flowquery-py/src/parsing/functions/to_float.py +0 -46
  136. package/flowquery-py/src/parsing/functions/to_integer.py +0 -46
  137. package/flowquery-py/src/parsing/functions/to_json.py +0 -35
  138. package/flowquery-py/src/parsing/functions/to_lower.py +0 -37
  139. package/flowquery-py/src/parsing/functions/to_string.py +0 -41
  140. package/flowquery-py/src/parsing/functions/trim.py +0 -37
  141. package/flowquery-py/src/parsing/functions/type_.py +0 -47
  142. package/flowquery-py/src/parsing/functions/value_holder.py +0 -24
  143. package/flowquery-py/src/parsing/logic/__init__.py +0 -15
  144. package/flowquery-py/src/parsing/logic/case.py +0 -28
  145. package/flowquery-py/src/parsing/logic/else_.py +0 -12
  146. package/flowquery-py/src/parsing/logic/end.py +0 -8
  147. package/flowquery-py/src/parsing/logic/then.py +0 -12
  148. package/flowquery-py/src/parsing/logic/when.py +0 -12
  149. package/flowquery-py/src/parsing/operations/__init__.py +0 -46
  150. package/flowquery-py/src/parsing/operations/aggregated_return.py +0 -25
  151. package/flowquery-py/src/parsing/operations/aggregated_with.py +0 -22
  152. package/flowquery-py/src/parsing/operations/call.py +0 -73
  153. package/flowquery-py/src/parsing/operations/create_node.py +0 -35
  154. package/flowquery-py/src/parsing/operations/create_relationship.py +0 -35
  155. package/flowquery-py/src/parsing/operations/delete_node.py +0 -29
  156. package/flowquery-py/src/parsing/operations/delete_relationship.py +0 -29
  157. package/flowquery-py/src/parsing/operations/group_by.py +0 -148
  158. package/flowquery-py/src/parsing/operations/limit.py +0 -33
  159. package/flowquery-py/src/parsing/operations/load.py +0 -148
  160. package/flowquery-py/src/parsing/operations/match.py +0 -52
  161. package/flowquery-py/src/parsing/operations/operation.py +0 -69
  162. package/flowquery-py/src/parsing/operations/order_by.py +0 -114
  163. package/flowquery-py/src/parsing/operations/projection.py +0 -21
  164. package/flowquery-py/src/parsing/operations/return_op.py +0 -88
  165. package/flowquery-py/src/parsing/operations/union.py +0 -115
  166. package/flowquery-py/src/parsing/operations/union_all.py +0 -17
  167. package/flowquery-py/src/parsing/operations/unwind.py +0 -42
  168. package/flowquery-py/src/parsing/operations/where.py +0 -43
  169. package/flowquery-py/src/parsing/operations/with_op.py +0 -18
  170. package/flowquery-py/src/parsing/parser.py +0 -1384
  171. package/flowquery-py/src/parsing/parser_state.py +0 -26
  172. package/flowquery-py/src/parsing/token_to_node.py +0 -109
  173. package/flowquery-py/src/tokenization/__init__.py +0 -23
  174. package/flowquery-py/src/tokenization/keyword.py +0 -54
  175. package/flowquery-py/src/tokenization/operator.py +0 -29
  176. package/flowquery-py/src/tokenization/string_walker.py +0 -158
  177. package/flowquery-py/src/tokenization/symbol.py +0 -19
  178. package/flowquery-py/src/tokenization/token.py +0 -693
  179. package/flowquery-py/src/tokenization/token_mapper.py +0 -53
  180. package/flowquery-py/src/tokenization/token_type.py +0 -21
  181. package/flowquery-py/src/tokenization/tokenizer.py +0 -214
  182. package/flowquery-py/src/tokenization/trie.py +0 -125
  183. package/flowquery-py/src/utils/__init__.py +0 -6
  184. package/flowquery-py/src/utils/object_utils.py +0 -20
  185. package/flowquery-py/src/utils/string_utils.py +0 -113
  186. package/flowquery-py/tests/__init__.py +0 -1
  187. package/flowquery-py/tests/compute/__init__.py +0 -1
  188. package/flowquery-py/tests/compute/test_runner.py +0 -4902
  189. package/flowquery-py/tests/graph/__init__.py +0 -1
  190. package/flowquery-py/tests/graph/test_create.py +0 -56
  191. package/flowquery-py/tests/graph/test_data.py +0 -73
  192. package/flowquery-py/tests/graph/test_match.py +0 -40
  193. package/flowquery-py/tests/parsing/__init__.py +0 -1
  194. package/flowquery-py/tests/parsing/test_context.py +0 -34
  195. package/flowquery-py/tests/parsing/test_expression.py +0 -248
  196. package/flowquery-py/tests/parsing/test_parser.py +0 -1237
  197. package/flowquery-py/tests/test_extensibility.py +0 -611
  198. package/flowquery-py/tests/tokenization/__init__.py +0 -1
  199. package/flowquery-py/tests/tokenization/test_token_mapper.py +0 -60
  200. package/flowquery-py/tests/tokenization/test_tokenizer.py +0 -198
  201. package/flowquery-py/tests/tokenization/test_trie.py +0 -30
  202. package/flowquery-vscode/.vscode-test.mjs +0 -5
  203. package/flowquery-vscode/.vscodeignore +0 -13
  204. package/flowquery-vscode/LICENSE +0 -21
  205. package/flowquery-vscode/README.md +0 -11
  206. package/flowquery-vscode/demo/FlowQueryVSCodeDemo.gif +0 -0
  207. package/flowquery-vscode/eslint.config.mjs +0 -25
  208. package/flowquery-vscode/extension.js +0 -508
  209. package/flowquery-vscode/flowQueryEngine/flowquery.min.js +0 -1
  210. package/flowquery-vscode/flowquery-worker.js +0 -66
  211. package/flowquery-vscode/images/FlowQueryLogoIcon.png +0 -0
  212. package/flowquery-vscode/jsconfig.json +0 -13
  213. package/flowquery-vscode/libs/page.css +0 -53
  214. package/flowquery-vscode/libs/table.css +0 -13
  215. package/flowquery-vscode/libs/tabs.css +0 -66
  216. package/flowquery-vscode/package-lock.json +0 -2917
  217. package/flowquery-vscode/package.json +0 -51
  218. package/flowquery-vscode/test/extension.test.js +0 -196
  219. package/flowquery-vscode/test/worker.test.js +0 -25
  220. package/flowquery-vscode/vsc-extension-quickstart.md +0 -42
  221. package/jest.config.js +0 -14
  222. package/misc/apps/RAG/README.md +0 -29
  223. package/misc/apps/RAG/data/chats.json +0 -302
  224. package/misc/apps/RAG/data/emails.json +0 -182
  225. package/misc/apps/RAG/data/events.json +0 -226
  226. package/misc/apps/RAG/data/files.json +0 -172
  227. package/misc/apps/RAG/data/users.json +0 -158
  228. package/misc/apps/RAG/jest.config.js +0 -21
  229. package/misc/apps/RAG/package.json +0 -48
  230. package/misc/apps/RAG/public/index.html +0 -18
  231. package/misc/apps/RAG/src/App.css +0 -42
  232. package/misc/apps/RAG/src/App.tsx +0 -50
  233. package/misc/apps/RAG/src/components/AdaptiveCardRenderer.css +0 -172
  234. package/misc/apps/RAG/src/components/AdaptiveCardRenderer.tsx +0 -380
  235. package/misc/apps/RAG/src/components/ApiKeySettings.tsx +0 -245
  236. package/misc/apps/RAG/src/components/ChatContainer.css +0 -67
  237. package/misc/apps/RAG/src/components/ChatContainer.tsx +0 -242
  238. package/misc/apps/RAG/src/components/ChatInput.css +0 -23
  239. package/misc/apps/RAG/src/components/ChatInput.tsx +0 -76
  240. package/misc/apps/RAG/src/components/ChatMessage.css +0 -160
  241. package/misc/apps/RAG/src/components/ChatMessage.tsx +0 -286
  242. package/misc/apps/RAG/src/components/FlowQueryAgent.ts +0 -708
  243. package/misc/apps/RAG/src/components/FlowQueryRunner.css +0 -113
  244. package/misc/apps/RAG/src/components/FlowQueryRunner.tsx +0 -371
  245. package/misc/apps/RAG/src/components/index.ts +0 -28
  246. package/misc/apps/RAG/src/graph/index.ts +0 -19
  247. package/misc/apps/RAG/src/graph/initializeGraph.ts +0 -254
  248. package/misc/apps/RAG/src/index.tsx +0 -29
  249. package/misc/apps/RAG/src/prompts/FlowQuerySystemPrompt.ts +0 -327
  250. package/misc/apps/RAG/src/prompts/index.ts +0 -10
  251. package/misc/apps/RAG/src/tests/graph.test.ts +0 -35
  252. package/misc/apps/RAG/src/utils/FlowQueryExecutor.ts +0 -130
  253. package/misc/apps/RAG/src/utils/FlowQueryExtractor.ts +0 -208
  254. package/misc/apps/RAG/src/utils/Llm.ts +0 -248
  255. package/misc/apps/RAG/src/utils/index.ts +0 -12
  256. package/misc/apps/RAG/tsconfig.json +0 -22
  257. package/misc/apps/RAG/webpack.config.js +0 -43
  258. package/misc/apps/README.md +0 -1
  259. package/misc/queries/analyze_catfacts.cql +0 -75
  260. package/misc/queries/azure_openai_completions.cql +0 -13
  261. package/misc/queries/azure_openai_models.cql +0 -9
  262. package/misc/queries/mock_pipeline.cql +0 -84
  263. package/misc/queries/openai_completions.cql +0 -15
  264. package/misc/queries/openai_models.cql +0 -13
  265. package/misc/queries/test.cql +0 -6
  266. package/misc/queries/tool_inference.cql +0 -24
  267. package/misc/queries/wisdom.cql +0 -6
  268. package/misc/queries/wisdom_letter_histogram.cql +0 -8
  269. package/src/compute/flowquery.ts +0 -46
  270. package/src/compute/runner.ts +0 -66
  271. package/src/extensibility.ts +0 -45
  272. package/src/graph/data.ts +0 -130
  273. package/src/graph/database.ts +0 -143
  274. package/src/graph/hops.ts +0 -22
  275. package/src/graph/node.ts +0 -122
  276. package/src/graph/node_data.ts +0 -18
  277. package/src/graph/node_reference.ts +0 -38
  278. package/src/graph/pattern.ts +0 -110
  279. package/src/graph/pattern_expression.ts +0 -48
  280. package/src/graph/patterns.ts +0 -36
  281. package/src/graph/physical_node.ts +0 -23
  282. package/src/graph/physical_relationship.ts +0 -23
  283. package/src/graph/relationship.ts +0 -167
  284. package/src/graph/relationship_data.ts +0 -31
  285. package/src/graph/relationship_match_collector.ts +0 -64
  286. package/src/graph/relationship_reference.ts +0 -25
  287. package/src/index.browser.ts +0 -46
  288. package/src/index.node.ts +0 -55
  289. package/src/index.ts +0 -12
  290. package/src/io/command_line.ts +0 -74
  291. package/src/parsing/alias.ts +0 -23
  292. package/src/parsing/alias_option.ts +0 -5
  293. package/src/parsing/ast_node.ts +0 -153
  294. package/src/parsing/base_parser.ts +0 -98
  295. package/src/parsing/components/csv.ts +0 -9
  296. package/src/parsing/components/from.ts +0 -12
  297. package/src/parsing/components/headers.ts +0 -12
  298. package/src/parsing/components/json.ts +0 -9
  299. package/src/parsing/components/null.ts +0 -9
  300. package/src/parsing/components/post.ts +0 -9
  301. package/src/parsing/components/text.ts +0 -9
  302. package/src/parsing/context.ts +0 -54
  303. package/src/parsing/data_structures/associative_array.ts +0 -43
  304. package/src/parsing/data_structures/json_array.ts +0 -31
  305. package/src/parsing/data_structures/key_value_pair.ts +0 -37
  306. package/src/parsing/data_structures/lookup.ts +0 -44
  307. package/src/parsing/data_structures/range_lookup.ts +0 -36
  308. package/src/parsing/expressions/boolean.ts +0 -21
  309. package/src/parsing/expressions/expression.ts +0 -150
  310. package/src/parsing/expressions/expression_map.ts +0 -22
  311. package/src/parsing/expressions/f_string.ts +0 -26
  312. package/src/parsing/expressions/identifier.ts +0 -22
  313. package/src/parsing/expressions/number.ts +0 -40
  314. package/src/parsing/expressions/operator.ts +0 -354
  315. package/src/parsing/expressions/reference.ts +0 -45
  316. package/src/parsing/expressions/string.ts +0 -34
  317. package/src/parsing/functions/aggregate_function.ts +0 -58
  318. package/src/parsing/functions/async_function.ts +0 -64
  319. package/src/parsing/functions/avg.ts +0 -47
  320. package/src/parsing/functions/coalesce.ts +0 -49
  321. package/src/parsing/functions/collect.ts +0 -54
  322. package/src/parsing/functions/count.ts +0 -54
  323. package/src/parsing/functions/date.ts +0 -63
  324. package/src/parsing/functions/datetime.ts +0 -63
  325. package/src/parsing/functions/duration.ts +0 -143
  326. package/src/parsing/functions/element_id.ts +0 -51
  327. package/src/parsing/functions/function.ts +0 -60
  328. package/src/parsing/functions/function_factory.ts +0 -195
  329. package/src/parsing/functions/function_metadata.ts +0 -217
  330. package/src/parsing/functions/functions.ts +0 -70
  331. package/src/parsing/functions/head.ts +0 -42
  332. package/src/parsing/functions/id.ts +0 -51
  333. package/src/parsing/functions/join.ts +0 -40
  334. package/src/parsing/functions/keys.ts +0 -29
  335. package/src/parsing/functions/last.ts +0 -42
  336. package/src/parsing/functions/localdatetime.ts +0 -63
  337. package/src/parsing/functions/localtime.ts +0 -58
  338. package/src/parsing/functions/max.ts +0 -37
  339. package/src/parsing/functions/min.ts +0 -37
  340. package/src/parsing/functions/nodes.ts +0 -54
  341. package/src/parsing/functions/predicate_function.ts +0 -48
  342. package/src/parsing/functions/predicate_sum.ts +0 -47
  343. package/src/parsing/functions/properties.ts +0 -56
  344. package/src/parsing/functions/rand.ts +0 -21
  345. package/src/parsing/functions/range.ts +0 -37
  346. package/src/parsing/functions/reducer_element.ts +0 -10
  347. package/src/parsing/functions/relationships.ts +0 -52
  348. package/src/parsing/functions/replace.ts +0 -38
  349. package/src/parsing/functions/round.ts +0 -28
  350. package/src/parsing/functions/schema.ts +0 -39
  351. package/src/parsing/functions/size.ts +0 -28
  352. package/src/parsing/functions/split.ts +0 -45
  353. package/src/parsing/functions/string_distance.ts +0 -83
  354. package/src/parsing/functions/stringify.ts +0 -37
  355. package/src/parsing/functions/substring.ts +0 -68
  356. package/src/parsing/functions/sum.ts +0 -41
  357. package/src/parsing/functions/tail.ts +0 -39
  358. package/src/parsing/functions/temporal_utils.ts +0 -180
  359. package/src/parsing/functions/time.ts +0 -58
  360. package/src/parsing/functions/timestamp.ts +0 -37
  361. package/src/parsing/functions/to_float.ts +0 -50
  362. package/src/parsing/functions/to_integer.ts +0 -50
  363. package/src/parsing/functions/to_json.ts +0 -28
  364. package/src/parsing/functions/to_lower.ts +0 -28
  365. package/src/parsing/functions/to_string.ts +0 -32
  366. package/src/parsing/functions/trim.ts +0 -28
  367. package/src/parsing/functions/type.ts +0 -39
  368. package/src/parsing/functions/value_holder.ts +0 -13
  369. package/src/parsing/logic/case.ts +0 -26
  370. package/src/parsing/logic/else.ts +0 -12
  371. package/src/parsing/logic/end.ts +0 -9
  372. package/src/parsing/logic/then.ts +0 -12
  373. package/src/parsing/logic/when.ts +0 -12
  374. package/src/parsing/operations/aggregated_return.ts +0 -22
  375. package/src/parsing/operations/aggregated_with.ts +0 -18
  376. package/src/parsing/operations/call.ts +0 -69
  377. package/src/parsing/operations/create_node.ts +0 -39
  378. package/src/parsing/operations/create_relationship.ts +0 -38
  379. package/src/parsing/operations/delete_node.ts +0 -33
  380. package/src/parsing/operations/delete_relationship.ts +0 -32
  381. package/src/parsing/operations/group_by.ts +0 -137
  382. package/src/parsing/operations/limit.ts +0 -31
  383. package/src/parsing/operations/load.ts +0 -146
  384. package/src/parsing/operations/match.ts +0 -54
  385. package/src/parsing/operations/operation.ts +0 -69
  386. package/src/parsing/operations/order_by.ts +0 -126
  387. package/src/parsing/operations/projection.ts +0 -18
  388. package/src/parsing/operations/return.ts +0 -76
  389. package/src/parsing/operations/union.ts +0 -114
  390. package/src/parsing/operations/union_all.ts +0 -16
  391. package/src/parsing/operations/unwind.ts +0 -36
  392. package/src/parsing/operations/where.ts +0 -42
  393. package/src/parsing/operations/with.ts +0 -20
  394. package/src/parsing/parser.ts +0 -1641
  395. package/src/parsing/parser_state.ts +0 -25
  396. package/src/parsing/token_to_node.ts +0 -114
  397. package/src/tokenization/keyword.ts +0 -50
  398. package/src/tokenization/operator.ts +0 -25
  399. package/src/tokenization/string_walker.ts +0 -197
  400. package/src/tokenization/symbol.ts +0 -15
  401. package/src/tokenization/token.ts +0 -764
  402. package/src/tokenization/token_mapper.ts +0 -53
  403. package/src/tokenization/token_type.ts +0 -16
  404. package/src/tokenization/tokenizer.ts +0 -250
  405. package/src/tokenization/trie.ts +0 -117
  406. package/src/utils/object_utils.ts +0 -17
  407. package/src/utils/string_utils.ts +0 -114
  408. package/tests/compute/runner.test.ts +0 -4559
  409. package/tests/extensibility.test.ts +0 -643
  410. package/tests/graph/create.test.ts +0 -36
  411. package/tests/graph/data.test.ts +0 -58
  412. package/tests/graph/match.test.ts +0 -29
  413. package/tests/parsing/context.test.ts +0 -27
  414. package/tests/parsing/expression.test.ts +0 -303
  415. package/tests/parsing/parser.test.ts +0 -1327
  416. package/tests/tokenization/token_mapper.test.ts +0 -47
  417. package/tests/tokenization/tokenizer.test.ts +0 -191
  418. package/tests/tokenization/trie.test.ts +0 -20
  419. package/tsconfig.json +0 -19
  420. package/typedoc.json +0 -16
  421. package/vscode-settings.json.recommended +0 -16
  422. package/webpack.config.js +0 -26
@@ -1,217 +0,0 @@
1
- /**
2
- * Category types for functions.
3
- * Core categories: scalar, aggregate, predicate, async
4
- * Additional categories for organization: string, math, data, etc.
5
- */
6
- export type FunctionCategory = "scalar" | "aggregate" | "predicate" | "async" | string;
7
-
8
- /**
9
- * Schema definition for function arguments and outputs.
10
- * Compatible with JSON Schema for LLM consumption.
11
- */
12
- export interface ParameterSchema {
13
- /** The parameter name */
14
- name: string;
15
- /** Description of the parameter */
16
- description: string;
17
- /** JSON Schema type: string, number, boolean, object, array, null */
18
- type: "string" | "number" | "boolean" | "object" | "array" | "null" | string;
19
- /** Whether the parameter is required (default: true) */
20
- required?: boolean;
21
- /** Default value if not provided */
22
- default?: any;
23
- /** For arrays, the schema of items */
24
- items?: Omit<ParameterSchema, 'name' | 'required' | 'default'>;
25
- /** For objects, the properties schema */
26
- properties?: Record<string, Omit<ParameterSchema, 'name' | 'required'>>;
27
- /** Enum of allowed values */
28
- enum?: any[];
29
- /** Example value */
30
- example?: any;
31
- }
32
-
33
- /**
34
- * Schema definition for function output.
35
- */
36
- export interface OutputSchema {
37
- /** Description of the output */
38
- description: string;
39
- /** JSON Schema type */
40
- type: "string" | "number" | "boolean" | "object" | "array" | "null" | string;
41
- /** For arrays, the schema of items */
42
- items?: Omit<OutputSchema, 'description'>;
43
- /** For objects, the properties schema */
44
- properties?: Record<string, Omit<ParameterSchema, 'name' | 'required'>>;
45
- /** Example output value */
46
- example?: any;
47
- }
48
-
49
- /**
50
- * Metadata for a registered function, designed for LLM consumption.
51
- */
52
- export interface FunctionMetadata {
53
- /** The function name */
54
- name: string;
55
- /** Human-readable description of what the function does */
56
- description: string;
57
- /** Category that determines function type and behavior */
58
- category: FunctionCategory;
59
- /** Array of parameter schemas */
60
- parameters: ParameterSchema[];
61
- /** Output schema */
62
- output: OutputSchema;
63
- /** Example usage in FlowQuery syntax */
64
- examples?: string[];
65
- /** Additional notes or caveats */
66
- notes?: string;
67
- }
68
-
69
- /**
70
- * Type for async data provider functions used in LOAD operations.
71
- */
72
- export type AsyncDataProvider = (...args: any[]) => AsyncGenerator<any, void, unknown> | Promise<any>;
73
-
74
- /**
75
- * Centralized registry for function metadata, factories, and async providers.
76
- * Encapsulates all registration logic for the @FunctionDef decorator.
77
- */
78
- class FunctionRegistry {
79
- private static metadata: Map<string, FunctionMetadata> = new Map<string, FunctionMetadata>();
80
- private static factories: Map<string, () => any> = new Map<string, () => any>();
81
-
82
- /** Registers a regular function class. */
83
- static register<T extends new (...args: any[]) => any>(constructor: T, options: FunctionDefOptions): void {
84
- const instance: any = new constructor();
85
- const displayName: string = (instance.name?.toLowerCase() || constructor.name.toLowerCase());
86
- const registryKey: string = options.category ? `${displayName}:${options.category}` : displayName;
87
-
88
- this.metadata.set(registryKey, { name: displayName, ...options });
89
-
90
- if (options.category !== 'predicate') {
91
- this.factories.set(displayName, () => new constructor());
92
- }
93
- this.factories.set(registryKey, () => new constructor());
94
- }
95
-
96
- static getAllMetadata(): FunctionMetadata[] {
97
- return Array.from(this.metadata.values());
98
- }
99
-
100
- static getMetadata(name: string, category?: string): FunctionMetadata | undefined {
101
- const lowerName: string = name.toLowerCase();
102
- if (category) return this.metadata.get(`${lowerName}:${category}`);
103
- for (const meta of this.metadata.values()) {
104
- if (meta.name.toLowerCase() === lowerName) return meta;
105
- }
106
- return undefined;
107
- }
108
-
109
- static getFactory(name: string, category?: string): (() => any) | undefined {
110
- const lowerName: string = name.toLowerCase();
111
- if (category) return this.factories.get(`${lowerName}:${category}`);
112
- return this.factories.get(lowerName);
113
- }
114
- }
115
-
116
- /**
117
- * Decorator options - metadata without the name (derived from class).
118
- */
119
- export type FunctionDefOptions = Omit<FunctionMetadata, 'name'>;
120
-
121
- /**
122
- * Class decorator that registers function metadata.
123
- * The function name is derived from the class's constructor call to super() for regular functions,
124
- * or from the class name for async providers.
125
- *
126
- * For async providers (category: "async"), the class must have a `generate` method that returns
127
- * an AsyncGenerator. This allows the function to be used as a data source in LOAD operations.
128
- *
129
- * @param options - Function metadata (excluding name)
130
- * @returns Class decorator
131
- *
132
- * @example
133
- * ```typescript
134
- * // Scalar function example
135
- * @FunctionDef({
136
- * description: "Adds two numbers",
137
- * category: "scalar",
138
- * parameters: [
139
- * { name: "a", description: "First number", type: "number" },
140
- * { name: "b", description: "Second number", type: "number" }
141
- * ],
142
- * output: { description: "Sum of a and b", type: "number" },
143
- * examples: ["ADD(2, 3) // returns 5"]
144
- * })
145
- * class AddFunction extends Function {
146
- * constructor() {
147
- * super("add");
148
- * }
149
- * public execute(a: number, b: number): number {
150
- * return a + b;
151
- * }
152
- * }
153
- * // Aggregate function example
154
- * @FunctionDef({
155
- * description: "Calculates the average of a list of numbers",
156
- * category: "aggregate",
157
- * parameters: [
158
- * { name: "values", description: "Array of numbers", type: "array", items: { type: "number" } }
159
- * ],
160
- * output: { description: "Average value", type: "number" },
161
- * examples: ["AVERAGE([1, 2, 3, 4, 5]) // returns 3"]
162
- * })
163
- * class AverageFunction extends AggregateFunction {
164
- * constructor() {
165
- * super("average");
166
- * }
167
- * public execute(values: number[]): number {
168
- * const sum = values.reduce((acc, val) => acc + val, 0);
169
- * return sum / values.length;
170
- * }
171
- * }
172
- * // Async data provider example
173
- * @FunctionDef({
174
- * description: "Fetches data from an external API",
175
- * category: "async",
176
- * parameters: [
177
- * { name: "endpoint", description: "API endpoint URL", type: "string" }
178
- * ],
179
- * output: { description: "Data object", type: "object" },
180
- * examples: ["MyAsyncDataProvider('https://api.example.com/data')"]
181
- * })
182
- * class MyAsyncDataProvider extends AsyncFunction {
183
- * public async *generate(endpoint: string): AsyncGenerator<any> {
184
- * const response = await fetch(endpoint);
185
- * const data = await response.json();
186
- * for (const item of data) {
187
- * yield item;
188
- * }
189
- * }
190
- */
191
- export function FunctionDef(options: FunctionDefOptions) {
192
- return function <T extends new (...args: any[]) => any>(constructor: T): T {
193
- FunctionRegistry.register(constructor, options);
194
- return constructor;
195
- };
196
- }
197
-
198
- /**
199
- * Gets all registered function metadata from decorators.
200
- */
201
- export function getRegisteredFunctionMetadata(): FunctionMetadata[] {
202
- return FunctionRegistry.getAllMetadata();
203
- }
204
-
205
- /**
206
- * Gets a registered function factory by name.
207
- */
208
- export function getRegisteredFunctionFactory(name: string, category?: string): (() => any) | undefined {
209
- return FunctionRegistry.getFactory(name, category);
210
- }
211
-
212
- /**
213
- * Gets metadata for a specific function by name.
214
- */
215
- export function getFunctionMetadata(name: string, category?: string): FunctionMetadata | undefined {
216
- return FunctionRegistry.getMetadata(name, category);
217
- }
@@ -1,70 +0,0 @@
1
- import Function from "./function";
2
- import FunctionFactory from "./function_factory";
3
- import { FunctionDef } from "./function_metadata";
4
-
5
- /**
6
- * Built-in function that lists all registered functions with their metadata.
7
- *
8
- * Can be used in FlowQuery to discover available functions:
9
- * - `WITH functions() AS funcs RETURN funcs` - returns all functions
10
- * - `WITH functions('aggregation') AS funcs RETURN funcs` - returns functions in a category
11
- *
12
- * @example
13
- * ```
14
- * WITH functions() AS funcs
15
- * UNWIND funcs AS func
16
- * RETURN func.name, func.description
17
- * ```
18
- */
19
- @FunctionDef({
20
- description: "Lists all registered functions with their metadata. Useful for discovering available functions and their documentation. Results include name, description, parameters, output schema, and usage examples.",
21
- category: "scalar",
22
- parameters: [
23
- { name: "category", description: "Optional category to filter by (e.g., 'aggregation', 'string', 'math')", type: "string", required: false }
24
- ],
25
- output: {
26
- description: "Array of function metadata objects",
27
- type: "array",
28
- items: {
29
- type: "object",
30
- properties: {
31
- name: { description: "Function name", type: "string" },
32
- description: { description: "What the function does", type: "string" },
33
- category: { description: "Function category", type: "string" },
34
- parameters: { description: "Array of parameter definitions", type: "array" },
35
- output: { description: "Output schema", type: "object" },
36
- examples: { description: "Usage examples", type: "array" }
37
- }
38
- }
39
- },
40
- examples: [
41
- "WITH functions() AS funcs RETURN funcs",
42
- "WITH functions('aggregation') AS funcs UNWIND funcs AS f RETURN f.name, f.description"
43
- ]
44
- })
45
- class Functions extends Function {
46
- constructor() {
47
- super("functions");
48
- this._expectedParameterCount = null; // 0 or 1 parameter
49
- }
50
-
51
- public value(): any {
52
- const children = this.getChildren();
53
-
54
- if (children.length === 0) {
55
- // Return all functions
56
- return FunctionFactory.listFunctions();
57
- } else if (children.length === 1) {
58
- // Filter by category
59
- const category = children[0].value();
60
- if (typeof category === 'string') {
61
- return FunctionFactory.listFunctions({ category });
62
- }
63
- throw new Error("functions() category parameter must be a string");
64
- } else {
65
- throw new Error("functions() takes 0 or 1 parameters");
66
- }
67
- }
68
- }
69
-
70
- export default Functions;
@@ -1,42 +0,0 @@
1
- import Function from "./function";
2
- import { FunctionDef } from "./function_metadata";
3
-
4
- @FunctionDef({
5
- description: "Returns the first element of a list",
6
- category: "scalar",
7
- parameters: [
8
- {
9
- name: "list",
10
- description: "The list to get the first element from",
11
- type: "array",
12
- },
13
- ],
14
- output: {
15
- description: "The first element of the list",
16
- type: "any",
17
- example: "1",
18
- },
19
- examples: ["RETURN head([1, 2, 3])", "WITH ['a', 'b', 'c'] AS items RETURN head(items)"],
20
- })
21
- class Head extends Function {
22
- constructor() {
23
- super("head");
24
- this._expectedParameterCount = 1;
25
- }
26
-
27
- public value(): any {
28
- const val = this.getChildren()[0].value();
29
- if (val === null || val === undefined) {
30
- return null;
31
- }
32
- if (!Array.isArray(val)) {
33
- throw new Error("head() expects a list");
34
- }
35
- if (val.length === 0) {
36
- return null;
37
- }
38
- return val[0];
39
- }
40
- }
41
-
42
- export default Head;
@@ -1,51 +0,0 @@
1
- import Function from "./function";
2
- import { FunctionDef } from "./function_metadata";
3
-
4
- @FunctionDef({
5
- description:
6
- "Returns the id of a node or relationship. For nodes, returns the id property. For relationships, returns the type.",
7
- category: "scalar",
8
- parameters: [
9
- {
10
- name: "entity",
11
- description: "A node or relationship to get the id from",
12
- type: "object",
13
- },
14
- ],
15
- output: {
16
- description: "The id of the entity",
17
- type: "any",
18
- example: "1",
19
- },
20
- examples: ["MATCH (n:Person) RETURN id(n)", "MATCH (a)-[r]->(b) RETURN id(r)"],
21
- })
22
- class Id extends Function {
23
- constructor() {
24
- super("id");
25
- this._expectedParameterCount = 1;
26
- }
27
-
28
- public value(): any {
29
- const obj = this.getChildren()[0].value();
30
- if (obj === null || obj === undefined) {
31
- return null;
32
- }
33
- if (typeof obj !== "object" || Array.isArray(obj)) {
34
- throw new Error("id() expects a node or relationship");
35
- }
36
-
37
- // If it's a RelationshipMatchRecord (has type, startNode, endNode, properties)
38
- if ("type" in obj && "startNode" in obj && "endNode" in obj && "properties" in obj) {
39
- return obj.type;
40
- }
41
-
42
- // If it's a node record (has id field)
43
- if ("id" in obj) {
44
- return obj.id;
45
- }
46
-
47
- throw new Error("id() expects a node or relationship");
48
- }
49
- }
50
-
51
- export default Id;
@@ -1,40 +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: "Joins an array of strings with a delimiter",
8
- category: "scalar",
9
- parameters: [
10
- { name: "array", description: "Array of values to join", type: "array" },
11
- { name: "delimiter", description: "Delimiter to join with", type: "string" },
12
- ],
13
- output: { description: "Joined string", type: "string", example: "a,b,c" },
14
- examples: ["WITH ['a', 'b', 'c'] AS arr RETURN join(arr, ',')"],
15
- })
16
- class Join extends Function {
17
- constructor() {
18
- super("join");
19
- this._expectedParameterCount = 2;
20
- }
21
- public set parameters(nodes: ASTNode[]) {
22
- if (nodes.length === 1) {
23
- nodes.push(new String(""));
24
- }
25
- super.parameters = nodes;
26
- }
27
- public value(): any {
28
- const array = this.getChildren()[0].value();
29
- const delimiter = this.getChildren()[1].value();
30
- if (array === null || array === undefined) {
31
- return null;
32
- }
33
- if (!Array.isArray(array) || typeof delimiter !== "string") {
34
- throw new Error("Invalid arguments for join function");
35
- }
36
- return array.join(delimiter);
37
- }
38
- }
39
-
40
- export default Join;
@@ -1,29 +0,0 @@
1
- import Function from "./function";
2
- import { FunctionDef } from "./function_metadata";
3
-
4
- @FunctionDef({
5
- description: "Returns the keys of an object (associative array) as an array",
6
- category: "scalar",
7
- parameters: [{ name: "object", description: "Object to extract keys from", type: "object" }],
8
- output: { description: "Array of keys", type: "array", example: "['name', 'age']" },
9
- examples: ["WITH { name: 'Alice', age: 30 } AS obj RETURN keys(obj)"],
10
- })
11
- class Keys extends Function {
12
- constructor() {
13
- super("keys");
14
- this._expectedParameterCount = 1;
15
- }
16
-
17
- public value(): any {
18
- const obj = this.getChildren()[0].value();
19
- if (obj === null || obj === undefined) {
20
- return null;
21
- }
22
- if (typeof obj !== "object" || Array.isArray(obj)) {
23
- throw new Error("keys() expects an object, not an array or primitive");
24
- }
25
- return Object.keys(obj);
26
- }
27
- }
28
-
29
- export default Keys;
@@ -1,42 +0,0 @@
1
- import Function from "./function";
2
- import { FunctionDef } from "./function_metadata";
3
-
4
- @FunctionDef({
5
- description: "Returns the last element of a list",
6
- category: "scalar",
7
- parameters: [
8
- {
9
- name: "list",
10
- description: "The list to get the last element from",
11
- type: "array",
12
- },
13
- ],
14
- output: {
15
- description: "The last element of the list",
16
- type: "any",
17
- example: "3",
18
- },
19
- examples: ["RETURN last([1, 2, 3])", "WITH ['a', 'b', 'c'] AS items RETURN last(items)"],
20
- })
21
- class Last extends Function {
22
- constructor() {
23
- super("last");
24
- this._expectedParameterCount = 1;
25
- }
26
-
27
- public value(): any {
28
- const val = this.getChildren()[0].value();
29
- if (val === null || val === undefined) {
30
- return null;
31
- }
32
- if (!Array.isArray(val)) {
33
- throw new Error("last() expects a list");
34
- }
35
- if (val.length === 0) {
36
- return null;
37
- }
38
- return val[val.length - 1];
39
- }
40
- }
41
-
42
- export default Last;
@@ -1,63 +0,0 @@
1
- import Function from "./function";
2
- import { FunctionDef } from "./function_metadata";
3
- import { buildDatetimeObject, parseTemporalArg } from "./temporal_utils";
4
-
5
- /**
6
- * Returns a local datetime value (date + time, no timezone offset).
7
- * When called with no arguments, returns the current local datetime.
8
- * When called with a string argument, parses it as an ISO 8601 datetime.
9
- * When called with a map argument, constructs a datetime from components.
10
- *
11
- * @example
12
- * ```
13
- * RETURN localdatetime() AS now
14
- * RETURN localdatetime('2025-06-15T12:30:00') AS dt
15
- * ```
16
- */
17
- @FunctionDef({
18
- description:
19
- "Returns a local datetime value (no timezone). With no arguments returns the current local datetime. " +
20
- "Accepts an ISO 8601 string or a map of components.",
21
- category: "scalar",
22
- parameters: [
23
- {
24
- name: "input",
25
- description: "Optional. An ISO 8601 datetime string or a map of components.",
26
- type: "string",
27
- required: false,
28
- },
29
- ],
30
- output: {
31
- description:
32
- "A datetime object with properties: year, month, day, hour, minute, second, millisecond, " +
33
- "epochMillis, epochSeconds, dayOfWeek, dayOfYear, quarter, formatted",
34
- type: "object",
35
- },
36
- examples: [
37
- "RETURN localdatetime() AS now",
38
- "RETURN localdatetime('2025-06-15T12:30:00') AS dt",
39
- "WITH localdatetime() AS dt RETURN dt.hour, dt.minute",
40
- ],
41
- })
42
- class LocalDatetime extends Function {
43
- constructor() {
44
- super("localdatetime");
45
- this._expectedParameterCount = null;
46
- }
47
-
48
- public value(): any {
49
- const children = this.getChildren();
50
- if (children.length > 1) {
51
- throw new Error("localdatetime() accepts at most one argument");
52
- }
53
-
54
- const d: Date =
55
- children.length === 1
56
- ? parseTemporalArg(children[0].value(), "localdatetime")
57
- : new Date();
58
-
59
- return buildDatetimeObject(d, false);
60
- }
61
- }
62
-
63
- export default LocalDatetime;
@@ -1,58 +0,0 @@
1
- import Function from "./function";
2
- import { FunctionDef } from "./function_metadata";
3
- import { buildTimeObject, parseTemporalArg } from "./temporal_utils";
4
-
5
- /**
6
- * Returns a local time value (no timezone offset).
7
- * When called with no arguments, returns the current local time.
8
- * When called with a string argument, parses it.
9
- *
10
- * @example
11
- * ```
12
- * RETURN localtime() AS now
13
- * RETURN localtime('14:30:00') AS t
14
- * ```
15
- */
16
- @FunctionDef({
17
- description:
18
- "Returns a local time value (no timezone). With no arguments returns the current local time. " +
19
- "Accepts an ISO 8601 time string or a map of components.",
20
- category: "scalar",
21
- parameters: [
22
- {
23
- name: "input",
24
- description: "Optional. An ISO 8601 time string (HH:MM:SS) or a map of components.",
25
- type: "string",
26
- required: false,
27
- },
28
- ],
29
- output: {
30
- description: "A time object with properties: hour, minute, second, millisecond, formatted",
31
- type: "object",
32
- },
33
- examples: [
34
- "RETURN localtime() AS now",
35
- "RETURN localtime('14:30:00') AS t",
36
- "WITH localtime() AS t RETURN t.hour, t.minute",
37
- ],
38
- })
39
- class LocalTime extends Function {
40
- constructor() {
41
- super("localtime");
42
- this._expectedParameterCount = null;
43
- }
44
-
45
- public value(): any {
46
- const children = this.getChildren();
47
- if (children.length > 1) {
48
- throw new Error("localtime() accepts at most one argument");
49
- }
50
-
51
- const d: Date =
52
- children.length === 1 ? parseTemporalArg(children[0].value(), "localtime") : new Date();
53
-
54
- return buildTimeObject(d, false);
55
- }
56
- }
57
-
58
- export default LocalTime;
@@ -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 MaxReducerElement 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 maximum value across grouped rows",
19
- category: "aggregate",
20
- parameters: [{ name: "value", description: "Value to compare", type: "number" }],
21
- output: { description: "Maximum value", type: "number", example: 10 },
22
- examples: ["WITH [3, 1, 2] AS nums UNWIND nums AS n RETURN max(n)"],
23
- })
24
- class Max extends AggregateFunction {
25
- constructor() {
26
- super("max");
27
- this._expectedParameterCount = 1;
28
- }
29
- public reduce(element: MaxReducerElement): void {
30
- element.value = this.firstChild().value();
31
- }
32
- public element(): MaxReducerElement {
33
- return new MaxReducerElement();
34
- }
35
- }
36
-
37
- export default Max;