@finos/legend-application-query 5.0.0

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 (553) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +3 -0
  3. package/lib/LegendQueryAppEvent.d.ts +19 -0
  4. package/lib/LegendQueryAppEvent.d.ts.map +1 -0
  5. package/lib/LegendQueryAppEvent.js +21 -0
  6. package/lib/LegendQueryAppEvent.js.map +1 -0
  7. package/lib/QueryBuilder_Const.d.ts +77 -0
  8. package/lib/QueryBuilder_Const.d.ts.map +1 -0
  9. package/lib/QueryBuilder_Const.js +85 -0
  10. package/lib/QueryBuilder_Const.js.map +1 -0
  11. package/lib/application/LegendQuery.d.ts +27 -0
  12. package/lib/application/LegendQuery.d.ts.map +1 -0
  13. package/lib/application/LegendQuery.js +58 -0
  14. package/lib/application/LegendQuery.js.map +1 -0
  15. package/lib/application/LegendQueryApplicationConfig.d.ts +46 -0
  16. package/lib/application/LegendQueryApplicationConfig.d.ts.map +1 -0
  17. package/lib/application/LegendQueryApplicationConfig.js +35 -0
  18. package/lib/application/LegendQueryApplicationConfig.js.map +1 -0
  19. package/lib/application/LegendQueryPluginManager.d.ts +32 -0
  20. package/lib/application/LegendQueryPluginManager.d.ts.map +1 -0
  21. package/lib/application/LegendQueryPluginManager.js +46 -0
  22. package/lib/application/LegendQueryPluginManager.js.map +1 -0
  23. package/lib/components/LegendQueryApplication.d.ts +25 -0
  24. package/lib/components/LegendQueryApplication.d.ts.map +1 -0
  25. package/lib/components/LegendQueryApplication.js +39 -0
  26. package/lib/components/LegendQueryApplication.js.map +1 -0
  27. package/lib/components/LegendQueryBaseStoreProvider.d.ts +28 -0
  28. package/lib/components/LegendQueryBaseStoreProvider.d.ts.map +1 -0
  29. package/lib/components/LegendQueryBaseStoreProvider.js +32 -0
  30. package/lib/components/LegendQueryBaseStoreProvider.js.map +1 -0
  31. package/lib/components/QueryBuilder.d.ts +23 -0
  32. package/lib/components/QueryBuilder.d.ts.map +1 -0
  33. package/lib/components/QueryBuilder.js +91 -0
  34. package/lib/components/QueryBuilder.js.map +1 -0
  35. package/lib/components/QueryBuilderExplorerPanel.d.ts +34 -0
  36. package/lib/components/QueryBuilderExplorerPanel.d.ts.map +1 -0
  37. package/lib/components/QueryBuilderExplorerPanel.js +379 -0
  38. package/lib/components/QueryBuilderExplorerPanel.js.map +1 -0
  39. package/lib/components/QueryBuilderFetchStructurePanel.d.ts +23 -0
  40. package/lib/components/QueryBuilderFetchStructurePanel.d.ts.map +1 -0
  41. package/lib/components/QueryBuilderFetchStructurePanel.js +89 -0
  42. package/lib/components/QueryBuilderFetchStructurePanel.js.map +1 -0
  43. package/lib/components/QueryBuilderFilterPanel.d.ts +23 -0
  44. package/lib/components/QueryBuilderFilterPanel.d.ts.map +1 -0
  45. package/lib/components/QueryBuilderFilterPanel.js +301 -0
  46. package/lib/components/QueryBuilderFilterPanel.js.map +1 -0
  47. package/lib/components/QueryBuilderFunctionsExplorerPanel.d.ts +23 -0
  48. package/lib/components/QueryBuilderFunctionsExplorerPanel.d.ts.map +1 -0
  49. package/lib/components/QueryBuilderFunctionsExplorerPanel.js +177 -0
  50. package/lib/components/QueryBuilderFunctionsExplorerPanel.js.map +1 -0
  51. package/lib/components/QueryBuilderGraphFetchTreePanel.d.ts +33 -0
  52. package/lib/components/QueryBuilderGraphFetchTreePanel.d.ts.map +1 -0
  53. package/lib/components/QueryBuilderGraphFetchTreePanel.js +96 -0
  54. package/lib/components/QueryBuilderGraphFetchTreePanel.js.map +1 -0
  55. package/lib/components/QueryBuilderLambdaEditor.d.ts +42 -0
  56. package/lib/components/QueryBuilderLambdaEditor.d.ts.map +1 -0
  57. package/lib/components/QueryBuilderLambdaEditor.js +47 -0
  58. package/lib/components/QueryBuilderLambdaEditor.js.map +1 -0
  59. package/lib/components/QueryBuilderMilestoneEditor.d.ts +24 -0
  60. package/lib/components/QueryBuilderMilestoneEditor.d.ts.map +1 -0
  61. package/lib/components/QueryBuilderMilestoneEditor.js +120 -0
  62. package/lib/components/QueryBuilderMilestoneEditor.js.map +1 -0
  63. package/lib/components/QueryBuilderParameterPanel.d.ts +30 -0
  64. package/lib/components/QueryBuilderParameterPanel.d.ts.map +1 -0
  65. package/lib/components/QueryBuilderParameterPanel.js +148 -0
  66. package/lib/components/QueryBuilderParameterPanel.js.map +1 -0
  67. package/lib/components/QueryBuilderPostFilterPanel.d.ts +31 -0
  68. package/lib/components/QueryBuilderPostFilterPanel.d.ts.map +1 -0
  69. package/lib/components/QueryBuilderPostFilterPanel.js +373 -0
  70. package/lib/components/QueryBuilderPostFilterPanel.js.map +1 -0
  71. package/lib/components/QueryBuilderProjectionPanel.d.ts +23 -0
  72. package/lib/components/QueryBuilderProjectionPanel.d.ts.map +1 -0
  73. package/lib/components/QueryBuilderProjectionPanel.js +229 -0
  74. package/lib/components/QueryBuilderProjectionPanel.js.map +1 -0
  75. package/lib/components/QueryBuilderPropertyExpressionEditor.d.ts +30 -0
  76. package/lib/components/QueryBuilderPropertyExpressionEditor.d.ts.map +1 -0
  77. package/lib/components/QueryBuilderPropertyExpressionEditor.js +116 -0
  78. package/lib/components/QueryBuilderPropertyExpressionEditor.js.map +1 -0
  79. package/lib/components/QueryBuilderPropertyInfoTooltip.d.ts +26 -0
  80. package/lib/components/QueryBuilderPropertyInfoTooltip.d.ts.map +1 -0
  81. package/lib/components/QueryBuilderPropertyInfoTooltip.js +32 -0
  82. package/lib/components/QueryBuilderPropertyInfoTooltip.js.map +1 -0
  83. package/lib/components/QueryBuilderPropertySearchPanel.d.ts +24 -0
  84. package/lib/components/QueryBuilderPropertySearchPanel.d.ts.map +1 -0
  85. package/lib/components/QueryBuilderPropertySearchPanel.js +202 -0
  86. package/lib/components/QueryBuilderPropertySearchPanel.js.map +1 -0
  87. package/lib/components/QueryBuilderResultModifierPanel.d.ts +23 -0
  88. package/lib/components/QueryBuilderResultModifierPanel.d.ts.map +1 -0
  89. package/lib/components/QueryBuilderResultModifierPanel.js +88 -0
  90. package/lib/components/QueryBuilderResultModifierPanel.js.map +1 -0
  91. package/lib/components/QueryBuilderResultPanel.d.ts +23 -0
  92. package/lib/components/QueryBuilderResultPanel.d.ts.map +1 -0
  93. package/lib/components/QueryBuilderResultPanel.js +223 -0
  94. package/lib/components/QueryBuilderResultPanel.js.map +1 -0
  95. package/lib/components/QueryBuilderSetupPanel.d.ts +23 -0
  96. package/lib/components/QueryBuilderSetupPanel.d.ts.map +1 -0
  97. package/lib/components/QueryBuilderSetupPanel.js +148 -0
  98. package/lib/components/QueryBuilderSetupPanel.js.map +1 -0
  99. package/lib/components/QueryBuilderTextEditor.d.ts +23 -0
  100. package/lib/components/QueryBuilderTextEditor.d.ts.map +1 -0
  101. package/lib/components/QueryBuilderTextEditor.js +48 -0
  102. package/lib/components/QueryBuilderTextEditor.js.map +1 -0
  103. package/lib/components/QueryBuilderUnsupportedQueryEditor.d.ts +23 -0
  104. package/lib/components/QueryBuilderUnsupportedQueryEditor.d.ts.map +1 -0
  105. package/lib/components/QueryBuilderUnsupportedQueryEditor.js +35 -0
  106. package/lib/components/QueryBuilderUnsupportedQueryEditor.js.map +1 -0
  107. package/lib/components/QueryBuilder_TestID.d.ts +26 -0
  108. package/lib/components/QueryBuilder_TestID.d.ts.map +1 -0
  109. package/lib/components/QueryBuilder_TestID.js +27 -0
  110. package/lib/components/QueryBuilder_TestID.js.map +1 -0
  111. package/lib/components/QueryEditor.d.ts +29 -0
  112. package/lib/components/QueryEditor.d.ts.map +1 -0
  113. package/lib/components/QueryEditor.js +130 -0
  114. package/lib/components/QueryEditor.js.map +1 -0
  115. package/lib/components/QueryEditorComponentTestUtils.d.ts +35 -0
  116. package/lib/components/QueryEditorComponentTestUtils.d.ts.map +1 -0
  117. package/lib/components/QueryEditorComponentTestUtils.js +108 -0
  118. package/lib/components/QueryEditorComponentTestUtils.js.map +1 -0
  119. package/lib/components/QueryEditorStoreProvider.d.ts +37 -0
  120. package/lib/components/QueryEditorStoreProvider.d.ts.map +1 -0
  121. package/lib/components/QueryEditorStoreProvider.js +48 -0
  122. package/lib/components/QueryEditorStoreProvider.js.map +1 -0
  123. package/lib/components/QuerySetup.d.ts +18 -0
  124. package/lib/components/QuerySetup.d.ts.map +1 -0
  125. package/lib/components/QuerySetup.js +388 -0
  126. package/lib/components/QuerySetup.js.map +1 -0
  127. package/lib/components/QuerySetupStoreProvider.d.ts +23 -0
  128. package/lib/components/QuerySetupStoreProvider.d.ts.map +1 -0
  129. package/lib/components/QuerySetupStoreProvider.js +35 -0
  130. package/lib/components/QuerySetupStoreProvider.js.map +1 -0
  131. package/lib/components/shared/ElementIconUtils.d.ts +18 -0
  132. package/lib/components/shared/ElementIconUtils.d.ts.map +1 -0
  133. package/lib/components/shared/ElementIconUtils.js +37 -0
  134. package/lib/components/shared/ElementIconUtils.js.map +1 -0
  135. package/lib/graphManager/QueryBuilder_GraphManagerPlugin.d.ts +21 -0
  136. package/lib/graphManager/QueryBuilder_GraphManagerPlugin.d.ts.map +1 -0
  137. package/lib/graphManager/QueryBuilder_GraphManagerPlugin.js +27 -0
  138. package/lib/graphManager/QueryBuilder_GraphManagerPlugin.js.map +1 -0
  139. package/lib/graphManager/QueryBuilder_GraphManagerPreset.d.ts +24 -0
  140. package/lib/graphManager/QueryBuilder_GraphManagerPreset.d.ts.map +1 -0
  141. package/lib/graphManager/QueryBuilder_GraphManagerPreset.js +32 -0
  142. package/lib/graphManager/QueryBuilder_GraphManagerPreset.js.map +1 -0
  143. package/lib/graphManager/action/analytics/MappingRuntimeCompatibilityAnalysis.d.ts +21 -0
  144. package/lib/graphManager/action/analytics/MappingRuntimeCompatibilityAnalysis.d.ts.map +1 -0
  145. package/lib/graphManager/action/analytics/MappingRuntimeCompatibilityAnalysis.js +20 -0
  146. package/lib/graphManager/action/analytics/MappingRuntimeCompatibilityAnalysis.js.map +1 -0
  147. package/lib/graphManager/action/analytics/ServiceExecutionAnalysis.d.ts +21 -0
  148. package/lib/graphManager/action/analytics/ServiceExecutionAnalysis.d.ts.map +1 -0
  149. package/lib/graphManager/action/analytics/ServiceExecutionAnalysis.js +20 -0
  150. package/lib/graphManager/action/analytics/ServiceExecutionAnalysis.js.map +1 -0
  151. package/lib/graphManager/protocol/pure/QueryBuilder_PureGraphManagerExtension.d.ts +25 -0
  152. package/lib/graphManager/protocol/pure/QueryBuilder_PureGraphManagerExtension.d.ts.map +1 -0
  153. package/lib/graphManager/protocol/pure/QueryBuilder_PureGraphManagerExtension.js +21 -0
  154. package/lib/graphManager/protocol/pure/QueryBuilder_PureGraphManagerExtension.js.map +1 -0
  155. package/lib/graphManager/protocol/pure/QueryBuilder_PureGraphManagerExtensionBuilder.d.ts +18 -0
  156. package/lib/graphManager/protocol/pure/QueryBuilder_PureGraphManagerExtensionBuilder.d.ts.map +1 -0
  157. package/lib/graphManager/protocol/pure/QueryBuilder_PureGraphManagerExtensionBuilder.js +20 -0
  158. package/lib/graphManager/protocol/pure/QueryBuilder_PureGraphManagerExtensionBuilder.js.map +1 -0
  159. package/lib/graphManager/protocol/pure/QueryBuilder_PureProtocolProcessorPlugin.d.ts +22 -0
  160. package/lib/graphManager/protocol/pure/QueryBuilder_PureProtocolProcessorPlugin.d.ts.map +1 -0
  161. package/lib/graphManager/protocol/pure/QueryBuilder_PureProtocolProcessorPlugin.js +68 -0
  162. package/lib/graphManager/protocol/pure/QueryBuilder_PureProtocolProcessorPlugin.js.map +1 -0
  163. package/lib/graphManager/protocol/pure/v1/V1_QueryBuilder_FunctionExpressionBuilder.d.ts +22 -0
  164. package/lib/graphManager/protocol/pure/v1/V1_QueryBuilder_FunctionExpressionBuilder.d.ts.map +1 -0
  165. package/lib/graphManager/protocol/pure/v1/V1_QueryBuilder_FunctionExpressionBuilder.js +207 -0
  166. package/lib/graphManager/protocol/pure/v1/V1_QueryBuilder_FunctionExpressionBuilder.js.map +1 -0
  167. package/lib/graphManager/protocol/pure/v1/V1_QueryBuilder_PropertyExpressionTypeInferenceBuilder.d.ts +18 -0
  168. package/lib/graphManager/protocol/pure/v1/V1_QueryBuilder_PropertyExpressionTypeInferenceBuilder.d.ts.map +1 -0
  169. package/lib/graphManager/protocol/pure/v1/V1_QueryBuilder_PropertyExpressionTypeInferenceBuilder.js +18 -0
  170. package/lib/graphManager/protocol/pure/v1/V1_QueryBuilder_PropertyExpressionTypeInferenceBuilder.js.map +1 -0
  171. package/lib/graphManager/protocol/pure/v1/V1_QueryBuilder_PureGraphManagerExtension.d.ts +29 -0
  172. package/lib/graphManager/protocol/pure/v1/V1_QueryBuilder_PureGraphManagerExtension.d.ts.map +1 -0
  173. package/lib/graphManager/protocol/pure/v1/V1_QueryBuilder_PureGraphManagerExtension.js +182 -0
  174. package/lib/graphManager/protocol/pure/v1/V1_QueryBuilder_PureGraphManagerExtension.js.map +1 -0
  175. package/lib/index.css +17 -0
  176. package/lib/index.css.map +1 -0
  177. package/lib/index.d.ts +36 -0
  178. package/lib/index.d.ts.map +1 -0
  179. package/lib/index.js +36 -0
  180. package/lib/index.js.map +1 -0
  181. package/lib/package.json +99 -0
  182. package/lib/stores/LegendQueryApplicationPlugin.d.ts +47 -0
  183. package/lib/stores/LegendQueryApplicationPlugin.d.ts.map +1 -0
  184. package/lib/stores/LegendQueryApplicationPlugin.js +27 -0
  185. package/lib/stores/LegendQueryApplicationPlugin.js.map +1 -0
  186. package/lib/stores/LegendQueryBaseStore.d.ts +28 -0
  187. package/lib/stores/LegendQueryBaseStore.d.ts.map +1 -0
  188. package/lib/stores/LegendQueryBaseStore.js +28 -0
  189. package/lib/stores/LegendQueryBaseStore.js.map +1 -0
  190. package/lib/stores/LegendQueryEventService.d.ts +27 -0
  191. package/lib/stores/LegendQueryEventService.d.ts.map +1 -0
  192. package/lib/stores/LegendQueryEventService.js +29 -0
  193. package/lib/stores/LegendQueryEventService.js.map +1 -0
  194. package/lib/stores/LegendQueryRouter.d.ts +55 -0
  195. package/lib/stores/LegendQueryRouter.d.ts.map +1 -0
  196. package/lib/stores/LegendQueryRouter.js +50 -0
  197. package/lib/stores/LegendQueryRouter.js.map +1 -0
  198. package/lib/stores/QueryBuilderAggregationState.d.ts +53 -0
  199. package/lib/stores/QueryBuilderAggregationState.d.ts.map +1 -0
  200. package/lib/stores/QueryBuilderAggregationState.js +122 -0
  201. package/lib/stores/QueryBuilderAggregationState.js.map +1 -0
  202. package/lib/stores/QueryBuilderExplorerState.d.ts +93 -0
  203. package/lib/stores/QueryBuilderExplorerState.d.ts.map +1 -0
  204. package/lib/stores/QueryBuilderExplorerState.js +310 -0
  205. package/lib/stores/QueryBuilderExplorerState.js.map +1 -0
  206. package/lib/stores/QueryBuilderFetchStructureState.d.ts +33 -0
  207. package/lib/stores/QueryBuilderFetchStructureState.d.ts.map +1 -0
  208. package/lib/stores/QueryBuilderFetchStructureState.js +50 -0
  209. package/lib/stores/QueryBuilderFetchStructureState.js.map +1 -0
  210. package/lib/stores/QueryBuilderFilterState.d.ts +127 -0
  211. package/lib/stores/QueryBuilderFilterState.d.ts.map +1 -0
  212. package/lib/stores/QueryBuilderFilterState.js +566 -0
  213. package/lib/stores/QueryBuilderFilterState.js.map +1 -0
  214. package/lib/stores/QueryBuilderGraphFetchTreeState.d.ts +35 -0
  215. package/lib/stores/QueryBuilderGraphFetchTreeState.d.ts.map +1 -0
  216. package/lib/stores/QueryBuilderGraphFetchTreeState.js +65 -0
  217. package/lib/stores/QueryBuilderGraphFetchTreeState.js.map +1 -0
  218. package/lib/stores/QueryBuilderGraphFetchTreeUtil.d.ts +41 -0
  219. package/lib/stores/QueryBuilderGraphFetchTreeUtil.d.ts.map +1 -0
  220. package/lib/stores/QueryBuilderGraphFetchTreeUtil.js +173 -0
  221. package/lib/stores/QueryBuilderGraphFetchTreeUtil.js.map +1 -0
  222. package/lib/stores/QueryBuilderLambdaBuilder.d.ts +30 -0
  223. package/lib/stores/QueryBuilderLambdaBuilder.d.ts.map +1 -0
  224. package/lib/stores/QueryBuilderLambdaBuilder.js +407 -0
  225. package/lib/stores/QueryBuilderLambdaBuilder.js.map +1 -0
  226. package/lib/stores/QueryBuilderLambdaProcessor.d.ts +56 -0
  227. package/lib/stores/QueryBuilderLambdaProcessor.d.ts.map +1 -0
  228. package/lib/stores/QueryBuilderLambdaProcessor.js +544 -0
  229. package/lib/stores/QueryBuilderLambdaProcessor.js.map +1 -0
  230. package/lib/stores/QueryBuilderOperatorsHelper.d.ts +28 -0
  231. package/lib/stores/QueryBuilderOperatorsHelper.d.ts.map +1 -0
  232. package/lib/stores/QueryBuilderOperatorsHelper.js +123 -0
  233. package/lib/stores/QueryBuilderOperatorsHelper.js.map +1 -0
  234. package/lib/stores/QueryBuilderPostFilterOperator.d.ts +29 -0
  235. package/lib/stores/QueryBuilderPostFilterOperator.d.ts.map +1 -0
  236. package/lib/stores/QueryBuilderPostFilterOperator.js +30 -0
  237. package/lib/stores/QueryBuilderPostFilterOperator.js.map +1 -0
  238. package/lib/stores/QueryBuilderPostFilterProcessor.d.ts +24 -0
  239. package/lib/stores/QueryBuilderPostFilterProcessor.d.ts.map +1 -0
  240. package/lib/stores/QueryBuilderPostFilterProcessor.js +111 -0
  241. package/lib/stores/QueryBuilderPostFilterProcessor.js.map +1 -0
  242. package/lib/stores/QueryBuilderPostFilterState.d.ts +132 -0
  243. package/lib/stores/QueryBuilderPostFilterState.d.ts.map +1 -0
  244. package/lib/stores/QueryBuilderPostFilterState.js +559 -0
  245. package/lib/stores/QueryBuilderPostFilterState.js.map +1 -0
  246. package/lib/stores/QueryBuilderPreviewDataHelper.d.ts +25 -0
  247. package/lib/stores/QueryBuilderPreviewDataHelper.d.ts.map +1 -0
  248. package/lib/stores/QueryBuilderPreviewDataHelper.js +161 -0
  249. package/lib/stores/QueryBuilderPreviewDataHelper.js.map +1 -0
  250. package/lib/stores/QueryBuilderProjectionState.d.ts +104 -0
  251. package/lib/stores/QueryBuilderProjectionState.d.ts.map +1 -0
  252. package/lib/stores/QueryBuilderProjectionState.js +432 -0
  253. package/lib/stores/QueryBuilderProjectionState.js.map +1 -0
  254. package/lib/stores/QueryBuilderPropertyEditorState.d.ts +62 -0
  255. package/lib/stores/QueryBuilderPropertyEditorState.d.ts.map +1 -0
  256. package/lib/stores/QueryBuilderPropertyEditorState.js +384 -0
  257. package/lib/stores/QueryBuilderPropertyEditorState.js.map +1 -0
  258. package/lib/stores/QueryBuilderPropertySearchPanelState.d.ts +46 -0
  259. package/lib/stores/QueryBuilderPropertySearchPanelState.d.ts.map +1 -0
  260. package/lib/stores/QueryBuilderPropertySearchPanelState.js +240 -0
  261. package/lib/stores/QueryBuilderPropertySearchPanelState.js.map +1 -0
  262. package/lib/stores/QueryBuilderResultState.d.ts +38 -0
  263. package/lib/stores/QueryBuilderResultState.d.ts.map +1 -0
  264. package/lib/stores/QueryBuilderResultState.js +164 -0
  265. package/lib/stores/QueryBuilderResultState.js.map +1 -0
  266. package/lib/stores/QueryBuilderSetupState.d.ts +46 -0
  267. package/lib/stores/QueryBuilderSetupState.d.ts.map +1 -0
  268. package/lib/stores/QueryBuilderSetupState.js +163 -0
  269. package/lib/stores/QueryBuilderSetupState.js.map +1 -0
  270. package/lib/stores/QueryBuilderState.d.ts +101 -0
  271. package/lib/stores/QueryBuilderState.d.ts.map +1 -0
  272. package/lib/stores/QueryBuilderState.js +371 -0
  273. package/lib/stores/QueryBuilderState.js.map +1 -0
  274. package/lib/stores/QueryBuilderUnsupportedState.d.ts +26 -0
  275. package/lib/stores/QueryBuilderUnsupportedState.d.ts.map +1 -0
  276. package/lib/stores/QueryBuilderUnsupportedState.js +36 -0
  277. package/lib/stores/QueryBuilderUnsupportedState.js.map +1 -0
  278. package/lib/stores/QueryBuilderValueSpecificationBuilderHelper.d.ts +19 -0
  279. package/lib/stores/QueryBuilderValueSpecificationBuilderHelper.d.ts.map +1 -0
  280. package/lib/stores/QueryBuilderValueSpecificationBuilderHelper.js +50 -0
  281. package/lib/stores/QueryBuilderValueSpecificationBuilderHelper.js.map +1 -0
  282. package/lib/stores/QueryEditorStore.d.ts +98 -0
  283. package/lib/stores/QueryEditorStore.d.ts.map +1 -0
  284. package/lib/stores/QueryEditorStore.js +370 -0
  285. package/lib/stores/QueryEditorStore.js.map +1 -0
  286. package/lib/stores/QueryEditorStoreTestUtils.d.ts +18 -0
  287. package/lib/stores/QueryEditorStoreTestUtils.d.ts.map +1 -0
  288. package/lib/stores/QueryEditorStoreTestUtils.js +42 -0
  289. package/lib/stores/QueryEditorStoreTestUtils.js.map +1 -0
  290. package/lib/stores/QueryFunctionsExplorerState.d.ts +63 -0
  291. package/lib/stores/QueryFunctionsExplorerState.d.ts.map +1 -0
  292. package/lib/stores/QueryFunctionsExplorerState.js +238 -0
  293. package/lib/stores/QueryFunctionsExplorerState.js.map +1 -0
  294. package/lib/stores/QueryParametersState.d.ts +30 -0
  295. package/lib/stores/QueryParametersState.d.ts.map +1 -0
  296. package/lib/stores/QueryParametersState.js +42 -0
  297. package/lib/stores/QueryParametersState.js.map +1 -0
  298. package/lib/stores/QueryResultSetModifierState.d.ts +52 -0
  299. package/lib/stores/QueryResultSetModifierState.d.ts.map +1 -0
  300. package/lib/stores/QueryResultSetModifierState.js +165 -0
  301. package/lib/stores/QueryResultSetModifierState.js.map +1 -0
  302. package/lib/stores/QuerySetupStore.d.ts +86 -0
  303. package/lib/stores/QuerySetupStore.d.ts.map +1 -0
  304. package/lib/stores/QuerySetupStore.js +297 -0
  305. package/lib/stores/QuerySetupStore.js.map +1 -0
  306. package/lib/stores/QueryTextEditorState.d.ts +49 -0
  307. package/lib/stores/QueryTextEditorState.d.ts.map +1 -0
  308. package/lib/stores/QueryTextEditorState.js +145 -0
  309. package/lib/stores/QueryTextEditorState.js.map +1 -0
  310. package/lib/stores/aggregateOperators/QueryBuilderAggregateOperatorHelper.d.ts +21 -0
  311. package/lib/stores/aggregateOperators/QueryBuilderAggregateOperatorHelper.d.ts.map +1 -0
  312. package/lib/stores/aggregateOperators/QueryBuilderAggregateOperatorHelper.js +40 -0
  313. package/lib/stores/aggregateOperators/QueryBuilderAggregateOperatorHelper.js.map +1 -0
  314. package/lib/stores/aggregateOperators/QueryBuilderAggregateOperator_Average.d.ts +26 -0
  315. package/lib/stores/aggregateOperators/QueryBuilderAggregateOperator_Average.d.ts.map +1 -0
  316. package/lib/stores/aggregateOperators/QueryBuilderAggregateOperator_Average.js +50 -0
  317. package/lib/stores/aggregateOperators/QueryBuilderAggregateOperator_Average.js.map +1 -0
  318. package/lib/stores/aggregateOperators/QueryBuilderAggregateOperator_Count.d.ts +26 -0
  319. package/lib/stores/aggregateOperators/QueryBuilderAggregateOperator_Count.d.ts.map +1 -0
  320. package/lib/stores/aggregateOperators/QueryBuilderAggregateOperator_Count.js +55 -0
  321. package/lib/stores/aggregateOperators/QueryBuilderAggregateOperator_Count.js.map +1 -0
  322. package/lib/stores/aggregateOperators/QueryBuilderAggregateOperator_Distinct.d.ts +25 -0
  323. package/lib/stores/aggregateOperators/QueryBuilderAggregateOperator_Distinct.d.ts.map +1 -0
  324. package/lib/stores/aggregateOperators/QueryBuilderAggregateOperator_Distinct.js +50 -0
  325. package/lib/stores/aggregateOperators/QueryBuilderAggregateOperator_Distinct.js.map +1 -0
  326. package/lib/stores/aggregateOperators/QueryBuilderAggregateOperator_DistinctCount.d.ts +26 -0
  327. package/lib/stores/aggregateOperators/QueryBuilderAggregateOperator_DistinctCount.d.ts.map +1 -0
  328. package/lib/stores/aggregateOperators/QueryBuilderAggregateOperator_DistinctCount.js +77 -0
  329. package/lib/stores/aggregateOperators/QueryBuilderAggregateOperator_DistinctCount.js.map +1 -0
  330. package/lib/stores/aggregateOperators/QueryBuilderAggregateOperator_JoinString.d.ts +26 -0
  331. package/lib/stores/aggregateOperators/QueryBuilderAggregateOperator_JoinString.d.ts.map +1 -0
  332. package/lib/stores/aggregateOperators/QueryBuilderAggregateOperator_JoinString.js +66 -0
  333. package/lib/stores/aggregateOperators/QueryBuilderAggregateOperator_JoinString.js.map +1 -0
  334. package/lib/stores/aggregateOperators/QueryBuilderAggregateOperator_Max.d.ts +25 -0
  335. package/lib/stores/aggregateOperators/QueryBuilderAggregateOperator_Max.d.ts.map +1 -0
  336. package/lib/stores/aggregateOperators/QueryBuilderAggregateOperator_Max.js +86 -0
  337. package/lib/stores/aggregateOperators/QueryBuilderAggregateOperator_Max.js.map +1 -0
  338. package/lib/stores/aggregateOperators/QueryBuilderAggregateOperator_Min.d.ts +25 -0
  339. package/lib/stores/aggregateOperators/QueryBuilderAggregateOperator_Min.d.ts.map +1 -0
  340. package/lib/stores/aggregateOperators/QueryBuilderAggregateOperator_Min.js +86 -0
  341. package/lib/stores/aggregateOperators/QueryBuilderAggregateOperator_Min.js.map +1 -0
  342. package/lib/stores/aggregateOperators/QueryBuilderAggregateOperator_StdDev_Population.d.ts +26 -0
  343. package/lib/stores/aggregateOperators/QueryBuilderAggregateOperator_StdDev_Population.d.ts.map +1 -0
  344. package/lib/stores/aggregateOperators/QueryBuilderAggregateOperator_StdDev_Population.js +50 -0
  345. package/lib/stores/aggregateOperators/QueryBuilderAggregateOperator_StdDev_Population.js.map +1 -0
  346. package/lib/stores/aggregateOperators/QueryBuilderAggregateOperator_StdDev_Sample.d.ts +26 -0
  347. package/lib/stores/aggregateOperators/QueryBuilderAggregateOperator_StdDev_Sample.d.ts.map +1 -0
  348. package/lib/stores/aggregateOperators/QueryBuilderAggregateOperator_StdDev_Sample.js +50 -0
  349. package/lib/stores/aggregateOperators/QueryBuilderAggregateOperator_StdDev_Sample.js.map +1 -0
  350. package/lib/stores/aggregateOperators/QueryBuilderAggregateOperator_Sum.d.ts +25 -0
  351. package/lib/stores/aggregateOperators/QueryBuilderAggregateOperator_Sum.d.ts.map +1 -0
  352. package/lib/stores/aggregateOperators/QueryBuilderAggregateOperator_Sum.js +45 -0
  353. package/lib/stores/aggregateOperators/QueryBuilderAggregateOperator_Sum.js.map +1 -0
  354. package/lib/stores/filterOperators/QueryBuilderFilterOperatorHelper.d.ts +20 -0
  355. package/lib/stores/filterOperators/QueryBuilderFilterOperatorHelper.d.ts.map +1 -0
  356. package/lib/stores/filterOperators/QueryBuilderFilterOperatorHelper.js +257 -0
  357. package/lib/stores/filterOperators/QueryBuilderFilterOperatorHelper.js.map +1 -0
  358. package/lib/stores/filterOperators/QueryBuilderFilterOperator_Contain.d.ts +31 -0
  359. package/lib/stores/filterOperators/QueryBuilderFilterOperator_Contain.d.ts.map +1 -0
  360. package/lib/stores/filterOperators/QueryBuilderFilterOperator_Contain.js +72 -0
  361. package/lib/stores/filterOperators/QueryBuilderFilterOperator_Contain.js.map +1 -0
  362. package/lib/stores/filterOperators/QueryBuilderFilterOperator_EndWith.d.ts +31 -0
  363. package/lib/stores/filterOperators/QueryBuilderFilterOperator_EndWith.d.ts.map +1 -0
  364. package/lib/stores/filterOperators/QueryBuilderFilterOperator_EndWith.js +72 -0
  365. package/lib/stores/filterOperators/QueryBuilderFilterOperator_EndWith.js.map +1 -0
  366. package/lib/stores/filterOperators/QueryBuilderFilterOperator_Equal.d.ts +31 -0
  367. package/lib/stores/filterOperators/QueryBuilderFilterOperator_Equal.d.ts.map +1 -0
  368. package/lib/stores/filterOperators/QueryBuilderFilterOperator_Equal.js +139 -0
  369. package/lib/stores/filterOperators/QueryBuilderFilterOperator_Equal.js.map +1 -0
  370. package/lib/stores/filterOperators/QueryBuilderFilterOperator_GreaterThan.d.ts +26 -0
  371. package/lib/stores/filterOperators/QueryBuilderFilterOperator_GreaterThan.d.ts.map +1 -0
  372. package/lib/stores/filterOperators/QueryBuilderFilterOperator_GreaterThan.js +107 -0
  373. package/lib/stores/filterOperators/QueryBuilderFilterOperator_GreaterThan.js.map +1 -0
  374. package/lib/stores/filterOperators/QueryBuilderFilterOperator_GreaterThanEqual.d.ts +26 -0
  375. package/lib/stores/filterOperators/QueryBuilderFilterOperator_GreaterThanEqual.d.ts.map +1 -0
  376. package/lib/stores/filterOperators/QueryBuilderFilterOperator_GreaterThanEqual.js +107 -0
  377. package/lib/stores/filterOperators/QueryBuilderFilterOperator_GreaterThanEqual.js.map +1 -0
  378. package/lib/stores/filterOperators/QueryBuilderFilterOperator_In.d.ts +31 -0
  379. package/lib/stores/filterOperators/QueryBuilderFilterOperator_In.d.ts.map +1 -0
  380. package/lib/stores/filterOperators/QueryBuilderFilterOperator_In.js +103 -0
  381. package/lib/stores/filterOperators/QueryBuilderFilterOperator_In.js.map +1 -0
  382. package/lib/stores/filterOperators/QueryBuilderFilterOperator_IsEmpty.d.ts +31 -0
  383. package/lib/stores/filterOperators/QueryBuilderFilterOperator_IsEmpty.d.ts.map +1 -0
  384. package/lib/stores/filterOperators/QueryBuilderFilterOperator_IsEmpty.js +65 -0
  385. package/lib/stores/filterOperators/QueryBuilderFilterOperator_IsEmpty.js.map +1 -0
  386. package/lib/stores/filterOperators/QueryBuilderFilterOperator_LessThan.d.ts +26 -0
  387. package/lib/stores/filterOperators/QueryBuilderFilterOperator_LessThan.d.ts.map +1 -0
  388. package/lib/stores/filterOperators/QueryBuilderFilterOperator_LessThan.js +108 -0
  389. package/lib/stores/filterOperators/QueryBuilderFilterOperator_LessThan.js.map +1 -0
  390. package/lib/stores/filterOperators/QueryBuilderFilterOperator_LessThanEqual.d.ts +26 -0
  391. package/lib/stores/filterOperators/QueryBuilderFilterOperator_LessThanEqual.d.ts.map +1 -0
  392. package/lib/stores/filterOperators/QueryBuilderFilterOperator_LessThanEqual.js +107 -0
  393. package/lib/stores/filterOperators/QueryBuilderFilterOperator_LessThanEqual.js.map +1 -0
  394. package/lib/stores/filterOperators/QueryBuilderFilterOperator_StartWith.d.ts +31 -0
  395. package/lib/stores/filterOperators/QueryBuilderFilterOperator_StartWith.d.ts.map +1 -0
  396. package/lib/stores/filterOperators/QueryBuilderFilterOperator_StartWith.js +72 -0
  397. package/lib/stores/filterOperators/QueryBuilderFilterOperator_StartWith.js.map +1 -0
  398. package/lib/stores/postFilterOperators/QueryBuilderPostFilterOperatorHelper.d.ts +23 -0
  399. package/lib/stores/postFilterOperators/QueryBuilderPostFilterOperatorHelper.d.ts.map +1 -0
  400. package/lib/stores/postFilterOperators/QueryBuilderPostFilterOperatorHelper.js +74 -0
  401. package/lib/stores/postFilterOperators/QueryBuilderPostFilterOperatorHelper.js.map +1 -0
  402. package/lib/stores/postFilterOperators/QueryBuilderPostFilterOperator_Contain.d.ts +32 -0
  403. package/lib/stores/postFilterOperators/QueryBuilderPostFilterOperator_Contain.d.ts.map +1 -0
  404. package/lib/stores/postFilterOperators/QueryBuilderPostFilterOperator_Contain.js +76 -0
  405. package/lib/stores/postFilterOperators/QueryBuilderPostFilterOperator_Contain.js.map +1 -0
  406. package/lib/stores/postFilterOperators/QueryBuilderPostFilterOperator_EndWith.d.ts +32 -0
  407. package/lib/stores/postFilterOperators/QueryBuilderPostFilterOperator_EndWith.d.ts.map +1 -0
  408. package/lib/stores/postFilterOperators/QueryBuilderPostFilterOperator_EndWith.js +76 -0
  409. package/lib/stores/postFilterOperators/QueryBuilderPostFilterOperator_EndWith.js.map +1 -0
  410. package/lib/stores/postFilterOperators/QueryBuilderPostFilterOperator_Equal.d.ts +32 -0
  411. package/lib/stores/postFilterOperators/QueryBuilderPostFilterOperator_Equal.d.ts.map +1 -0
  412. package/lib/stores/postFilterOperators/QueryBuilderPostFilterOperator_Equal.js +142 -0
  413. package/lib/stores/postFilterOperators/QueryBuilderPostFilterOperator_Equal.js.map +1 -0
  414. package/lib/stores/postFilterOperators/QueryBuilderPostFilterOperator_GreaterThan.d.ts +27 -0
  415. package/lib/stores/postFilterOperators/QueryBuilderPostFilterOperator_GreaterThan.d.ts.map +1 -0
  416. package/lib/stores/postFilterOperators/QueryBuilderPostFilterOperator_GreaterThan.js +105 -0
  417. package/lib/stores/postFilterOperators/QueryBuilderPostFilterOperator_GreaterThan.js.map +1 -0
  418. package/lib/stores/postFilterOperators/QueryBuilderPostFilterOperator_GreaterThanEqual.d.ts +24 -0
  419. package/lib/stores/postFilterOperators/QueryBuilderPostFilterOperator_GreaterThanEqual.d.ts.map +1 -0
  420. package/lib/stores/postFilterOperators/QueryBuilderPostFilterOperator_GreaterThanEqual.js +43 -0
  421. package/lib/stores/postFilterOperators/QueryBuilderPostFilterOperator_GreaterThanEqual.js.map +1 -0
  422. package/lib/stores/postFilterOperators/QueryBuilderPostFilterOperator_In.d.ts +32 -0
  423. package/lib/stores/postFilterOperators/QueryBuilderPostFilterOperator_In.d.ts.map +1 -0
  424. package/lib/stores/postFilterOperators/QueryBuilderPostFilterOperator_In.js +104 -0
  425. package/lib/stores/postFilterOperators/QueryBuilderPostFilterOperator_In.js.map +1 -0
  426. package/lib/stores/postFilterOperators/QueryBuilderPostFilterOperator_IsEmpty.d.ts +33 -0
  427. package/lib/stores/postFilterOperators/QueryBuilderPostFilterOperator_IsEmpty.d.ts.map +1 -0
  428. package/lib/stores/postFilterOperators/QueryBuilderPostFilterOperator_IsEmpty.js +67 -0
  429. package/lib/stores/postFilterOperators/QueryBuilderPostFilterOperator_IsEmpty.js.map +1 -0
  430. package/lib/stores/postFilterOperators/QueryBuilderPostFilterOperator_LessThan.d.ts +27 -0
  431. package/lib/stores/postFilterOperators/QueryBuilderPostFilterOperator_LessThan.d.ts.map +1 -0
  432. package/lib/stores/postFilterOperators/QueryBuilderPostFilterOperator_LessThan.js +105 -0
  433. package/lib/stores/postFilterOperators/QueryBuilderPostFilterOperator_LessThan.js.map +1 -0
  434. package/lib/stores/postFilterOperators/QueryBuilderPostFilterOperator_LessThanEqual.d.ts +24 -0
  435. package/lib/stores/postFilterOperators/QueryBuilderPostFilterOperator_LessThanEqual.d.ts.map +1 -0
  436. package/lib/stores/postFilterOperators/QueryBuilderPostFilterOperator_LessThanEqual.js +43 -0
  437. package/lib/stores/postFilterOperators/QueryBuilderPostFilterOperator_LessThanEqual.js.map +1 -0
  438. package/lib/stores/postFilterOperators/QueryBuilderPostFilterOperator_StartWith.d.ts +32 -0
  439. package/lib/stores/postFilterOperators/QueryBuilderPostFilterOperator_StartWith.d.ts.map +1 -0
  440. package/lib/stores/postFilterOperators/QueryBuilderPostFilterOperator_StartWith.js +76 -0
  441. package/lib/stores/postFilterOperators/QueryBuilderPostFilterOperator_StartWith.js.map +1 -0
  442. package/package.json +99 -0
  443. package/src/LegendQueryAppEvent.ts +20 -0
  444. package/src/QueryBuilder_Const.ts +88 -0
  445. package/src/application/LegendQuery.tsx +92 -0
  446. package/src/application/LegendQueryApplicationConfig.ts +77 -0
  447. package/src/application/LegendQueryPluginManager.ts +67 -0
  448. package/src/components/LegendQueryApplication.tsx +104 -0
  449. package/src/components/LegendQueryBaseStoreProvider.tsx +68 -0
  450. package/src/components/QueryBuilder.tsx +375 -0
  451. package/src/components/QueryBuilderExplorerPanel.tsx +998 -0
  452. package/src/components/QueryBuilderFetchStructurePanel.tsx +184 -0
  453. package/src/components/QueryBuilderFilterPanel.tsx +858 -0
  454. package/src/components/QueryBuilderFunctionsExplorerPanel.tsx +598 -0
  455. package/src/components/QueryBuilderGraphFetchTreePanel.tsx +270 -0
  456. package/src/components/QueryBuilderLambdaEditor.tsx +117 -0
  457. package/src/components/QueryBuilderMilestoneEditor.tsx +291 -0
  458. package/src/components/QueryBuilderParameterPanel.tsx +434 -0
  459. package/src/components/QueryBuilderPostFilterPanel.tsx +1061 -0
  460. package/src/components/QueryBuilderProjectionPanel.tsx +652 -0
  461. package/src/components/QueryBuilderPropertyExpressionEditor.tsx +370 -0
  462. package/src/components/QueryBuilderPropertyInfoTooltip.tsx +87 -0
  463. package/src/components/QueryBuilderPropertySearchPanel.tsx +617 -0
  464. package/src/components/QueryBuilderResultModifierPanel.tsx +252 -0
  465. package/src/components/QueryBuilderResultPanel.tsx +582 -0
  466. package/src/components/QueryBuilderSetupPanel.tsx +341 -0
  467. package/src/components/QueryBuilderTextEditor.tsx +127 -0
  468. package/src/components/QueryBuilderUnsupportedQueryEditor.tsx +110 -0
  469. package/src/components/QueryBuilder_TestID.ts +26 -0
  470. package/src/components/QueryEditor.tsx +345 -0
  471. package/src/components/QueryEditorComponentTestUtils.tsx +200 -0
  472. package/src/components/QueryEditorStoreProvider.tsx +128 -0
  473. package/src/components/QuerySetup.tsx +907 -0
  474. package/src/components/QuerySetupStoreProvider.tsx +65 -0
  475. package/src/components/shared/ElementIconUtils.tsx +47 -0
  476. package/src/graphManager/QueryBuilder_GraphManagerPlugin.ts +32 -0
  477. package/src/graphManager/QueryBuilder_GraphManagerPreset.ts +33 -0
  478. package/src/graphManager/action/analytics/MappingRuntimeCompatibilityAnalysis.ts +22 -0
  479. package/src/graphManager/action/analytics/ServiceExecutionAnalysis.ts +22 -0
  480. package/src/graphManager/protocol/pure/QueryBuilder_PureGraphManagerExtension.ts +47 -0
  481. package/src/graphManager/protocol/pure/QueryBuilder_PureGraphManagerExtensionBuilder.ts +27 -0
  482. package/src/graphManager/protocol/pure/QueryBuilder_PureProtocolProcessorPlugin.ts +170 -0
  483. package/src/graphManager/protocol/pure/v1/V1_QueryBuilder_FunctionExpressionBuilder.ts +573 -0
  484. package/src/graphManager/protocol/pure/v1/V1_QueryBuilder_PropertyExpressionTypeInferenceBuilder.ts +28 -0
  485. package/src/graphManager/protocol/pure/v1/V1_QueryBuilder_PureGraphManagerExtension.ts +296 -0
  486. package/src/index.ts +57 -0
  487. package/src/stores/LegendQueryApplicationPlugin.ts +61 -0
  488. package/src/stores/LegendQueryBaseStore.ts +47 -0
  489. package/src/stores/LegendQueryEventService.ts +38 -0
  490. package/src/stores/LegendQueryRouter.ts +114 -0
  491. package/src/stores/QueryBuilderAggregationState.ts +208 -0
  492. package/src/stores/QueryBuilderExplorerState.ts +590 -0
  493. package/src/stores/QueryBuilderFetchStructureState.ts +59 -0
  494. package/src/stores/QueryBuilderFilterState.ts +815 -0
  495. package/src/stores/QueryBuilderGraphFetchTreeState.ts +90 -0
  496. package/src/stores/QueryBuilderGraphFetchTreeUtil.ts +281 -0
  497. package/src/stores/QueryBuilderLambdaBuilder.ts +755 -0
  498. package/src/stores/QueryBuilderLambdaProcessor.ts +1239 -0
  499. package/src/stores/QueryBuilderOperatorsHelper.ts +191 -0
  500. package/src/stores/QueryBuilderPostFilterOperator.ts +66 -0
  501. package/src/stores/QueryBuilderPostFilterProcessor.ts +275 -0
  502. package/src/stores/QueryBuilderPostFilterState.ts +762 -0
  503. package/src/stores/QueryBuilderPreviewDataHelper.ts +300 -0
  504. package/src/stores/QueryBuilderProjectionState.ts +796 -0
  505. package/src/stores/QueryBuilderPropertyEditorState.ts +656 -0
  506. package/src/stores/QueryBuilderPropertySearchPanelState.ts +331 -0
  507. package/src/stores/QueryBuilderResultState.ts +263 -0
  508. package/src/stores/QueryBuilderSetupState.ts +236 -0
  509. package/src/stores/QueryBuilderState.ts +561 -0
  510. package/src/stores/QueryBuilderUnsupportedState.ts +42 -0
  511. package/src/stores/QueryBuilderValueSpecificationBuilderHelper.ts +76 -0
  512. package/src/stores/QueryEditorStore.ts +648 -0
  513. package/src/stores/QueryEditorStoreTestUtils.ts +46 -0
  514. package/src/stores/QueryFunctionsExplorerState.ts +386 -0
  515. package/src/stores/QueryParametersState.ts +54 -0
  516. package/src/stores/QueryResultSetModifierState.ts +307 -0
  517. package/src/stores/QuerySetupStore.ts +430 -0
  518. package/src/stores/QueryTextEditorState.ts +203 -0
  519. package/src/stores/aggregateOperators/QueryBuilderAggregateOperatorHelper.ts +111 -0
  520. package/src/stores/aggregateOperators/QueryBuilderAggregateOperator_Average.ts +100 -0
  521. package/src/stores/aggregateOperators/QueryBuilderAggregateOperator_Count.ts +108 -0
  522. package/src/stores/aggregateOperators/QueryBuilderAggregateOperator_Distinct.ts +98 -0
  523. package/src/stores/aggregateOperators/QueryBuilderAggregateOperator_DistinctCount.ts +175 -0
  524. package/src/stores/aggregateOperators/QueryBuilderAggregateOperator_JoinString.ts +157 -0
  525. package/src/stores/aggregateOperators/QueryBuilderAggregateOperator_Max.ts +176 -0
  526. package/src/stores/aggregateOperators/QueryBuilderAggregateOperator_Min.ts +176 -0
  527. package/src/stores/aggregateOperators/QueryBuilderAggregateOperator_StdDev_Population.ts +100 -0
  528. package/src/stores/aggregateOperators/QueryBuilderAggregateOperator_StdDev_Sample.ts +100 -0
  529. package/src/stores/aggregateOperators/QueryBuilderAggregateOperator_Sum.ts +90 -0
  530. package/src/stores/filterOperators/QueryBuilderFilterOperatorHelper.ts +524 -0
  531. package/src/stores/filterOperators/QueryBuilderFilterOperator_Contain.ts +134 -0
  532. package/src/stores/filterOperators/QueryBuilderFilterOperator_EndWith.ts +134 -0
  533. package/src/stores/filterOperators/QueryBuilderFilterOperator_Equal.ts +233 -0
  534. package/src/stores/filterOperators/QueryBuilderFilterOperator_GreaterThan.ts +164 -0
  535. package/src/stores/filterOperators/QueryBuilderFilterOperator_GreaterThanEqual.ts +164 -0
  536. package/src/stores/filterOperators/QueryBuilderFilterOperator_In.ts +181 -0
  537. package/src/stores/filterOperators/QueryBuilderFilterOperator_IsEmpty.ts +125 -0
  538. package/src/stores/filterOperators/QueryBuilderFilterOperator_LessThan.ts +165 -0
  539. package/src/stores/filterOperators/QueryBuilderFilterOperator_LessThanEqual.ts +164 -0
  540. package/src/stores/filterOperators/QueryBuilderFilterOperator_StartWith.ts +134 -0
  541. package/src/stores/postFilterOperators/QueryBuilderPostFilterOperatorHelper.ts +129 -0
  542. package/src/stores/postFilterOperators/QueryBuilderPostFilterOperator_Contain.ts +140 -0
  543. package/src/stores/postFilterOperators/QueryBuilderPostFilterOperator_EndWith.ts +135 -0
  544. package/src/stores/postFilterOperators/QueryBuilderPostFilterOperator_Equal.ts +238 -0
  545. package/src/stores/postFilterOperators/QueryBuilderPostFilterOperator_GreaterThan.ts +161 -0
  546. package/src/stores/postFilterOperators/QueryBuilderPostFilterOperator_GreaterThanEqual.ts +70 -0
  547. package/src/stores/postFilterOperators/QueryBuilderPostFilterOperator_In.ts +183 -0
  548. package/src/stores/postFilterOperators/QueryBuilderPostFilterOperator_IsEmpty.ts +113 -0
  549. package/src/stores/postFilterOperators/QueryBuilderPostFilterOperator_LessThan.ts +161 -0
  550. package/src/stores/postFilterOperators/QueryBuilderPostFilterOperator_LessThanEqual.ts +70 -0
  551. package/src/stores/postFilterOperators/QueryBuilderPostFilterOperator_StartWith.ts +135 -0
  552. package/tsconfig.json +155 -0
  553. package/tsconfig.package.json +38 -0
@@ -0,0 +1,1239 @@
1
+ /**
2
+ * Copyright (c) 2020-present, Goldman Sachs
3
+ *
4
+ * Licensed under the Apache License, Version 2.0 (the "License");
5
+ * you may not use this file except in compliance with the License.
6
+ * You may obtain a copy of the License at
7
+ *
8
+ * http://www.apache.org/licenses/LICENSE-2.0
9
+ *
10
+ * Unless required by applicable law or agreed to in writing, software
11
+ * distributed under the License is distributed on an "AS IS" BASIS,
12
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ * See the License for the specific language governing permissions and
14
+ * limitations under the License.
15
+ */
16
+
17
+ import {
18
+ type PlainObject,
19
+ assertNonNullable,
20
+ assertTrue,
21
+ assertType,
22
+ guaranteeNonNullable,
23
+ guaranteeType,
24
+ isNonNullable,
25
+ isNumber,
26
+ isString,
27
+ returnUndefOnError,
28
+ UnsupportedOperationError,
29
+ } from '@finos/legend-shared';
30
+ import type { QueryBuilderState } from './QueryBuilderState.js';
31
+ import {
32
+ COLUMN_SORT_TYPE,
33
+ SortColumnState,
34
+ } from './QueryResultSetModifierState.js';
35
+ import {
36
+ type QueryBuilderFilterState,
37
+ QueryBuilderFilterTreeGroupNodeData,
38
+ QueryBuilderFilterTreeConditionNodeData,
39
+ } from './QueryBuilderFilterState.js';
40
+ import { FETCH_STRUCTURE_MODE } from './QueryBuilderFetchStructureState.js';
41
+ import {
42
+ type AlloySerializationConfigInstanceValue,
43
+ type EnumValueInstanceValue,
44
+ type FunctionExpression,
45
+ type MappingInstanceValue,
46
+ type PairInstanceValue,
47
+ type PropertyGraphFetchTreeInstanceValue,
48
+ type PureListInstanceValue,
49
+ type RootGraphFetchTreeInstanceValue,
50
+ type RuntimeInstanceValue,
51
+ type ValueSpecification,
52
+ type ValueSpecificationVisitor,
53
+ type InstanceValue,
54
+ type INTERNAL__UnknownValueSpecification,
55
+ type LambdaFunction,
56
+ MILESTONING_STEREOTYPE,
57
+ DerivedProperty,
58
+ RawLambda,
59
+ matchFunctionName,
60
+ Class,
61
+ CollectionInstanceValue,
62
+ GraphFetchTreeInstanceValue,
63
+ LambdaFunctionInstanceValue,
64
+ PrimitiveInstanceValue,
65
+ RootGraphFetchTree,
66
+ SimpleFunctionExpression,
67
+ VariableExpression,
68
+ AbstractPropertyExpression,
69
+ V1_deserializeRawValueSpecification,
70
+ V1_RawLambda,
71
+ getMilestoneTemporalStereotype,
72
+ type INTERNAL__PropagatedValue,
73
+ type PureModel,
74
+ } from '@finos/legend-graph';
75
+ import {
76
+ type QueryBuilderProjectionColumnState,
77
+ QueryBuilderDerivationProjectionColumnState,
78
+ QueryBuilderSimpleProjectionColumnState,
79
+ } from './QueryBuilderProjectionState.js';
80
+ import type { QueryBuilderAggregationState } from './QueryBuilderAggregationState.js';
81
+ import { toGroupOperation } from './QueryBuilderOperatorsHelper.js';
82
+ import { processPostFilterLambda } from './QueryBuilderPostFilterProcessor.js';
83
+ import { getDerivedPropertyMilestoningSteoreotype } from './QueryBuilderPropertyEditorState.js';
84
+ import { QUERY_BUILDER_SUPPORTED_FUNCTIONS } from '../QueryBuilder_Const.js';
85
+ import { LambdaParameterState } from '@finos/legend-application';
86
+
87
+ const getNullableStringValueFromValueSpec = (
88
+ valueSpec: ValueSpecification,
89
+ ): string | undefined => {
90
+ if (
91
+ valueSpec instanceof PrimitiveInstanceValue &&
92
+ isString(valueSpec.values[0])
93
+ ) {
94
+ return valueSpec.values[0];
95
+ }
96
+ return undefined;
97
+ };
98
+
99
+ const getNullableNumberValueFromValueSpec = (
100
+ valueSpec: ValueSpecification,
101
+ ): number | undefined => {
102
+ if (
103
+ valueSpec instanceof PrimitiveInstanceValue &&
104
+ isNumber(valueSpec.values[0])
105
+ ) {
106
+ return valueSpec.values[0];
107
+ }
108
+ return undefined;
109
+ };
110
+
111
+ /**
112
+ * Checks if the milestoning property expression is valid in terms of number of parameter values provided
113
+ * in relation to its milestoning type.
114
+ *
115
+ * NOTE: this takes date propgation into account. See the table below for all
116
+ * the combination:
117
+ *
118
+ * | [source] | | | | |
119
+ * ----------------------------------------------------------------------
120
+ * [target] | | NONE | PR_TMP | BI_TMP | BU_TMP |
121
+ * ----------------------------------------------------------------------
122
+ * | NONE | N.A. | PRD | PRD,BUD | BUD |
123
+ * ----------------------------------------------------------------------
124
+ * | PR_TMP | N.A. | X | PRD,BUD | BUD |
125
+ * ----------------------------------------------------------------------
126
+ * | BI_TMP | N.A. | X | X | X |
127
+ * ----------------------------------------------------------------------
128
+ * | BU_TMP | N.A. | PRD | PRD,BUD | X |
129
+ * ----------------------------------------------------------------------
130
+ *
131
+ * Annotations:
132
+ *
133
+ * [source]: source temporal type
134
+ * [target]: target temporal type
135
+ *
136
+ * PR_TMP : processing temporal
137
+ * BI_TMP : bitemporal
138
+ * BU_TMP : business temporal
139
+ *
140
+ * X : no default date propagated
141
+ * PRD : default processing date is propagated
142
+ * BUD : default business date is propgated
143
+ */
144
+ const validatePropertyExpressionChain = (
145
+ propertyExpression: AbstractPropertyExpression,
146
+ graph: PureModel,
147
+ ): void => {
148
+ if (
149
+ propertyExpression.func.genericType.value.rawType instanceof Class &&
150
+ propertyExpression.func._OWNER._generatedMilestonedProperties.length !== 0
151
+ ) {
152
+ const name = propertyExpression.func.name;
153
+ const func =
154
+ propertyExpression.func._OWNER._generatedMilestonedProperties.find(
155
+ (e) => e.name === name,
156
+ );
157
+ if (func) {
158
+ const targetStereotype = getMilestoneTemporalStereotype(
159
+ propertyExpression.func.genericType.value.rawType,
160
+ graph,
161
+ );
162
+
163
+ if (targetStereotype) {
164
+ const sourceStereotype = getDerivedPropertyMilestoningSteoreotype(
165
+ guaranteeType(func, DerivedProperty),
166
+ graph,
167
+ );
168
+ if (
169
+ sourceStereotype !== MILESTONING_STEREOTYPE.BITEMPORAL &&
170
+ targetStereotype !== sourceStereotype
171
+ ) {
172
+ if (targetStereotype === MILESTONING_STEREOTYPE.BITEMPORAL) {
173
+ if (
174
+ propertyExpression.parametersValues.length !== 3 &&
175
+ !sourceStereotype
176
+ ) {
177
+ throw new UnsupportedOperationError(
178
+ `Property of milestoning sterotype '${MILESTONING_STEREOTYPE.BITEMPORAL}' should have exactly two parameters`,
179
+ );
180
+ } else if (propertyExpression.parametersValues.length < 2) {
181
+ throw new UnsupportedOperationError(
182
+ `Property of milestoning sterotype '${MILESTONING_STEREOTYPE.BITEMPORAL}' should have at least one parameter`,
183
+ );
184
+ } else if (propertyExpression.parametersValues.length > 3) {
185
+ throw new UnsupportedOperationError(
186
+ `Property of milestoning sterotype '${MILESTONING_STEREOTYPE.BITEMPORAL}' should not have more than two parameters`,
187
+ );
188
+ }
189
+ } else if (propertyExpression.parametersValues.length !== 2) {
190
+ throw new UnsupportedOperationError(
191
+ `Property of milestoning sterotype '${targetStereotype}' should have exactly one parameter`,
192
+ );
193
+ }
194
+ }
195
+ }
196
+ }
197
+ }
198
+ };
199
+
200
+ const processFilterExpression = (
201
+ expression: SimpleFunctionExpression,
202
+ filterState: QueryBuilderFilterState,
203
+ parentFilterNodeId: string | undefined,
204
+ ): void => {
205
+ const parentNode = parentFilterNodeId
206
+ ? filterState.getNode(parentFilterNodeId)
207
+ : undefined;
208
+ if (
209
+ [
210
+ QUERY_BUILDER_SUPPORTED_FUNCTIONS.AND,
211
+ QUERY_BUILDER_SUPPORTED_FUNCTIONS.OR,
212
+ ].some((fn) => matchFunctionName(expression.functionName, fn))
213
+ ) {
214
+ const groupNode = new QueryBuilderFilterTreeGroupNodeData(
215
+ parentFilterNodeId,
216
+ toGroupOperation(expression.functionName),
217
+ );
218
+ filterState.nodes.set(groupNode.id, groupNode);
219
+ expression.parametersValues.forEach((filterExpression) =>
220
+ processFilterExpression(
221
+ guaranteeType(
222
+ filterExpression,
223
+ SimpleFunctionExpression,
224
+ `Can't process filter group expression: each child expression must be a function expression`,
225
+ ),
226
+ filterState,
227
+ groupNode.id,
228
+ ),
229
+ );
230
+ filterState.addNodeFromNode(groupNode, parentNode);
231
+ } else {
232
+ const propertyExpression = expression.parametersValues[0];
233
+ if (propertyExpression instanceof AbstractPropertyExpression) {
234
+ const currentPropertyExpression = propertyExpression.parametersValues[0];
235
+ if (currentPropertyExpression instanceof AbstractPropertyExpression) {
236
+ validatePropertyExpressionChain(
237
+ currentPropertyExpression,
238
+ filterState.queryBuilderState.graphManagerState.graph,
239
+ );
240
+ }
241
+ }
242
+ for (const operator of filterState.operators) {
243
+ // NOTE: this allow plugin author to either return `undefined` or throw error
244
+ // if there is a problem with building the lambda. Either case, the plugin is
245
+ // considered as not supporting the lambda.
246
+ const filterConditionState = returnUndefOnError(() =>
247
+ operator.buildFilterConditionState(filterState, expression),
248
+ );
249
+ if (filterConditionState) {
250
+ filterState.addNodeFromNode(
251
+ new QueryBuilderFilterTreeConditionNodeData(
252
+ undefined,
253
+ filterConditionState,
254
+ ),
255
+ parentNode,
256
+ );
257
+ return;
258
+ }
259
+ }
260
+ throw new UnsupportedOperationError(
261
+ `Can't process filter() expression: no compatible filter operator processer available from plugins`,
262
+ );
263
+ }
264
+ };
265
+
266
+ const processFilterLambda = (
267
+ filterLambda: LambdaFunctionInstanceValue,
268
+ filterState: QueryBuilderFilterState,
269
+ ): void => {
270
+ const lambdaFunc = guaranteeNonNullable(
271
+ filterLambda.values[0],
272
+ `Can't process filter() lambda: filter() lambda function is missing`,
273
+ );
274
+ assertTrue(
275
+ lambdaFunc.expressionSequence.length === 1,
276
+ `Can't process filter() lambda: only support filter() lambda body with 1 expression`,
277
+ );
278
+ const rootExpression = guaranteeType(
279
+ lambdaFunc.expressionSequence[0],
280
+ SimpleFunctionExpression,
281
+ `Can't process filter() lambda: only support filter() lambda body with 1 expression`,
282
+ );
283
+
284
+ assertTrue(
285
+ lambdaFunc.functionType.parameters.length === 1,
286
+ `Can't process filter() lambda: only support filter() lambda with 1 parameter`,
287
+ );
288
+ filterState.setLambdaParameterName(
289
+ guaranteeType(
290
+ lambdaFunc.functionType.parameters[0],
291
+ VariableExpression,
292
+ `Can't process filter() lambda: only support filter() lambda with 1 parameter`,
293
+ ).name,
294
+ );
295
+ processFilterExpression(rootExpression, filterState, undefined);
296
+ };
297
+
298
+ const processAggregateLambda = (
299
+ aggregateLambda: LambdaFunctionInstanceValue,
300
+ projectionColumnState: QueryBuilderProjectionColumnState,
301
+ aggregationState: QueryBuilderAggregationState,
302
+ ): void => {
303
+ const lambdaFunc = guaranteeNonNullable(
304
+ aggregateLambda.values[0],
305
+ `Can't process agg() lambda: agg() lambda function is missing`,
306
+ );
307
+ assertTrue(
308
+ lambdaFunc.expressionSequence.length === 1,
309
+ `Can't process agg() lambda: only support agg() lambda body with 1 expression`,
310
+ );
311
+ const expression = guaranteeType(
312
+ lambdaFunc.expressionSequence[0],
313
+ SimpleFunctionExpression,
314
+ `Can't process agg() lambda: only support agg() lambda body with 1 expression`,
315
+ );
316
+
317
+ assertTrue(
318
+ lambdaFunc.functionType.parameters.length === 1,
319
+ `Can't process agg() lambda: only support agg() lambda with 1 parameter`,
320
+ );
321
+
322
+ const lambdaParam = guaranteeType(
323
+ lambdaFunc.functionType.parameters[0],
324
+ VariableExpression,
325
+ `Can't process agg() lambda: only support agg() lambda with 1 parameter`,
326
+ );
327
+
328
+ for (const operator of aggregationState.operators) {
329
+ // NOTE: this allow plugin author to either return `undefined` or throw error
330
+ // if there is a problem with building the lambda. Either case, the plugin is
331
+ // considered as not supporting the lambda.
332
+ const aggregateColumnState = returnUndefOnError(() =>
333
+ operator.buildAggregateColumnState(
334
+ expression,
335
+ lambdaParam,
336
+ projectionColumnState,
337
+ ),
338
+ );
339
+ if (aggregateColumnState) {
340
+ aggregationState.addColumn(aggregateColumnState);
341
+ return;
342
+ }
343
+ }
344
+ throw new UnsupportedOperationError(
345
+ `Can't process aggregate expression function: no compatible aggregate operator processer available from plugins`,
346
+ );
347
+ };
348
+
349
+ /**
350
+ * This is the expression processor for query builder.
351
+ * Unlike expression builder which takes care of transforming the value specification
352
+ * from `protocol` to `metamodel`, and type-inferencing, this takes care
353
+ * of traversing the expression to populate the query builder UI state.
354
+ *
355
+ * NOTE: While traversing the expression, this processor also does a fair amount of
356
+ * validations and assertsions but just so enough to populate the UI state.
357
+ *
358
+ * Validation and assertion should be done by both the builder and processor, but the builder
359
+ * will do more structural checks to build the proper metamodel. The processor should never
360
+ * modify the metamodel, just traversing it.
361
+ */
362
+ export class QueryBuilderLambdaProcessor
363
+ implements ValueSpecificationVisitor<void>
364
+ {
365
+ queryBuilderState: QueryBuilderState;
366
+ precedingExpression?: SimpleFunctionExpression | undefined;
367
+
368
+ constructor(
369
+ queryBuilderState: QueryBuilderState,
370
+ precedingExpression: SimpleFunctionExpression | undefined,
371
+ ) {
372
+ this.queryBuilderState = queryBuilderState;
373
+ this.precedingExpression = precedingExpression;
374
+ }
375
+
376
+ visit_INTERNAL__UnknownValueSpecification(
377
+ valueSpecification: INTERNAL__UnknownValueSpecification,
378
+ ): void {
379
+ assertNonNullable(
380
+ this.precedingExpression,
381
+ `Can't process unknown value: unknown value preceding expression cannot be retrieved`,
382
+ );
383
+ const precedingExpressionName = this.precedingExpression.functionName;
384
+ if (
385
+ [
386
+ QUERY_BUILDER_SUPPORTED_FUNCTIONS.TDS_PROJECT,
387
+ QUERY_BUILDER_SUPPORTED_FUNCTIONS.TDS_GROUP_BY,
388
+ QUERY_BUILDER_SUPPORTED_FUNCTIONS.TDS_AGG,
389
+ ].some((fn) => matchFunctionName(precedingExpressionName, fn))
390
+ ) {
391
+ const projectionState =
392
+ this.queryBuilderState.fetchStructureState.projectionState;
393
+ const rawLambdaProtocol = returnUndefOnError(() =>
394
+ guaranteeType(
395
+ V1_deserializeRawValueSpecification(
396
+ valueSpecification.content as PlainObject<V1_RawLambda>,
397
+ ),
398
+ V1_RawLambda,
399
+ ),
400
+ );
401
+ assertNonNullable(
402
+ rawLambdaProtocol,
403
+ `Can't process unknown value: only support ${precedingExpressionName}() column expression as a lambda`,
404
+ );
405
+
406
+ const columnState = new QueryBuilderDerivationProjectionColumnState(
407
+ projectionState,
408
+ new RawLambda(rawLambdaProtocol.parameters, rawLambdaProtocol.body),
409
+ );
410
+ projectionState.addColumn(columnState, { skipSorting: true });
411
+ return;
412
+ }
413
+ throw new UnsupportedOperationError(
414
+ `Can't process unknown value with preceding expression of function ${this.precedingExpression.functionName}()`,
415
+ );
416
+ }
417
+
418
+ visit_RootGraphFetchTreeInstanceValue(
419
+ valueSpecification: RootGraphFetchTreeInstanceValue,
420
+ ): void {
421
+ throw new UnsupportedOperationError();
422
+ }
423
+
424
+ visit_PropertyGraphFetchTreeInstanceValue(
425
+ valueSpecification: PropertyGraphFetchTreeInstanceValue,
426
+ ): void {
427
+ throw new UnsupportedOperationError();
428
+ }
429
+
430
+ visit_AlloySerializationConfigInstanceValue(
431
+ valueSpecification: AlloySerializationConfigInstanceValue,
432
+ ): void {
433
+ throw new UnsupportedOperationError();
434
+ }
435
+
436
+ visit_PrimitiveInstanceValue(
437
+ valueSpecification: PrimitiveInstanceValue,
438
+ ): void {
439
+ throw new UnsupportedOperationError();
440
+ }
441
+
442
+ visit_EnumValueInstanceValue(
443
+ valueSpecification: EnumValueInstanceValue,
444
+ ): void {
445
+ throw new UnsupportedOperationError();
446
+ }
447
+
448
+ visit_RuntimeInstanceValue(valueSpecification: RuntimeInstanceValue): void {
449
+ throw new UnsupportedOperationError();
450
+ }
451
+
452
+ visit_PairInstanceValue(valueSpecification: PairInstanceValue): void {
453
+ throw new UnsupportedOperationError();
454
+ }
455
+
456
+ visit_MappingInstanceValue(valueSpecification: MappingInstanceValue): void {
457
+ throw new UnsupportedOperationError();
458
+ }
459
+
460
+ visit_PureListInstanceValue(valueSpecification: PureListInstanceValue): void {
461
+ throw new UnsupportedOperationError();
462
+ }
463
+
464
+ visit_CollectionInstanceValue(
465
+ valueSpecification: CollectionInstanceValue,
466
+ ): void {
467
+ throw new UnsupportedOperationError();
468
+ }
469
+
470
+ visit_FunctionExpression(valueSpecification: FunctionExpression): void {
471
+ throw new UnsupportedOperationError();
472
+ }
473
+
474
+ visit_INTERNAL__PropagatedValue(
475
+ valueSpecification: INTERNAL__PropagatedValue,
476
+ ): void {
477
+ throw new UnsupportedOperationError();
478
+ }
479
+
480
+ visit_SimpleFunctionExpression(
481
+ valueSpecification: SimpleFunctionExpression,
482
+ ): void {
483
+ const functionName = valueSpecification.functionName;
484
+ if (
485
+ matchFunctionName(functionName, QUERY_BUILDER_SUPPORTED_FUNCTIONS.GET_ALL)
486
+ ) {
487
+ const _class = valueSpecification.genericType?.value.rawType;
488
+ assertType(
489
+ _class,
490
+ Class,
491
+ `Can't process getAll() expression: getAll() return type is missing`,
492
+ );
493
+ this.queryBuilderState.querySetupState.setClass(_class, true);
494
+ this.queryBuilderState.explorerState.refreshTreeData();
495
+ let acceptedNoOfParameters = 1;
496
+ const stereotype = getMilestoneTemporalStereotype(
497
+ _class,
498
+ this.queryBuilderState.graphManagerState.graph,
499
+ );
500
+ switch (stereotype) {
501
+ case MILESTONING_STEREOTYPE.BITEMPORAL:
502
+ acceptedNoOfParameters = 3;
503
+ assertTrue(
504
+ valueSpecification.parametersValues.length ===
505
+ acceptedNoOfParameters,
506
+ `Can't process getAll() expression: when used with a bitemporal milestoned class getAll() expects two parameters`,
507
+ );
508
+ this.queryBuilderState.querySetupState.setProcessingDate(
509
+ valueSpecification.parametersValues[1],
510
+ );
511
+ this.queryBuilderState.querySetupState.setBusinessDate(
512
+ valueSpecification.parametersValues[2],
513
+ );
514
+ break;
515
+ case MILESTONING_STEREOTYPE.BUSINESS_TEMPORAL:
516
+ acceptedNoOfParameters = 2;
517
+ assertTrue(
518
+ valueSpecification.parametersValues.length ===
519
+ acceptedNoOfParameters,
520
+ `Can't process getAll() expression: when used with a milestoned class getAll() expects a parameter`,
521
+ );
522
+ this.queryBuilderState.querySetupState.setBusinessDate(
523
+ valueSpecification.parametersValues[1],
524
+ );
525
+ break;
526
+ case MILESTONING_STEREOTYPE.PROCESSING_TEMPORAL:
527
+ acceptedNoOfParameters = 2;
528
+ assertTrue(
529
+ valueSpecification.parametersValues.length ===
530
+ acceptedNoOfParameters,
531
+ `Can't process getAll() expression: when used with a milestoned class getAll() expects a parameter`,
532
+ );
533
+ this.queryBuilderState.querySetupState.setProcessingDate(
534
+ valueSpecification.parametersValues[1],
535
+ );
536
+ break;
537
+ default:
538
+ assertTrue(
539
+ valueSpecification.parametersValues.length ===
540
+ acceptedNoOfParameters,
541
+ `Can't process getAll() expression: getAll() expects no arguments`,
542
+ );
543
+ }
544
+ return;
545
+ } else if (
546
+ matchFunctionName(
547
+ functionName,
548
+ QUERY_BUILDER_SUPPORTED_FUNCTIONS.FILTER,
549
+ ) ||
550
+ matchFunctionName(
551
+ functionName,
552
+ QUERY_BUILDER_SUPPORTED_FUNCTIONS.TDS_FILTER,
553
+ )
554
+ ) {
555
+ assertTrue(
556
+ valueSpecification.parametersValues.length === 2,
557
+ `Can't process filter() expression: filter() expects 1 argument`,
558
+ );
559
+
560
+ const filterState = this.queryBuilderState.filterState;
561
+ const precedingExpression = guaranteeType(
562
+ valueSpecification.parametersValues[0],
563
+ SimpleFunctionExpression,
564
+ `Can't process filter() expression: only support filter() immediately following an expression`,
565
+ );
566
+ precedingExpression.accept_ValueSpecificationVisitor(
567
+ new QueryBuilderLambdaProcessor(this.queryBuilderState, undefined),
568
+ );
569
+
570
+ if (
571
+ matchFunctionName(
572
+ precedingExpression.functionName,
573
+ QUERY_BUILDER_SUPPORTED_FUNCTIONS.GET_ALL,
574
+ )
575
+ ) {
576
+ assertTrue(
577
+ matchFunctionName(
578
+ functionName,
579
+ QUERY_BUILDER_SUPPORTED_FUNCTIONS.FILTER,
580
+ ),
581
+ `Can't process filter() expression: only supports ${QUERY_BUILDER_SUPPORTED_FUNCTIONS.FILTER}() immediately following getAll() (got '${functionName}')`,
582
+ );
583
+ const filterLambda = valueSpecification.parametersValues[1];
584
+ assertType(
585
+ filterLambda,
586
+ LambdaFunctionInstanceValue,
587
+ `Can't process filter() expression: filter() expects argument #1 to be a lambda function`,
588
+ );
589
+ processFilterLambda(filterLambda, filterState);
590
+ /**
591
+ * NOTE: Since group operations like and/or do not take more than 2 parameters, if there are
592
+ * more than 2 clauses in each group operations, then these clauses are converted into an
593
+ * unbalanced tree. However, this would look quite bad for UX, as such, we simplify the tree.
594
+ * After building the filter state.
595
+ */
596
+ filterState.simplifyTree();
597
+
598
+ return;
599
+ } else if (
600
+ matchFunctionName(
601
+ precedingExpression.functionName,
602
+ QUERY_BUILDER_SUPPORTED_FUNCTIONS.TDS_PROJECT,
603
+ ) ||
604
+ matchFunctionName(
605
+ precedingExpression.functionName,
606
+ QUERY_BUILDER_SUPPORTED_FUNCTIONS.TDS_GROUP_BY,
607
+ )
608
+ ) {
609
+ assertTrue(
610
+ matchFunctionName(
611
+ functionName,
612
+ QUERY_BUILDER_SUPPORTED_FUNCTIONS.TDS_FILTER,
613
+ ),
614
+ `Can't process post-filter expression: only supports ${QUERY_BUILDER_SUPPORTED_FUNCTIONS.TDS_FILTER}() immediately following TDS project()/groupBy() (got '${functionName}')`,
615
+ );
616
+ const postFilterState = this.queryBuilderState.postFilterState;
617
+ const postFilterLambda = valueSpecification.parametersValues[1];
618
+ assertType(
619
+ postFilterLambda,
620
+ LambdaFunctionInstanceValue,
621
+ `Can't process post-filter expression: expects argument #1 to be a lambda function`,
622
+ );
623
+ processPostFilterLambda(postFilterLambda, postFilterState);
624
+ this.queryBuilderState.setShowPostFilterPanel(true);
625
+ postFilterState.simplifyTree();
626
+ return;
627
+ } else {
628
+ throw new UnsupportedOperationError(
629
+ "`Can't process filter() expression: only support filter() immediately following getAll() or TDS project()/groupBy()",
630
+ );
631
+ }
632
+ } else if (
633
+ matchFunctionName(
634
+ functionName,
635
+ QUERY_BUILDER_SUPPORTED_FUNCTIONS.TDS_PROJECT,
636
+ )
637
+ ) {
638
+ const params = valueSpecification.parametersValues;
639
+ assertTrue(
640
+ params.length === 3,
641
+ `Can't process project() expression: project() expects 2 arguments`,
642
+ );
643
+
644
+ const precedingExpression = guaranteeType(
645
+ params[0],
646
+ SimpleFunctionExpression,
647
+ `Can't process project() expression: only support project() immediately following an expression`,
648
+ );
649
+ precedingExpression.accept_ValueSpecificationVisitor(
650
+ new QueryBuilderLambdaProcessor(this.queryBuilderState, undefined),
651
+ );
652
+ // check caller
653
+ assertTrue(
654
+ [
655
+ QUERY_BUILDER_SUPPORTED_FUNCTIONS.GET_ALL,
656
+ QUERY_BUILDER_SUPPORTED_FUNCTIONS.FILTER,
657
+ ].some((fn) => matchFunctionName(precedingExpression.functionName, fn)),
658
+ `Can't process project() expression: only support project() immediately following either getAll() or filter()`,
659
+ );
660
+
661
+ // columns
662
+ const columnLambdas = params[1];
663
+ assertType(
664
+ columnLambdas,
665
+ CollectionInstanceValue,
666
+ `Can't process project() expression: project() expects argument #1 to be a collection`,
667
+ );
668
+ columnLambdas.values.map((value) =>
669
+ value.accept_ValueSpecificationVisitor(
670
+ new QueryBuilderLambdaProcessor(
671
+ this.queryBuilderState,
672
+ valueSpecification,
673
+ ),
674
+ ),
675
+ );
676
+
677
+ // aliases
678
+ const columnAliases = params[2];
679
+ assertType(
680
+ columnAliases,
681
+ CollectionInstanceValue,
682
+ `Can't process project() expression: project() expects argument #2 to be a collection`,
683
+ );
684
+ assertTrue(
685
+ columnLambdas.values.length === columnAliases.values.length,
686
+ `Can't process project() expression: number of aliases does not match the number of columns`,
687
+ );
688
+ const aliases = columnAliases.values
689
+ .map(getNullableStringValueFromValueSpec)
690
+ .filter(isNonNullable);
691
+
692
+ this.queryBuilderState.fetchStructureState.projectionState.columns.forEach(
693
+ (e, idx) => e.setColumnName(aliases[idx] as string),
694
+ );
695
+
696
+ return;
697
+ } else if (
698
+ matchFunctionName(
699
+ functionName,
700
+ QUERY_BUILDER_SUPPORTED_FUNCTIONS.TDS_TAKE,
701
+ )
702
+ ) {
703
+ assertTrue(
704
+ valueSpecification.parametersValues.length === 2,
705
+ `Can't process take() expression: take() expects 1 argument`,
706
+ );
707
+
708
+ const precedingExpression = guaranteeType(
709
+ valueSpecification.parametersValues[0],
710
+ SimpleFunctionExpression,
711
+ `Can't process take() expression: only support take() immediately following an expression`,
712
+ );
713
+ precedingExpression.accept_ValueSpecificationVisitor(
714
+ new QueryBuilderLambdaProcessor(this.queryBuilderState, undefined),
715
+ );
716
+
717
+ // check caller
718
+ assertTrue(
719
+ [
720
+ QUERY_BUILDER_SUPPORTED_FUNCTIONS.TDS_TAKE,
721
+ QUERY_BUILDER_SUPPORTED_FUNCTIONS.TDS_DISTINCT,
722
+ QUERY_BUILDER_SUPPORTED_FUNCTIONS.TDS_SORT,
723
+ QUERY_BUILDER_SUPPORTED_FUNCTIONS.TDS_PROJECT,
724
+ QUERY_BUILDER_SUPPORTED_FUNCTIONS.TDS_GROUP_BY,
725
+ ].some((fn) => matchFunctionName(precedingExpression.functionName, fn)),
726
+ `Can't process take() expression: only support take() in TDS expression`,
727
+ );
728
+
729
+ const takeValue = getNullableNumberValueFromValueSpec(
730
+ guaranteeNonNullable(valueSpecification.parametersValues[1]),
731
+ );
732
+ this.queryBuilderState.resultSetModifierState.setLimit(takeValue);
733
+
734
+ return;
735
+ } else if (
736
+ matchFunctionName(
737
+ functionName,
738
+ QUERY_BUILDER_SUPPORTED_FUNCTIONS.TDS_DISTINCT,
739
+ )
740
+ ) {
741
+ assertTrue(
742
+ valueSpecification.parametersValues.length === 1,
743
+ `Can't process disctinct() expression: distinct() expects no parameter`,
744
+ );
745
+
746
+ const precedingExpression = guaranteeType(
747
+ valueSpecification.parametersValues[0],
748
+ SimpleFunctionExpression,
749
+ `Can't process distinct() expression: only support distinct() immediately following an expression`,
750
+ );
751
+ precedingExpression.accept_ValueSpecificationVisitor(
752
+ new QueryBuilderLambdaProcessor(this.queryBuilderState, undefined),
753
+ );
754
+
755
+ // check caller
756
+ assertTrue(
757
+ [
758
+ QUERY_BUILDER_SUPPORTED_FUNCTIONS.TDS_TAKE,
759
+ QUERY_BUILDER_SUPPORTED_FUNCTIONS.TDS_DISTINCT,
760
+ QUERY_BUILDER_SUPPORTED_FUNCTIONS.TDS_SORT,
761
+ QUERY_BUILDER_SUPPORTED_FUNCTIONS.TDS_PROJECT,
762
+ QUERY_BUILDER_SUPPORTED_FUNCTIONS.TDS_GROUP_BY,
763
+ QUERY_BUILDER_SUPPORTED_FUNCTIONS.TDS_FILTER,
764
+ ].some((fn) => matchFunctionName(precedingExpression.functionName, fn)),
765
+ `Can't process distinct() expression: only support distinct() in TDS expression`,
766
+ );
767
+
768
+ this.queryBuilderState.resultSetModifierState.distinct = true;
769
+
770
+ return;
771
+ } else if (
772
+ matchFunctionName(
773
+ functionName,
774
+ QUERY_BUILDER_SUPPORTED_FUNCTIONS.TDS_SORT,
775
+ )
776
+ ) {
777
+ assertTrue(
778
+ valueSpecification.parametersValues.length === 2,
779
+ `Can't process sort() expression: sort() expects 1 argument`,
780
+ );
781
+
782
+ const precedingExpression = guaranteeType(
783
+ valueSpecification.parametersValues[0],
784
+ SimpleFunctionExpression,
785
+ `Can't process sort() expression: only support sort() immediately following an expression`,
786
+ );
787
+ precedingExpression.accept_ValueSpecificationVisitor(
788
+ new QueryBuilderLambdaProcessor(this.queryBuilderState, undefined),
789
+ );
790
+
791
+ // check caller
792
+ assertTrue(
793
+ [
794
+ QUERY_BUILDER_SUPPORTED_FUNCTIONS.TDS_TAKE,
795
+ QUERY_BUILDER_SUPPORTED_FUNCTIONS.TDS_DISTINCT,
796
+ QUERY_BUILDER_SUPPORTED_FUNCTIONS.TDS_SORT,
797
+ QUERY_BUILDER_SUPPORTED_FUNCTIONS.TDS_PROJECT,
798
+ QUERY_BUILDER_SUPPORTED_FUNCTIONS.TDS_GROUP_BY,
799
+ QUERY_BUILDER_SUPPORTED_FUNCTIONS.TDS_FILTER,
800
+ ].some((fn) => matchFunctionName(precedingExpression.functionName, fn)),
801
+ `Can't process sort() expression: only support sort() in TDS expression`,
802
+ );
803
+
804
+ const sortParam = valueSpecification.parametersValues[1];
805
+ assertType(
806
+ sortParam,
807
+ CollectionInstanceValue,
808
+ `Can't process sort() expression: sort() argument should be a collection`,
809
+ );
810
+ sortParam.values.map((e) =>
811
+ e.accept_ValueSpecificationVisitor(
812
+ new QueryBuilderLambdaProcessor(
813
+ this.queryBuilderState,
814
+ valueSpecification,
815
+ ),
816
+ ),
817
+ );
818
+
819
+ return;
820
+ } else if (
821
+ (matchFunctionName(
822
+ functionName,
823
+ QUERY_BUILDER_SUPPORTED_FUNCTIONS.TDS_ASC,
824
+ ) ||
825
+ matchFunctionName(
826
+ functionName,
827
+ QUERY_BUILDER_SUPPORTED_FUNCTIONS.TDS_DESC,
828
+ )) &&
829
+ this.precedingExpression &&
830
+ matchFunctionName(
831
+ this.precedingExpression.functionName,
832
+ QUERY_BUILDER_SUPPORTED_FUNCTIONS.TDS_SORT,
833
+ )
834
+ ) {
835
+ assertTrue(
836
+ valueSpecification.parametersValues.length === 1,
837
+ `Can't process ${functionName}() expression: ${functionName}() expects no argument`,
838
+ );
839
+
840
+ const sortColumnName = getNullableStringValueFromValueSpec(
841
+ guaranteeNonNullable(valueSpecification.parametersValues[0]),
842
+ );
843
+ const queryBuilderProjectionColumnState =
844
+ this.queryBuilderState.fetchStructureState.projectionState.columns.find(
845
+ (e) => e.columnName === sortColumnName,
846
+ );
847
+ if (queryBuilderProjectionColumnState) {
848
+ const sortColumnState = new SortColumnState(
849
+ this.queryBuilderState,
850
+ queryBuilderProjectionColumnState,
851
+ );
852
+ sortColumnState.sortType = matchFunctionName(
853
+ functionName,
854
+ QUERY_BUILDER_SUPPORTED_FUNCTIONS.TDS_ASC,
855
+ )
856
+ ? COLUMN_SORT_TYPE.ASC
857
+ : COLUMN_SORT_TYPE.DESC;
858
+ this.queryBuilderState.resultSetModifierState.addSortColumn(
859
+ sortColumnState,
860
+ );
861
+ }
862
+
863
+ return;
864
+ } else if (
865
+ matchFunctionName(
866
+ functionName,
867
+ QUERY_BUILDER_SUPPORTED_FUNCTIONS.TDS_GROUP_BY,
868
+ )
869
+ ) {
870
+ assertTrue(
871
+ valueSpecification.parametersValues.length === 4,
872
+ `Can't process groupBy() expression: groupBy() expects 3 arguments`,
873
+ );
874
+
875
+ const params = valueSpecification.parametersValues;
876
+ const precedingExpression = guaranteeType(
877
+ params[0],
878
+ SimpleFunctionExpression,
879
+ `Can't process groupBy() expression: only support groupBy() immediately following an expression`,
880
+ );
881
+ precedingExpression.accept_ValueSpecificationVisitor(
882
+ new QueryBuilderLambdaProcessor(this.queryBuilderState, undefined),
883
+ );
884
+
885
+ // check caller
886
+ assertTrue(
887
+ [
888
+ QUERY_BUILDER_SUPPORTED_FUNCTIONS.GET_ALL,
889
+ QUERY_BUILDER_SUPPORTED_FUNCTIONS.FILTER,
890
+ ].some((fn) => matchFunctionName(precedingExpression.functionName, fn)),
891
+ `Can't process groupBy() expression: only support groupBy() immediately following either getAll() or filter()`,
892
+ );
893
+
894
+ // columns
895
+ const columnExpressions = params[1];
896
+ assertType(
897
+ columnExpressions,
898
+ CollectionInstanceValue,
899
+ `Can't process groupBy() expression: groupBy() expects argument #1 to be a collection`,
900
+ );
901
+ columnExpressions.values.map((e) =>
902
+ e.accept_ValueSpecificationVisitor(
903
+ new QueryBuilderLambdaProcessor(
904
+ this.queryBuilderState,
905
+ valueSpecification,
906
+ ),
907
+ ),
908
+ );
909
+
910
+ // aggregations
911
+ const aggregationExpressions = params[2];
912
+ assertType(
913
+ aggregationExpressions,
914
+ CollectionInstanceValue,
915
+ `Can't process groupBy() expression: groupBy() expects argument #2 to be a collection`,
916
+ );
917
+ aggregationExpressions.values.map((e) =>
918
+ e.accept_ValueSpecificationVisitor(
919
+ new QueryBuilderLambdaProcessor(
920
+ this.queryBuilderState,
921
+ valueSpecification,
922
+ ),
923
+ ),
924
+ );
925
+
926
+ // aliases
927
+ const columnAliases = params[3];
928
+ assertType(
929
+ columnAliases,
930
+ CollectionInstanceValue,
931
+ `Can't process groupBy() expression: groupBy() expects argument #3 to be a collection`,
932
+ );
933
+ assertTrue(
934
+ columnAliases.values.length ===
935
+ columnExpressions.values.length +
936
+ aggregationExpressions.values.length,
937
+ `Can't process groupBy() expression: number of aliases does not match the number of columns`,
938
+ );
939
+ const aliases = columnAliases.values
940
+ .map(getNullableStringValueFromValueSpec)
941
+ .filter(isNonNullable);
942
+ this.queryBuilderState.fetchStructureState.projectionState.columns.forEach(
943
+ (e, idx) => e.setColumnName(aliases[idx] as string),
944
+ );
945
+
946
+ return;
947
+ } else if (
948
+ matchFunctionName(functionName, QUERY_BUILDER_SUPPORTED_FUNCTIONS.TDS_AGG)
949
+ ) {
950
+ assertTrue(
951
+ valueSpecification.parametersValues.length === 2,
952
+ `Can't process agg() expression: agg() expects 2 arguments`,
953
+ );
954
+
955
+ // check caller
956
+ assertNonNullable(this.precedingExpression);
957
+ assertTrue(
958
+ matchFunctionName(
959
+ this.precedingExpression.functionName,
960
+ QUERY_BUILDER_SUPPORTED_FUNCTIONS.TDS_GROUP_BY,
961
+ ),
962
+ `Can't process agg() expression: only support agg() in aggregation`,
963
+ );
964
+
965
+ const columnLambdas = guaranteeNonNullable(
966
+ valueSpecification.parametersValues[0],
967
+ );
968
+ columnLambdas.accept_ValueSpecificationVisitor(
969
+ new QueryBuilderLambdaProcessor(
970
+ this.queryBuilderState,
971
+ valueSpecification,
972
+ ),
973
+ );
974
+
975
+ const aggregateLambda = valueSpecification.parametersValues[1];
976
+ assertType(
977
+ aggregateLambda,
978
+ LambdaFunctionInstanceValue,
979
+ `Can't process agg() expression: agg() expects argument #1 to be a lambda function`,
980
+ );
981
+
982
+ // NOTE: since we process agg() expressions one by one, we know that the current agg()
983
+ // always correspond to the last column projection state, based on our processing procedure
984
+ processAggregateLambda(
985
+ aggregateLambda,
986
+ guaranteeNonNullable(
987
+ this.queryBuilderState.fetchStructureState.projectionState.columns[
988
+ this.queryBuilderState.fetchStructureState.projectionState.columns
989
+ .length - 1
990
+ ],
991
+ ),
992
+ this.queryBuilderState.fetchStructureState.projectionState
993
+ .aggregationState,
994
+ );
995
+
996
+ return;
997
+ } else if (
998
+ matchFunctionName(
999
+ functionName,
1000
+ QUERY_BUILDER_SUPPORTED_FUNCTIONS.SERIALIZE,
1001
+ )
1002
+ ) {
1003
+ assertTrue(
1004
+ valueSpecification.parametersValues.length === 2,
1005
+ `Can't process serialize() expression: serialize() expects 1 argument`,
1006
+ );
1007
+
1008
+ const precedingExpression = guaranteeType(
1009
+ valueSpecification.parametersValues[0],
1010
+ SimpleFunctionExpression,
1011
+ `Can't process serialize() expression: only support serialize() immediately following an expression`,
1012
+ );
1013
+ precedingExpression.accept_ValueSpecificationVisitor(
1014
+ new QueryBuilderLambdaProcessor(
1015
+ this.queryBuilderState,
1016
+
1017
+ valueSpecification,
1018
+ ),
1019
+ );
1020
+
1021
+ // check caller
1022
+ assertTrue(
1023
+ [
1024
+ QUERY_BUILDER_SUPPORTED_FUNCTIONS.GRAPH_FETCH,
1025
+ QUERY_BUILDER_SUPPORTED_FUNCTIONS.GRAPH_FETCH_CHECKED,
1026
+ ].some((fn) => matchFunctionName(precedingExpression.functionName, fn)),
1027
+ `Can't process serialize() expression: only support serialize() in graph-fetch expression`,
1028
+ );
1029
+
1030
+ const serializeFunc = guaranteeType(
1031
+ valueSpecification.parametersValues[1],
1032
+ GraphFetchTreeInstanceValue,
1033
+ `Can't process serialize() expression: serialize() graph-fetch is missing`,
1034
+ );
1035
+ const value = guaranteeType(
1036
+ serializeFunc.values[0],
1037
+ RootGraphFetchTree,
1038
+ `Can't process serialize() expression: serialize() graph-fetch tree root is missing`,
1039
+ );
1040
+ this.queryBuilderState.fetchStructureState.setFetchStructureMode(
1041
+ FETCH_STRUCTURE_MODE.GRAPH_FETCH,
1042
+ );
1043
+ this.queryBuilderState.fetchStructureState.graphFetchTreeState.initialize(
1044
+ value,
1045
+ );
1046
+
1047
+ return;
1048
+ } else if (
1049
+ (matchFunctionName(
1050
+ functionName,
1051
+ QUERY_BUILDER_SUPPORTED_FUNCTIONS.GRAPH_FETCH_CHECKED,
1052
+ ) ||
1053
+ matchFunctionName(
1054
+ functionName,
1055
+ QUERY_BUILDER_SUPPORTED_FUNCTIONS.GRAPH_FETCH,
1056
+ )) &&
1057
+ this.precedingExpression &&
1058
+ matchFunctionName(
1059
+ this.precedingExpression.functionName,
1060
+ QUERY_BUILDER_SUPPORTED_FUNCTIONS.SERIALIZE,
1061
+ )
1062
+ ) {
1063
+ assertTrue(
1064
+ valueSpecification.parametersValues.length === 2,
1065
+ `Can't process ${functionName}() expression: ${functionName}() expects 1 argument`,
1066
+ );
1067
+
1068
+ const precedingExpression = guaranteeType(
1069
+ valueSpecification.parametersValues[0],
1070
+ SimpleFunctionExpression,
1071
+ `Can't process ${functionName}() expression: only support ${functionName}() immediately following an expression`,
1072
+ );
1073
+ precedingExpression.accept_ValueSpecificationVisitor(
1074
+ new QueryBuilderLambdaProcessor(
1075
+ this.queryBuilderState,
1076
+ valueSpecification,
1077
+ ),
1078
+ );
1079
+
1080
+ // check caller
1081
+ assertTrue(
1082
+ [
1083
+ QUERY_BUILDER_SUPPORTED_FUNCTIONS.FILTER,
1084
+ QUERY_BUILDER_SUPPORTED_FUNCTIONS.GET_ALL,
1085
+ ].some((fn) => matchFunctionName(precedingExpression.functionName, fn)),
1086
+ `Can't process ${functionName}(): only support ${functionName}() immediately following either getAll() or filter()`,
1087
+ );
1088
+
1089
+ this.queryBuilderState.fetchStructureState.graphFetchTreeState.setChecked(
1090
+ matchFunctionName(
1091
+ functionName,
1092
+ QUERY_BUILDER_SUPPORTED_FUNCTIONS.GRAPH_FETCH_CHECKED,
1093
+ ),
1094
+ );
1095
+
1096
+ return;
1097
+ }
1098
+ throw new UnsupportedOperationError(
1099
+ `Can't process expression of function ${functionName}()`,
1100
+ );
1101
+ }
1102
+
1103
+ visit_VariableExpression(valueSpecification: VariableExpression): void {
1104
+ throw new UnsupportedOperationError();
1105
+ }
1106
+
1107
+ visit_LambdaFunctionInstanceValue(
1108
+ valueSpecification: LambdaFunctionInstanceValue,
1109
+ ): void {
1110
+ valueSpecification.values.forEach((value) =>
1111
+ value.expressionSequence.forEach((expression) =>
1112
+ expression.accept_ValueSpecificationVisitor(
1113
+ new QueryBuilderLambdaProcessor(
1114
+ this.queryBuilderState,
1115
+ this.precedingExpression,
1116
+ ),
1117
+ ),
1118
+ ),
1119
+ );
1120
+ }
1121
+
1122
+ visit_AbstractPropertyExpression(
1123
+ valueSpecification: AbstractPropertyExpression,
1124
+ ): void {
1125
+ assertNonNullable(
1126
+ this.precedingExpression,
1127
+ `Can't process property expression: property expression preceding expression cannot be retrieved`,
1128
+ );
1129
+
1130
+ const precedingExpressionName = this.precedingExpression.functionName;
1131
+ if (
1132
+ [
1133
+ QUERY_BUILDER_SUPPORTED_FUNCTIONS.TDS_PROJECT,
1134
+ QUERY_BUILDER_SUPPORTED_FUNCTIONS.TDS_GROUP_BY,
1135
+ QUERY_BUILDER_SUPPORTED_FUNCTIONS.TDS_AGG,
1136
+ ].some((fn) => matchFunctionName(precedingExpressionName, fn))
1137
+ ) {
1138
+ // NOTE: we do this before creating the projection state, as we will
1139
+ // auto-fill arguments for derived properties when missing as part of building
1140
+ // the property expression state.
1141
+ let currentPropertyExpression: ValueSpecification = valueSpecification;
1142
+ while (currentPropertyExpression instanceof AbstractPropertyExpression) {
1143
+ const propertyExpression = currentPropertyExpression;
1144
+ validatePropertyExpressionChain(
1145
+ currentPropertyExpression,
1146
+ this.queryBuilderState.graphManagerState.graph,
1147
+ );
1148
+ currentPropertyExpression = guaranteeNonNullable(
1149
+ currentPropertyExpression.parametersValues[0],
1150
+ );
1151
+ // here we just do a simple check to ensure that if we encounter derived properties
1152
+ // the number of parameters and arguments provided match
1153
+ if (propertyExpression.func instanceof DerivedProperty) {
1154
+ assertTrue(
1155
+ (Array.isArray(propertyExpression.func.parameters)
1156
+ ? propertyExpression.func.parameters.length
1157
+ : 0) ===
1158
+ propertyExpression.parametersValues.length - 1,
1159
+ `Can't process property expression: derived property '${propertyExpression.func.name}' expects number of provided arguments to match number of parameters`,
1160
+ );
1161
+ }
1162
+ // Take care of chains of subtype (a pattern that is not useful, but we want to support and rectify)
1163
+ // $x.employees->subType(@Person)->subType(@Staff)
1164
+ while (
1165
+ currentPropertyExpression instanceof SimpleFunctionExpression &&
1166
+ matchFunctionName(
1167
+ currentPropertyExpression.functionName,
1168
+ QUERY_BUILDER_SUPPORTED_FUNCTIONS.SUBTYPE,
1169
+ )
1170
+ ) {
1171
+ currentPropertyExpression = guaranteeNonNullable(
1172
+ currentPropertyExpression.parametersValues[0],
1173
+ );
1174
+ }
1175
+ }
1176
+ assertType(
1177
+ currentPropertyExpression,
1178
+ VariableExpression,
1179
+ `Can't process property expression: expects expression root to be a variable`,
1180
+ );
1181
+
1182
+ const projectionState =
1183
+ this.queryBuilderState.fetchStructureState.projectionState;
1184
+ const columnState = new QueryBuilderSimpleProjectionColumnState(
1185
+ projectionState,
1186
+ valueSpecification,
1187
+ false,
1188
+ );
1189
+
1190
+ projectionState.addColumn(columnState, { skipSorting: true });
1191
+
1192
+ // NOTE: technically we should set the lambda parameter name when we process
1193
+ // the lambda, not when we process the lambda body like this, but that requires
1194
+ // some setup, so it's easier to do it here. The validation of this should have
1195
+ // already been taken care of by the builder.
1196
+ columnState.setLambdaParameterName(currentPropertyExpression.name);
1197
+ return;
1198
+ }
1199
+ throw new UnsupportedOperationError(
1200
+ `Can't process property expression with preceding expression of function ${this.precedingExpression.functionName}()`,
1201
+ );
1202
+ }
1203
+
1204
+ visit_InstanceValue(valueSpecification: InstanceValue): void {
1205
+ throw new UnsupportedOperationError();
1206
+ }
1207
+ }
1208
+
1209
+ export const processQueryParameters = (
1210
+ parameters: VariableExpression[],
1211
+ queryBuilderState: QueryBuilderState,
1212
+ ): void => {
1213
+ const queryParameterState = queryBuilderState.queryParametersState;
1214
+ parameters.forEach((parameter) => {
1215
+ const parameterState = new LambdaParameterState(
1216
+ parameter,
1217
+ queryBuilderState.observableContext,
1218
+ );
1219
+ parameterState.mockParameterValue();
1220
+ queryParameterState.addParameter(parameterState);
1221
+ });
1222
+ };
1223
+
1224
+ export const processQueryBuilderLambdaFunction = (
1225
+ queryBuilderState: QueryBuilderState,
1226
+ lambdaFunc: LambdaFunction,
1227
+ ): void => {
1228
+ if (lambdaFunc.functionType.parameters.length) {
1229
+ processQueryParameters(
1230
+ lambdaFunc.functionType.parameters,
1231
+ queryBuilderState,
1232
+ );
1233
+ }
1234
+ lambdaFunc.expressionSequence.map((e) =>
1235
+ e.accept_ValueSpecificationVisitor(
1236
+ new QueryBuilderLambdaProcessor(queryBuilderState, undefined),
1237
+ ),
1238
+ );
1239
+ };