@finos/legend-cube-builder 0.0.4 → 0.0.5

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 (609) hide show
  1. package/README.md +9 -3
  2. package/docs/adding-an-operation.md +22 -12
  3. package/docs/demo/DEMO-FAST-NOTES.md +67 -0
  4. package/docs/demo/README.md +102 -0
  5. package/docs/demo/specs/duckdb-sales-pivot.cube.json +110 -0
  6. package/docs/demo/specs/trades-desks-1-joined.cube.json +123 -0
  7. package/docs/demo/specs/trades-desks-2-grouped.cube.json +140 -0
  8. package/docs/demo/specs/trades-desks-3-ranked.cube.json +158 -0
  9. package/docs/demo/specs/trades-desks-4-extended.cube.json +208 -0
  10. package/docs/demo/specs/trades-desks-5-final.cube.json +248 -0
  11. package/docs/hosting.md +50 -3
  12. package/docs/testing.md +32 -0
  13. package/lib/__lib__/LegendCubeCommand.d.ts +2 -0
  14. package/lib/__lib__/LegendCubeCommand.d.ts.map +1 -1
  15. package/lib/__lib__/LegendCubeCommand.js +7 -0
  16. package/lib/__lib__/LegendCubeCommand.js.map +1 -1
  17. package/lib/__lib__/LegendCubeFunctionLabels.d.ts +29 -0
  18. package/lib/__lib__/LegendCubeFunctionLabels.d.ts.map +1 -0
  19. package/lib/__lib__/LegendCubeFunctionLabels.js +31 -0
  20. package/lib/__lib__/LegendCubeFunctionLabels.js.map +1 -0
  21. package/lib/__lib__/LegendCubeHelpText.d.ts +5 -1
  22. package/lib/__lib__/LegendCubeHelpText.d.ts.map +1 -1
  23. package/lib/__lib__/LegendCubeHelpText.js +14 -2
  24. package/lib/__lib__/LegendCubeHelpText.js.map +1 -1
  25. package/lib/__lib__/LegendCubeLabels.d.ts +100 -8
  26. package/lib/__lib__/LegendCubeLabels.d.ts.map +1 -1
  27. package/lib/__lib__/LegendCubeLabels.js +129 -14
  28. package/lib/__lib__/LegendCubeLabels.js.map +1 -1
  29. package/lib/__lib__/LegendCubeProjectSourceLabels.d.ts +26 -0
  30. package/lib/__lib__/LegendCubeProjectSourceLabels.d.ts.map +1 -0
  31. package/lib/__lib__/LegendCubeProjectSourceLabels.js +26 -0
  32. package/lib/__lib__/LegendCubeProjectSourceLabels.js.map +1 -0
  33. package/lib/__lib__/LegendCubeServiceLabels.d.ts +27 -0
  34. package/lib/__lib__/LegendCubeServiceLabels.d.ts.map +1 -0
  35. package/lib/__lib__/LegendCubeServiceLabels.js +32 -0
  36. package/lib/__lib__/LegendCubeServiceLabels.js.map +1 -0
  37. package/lib/__lib__/LegendCubeTesting.d.ts +7 -0
  38. package/lib/__lib__/LegendCubeTesting.d.ts.map +1 -1
  39. package/lib/__lib__/LegendCubeTesting.js +7 -0
  40. package/lib/__lib__/LegendCubeTesting.js.map +1 -1
  41. package/lib/__test-utils__/CubeEngineTestSupport.d.ts +1 -1
  42. package/lib/__test-utils__/CubeEngineTestSupport.d.ts.map +1 -1
  43. package/lib/__test-utils__/CubeEngineTestSupport.js +2 -2
  44. package/lib/__test-utils__/CubeEngineTestSupport.js.map +1 -1
  45. package/lib/__test-utils__/CubeExpressionTestUtils.d.ts +8 -1
  46. package/lib/__test-utils__/CubeExpressionTestUtils.d.ts.map +1 -1
  47. package/lib/__test-utils__/CubeExpressionTestUtils.js +20 -3
  48. package/lib/__test-utils__/CubeExpressionTestUtils.js.map +1 -1
  49. package/lib/__test-utils__/CubeFunctionTestOutline.d.ts +26 -0
  50. package/lib/__test-utils__/CubeFunctionTestOutline.d.ts.map +1 -0
  51. package/lib/__test-utils__/CubeFunctionTestOutline.js +56 -0
  52. package/lib/__test-utils__/CubeFunctionTestOutline.js.map +1 -0
  53. package/lib/__test-utils__/CubeLambdaCorpus.d.ts +36 -0
  54. package/lib/__test-utils__/CubeLambdaCorpus.d.ts.map +1 -0
  55. package/lib/__test-utils__/CubeLambdaCorpus.js +83 -0
  56. package/lib/__test-utils__/CubeLambdaCorpus.js.map +1 -0
  57. package/lib/__test-utils__/CubePageTestUtils.d.ts +6 -0
  58. package/lib/__test-utils__/CubePageTestUtils.d.ts.map +1 -1
  59. package/lib/__test-utils__/CubePageTestUtils.js +21 -0
  60. package/lib/__test-utils__/CubePageTestUtils.js.map +1 -1
  61. package/lib/__test-utils__/CubeTestApplication.d.ts +9 -0
  62. package/lib/__test-utils__/CubeTestApplication.d.ts.map +1 -1
  63. package/lib/__test-utils__/CubeTestApplication.js +16 -0
  64. package/lib/__test-utils__/CubeTestApplication.js.map +1 -1
  65. package/lib/__test-utils__/FakeCubeEngine.d.ts +5 -0
  66. package/lib/__test-utils__/FakeCubeEngine.d.ts.map +1 -1
  67. package/lib/__test-utils__/FakeCubeEngine.js +17 -0
  68. package/lib/__test-utils__/FakeCubeEngine.js.map +1 -1
  69. package/lib/__test-utils__/FakeCubeIngestCatalog.d.ts +7 -1
  70. package/lib/__test-utils__/FakeCubeIngestCatalog.d.ts.map +1 -1
  71. package/lib/__test-utils__/FakeCubeIngestCatalog.js +16 -0
  72. package/lib/__test-utils__/FakeCubeIngestCatalog.js.map +1 -1
  73. package/lib/__test-utils__/FakeCubeServiceCatalog.d.ts +26 -0
  74. package/lib/__test-utils__/FakeCubeServiceCatalog.d.ts.map +1 -0
  75. package/lib/__test-utils__/FakeCubeServiceCatalog.js +40 -0
  76. package/lib/__test-utils__/FakeCubeServiceCatalog.js.map +1 -0
  77. package/lib/components/CubeAddItems.d.ts.map +1 -1
  78. package/lib/components/CubeAddItems.js +9 -6
  79. package/lib/components/CubeAddItems.js.map +1 -1
  80. package/lib/components/CubeDialogTheme.d.ts +25 -0
  81. package/lib/components/CubeDialogTheme.d.ts.map +1 -0
  82. package/lib/components/CubeDialogTheme.js +25 -0
  83. package/lib/components/CubeDialogTheme.js.map +1 -0
  84. package/lib/components/CubeEditor.d.ts +12 -1
  85. package/lib/components/CubeEditor.d.ts.map +1 -1
  86. package/lib/components/CubeEditor.js +16 -14
  87. package/lib/components/CubeEditor.js.map +1 -1
  88. package/lib/components/CubeFileMenu.d.ts +28 -0
  89. package/lib/components/CubeFileMenu.d.ts.map +1 -0
  90. package/lib/components/CubeFileMenu.js +77 -0
  91. package/lib/components/CubeFileMenu.js.map +1 -0
  92. package/lib/components/CubeLambdaImportBanner.d.ts +26 -0
  93. package/lib/components/CubeLambdaImportBanner.d.ts.map +1 -0
  94. package/lib/components/CubeLambdaImportBanner.js +47 -0
  95. package/lib/components/CubeLambdaImportBanner.js.map +1 -0
  96. package/lib/components/CubeNodeIcon.d.ts.map +1 -1
  97. package/lib/components/CubeNodeIcon.js +5 -1
  98. package/lib/components/CubeNodeIcon.js.map +1 -1
  99. package/lib/components/CubeSchemaColumnsTable.d.ts.map +1 -1
  100. package/lib/components/CubeSchemaColumnsTable.js +2 -2
  101. package/lib/components/CubeSchemaColumnsTable.js.map +1 -1
  102. package/lib/components/canvas/CubeCanvas.d.ts.map +1 -1
  103. package/lib/components/canvas/CubeCanvas.js +38 -5
  104. package/lib/components/canvas/CubeCanvas.js.map +1 -1
  105. package/lib/components/canvas/CubeCanvasContextMenu.d.ts.map +1 -1
  106. package/lib/components/canvas/CubeCanvasContextMenu.js +2 -1
  107. package/lib/components/canvas/CubeCanvasContextMenu.js.map +1 -1
  108. package/lib/components/canvas/CubeCanvasElements.d.ts +18 -1
  109. package/lib/components/canvas/CubeCanvasElements.d.ts.map +1 -1
  110. package/lib/components/canvas/CubeCanvasElements.js +58 -3
  111. package/lib/components/canvas/CubeCanvasElements.js.map +1 -1
  112. package/lib/components/canvas/CubeCanvasLayout.js +1 -1
  113. package/lib/components/canvas/CubeCanvasNode.d.ts.map +1 -1
  114. package/lib/components/canvas/CubeCanvasNode.js +8 -4
  115. package/lib/components/canvas/CubeCanvasNode.js.map +1 -1
  116. package/lib/components/dev-settings/CubeDevSettings.d.ts +35 -0
  117. package/lib/components/dev-settings/CubeDevSettings.d.ts.map +1 -0
  118. package/lib/components/dev-settings/CubeDevSettings.js +50 -0
  119. package/lib/components/dev-settings/CubeDevSettings.js.map +1 -0
  120. package/lib/components/editors/CubeColumnChecklist.d.ts.map +1 -1
  121. package/lib/components/editors/CubeColumnChecklist.js +2 -2
  122. package/lib/components/editors/CubeColumnChecklist.js.map +1 -1
  123. package/lib/components/editors/CubeColumnPicker.d.ts.map +1 -1
  124. package/lib/components/editors/CubeColumnPicker.js +3 -3
  125. package/lib/components/editors/CubeColumnPicker.js.map +1 -1
  126. package/lib/components/editors/CubeConcatEditor.js +2 -2
  127. package/lib/components/editors/CubeConcatEditor.js.map +1 -1
  128. package/lib/components/editors/CubeExpressionFilterEditor.d.ts +25 -0
  129. package/lib/components/editors/CubeExpressionFilterEditor.d.ts.map +1 -0
  130. package/lib/components/editors/CubeExpressionFilterEditor.js +83 -0
  131. package/lib/components/editors/CubeExpressionFilterEditor.js.map +1 -0
  132. package/lib/components/editors/CubeExtendEditor.d.ts +2 -0
  133. package/lib/components/editors/CubeExtendEditor.d.ts.map +1 -1
  134. package/lib/components/editors/CubeExtendEditor.js +3 -3
  135. package/lib/components/editors/CubeExtendEditor.js.map +1 -1
  136. package/lib/components/editors/CubeFilterEditor.d.ts.map +1 -1
  137. package/lib/components/editors/CubeFilterEditor.js +13 -2
  138. package/lib/components/editors/CubeFilterEditor.js.map +1 -1
  139. package/lib/components/editors/CubeFunctionSourceEditor.d.ts +25 -0
  140. package/lib/components/editors/CubeFunctionSourceEditor.d.ts.map +1 -0
  141. package/lib/components/editors/CubeFunctionSourceEditor.js +55 -0
  142. package/lib/components/editors/CubeFunctionSourceEditor.js.map +1 -0
  143. package/lib/components/editors/CubeJoinEditor.d.ts.map +1 -1
  144. package/lib/components/editors/CubeJoinEditor.js +16 -4
  145. package/lib/components/editors/CubeJoinEditor.js.map +1 -1
  146. package/lib/components/editors/CubeNodeEditorPanel.d.ts.map +1 -1
  147. package/lib/components/editors/CubeNodeEditorPanel.js +18 -8
  148. package/lib/components/editors/CubeNodeEditorPanel.js.map +1 -1
  149. package/lib/components/editors/CubeNodeEditorPopper.d.ts +5 -1
  150. package/lib/components/editors/CubeNodeEditorPopper.d.ts.map +1 -1
  151. package/lib/components/editors/CubeNodeEditorPopper.js +10 -2
  152. package/lib/components/editors/CubeNodeEditorPopper.js.map +1 -1
  153. package/lib/components/editors/CubeNodeEditorRegistry.d.ts.map +1 -1
  154. package/lib/components/editors/CubeNodeEditorRegistry.js +9 -1
  155. package/lib/components/editors/CubeNodeEditorRegistry.js.map +1 -1
  156. package/lib/components/editors/CubePivotEditor.d.ts +26 -0
  157. package/lib/components/editors/CubePivotEditor.d.ts.map +1 -0
  158. package/lib/components/editors/CubePivotEditor.js +93 -0
  159. package/lib/components/editors/CubePivotEditor.js.map +1 -0
  160. package/lib/components/editors/CubeRestrictEditor.d.ts.map +1 -1
  161. package/lib/components/editors/CubeRestrictEditor.js +2 -2
  162. package/lib/components/editors/CubeRestrictEditor.js.map +1 -1
  163. package/lib/components/editors/CubeServiceSourceEditor.d.ts +25 -0
  164. package/lib/components/editors/CubeServiceSourceEditor.d.ts.map +1 -0
  165. package/lib/components/editors/CubeServiceSourceEditor.js +41 -0
  166. package/lib/components/editors/CubeServiceSourceEditor.js.map +1 -0
  167. package/lib/components/grid/CubeColumnFormatDialog.d.ts +28 -0
  168. package/lib/components/grid/CubeColumnFormatDialog.d.ts.map +1 -0
  169. package/lib/components/grid/CubeColumnFormatDialog.js +94 -0
  170. package/lib/components/grid/CubeColumnFormatDialog.js.map +1 -0
  171. package/lib/components/grid/CubeDrilldownBar.d.ts +37 -0
  172. package/lib/components/grid/CubeDrilldownBar.d.ts.map +1 -0
  173. package/lib/components/grid/CubeDrilldownBar.js +77 -0
  174. package/lib/components/grid/CubeDrilldownBar.js.map +1 -0
  175. package/lib/components/grid/CubeGridRegion.d.ts.map +1 -1
  176. package/lib/components/grid/CubeGridRegion.js +40 -26
  177. package/lib/components/grid/CubeGridRegion.js.map +1 -1
  178. package/lib/components/grid/CubeGridValues.d.ts +31 -1
  179. package/lib/components/grid/CubeGridValues.d.ts.map +1 -1
  180. package/lib/components/grid/CubeGridValues.js +108 -1
  181. package/lib/components/grid/CubeGridValues.js.map +1 -1
  182. package/lib/components/grid/CubeResultGrid.d.ts +68 -5
  183. package/lib/components/grid/CubeResultGrid.d.ts.map +1 -1
  184. package/lib/components/grid/CubeResultGrid.js +308 -35
  185. package/lib/components/grid/CubeResultGrid.js.map +1 -1
  186. package/lib/components/grid/CubeRunStatsPanel.d.ts +28 -0
  187. package/lib/components/grid/CubeRunStatsPanel.d.ts.map +1 -0
  188. package/lib/components/grid/CubeRunStatsPanel.js +61 -0
  189. package/lib/components/grid/CubeRunStatsPanel.js.map +1 -0
  190. package/lib/components/grid/CubeServerSideGrid.d.ts +36 -0
  191. package/lib/components/grid/CubeServerSideGrid.d.ts.map +1 -0
  192. package/lib/components/grid/CubeServerSideGrid.js +114 -0
  193. package/lib/components/grid/CubeServerSideGrid.js.map +1 -0
  194. package/lib/components/grid/CubeSqlDialog.d.ts +24 -0
  195. package/lib/components/grid/CubeSqlDialog.d.ts.map +1 -0
  196. package/lib/components/grid/CubeSqlDialog.js +39 -0
  197. package/lib/components/grid/CubeSqlDialog.js.map +1 -0
  198. package/lib/components/grid/CubeSqlFormat.d.ts +20 -0
  199. package/lib/components/grid/CubeSqlFormat.d.ts.map +1 -0
  200. package/lib/components/grid/CubeSqlFormat.js +32 -0
  201. package/lib/components/grid/CubeSqlFormat.js.map +1 -0
  202. package/lib/components/palette/CubePalette.d.ts.map +1 -1
  203. package/lib/components/palette/CubePalette.js +32 -13
  204. package/lib/components/palette/CubePalette.js.map +1 -1
  205. package/lib/components/show-pure/CubeShowPureDialog.d.ts +4 -1
  206. package/lib/components/show-pure/CubeShowPureDialog.d.ts.map +1 -1
  207. package/lib/components/show-pure/CubeShowPureDialog.js +8 -4
  208. package/lib/components/show-pure/CubeShowPureDialog.js.map +1 -1
  209. package/lib/components/source-picker/CubeDataProductTab.d.ts.map +1 -1
  210. package/lib/components/source-picker/CubeDataProductTab.js +37 -16
  211. package/lib/components/source-picker/CubeDataProductTab.js.map +1 -1
  212. package/lib/components/source-picker/CubeDirectConnectionTab.d.ts.map +1 -1
  213. package/lib/components/source-picker/CubeDirectConnectionTab.js +6 -4
  214. package/lib/components/source-picker/CubeDirectConnectionTab.js.map +1 -1
  215. package/lib/components/source-picker/CubeFunctionSteps.d.ts +36 -0
  216. package/lib/components/source-picker/CubeFunctionSteps.d.ts.map +1 -0
  217. package/lib/components/source-picker/CubeFunctionSteps.js +76 -0
  218. package/lib/components/source-picker/CubeFunctionSteps.js.map +1 -0
  219. package/lib/components/source-picker/CubeIngestTab.d.ts.map +1 -1
  220. package/lib/components/source-picker/CubeIngestTab.js +39 -16
  221. package/lib/components/source-picker/CubeIngestTab.js.map +1 -1
  222. package/lib/components/source-picker/CubeInlineModelTab.d.ts +3 -2
  223. package/lib/components/source-picker/CubeInlineModelTab.d.ts.map +1 -1
  224. package/lib/components/source-picker/CubeInlineModelTab.js +23 -13
  225. package/lib/components/source-picker/CubeInlineModelTab.js.map +1 -1
  226. package/lib/components/source-picker/CubePickerListItem.d.ts +47 -0
  227. package/lib/components/source-picker/CubePickerListItem.d.ts.map +1 -0
  228. package/lib/components/source-picker/CubePickerListItem.js +62 -0
  229. package/lib/components/source-picker/CubePickerListItem.js.map +1 -0
  230. package/lib/components/source-picker/CubeProjectTab.d.ts +4 -3
  231. package/lib/components/source-picker/CubeProjectTab.d.ts.map +1 -1
  232. package/lib/components/source-picker/CubeProjectTab.js +7 -4
  233. package/lib/components/source-picker/CubeProjectTab.js.map +1 -1
  234. package/lib/components/source-picker/CubeServiceTab.d.ts +27 -0
  235. package/lib/components/source-picker/CubeServiceTab.d.ts.map +1 -0
  236. package/lib/components/source-picker/CubeServiceTab.js +36 -0
  237. package/lib/components/source-picker/CubeServiceTab.js.map +1 -0
  238. package/lib/components/source-picker/CubeSourcePicker.d.ts.map +1 -1
  239. package/lib/components/source-picker/CubeSourcePicker.js +16 -3
  240. package/lib/components/source-picker/CubeSourcePicker.js.map +1 -1
  241. package/lib/components/source-picker/CubeTablePreview.d.ts +29 -0
  242. package/lib/components/source-picker/CubeTablePreview.d.ts.map +1 -0
  243. package/lib/components/source-picker/CubeTablePreview.js +10 -0
  244. package/lib/components/source-picker/CubeTablePreview.js.map +1 -0
  245. package/lib/components/spec-transfer/CubeImportPureDialog.d.ts +27 -0
  246. package/lib/components/spec-transfer/CubeImportPureDialog.d.ts.map +1 -0
  247. package/lib/components/spec-transfer/CubeImportPureDialog.js +38 -0
  248. package/lib/components/spec-transfer/CubeImportPureDialog.js.map +1 -0
  249. package/lib/components/spec-transfer/CubeSpecTransferDialog.d.ts.map +1 -1
  250. package/lib/components/spec-transfer/CubeSpecTransferDialog.js +9 -3
  251. package/lib/components/spec-transfer/CubeSpecTransferDialog.js.map +1 -1
  252. package/lib/graph-manager/CubeDataProductCatalog.d.ts +10 -0
  253. package/lib/graph-manager/CubeDataProductCatalog.d.ts.map +1 -1
  254. package/lib/graph-manager/CubeDataProductCatalog.js.map +1 -1
  255. package/lib/graph-manager/CubeEngine.d.ts +46 -1
  256. package/lib/graph-manager/CubeEngine.d.ts.map +1 -1
  257. package/lib/graph-manager/CubeEngine.js.map +1 -1
  258. package/lib/graph-manager/CubeEngineClientSettings.d.ts +43 -0
  259. package/lib/graph-manager/CubeEngineClientSettings.d.ts.map +1 -0
  260. package/lib/graph-manager/CubeEngineClientSettings.js +51 -0
  261. package/lib/graph-manager/CubeEngineClientSettings.js.map +1 -0
  262. package/lib/graph-manager/CubeIngest.d.ts +5 -0
  263. package/lib/graph-manager/CubeIngest.d.ts.map +1 -1
  264. package/lib/graph-manager/CubeIngest.js +10 -0
  265. package/lib/graph-manager/CubeIngest.js.map +1 -1
  266. package/lib/graph-manager/CubeIngestCatalog.d.ts +26 -0
  267. package/lib/graph-manager/CubeIngestCatalog.d.ts.map +1 -1
  268. package/lib/graph-manager/CubeIngestCatalog.js +6 -0
  269. package/lib/graph-manager/CubeIngestCatalog.js.map +1 -1
  270. package/lib/graph-manager/CubeLakehouseRuntime.d.ts +29 -0
  271. package/lib/graph-manager/CubeLakehouseRuntime.d.ts.map +1 -0
  272. package/lib/graph-manager/CubeLakehouseRuntime.js +40 -0
  273. package/lib/graph-manager/CubeLakehouseRuntime.js.map +1 -0
  274. package/lib/graph-manager/CubeProjectCatalog.d.ts +3 -3
  275. package/lib/graph-manager/CubeService.d.ts +20 -0
  276. package/lib/graph-manager/CubeService.d.ts.map +1 -0
  277. package/lib/graph-manager/CubeService.js +22 -0
  278. package/lib/graph-manager/CubeService.js.map +1 -0
  279. package/lib/graph-manager/CubeServiceCatalog.d.ts +31 -0
  280. package/lib/graph-manager/CubeServiceCatalog.d.ts.map +1 -0
  281. package/lib/graph-manager/CubeServiceCatalog.js +17 -0
  282. package/lib/graph-manager/CubeServiceCatalog.js.map +1 -0
  283. package/lib/graph-manager/protocol/pure/CubeEngineBuilder.d.ts +52 -5
  284. package/lib/graph-manager/protocol/pure/CubeEngineBuilder.d.ts.map +1 -1
  285. package/lib/graph-manager/protocol/pure/CubeEngineBuilder.js +63 -5
  286. package/lib/graph-manager/protocol/pure/CubeEngineBuilder.js.map +1 -1
  287. package/lib/graph-manager/protocol/pure/v1/V1_CubeDataProductModel.d.ts +9 -6
  288. package/lib/graph-manager/protocol/pure/v1/V1_CubeDataProductModel.d.ts.map +1 -1
  289. package/lib/graph-manager/protocol/pure/v1/V1_CubeDataProductModel.js +12 -8
  290. package/lib/graph-manager/protocol/pure/v1/V1_CubeDataProductModel.js.map +1 -1
  291. package/lib/graph-manager/protocol/pure/v1/V1_CubeFunctionOutlineBuilder.d.ts +30 -0
  292. package/lib/graph-manager/protocol/pure/v1/V1_CubeFunctionOutlineBuilder.d.ts.map +1 -0
  293. package/lib/graph-manager/protocol/pure/v1/V1_CubeFunctionOutlineBuilder.js +229 -0
  294. package/lib/graph-manager/protocol/pure/v1/V1_CubeFunctionOutlineBuilder.js.map +1 -0
  295. package/lib/graph-manager/protocol/pure/v1/V1_CubeIngestDefinition.d.ts.map +1 -1
  296. package/lib/graph-manager/protocol/pure/v1/V1_CubeIngestDefinition.js +18 -9
  297. package/lib/graph-manager/protocol/pure/v1/V1_CubeIngestDefinition.js.map +1 -1
  298. package/lib/graph-manager/protocol/pure/v1/V1_CubeIngestModel.d.ts +4 -9
  299. package/lib/graph-manager/protocol/pure/v1/V1_CubeIngestModel.d.ts.map +1 -1
  300. package/lib/graph-manager/protocol/pure/v1/V1_CubeIngestModel.js +2 -1
  301. package/lib/graph-manager/protocol/pure/v1/V1_CubeIngestModel.js.map +1 -1
  302. package/lib/graph-manager/protocol/pure/v1/V1_CubeLambdaReader.d.ts +34 -0
  303. package/lib/graph-manager/protocol/pure/v1/V1_CubeLambdaReader.d.ts.map +1 -0
  304. package/lib/graph-manager/protocol/pure/v1/V1_CubeLambdaReader.js +332 -0
  305. package/lib/graph-manager/protocol/pure/v1/V1_CubeLambdaReader.js.map +1 -0
  306. package/lib/graph-manager/protocol/pure/v1/V1_CubeLambdaSerializer.d.ts.map +1 -1
  307. package/lib/graph-manager/protocol/pure/v1/V1_CubeLambdaSerializer.js +49 -10
  308. package/lib/graph-manager/protocol/pure/v1/V1_CubeLambdaSerializer.js.map +1 -1
  309. package/lib/graph-manager/protocol/pure/v1/V1_CubeModelOutlineBuilder.d.ts +1 -1
  310. package/lib/graph-manager/protocol/pure/v1/V1_CubeModelOutlineBuilder.d.ts.map +1 -1
  311. package/lib/graph-manager/protocol/pure/v1/V1_CubeModelOutlineBuilder.js +3 -1
  312. package/lib/graph-manager/protocol/pure/v1/V1_CubeModelOutlineBuilder.js.map +1 -1
  313. package/lib/graph-manager/protocol/pure/v1/V1_LegendCubeConnectionExplorer.d.ts +2 -1
  314. package/lib/graph-manager/protocol/pure/v1/V1_LegendCubeConnectionExplorer.d.ts.map +1 -1
  315. package/lib/graph-manager/protocol/pure/v1/V1_LegendCubeConnectionExplorer.js +2 -1
  316. package/lib/graph-manager/protocol/pure/v1/V1_LegendCubeConnectionExplorer.js.map +1 -1
  317. package/lib/graph-manager/protocol/pure/v1/V1_LegendCubeEngine.d.ts +18 -0
  318. package/lib/graph-manager/protocol/pure/v1/V1_LegendCubeEngine.d.ts.map +1 -1
  319. package/lib/graph-manager/protocol/pure/v1/V1_LegendCubeEngine.js +74 -6
  320. package/lib/graph-manager/protocol/pure/v1/V1_LegendCubeEngine.js.map +1 -1
  321. package/lib/graph-manager/protocol/pure/v1/V1_LegendCubeProjectCatalog.d.ts.map +1 -1
  322. package/lib/graph-manager/protocol/pure/v1/V1_LegendCubeProjectCatalog.js +7 -4
  323. package/lib/graph-manager/protocol/pure/v1/V1_LegendCubeProjectCatalog.js.map +1 -1
  324. package/lib/graph-manager/protocol/pure/v1/V1_LegendCubeServiceCatalog.d.ts +31 -0
  325. package/lib/graph-manager/protocol/pure/v1/V1_LegendCubeServiceCatalog.d.ts.map +1 -0
  326. package/lib/graph-manager/protocol/pure/v1/V1_LegendCubeServiceCatalog.js +69 -0
  327. package/lib/graph-manager/protocol/pure/v1/V1_LegendCubeServiceCatalog.js.map +1 -0
  328. package/lib/graph-manager/protocol/pure/v1/__test-utils__/V1_CubeEngineTestUtils.d.ts.map +1 -1
  329. package/lib/graph-manager/protocol/pure/v1/__test-utils__/V1_CubeEngineTestUtils.js +6 -2
  330. package/lib/graph-manager/protocol/pure/v1/__test-utils__/V1_CubeEngineTestUtils.js.map +1 -1
  331. package/lib/index.css +2 -2
  332. package/lib/index.css.map +1 -1
  333. package/lib/index.d.ts +12 -3
  334. package/lib/index.d.ts.map +1 -1
  335. package/lib/index.js +10 -1
  336. package/lib/index.js.map +1 -1
  337. package/lib/stores/CubeAddPlacement.d.ts +10 -3
  338. package/lib/stores/CubeAddPlacement.d.ts.map +1 -1
  339. package/lib/stores/CubeAddPlacement.js +16 -5
  340. package/lib/stores/CubeAddPlacement.js.map +1 -1
  341. package/lib/stores/CubeDevSettingsState.d.ts +47 -0
  342. package/lib/stores/CubeDevSettingsState.d.ts.map +1 -0
  343. package/lib/stores/CubeDevSettingsState.js +99 -0
  344. package/lib/stores/CubeDevSettingsState.js.map +1 -0
  345. package/lib/stores/CubeEditorState.d.ts +173 -43
  346. package/lib/stores/CubeEditorState.d.ts.map +1 -1
  347. package/lib/stores/CubeEditorState.js +498 -113
  348. package/lib/stores/CubeEditorState.js.map +1 -1
  349. package/lib/stores/CubeEngineChecks.d.ts +59 -0
  350. package/lib/stores/CubeEngineChecks.d.ts.map +1 -0
  351. package/lib/stores/CubeEngineChecks.js +100 -0
  352. package/lib/stores/CubeEngineChecks.js.map +1 -0
  353. package/lib/stores/CubeExamples.d.ts.map +1 -1
  354. package/lib/stores/CubeExamples.js +39 -2
  355. package/lib/stores/CubeExamples.js.map +1 -1
  356. package/lib/stores/CubeExamplesState.d.ts +1 -1
  357. package/lib/stores/CubeExamplesState.d.ts.map +1 -1
  358. package/lib/stores/CubeExamplesState.js +2 -2
  359. package/lib/stores/CubeExamplesState.js.map +1 -1
  360. package/lib/stores/CubeExecutionState.d.ts.map +1 -1
  361. package/lib/stores/CubeExecutionState.js +24 -33
  362. package/lib/stores/CubeExecutionState.js.map +1 -1
  363. package/lib/stores/CubeExportState.d.ts +41 -0
  364. package/lib/stores/CubeExportState.d.ts.map +1 -0
  365. package/lib/stores/CubeExportState.js +134 -0
  366. package/lib/stores/CubeExportState.js.map +1 -0
  367. package/lib/stores/CubeExpressionFilterCheck.d.ts +51 -0
  368. package/lib/stores/CubeExpressionFilterCheck.d.ts.map +1 -0
  369. package/lib/stores/CubeExpressionFilterCheck.js +134 -0
  370. package/lib/stores/CubeExpressionFilterCheck.js.map +1 -0
  371. package/lib/stores/CubeExtendTyping.d.ts +6 -14
  372. package/lib/stores/CubeExtendTyping.d.ts.map +1 -1
  373. package/lib/stores/CubeExtendTyping.js +6 -33
  374. package/lib/stores/CubeExtendTyping.js.map +1 -1
  375. package/lib/stores/CubeFunctionRecheck.d.ts +30 -0
  376. package/lib/stores/CubeFunctionRecheck.d.ts.map +1 -0
  377. package/lib/stores/CubeFunctionRecheck.js +67 -0
  378. package/lib/stores/CubeFunctionRecheck.js.map +1 -0
  379. package/lib/stores/CubeGridFetcher.d.ts +75 -0
  380. package/lib/stores/CubeGridFetcher.d.ts.map +1 -0
  381. package/lib/stores/CubeGridFetcher.js +197 -0
  382. package/lib/stores/CubeGridFetcher.js.map +1 -0
  383. package/lib/stores/CubeGridQuickActions.d.ts +18 -6
  384. package/lib/stores/CubeGridQuickActions.d.ts.map +1 -1
  385. package/lib/stores/CubeGridQuickActions.js +32 -12
  386. package/lib/stores/CubeGridQuickActions.js.map +1 -1
  387. package/lib/stores/CubeGridState.d.ts +136 -0
  388. package/lib/stores/CubeGridState.d.ts.map +1 -0
  389. package/lib/stores/CubeGridState.js +317 -0
  390. package/lib/stores/CubeGridState.js.map +1 -0
  391. package/lib/stores/CubeHost.d.ts +42 -0
  392. package/lib/stores/CubeHost.d.ts.map +1 -1
  393. package/lib/stores/CubeHost.js +4 -0
  394. package/lib/stores/CubeHost.js.map +1 -1
  395. package/lib/stores/CubeLambdaImportState.d.ts +118 -0
  396. package/lib/stores/CubeLambdaImportState.d.ts.map +1 -0
  397. package/lib/stores/CubeLambdaImportState.js +302 -0
  398. package/lib/stores/CubeLambdaImportState.js.map +1 -0
  399. package/lib/stores/CubeLambdaSources.d.ts +45 -0
  400. package/lib/stores/CubeLambdaSources.d.ts.map +1 -0
  401. package/lib/stores/CubeLambdaSources.js +261 -0
  402. package/lib/stores/CubeLambdaSources.js.map +1 -0
  403. package/lib/stores/CubeQueryRun.d.ts +59 -0
  404. package/lib/stores/CubeQueryRun.d.ts.map +1 -0
  405. package/lib/stores/CubeQueryRun.js +101 -0
  406. package/lib/stores/CubeQueryRun.js.map +1 -0
  407. package/lib/stores/CubeRunStatsState.d.ts +61 -0
  408. package/lib/stores/CubeRunStatsState.d.ts.map +1 -0
  409. package/lib/stores/CubeRunStatsState.js +54 -0
  410. package/lib/stores/CubeRunStatsState.js.map +1 -0
  411. package/lib/stores/CubeRunningStepLambda.d.ts +25 -0
  412. package/lib/stores/CubeRunningStepLambda.d.ts.map +1 -0
  413. package/lib/stores/CubeRunningStepLambda.js +45 -0
  414. package/lib/stores/CubeRunningStepLambda.js.map +1 -0
  415. package/lib/stores/CubeServiceRecheck.d.ts +29 -0
  416. package/lib/stores/CubeServiceRecheck.d.ts.map +1 -0
  417. package/lib/stores/CubeServiceRecheck.js +33 -0
  418. package/lib/stores/CubeServiceRecheck.js.map +1 -0
  419. package/lib/stores/CubeShowPureState.d.ts +14 -1
  420. package/lib/stores/CubeShowPureState.d.ts.map +1 -1
  421. package/lib/stores/CubeShowPureState.js +41 -11
  422. package/lib/stores/CubeShowPureState.js.map +1 -1
  423. package/lib/stores/CubeSourcePickerState.d.ts +20 -4
  424. package/lib/stores/CubeSourcePickerState.d.ts.map +1 -1
  425. package/lib/stores/CubeSourcePickerState.js +75 -14
  426. package/lib/stores/CubeSourcePickerState.js.map +1 -1
  427. package/lib/stores/LocalModelCatalog.d.ts.map +1 -1
  428. package/lib/stores/LocalModelCatalog.js +3 -1
  429. package/lib/stores/LocalModelCatalog.js.map +1 -1
  430. package/lib/stores/editors/CubeExpressionFilterDraft.d.ts +91 -0
  431. package/lib/stores/editors/CubeExpressionFilterDraft.d.ts.map +1 -0
  432. package/lib/stores/editors/CubeExpressionFilterDraft.js +254 -0
  433. package/lib/stores/editors/CubeExpressionFilterDraft.js.map +1 -0
  434. package/lib/stores/editors/CubeFunctionDraft.d.ts +34 -0
  435. package/lib/stores/editors/CubeFunctionDraft.d.ts.map +1 -0
  436. package/lib/stores/editors/CubeFunctionDraft.js +69 -0
  437. package/lib/stores/editors/CubeFunctionDraft.js.map +1 -0
  438. package/lib/stores/editors/CubeNodeDraftRegistry.d.ts +4 -2
  439. package/lib/stores/editors/CubeNodeDraftRegistry.d.ts.map +1 -1
  440. package/lib/stores/editors/CubeNodeDraftRegistry.js +20 -3
  441. package/lib/stores/editors/CubeNodeDraftRegistry.js.map +1 -1
  442. package/lib/stores/editors/CubePivotDraft.d.ts +93 -0
  443. package/lib/stores/editors/CubePivotDraft.d.ts.map +1 -0
  444. package/lib/stores/editors/CubePivotDraft.js +267 -0
  445. package/lib/stores/editors/CubePivotDraft.js.map +1 -0
  446. package/lib/stores/fixtures/CubeSalesDuckDbModel.d.ts +26 -0
  447. package/lib/stores/fixtures/CubeSalesDuckDbModel.d.ts.map +1 -0
  448. package/lib/stores/fixtures/CubeSalesDuckDbModel.js +46 -0
  449. package/lib/stores/fixtures/CubeSalesDuckDbModel.js.map +1 -0
  450. package/lib/stores/fixtures/CubeTradesModel.d.ts +4 -0
  451. package/lib/stores/fixtures/CubeTradesModel.d.ts.map +1 -1
  452. package/lib/stores/fixtures/CubeTradesModel.js +31 -1
  453. package/lib/stores/fixtures/CubeTradesModel.js.map +1 -1
  454. package/lib/stores/source-picker/CubeDataProductTabState.d.ts +34 -5
  455. package/lib/stores/source-picker/CubeDataProductTabState.d.ts.map +1 -1
  456. package/lib/stores/source-picker/CubeDataProductTabState.js +111 -26
  457. package/lib/stores/source-picker/CubeDataProductTabState.js.map +1 -1
  458. package/lib/stores/source-picker/CubeDirectConnectionTabState.d.ts +25 -2
  459. package/lib/stores/source-picker/CubeDirectConnectionTabState.d.ts.map +1 -1
  460. package/lib/stores/source-picker/CubeDirectConnectionTabState.js +183 -31
  461. package/lib/stores/source-picker/CubeDirectConnectionTabState.js.map +1 -1
  462. package/lib/stores/source-picker/CubeIngestTabState.d.ts +22 -9
  463. package/lib/stores/source-picker/CubeIngestTabState.d.ts.map +1 -1
  464. package/lib/stores/source-picker/CubeIngestTabState.js +84 -29
  465. package/lib/stores/source-picker/CubeIngestTabState.js.map +1 -1
  466. package/lib/stores/source-picker/CubeInlineModelTabState.d.ts +100 -4
  467. package/lib/stores/source-picker/CubeInlineModelTabState.d.ts.map +1 -1
  468. package/lib/stores/source-picker/CubeInlineModelTabState.js +415 -28
  469. package/lib/stores/source-picker/CubeInlineModelTabState.js.map +1 -1
  470. package/lib/stores/source-picker/CubeProjectTabState.d.ts +18 -3
  471. package/lib/stores/source-picker/CubeProjectTabState.d.ts.map +1 -1
  472. package/lib/stores/source-picker/CubeProjectTabState.js +26 -1
  473. package/lib/stores/source-picker/CubeProjectTabState.js.map +1 -1
  474. package/lib/stores/source-picker/CubeServiceTabState.d.ts +74 -0
  475. package/lib/stores/source-picker/CubeServiceTabState.d.ts.map +1 -0
  476. package/lib/stores/source-picker/CubeServiceTabState.js +216 -0
  477. package/lib/stores/source-picker/CubeServiceTabState.js.map +1 -0
  478. package/lib/stores/source-picker/CubeSourcePickerTab.d.ts +15 -3
  479. package/lib/stores/source-picker/CubeSourcePickerTab.d.ts.map +1 -1
  480. package/lib/stores/source-picker/CubeSourcePickerTab.js +21 -0
  481. package/lib/stores/source-picker/CubeSourcePickerTab.js.map +1 -1
  482. package/package.json +10 -9
  483. package/src/__lib__/LegendCubeCommand.ts +7 -0
  484. package/src/__lib__/LegendCubeFunctionLabels.ts +41 -0
  485. package/src/__lib__/LegendCubeHelpText.ts +23 -1
  486. package/src/__lib__/LegendCubeLabels.ts +170 -13
  487. package/src/__lib__/LegendCubeProjectSourceLabels.ts +26 -0
  488. package/src/__lib__/LegendCubeServiceLabels.ts +41 -0
  489. package/src/__lib__/LegendCubeTesting.ts +7 -0
  490. package/src/__test-utils__/CubeEngineTestSupport.ts +2 -1
  491. package/src/__test-utils__/CubeExpressionTestUtils.ts +29 -2
  492. package/src/__test-utils__/CubeFunctionTestOutline.ts +78 -0
  493. package/src/__test-utils__/CubeLambdaCorpus.ts +137 -0
  494. package/src/__test-utils__/CubePageTestUtils.tsx +34 -0
  495. package/src/__test-utils__/CubeTestApplication.ts +25 -0
  496. package/src/__test-utils__/FakeCubeEngine.ts +27 -0
  497. package/src/__test-utils__/FakeCubeIngestCatalog.ts +18 -0
  498. package/src/__test-utils__/FakeCubeServiceCatalog.ts +57 -0
  499. package/src/components/CubeAddItems.tsx +13 -6
  500. package/src/components/CubeDialogTheme.ts +25 -0
  501. package/src/components/CubeEditor.tsx +155 -129
  502. package/src/components/CubeFileMenu.tsx +127 -0
  503. package/src/components/CubeLambdaImportBanner.tsx +97 -0
  504. package/src/components/CubeNodeIcon.tsx +7 -0
  505. package/src/components/CubeSchemaColumnsTable.tsx +7 -2
  506. package/src/components/canvas/CubeCanvas.tsx +52 -13
  507. package/src/components/canvas/CubeCanvasContextMenu.tsx +33 -2
  508. package/src/components/canvas/CubeCanvasElements.ts +76 -3
  509. package/src/components/canvas/CubeCanvasLayout.ts +1 -1
  510. package/src/components/canvas/CubeCanvasNode.tsx +30 -3
  511. package/src/components/dev-settings/CubeDevSettings.tsx +154 -0
  512. package/src/components/editors/CubeColumnChecklist.tsx +8 -2
  513. package/src/components/editors/CubeColumnPicker.tsx +6 -3
  514. package/src/components/editors/CubeConcatEditor.tsx +2 -2
  515. package/src/components/editors/CubeExpressionFilterEditor.tsx +193 -0
  516. package/src/components/editors/CubeExtendEditor.tsx +3 -3
  517. package/src/components/editors/CubeFilterEditor.tsx +13 -1
  518. package/src/components/editors/CubeFunctionSourceEditor.tsx +140 -0
  519. package/src/components/editors/CubeJoinEditor.tsx +23 -4
  520. package/src/components/editors/CubeNodeEditorPanel.tsx +22 -10
  521. package/src/components/editors/CubeNodeEditorPopper.tsx +9 -1
  522. package/src/components/editors/CubeNodeEditorRegistry.ts +12 -0
  523. package/src/components/editors/CubePivotEditor.tsx +277 -0
  524. package/src/components/editors/CubeRestrictEditor.tsx +8 -2
  525. package/src/components/editors/CubeServiceSourceEditor.tsx +77 -0
  526. package/src/components/grid/CubeColumnFormatDialog.tsx +289 -0
  527. package/src/components/grid/CubeDrilldownBar.tsx +219 -0
  528. package/src/components/grid/CubeGridRegion.tsx +170 -54
  529. package/src/components/grid/CubeGridValues.ts +146 -1
  530. package/src/components/grid/CubeResultGrid.tsx +443 -41
  531. package/src/components/grid/CubeRunStatsPanel.tsx +156 -0
  532. package/src/components/grid/CubeServerSideGrid.tsx +200 -0
  533. package/src/components/grid/CubeSqlDialog.tsx +90 -0
  534. package/src/components/grid/CubeSqlFormat.ts +37 -0
  535. package/src/components/palette/CubePalette.tsx +45 -12
  536. package/src/components/show-pure/CubeShowPureDialog.tsx +19 -5
  537. package/src/components/source-picker/CubeDataProductTab.tsx +169 -75
  538. package/src/components/source-picker/CubeDirectConnectionTab.tsx +42 -30
  539. package/src/components/source-picker/CubeFunctionSteps.tsx +244 -0
  540. package/src/components/source-picker/CubeIngestTab.tsx +159 -79
  541. package/src/components/source-picker/CubeInlineModelTab.tsx +110 -81
  542. package/src/components/source-picker/CubePickerListItem.tsx +118 -0
  543. package/src/components/source-picker/CubeProjectTab.tsx +6 -3
  544. package/src/components/source-picker/CubeServiceTab.tsx +151 -0
  545. package/src/components/source-picker/CubeSourcePicker.tsx +54 -18
  546. package/src/components/source-picker/CubeTablePreview.tsx +49 -0
  547. package/src/components/spec-transfer/CubeImportPureDialog.tsx +122 -0
  548. package/src/components/spec-transfer/CubeSpecTransferDialog.tsx +21 -8
  549. package/src/graph-manager/CubeDataProductCatalog.ts +11 -0
  550. package/src/graph-manager/CubeEngine.ts +51 -1
  551. package/src/graph-manager/CubeEngineClientSettings.ts +64 -0
  552. package/src/graph-manager/CubeIngest.ts +15 -0
  553. package/src/graph-manager/CubeIngestCatalog.ts +33 -0
  554. package/src/graph-manager/CubeLakehouseRuntime.ts +43 -0
  555. package/src/graph-manager/CubeProjectCatalog.ts +3 -3
  556. package/src/graph-manager/CubeService.ts +29 -0
  557. package/src/graph-manager/CubeServiceCatalog.ts +35 -0
  558. package/src/graph-manager/protocol/pure/CubeEngineBuilder.ts +115 -5
  559. package/src/graph-manager/protocol/pure/v1/V1_CubeDataProductModel.ts +13 -7
  560. package/src/graph-manager/protocol/pure/v1/V1_CubeFunctionOutlineBuilder.ts +312 -0
  561. package/src/graph-manager/protocol/pure/v1/V1_CubeIngestDefinition.ts +35 -9
  562. package/src/graph-manager/protocol/pure/v1/V1_CubeIngestModel.ts +6 -15
  563. package/src/graph-manager/protocol/pure/v1/V1_CubeLambdaReader.ts +471 -0
  564. package/src/graph-manager/protocol/pure/v1/V1_CubeLambdaSerializer.ts +70 -15
  565. package/src/graph-manager/protocol/pure/v1/V1_CubeModelOutlineBuilder.ts +3 -1
  566. package/src/graph-manager/protocol/pure/v1/V1_LegendCubeConnectionExplorer.ts +7 -1
  567. package/src/graph-manager/protocol/pure/v1/V1_LegendCubeEngine.ts +122 -7
  568. package/src/graph-manager/protocol/pure/v1/V1_LegendCubeProjectCatalog.ts +9 -4
  569. package/src/graph-manager/protocol/pure/v1/V1_LegendCubeServiceCatalog.ts +92 -0
  570. package/src/graph-manager/protocol/pure/v1/__test-utils__/V1_CubeEngineTestUtils.ts +6 -1
  571. package/src/index.ts +32 -2
  572. package/src/stores/CubeAddPlacement.ts +25 -5
  573. package/src/stores/CubeDevSettingsState.ts +117 -0
  574. package/src/stores/CubeEditorState.ts +687 -197
  575. package/src/stores/CubeEngineChecks.ts +240 -0
  576. package/src/stores/CubeExamples.ts +70 -1
  577. package/src/stores/CubeExamplesState.ts +4 -2
  578. package/src/stores/CubeExecutionState.ts +26 -57
  579. package/src/stores/CubeExportState.ts +196 -0
  580. package/src/stores/CubeExpressionFilterCheck.ts +218 -0
  581. package/src/stores/CubeExtendTyping.ts +6 -46
  582. package/src/stores/CubeFunctionRecheck.ts +97 -0
  583. package/src/stores/CubeGridFetcher.ts +302 -0
  584. package/src/stores/CubeGridQuickActions.ts +33 -11
  585. package/src/stores/CubeGridState.ts +450 -0
  586. package/src/stores/CubeHost.ts +48 -0
  587. package/src/stores/CubeLambdaImportState.ts +434 -0
  588. package/src/stores/CubeLambdaSources.ts +390 -0
  589. package/src/stores/CubeQueryRun.ts +169 -0
  590. package/src/stores/CubeRunStatsState.ts +91 -0
  591. package/src/stores/CubeRunningStepLambda.ts +62 -0
  592. package/src/stores/CubeServiceRecheck.ts +53 -0
  593. package/src/stores/CubeShowPureState.ts +51 -12
  594. package/src/stores/CubeSourcePickerState.ts +89 -13
  595. package/src/stores/LocalModelCatalog.ts +6 -1
  596. package/src/stores/editors/CubeExpressionFilterDraft.ts +385 -0
  597. package/src/stores/editors/CubeFunctionDraft.ts +92 -0
  598. package/src/stores/editors/CubeNodeDraftRegistry.ts +27 -2
  599. package/src/stores/editors/CubePivotDraft.ts +355 -0
  600. package/src/stores/fixtures/CubeSalesDuckDbModel.ts +54 -0
  601. package/src/stores/fixtures/CubeTradesModel.ts +36 -1
  602. package/src/stores/source-picker/CubeDataProductTabState.ts +162 -35
  603. package/src/stores/source-picker/CubeDirectConnectionTabState.ts +246 -47
  604. package/src/stores/source-picker/CubeIngestTabState.ts +112 -38
  605. package/src/stores/source-picker/CubeInlineModelTabState.ts +514 -34
  606. package/src/stores/source-picker/CubeProjectTabState.ts +35 -3
  607. package/src/stores/source-picker/CubeServiceTabState.ts +288 -0
  608. package/src/stores/source-picker/CubeSourcePickerTab.ts +31 -2
  609. package/tsconfig.json +50 -0
@@ -21,15 +21,19 @@ import {
21
21
  IngestDatasetSource,
22
22
  Distinct,
23
23
  Drop,
24
+ ExpressionFilter,
24
25
  Extend,
25
26
  Filter,
27
+ FunctionSource,
26
28
  Group,
27
29
  Join,
28
30
  Limit,
29
31
  Partition,
32
+ Pivot,
30
33
  RelationalTableSource,
31
34
  Rename,
32
35
  Restrict,
36
+ ServiceSource,
33
37
  Slice,
34
38
  Sort,
35
39
  UnknownNode,
@@ -42,12 +46,18 @@ import {
42
46
 
43
47
  export const CUBE_NODE_HELP_TEXT: Readonly<Record<string, string>> = {
44
48
  [RelationalTableSource.TYPE]: 'Sources data from relational database table.',
49
+ /** Added by Cube: the original's PURE Native Function source (PLAN §6.5) */
50
+ [FunctionSource.TYPE]:
51
+ 'Sources data from a function of the model that returns a relation, called with a value for each parameter.',
45
52
  /** Added by Cube: the original has no data product source (PLAN §6.8) */
46
53
  [DataProductAccessPointSource.TYPE]:
47
54
  'Sources data from an access point of a deployed data product.',
48
55
  /** Added by Cube: the original has no ingest data set source (PLAN §6.7) */
49
56
  [IngestDatasetSource.TYPE]:
50
57
  'Sources data from a data set of a deployed ingest definition.',
58
+ /** Added by Cube: the original's service source is read another way, still to come (PLAN §6.4) */
59
+ [ServiceSource.TYPE]:
60
+ "Sources data from a deployed service. In progress: Cube can't read services yet.",
51
61
  [Concat.TYPE]:
52
62
  'Combines the rows of the two previous data sets, keeping duplicates, in no particular order. Both must have the same columns: the same names, in the same order, with the same types.',
53
63
  [Difference.TYPE]:
@@ -59,8 +69,14 @@ export const CUBE_NODE_HELP_TEXT: Readonly<Record<string, string>> = {
59
69
  'Extends outgoing data set with new columns produced by expressions.',
60
70
  [Filter.TYPE]:
61
71
  'Reduces the number of rows in the previous data set, keeping only rows matching the specified criteria.',
72
+ /** Added by Cube: the original has no filter by expression (PLAN §11.11) */
73
+ [ExpressionFilter.TYPE]:
74
+ 'Reduces the number of rows in the previous data set, keeping only rows for which the expression is true.',
62
75
  [Group.TYPE]:
63
76
  'Aggregates the data from the previous data set using the specified columns and aggregation functions.',
77
+ /** Added by Cube: the original has pivot only in the grid (PLAN §11.12) */
78
+ [Pivot.TYPE]:
79
+ 'Turns the values of a column of the previous data set into columns: a row for each combination of the row columns that has a picked value, and a column for each picked value, holding its aggregate.',
64
80
  [Join.TYPE]:
65
81
  'Joins two previous data sets using specified columns as join keys.',
66
82
  [Partition.TYPE]:
@@ -79,4 +95,10 @@ export const CUBE_NODE_HELP_TEXT: Readonly<Record<string, string>> = {
79
95
 
80
96
  /** The tooltip of the editor's Select link (spec §17.9) */
81
97
  export const SELECT_NODE_TOOLTIP =
82
- 'Selects this node as active and its output will be shown in the grid once query is executed.';
98
+ 'Make this the step that runs: Execute shows its rows in the grid.';
99
+
100
+ /** The marker on the step that runs, on the canvas and in its editor */
101
+ export const RUNNING_NODE_LABEL = 'Runs';
102
+
103
+ /** What a node's menu and editor call making it the step that runs */
104
+ export const RUN_THIS_STEP_LABEL = 'Run this step';
@@ -14,7 +14,11 @@
14
14
  * limitations under the License.
15
15
  */
16
16
 
17
- import type { SchemaColumn, SchemaDiff } from '@finos/legend-cube';
17
+ import {
18
+ type SchemaColumn,
19
+ type SchemaDiff,
20
+ TypeFamily,
21
+ } from '@finos/legend-cube';
18
22
  import { CubeTableFlag } from '../graph-manager/CubeEngine.js';
19
23
 
20
24
  // The page's own text and settings; validation messages live in the core's
@@ -32,6 +36,10 @@ export enum LEGEND_CUBE_USER_DATA_KEY {
32
36
  PALETTE_COLLAPSED = 'legend-cube.palette-collapsed',
33
37
  /** The warehouse the viewer last picked for a data product cube (PLAN §6.8) */
34
38
  DATA_PRODUCT_WAREHOUSE = 'legend-cube.data-product-warehouse',
39
+ /** Server-side or local (PLAN §11.10) */
40
+ GRID_MODE = 'legend-cube.grid-mode',
41
+ /** Engine requests sent uncompressed, for the browser's Network tab (PLAN §11.16) */
42
+ UNCOMPRESSED_REQUESTS = 'legend-cube.uncompressed-requests',
35
43
  }
36
44
 
37
45
  export const UNSAVED_CUBE_NAME = 'Unsaved Query';
@@ -49,26 +57,51 @@ export const READ_ONLY_CUBE_TITLE =
49
57
  /** How a SQL NULL shows in the grid, distinct from an empty string */
50
58
  export const NULL_CELL_TEXT = '(null)';
51
59
 
60
+ /** What the Runs panel calls a run (PLAN §11.10, §11.16); a fetch of the grid's rows is described by its level */
61
+ export const CUBE_RUN_LABEL = {
62
+ EXECUTE: 'Execute',
63
+ EXPORT_CSV: 'Export CSV',
64
+ pivotValues: (column: string): string => `Values of ${column}`,
65
+ };
66
+
67
+ /**
68
+ * Above a run's Pure (PLAN §11.16): unlike Show Pure, it shows the limit a
69
+ * grid run adds, one more than the row limit, to tell whether there are more
70
+ */
71
+ export const CUBE_RUN_PURE_NOTE =
72
+ 'As it ran, with any row limit Cube added to it.';
73
+
52
74
  /** Pending labels: lower-case gerunds, shown as they are (spec §17.13) */
53
75
  export enum CUBE_PENDING_LABEL {
54
76
  LOADING_MODEL = 'loading model',
55
77
  RESOLVING_SOURCE = 'resolving source',
56
78
  EXECUTING_QUERY = 'executing query',
79
+ FETCHING_ROWS = 'fetching rows',
80
+ EXPORTING_CSV = 'exporting CSV',
57
81
  RENDERING_QUERY = 'rendering query',
58
82
  REFRESHING_SOURCE = 'refreshing source',
59
- TYPING_COLUMNS = 'typing new columns',
83
+ CHECKING_EXPRESSIONS = 'checking expressions',
60
84
  }
61
85
 
62
- export const getRowLimitError = (text: string): string | undefined => {
63
- const value = Number(text.trim());
64
- return text.trim() === '' || !Number.isSafeInteger(value) || value < 1
86
+ /**
87
+ * Why a row limit can't be taken: the number its text holds
88
+ * (`parseWholeNumberText`, so `0x10`, `1e3` and `1.0` hold none, PLAN
89
+ * §11.14) isn't a safe whole number of at least 1
90
+ */
91
+ export const getRowLimitError = (
92
+ value: number | undefined,
93
+ ): string | undefined =>
94
+ value === undefined || !Number.isSafeInteger(value) || value < 1
65
95
  ? 'The row limit must be a whole number of at least 1.'
66
96
  : undefined;
67
- };
68
97
 
69
98
  export const getTruncationMessage = (rowLimit: number): string =>
70
99
  `Showing the first ${rowLimit.toLocaleString('en-US')} rows; the query returned more.`;
71
100
 
101
+ /** In server-side mode, when a drill-down level or a sorted level was cut at the row limit (PLAN §11.10) */
102
+ export const getLevelTruncationMessage = (rowLimit: number): string =>
103
+ `Some levels show only their first ${rowLimit.toLocaleString('en-US')} rows or groups.`;
104
+
72
105
  /** How the picker shows a table's problem, and why (PLAN §6.2.6) */
73
106
  export const CUBE_TABLE_FLAG_LABELS: Readonly<
74
107
  Record<CubeTableFlag, { label: string; description: string }>
@@ -87,10 +120,36 @@ export const CUBE_TABLE_FLAG_LABELS: Readonly<
87
120
  },
88
121
  };
89
122
 
90
- /** A column's type as the editors show it: its display name, `?` when it takes NULL, e.g. `Varchar(5)?` */
91
- export const getColumnTypeLabel = (column: SchemaColumn): string =>
123
+ /** A column's exact type: its display name, `?` when it takes NULL, e.g. `Varchar(5)?`; for hover and type messages */
124
+ export const getExactColumnTypeLabel = (column: SchemaColumn): string =>
92
125
  `${column.type.displayName}${column.nullable ? '?' : ''}`;
93
126
 
127
+ /** The kind of value a type family holds, as the editors name it (the review of the demo, 2026-10-13) */
128
+ const TYPE_FAMILY_LABELS: Partial<Record<TypeFamily, string>> = {
129
+ [TypeFamily.BOOLEAN]: 'True or false',
130
+ [TypeFamily.STRING]: 'Text',
131
+ [TypeFamily.INTEGER]: 'Whole number',
132
+ [TypeFamily.FLOAT]: 'Number',
133
+ [TypeFamily.DECIMAL]: 'Decimal',
134
+ [TypeFamily.NUMBER]: 'Number',
135
+ [TypeFamily.STRICT_DATE]: 'Date',
136
+ [TypeFamily.DATETIME]: 'Date and time',
137
+ [TypeFamily.DATE]: 'Date',
138
+ [TypeFamily.STRICT_TIME]: 'Time',
139
+ [TypeFamily.VARIANT]: 'Variant',
140
+ };
141
+
142
+ /**
143
+ * A column's type as the editors show it: the kind of value, and whether it
144
+ * can be empty, e.g. `Text, can be empty`; an enumeration, or a type Cube
145
+ * doesn't know, by its name. The exact type (`getExactColumnTypeLabel`) is
146
+ * on hover.
147
+ */
148
+ export const getColumnTypeLabel = (column: SchemaColumn): string =>
149
+ `${TYPE_FAMILY_LABELS[column.type.family] ?? column.type.displayName}${
150
+ column.nullable ? ', can be empty' : ''
151
+ }`;
152
+
94
153
  const listColumns = (columns: readonly SchemaColumn[]): string =>
95
154
  columns.map((column) => column.name).join(', ');
96
155
 
@@ -108,7 +167,7 @@ export const getSchemaChangeList = (diff: SchemaDiff): string => {
108
167
  `changed ${diff.changed
109
168
  .map(
110
169
  (change) =>
111
- `${change.after.name} (${getColumnTypeLabel(change.before)} to ${getColumnTypeLabel(change.after)})`,
170
+ `${change.after.name} (${getExactColumnTypeLabel(change.before)} to ${getExactColumnTypeLabel(change.after)})`,
112
171
  )
113
172
  .join(', ')}`,
114
173
  ]
@@ -136,6 +195,11 @@ export const CUBE_QUICK_ACTION_DISABLED_REASON = {
136
195
  EDITING:
137
196
  "Close the node editor first: these rows don't show the changes in it.",
138
197
  UNREADABLE_VALUE: "This value can't be used in a filter.",
198
+ /** On a group row's cell that holds its aggregation (PLAN §11.10) */
199
+ AGGREGATE_VALUE:
200
+ "This cell holds its group's aggregation, not a row's value, so it can't be used in a filter.",
201
+ /** On a group row's cell that shows nothing */
202
+ NO_VALUE: 'This cell has no value to filter by.',
139
203
  notSortable: (typeName: string): string =>
140
204
  `Values of type ${typeName} can't be sorted.`,
141
205
  notGroupable: (typeName: string): string =>
@@ -144,6 +208,16 @@ export const CUBE_QUICK_ACTION_DISABLED_REASON = {
144
208
  `Values of type ${typeName} can't be compared.`,
145
209
  };
146
210
 
211
+ /** Why 'Format Column' can't be used on a column (spec §13.1) */
212
+ export const CUBE_FORMAT_NOT_A_NUMBER = 'Only number columns can be formatted.';
213
+
214
+ /** Why 'Drilldown by' can't be used on a column (PLAN §11.10) */
215
+ export const CUBE_DRILLDOWN_BLOCKER = {
216
+ ALREADY_A_LEVEL: 'The results already drill down by this column.',
217
+ notGroupable: (typeName: string): string =>
218
+ `Values of type ${typeName} can't be grouped.`,
219
+ };
220
+
147
221
  /** Beside a condition comparing a floating-point column for equality (R133) */
148
222
  export const FILTER_FLOAT_COMPARISON_HINT =
149
223
  'exact comparison on floating-point columns may not match';
@@ -241,6 +315,42 @@ export const GROUP_EDITOR_NOTES = [
241
315
  'With no group column, the result is one row, even when there are no rows.',
242
316
  ];
243
317
 
318
+ /** Why the Pivot editor won't take a column (PLAN §11.12), shown after the column's type */
319
+ export const PIVOT_COLUMN_DISABLED_REASON = {
320
+ /** a row column that can't be compared */
321
+ NOT_GROUPABLE: "can't be grouped",
322
+ /** a pivot column of another type than a String, an integer, a StrictDate or a Boolean */
323
+ NOT_PIVOTABLE: "can't be pivoted",
324
+ /** a column the pivot uses for another part */
325
+ PIVOT_COLUMN: 'the pivot column',
326
+ ROW_COLUMN: 'a row column',
327
+ AGGREGATED: 'the aggregated column',
328
+ } as const;
329
+
330
+ /** Why the Pivot editor won't tick a value (PLAN §11.12) */
331
+ export const PIVOT_VALUE_DISABLED_REASON = {
332
+ NOT_A_COLUMN_NAME: "can't name a column",
333
+ /** another value ticked has the same text in another case */
334
+ DIFFERS_ONLY_IN_CASE: 'only its case differs from a ticked value',
335
+ /** as many values are ticked as a Pivot takes */
336
+ TOO_MANY: 'as many values as a Pivot takes are ticked',
337
+ } as const;
338
+
339
+ /** What the Pivot editor says (PLAN §11.12) */
340
+ export const PIVOT_EDITOR_NOTES = [
341
+ 'Each picked value becomes a column, named by the value, holding the aggregation of its rows; each combination of the row columns with a picked value becomes a row. Values not picked, and combinations holding only them, are left out.',
342
+ "Load values lists the pivot column's values, each once, up to 100. An empty value can't be pivoted, nor one that can't name a column; of two values that differ only in case, one can be ticked, as some databases would mix up their columns.",
343
+ "Pivot runs on Snowflake, Databricks, SingleStore and DuckDB; other databases, such as H2 and Postgres, can't run it.",
344
+ ] as const;
345
+
346
+ /** Says that Load values found no value to list (PLAN §11.12) */
347
+ export const PIVOT_NO_VALUES_NOTICE =
348
+ 'The pivot column has no value to list: its rows are all empty, or there are none.';
349
+
350
+ /** Says that the engine has more values than the Pivot editor lists (PLAN §11.12) */
351
+ export const getPivotValuesCutNotice = (shown: number): string =>
352
+ `Only the first ${shown} values are listed.`;
353
+
244
354
  /** Why the Partition editor won't tick a column that can't be compared (PLAN §11.6) */
245
355
  export const CUBE_PARTITION_COLUMN_DISABLED_REASON = "can't be partitioned by";
246
356
 
@@ -295,6 +405,10 @@ export const EXTEND_APPLY_DISABLED_REASON = Object.freeze({
295
405
  export const getExtendRetypeWarning = (firstLine: string): string =>
296
406
  `Could not check these columns' types again, so they keep their saved ones: ${firstLine}`;
297
407
 
408
+ /** The warning on a Filter by Expression whose condition the engine couldn't check again, e.g. offline (PLAN §11.11) */
409
+ export const getConditionRecheckWarning = (firstLine: string): string =>
410
+ `Could not check this condition again, so it keeps its last check: ${firstLine}`;
411
+
298
412
  /** The notice of a node editor kept open, since its changes can't be applied yet, e.g. an Extend's expressions not validated */
299
413
  export const getEditorKeptOpenNotice = (
300
414
  nodeId: string,
@@ -302,11 +416,34 @@ export const getEditorKeptOpenNotice = (
302
416
  ): string =>
303
417
  `The editor of ${nodeId} stays open, since its changes can't be applied yet: ${waiting}, or Cancel to drop them.`;
304
418
 
419
+ /** Why the Filter by Expression editor's Apply waits (PLAN §11.11) */
420
+ export const EXPRESSION_FILTER_APPLY_DISABLED_REASON = Object.freeze({
421
+ NOT_VALIDATED: 'Validate the condition first (F10)',
422
+ VALIDATING: 'Validating the condition',
423
+ });
424
+
425
+ /**
426
+ * The hint after an engine error on `and`, `or` or `not` given something
427
+ * other than a Boolean, which Pure's precedence usually causes: comparisons
428
+ * bind no tighter than `&&`, `||` and `!` (PLAN §11.11)
429
+ */
430
+ export const EXPRESSION_FILTER_PARENTHESES_HINT =
431
+ 'Put each comparison in parentheses: ($x.A > 1) && ($x.B > 3).';
432
+
433
+ /** What the Filter by Expression editor says about conditions (PLAN §11.11) */
434
+ export const EXPRESSION_FILTER_EDITOR_NOTES = [
435
+ "A condition of one row, written as in Query's text mode: x | $x.SHIPPED_DATE > $x.REQUIRED_DATE. The rows for which it is true are kept, in their order.",
436
+ 'Put each comparison in parentheses when you combine them: ($x.A > 1) && ($x.B > 3). In Pure, &&, || and ! bind as tightly as >, <, >= and <=; == binds tighter.',
437
+ 'A column that can be empty, compared directly ($x.A > 6), fails the condition when it is empty and passes its negation. After ->toOne(), an empty value fails both.',
438
+ "Validate (F10) checks the condition with the engine and plans it for the cube's database.",
439
+ "startsWith, endsWith and contains can't take a value with a backslash (\\) yet, nor, on DuckDB, one with % or _.",
440
+ ] as const;
441
+
305
442
  /** The hint after an engine error on a column that can be empty, in arithmetic (PLAN §11.7) */
306
443
  export const EXTEND_TO_ONE_HINT =
307
444
  'A column that can be empty needs ->toOne() first, such as $x.QTY->toOne() + 1.';
308
445
 
309
- /** The problem a database refusing an Extend's plan gives (PLAN §11.7) */
446
+ /** The problem a database refusing an Extend's or a Filter by Expression's plan gives (PLAN §11.7, §11.11) */
310
447
  export const getExtendPlanProblem = (
311
448
  databaseType: string | undefined,
312
449
  detail: string,
@@ -317,13 +454,33 @@ export const getExtendPlanProblem = (
317
454
  export const COLUMN_NAME_RULES_HINT =
318
455
  'Names can\'t start or end with a space, or contain " or \\ or control characters, and have at most 128 characters.';
319
456
 
457
+ /** Words a title leaves in lower case, but first */
458
+ const TITLE_SMALL_WORDS = new Set(['a', 'an', 'of']);
459
+
320
460
  /**
321
461
  * A node type's label as the node editor's title shows it, each word
322
- * capitalised (QUESTIONS.md U1(a)), e.g. 'Take First <x> Rows'; the registry
323
- * keeps its own wording
462
+ * capitalised but `a`, `an` and `of` (QUESTIONS.md U1(a)), e.g. 'Take a Range
463
+ * of Rows'; the registry keeps its own wording
324
464
  */
325
465
  export const toEditorTitle = (label: string): string =>
326
- label.replace(/(?<=^|\s)[a-z]/gu, (letter) => letter.toUpperCase());
466
+ label.replace(/(?<=^|\s)[a-z]+/gu, (word, offset: number) =>
467
+ offset > 0 && TITLE_SMALL_WORDS.has(word)
468
+ ? word
469
+ : `${word[0]?.toUpperCase() ?? ''}${word.slice(1)}`,
470
+ );
327
471
 
328
472
  /** The source dialog's body until a tab is chosen, opened from the empty canvas (spec §17.8, U4(b)) */
329
473
  export const SELECT_SOURCE_TYPE_PROMPT = 'Select source type above';
474
+
475
+ /** Why the source dialog's Add is disabled: nothing picked yet, or not ready */
476
+ export const CUBE_PICK_TO_ADD_TITLE = 'Pick what to add first';
477
+
478
+ /**
479
+ * The badge a node type shows beside its name: WIP for one that doesn't
480
+ * work yet (a service, PLAN §6.4), else BETA for one in beta, else none
481
+ */
482
+ export const getCubeNodeBadge = (definition: {
483
+ readonly beta: boolean;
484
+ readonly wip?: boolean | undefined;
485
+ }): 'WIP' | 'BETA' | undefined =>
486
+ definition.wip ? 'WIP' : definition.beta ? 'BETA' : undefined;
@@ -0,0 +1,26 @@
1
+ /**
2
+ * Copyright (c) 2026-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
+ /**
18
+ * What the source dialog says on a host that reads one project's own
19
+ * sources (`CubeHost.project`), e.g. Studio
20
+ */
21
+ export const CUBE_PROJECT_SOURCE_LABEL = {
22
+ RUNS_ON: (runtime: string): string => `Runs on ${runtime}`,
23
+ READING_RUNTIME: "reading the project's lakehouse runtime",
24
+ NO_INGEST_DEFINITIONS: 'The project has no ingest definitions.',
25
+ NO_DATA_PRODUCTS: 'The project has no data products.',
26
+ } as const;
@@ -0,0 +1,41 @@
1
+ /**
2
+ * Copyright (c) 2026-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 { MESSAGE_SERVICE_NOT_READABLE } from '@finos/legend-cube';
18
+
19
+ // The text of service sources (PLAN §6.4), in progress: the source dialog's
20
+ // Service tab and a service's panel
21
+
22
+ export const CUBE_SERVICE_MESSAGE = {
23
+ /** Why a service source isn't valid yet: its first line is the node's error */
24
+ NOT_READABLE: `${MESSAGE_SERVICE_NOT_READABLE}\nPicking a service works; reading its columns and rows is still being built.`,
25
+ NO_CATALOG: "This Legend deployment doesn't list services",
26
+ CUBE_CHANGED:
27
+ 'The cube changed while the service was being added; pick it again.',
28
+ NONE: 'No services are deployed.',
29
+ NO_MATCH: 'No service matches the search.',
30
+ IN_PROGRESS:
31
+ "Services are in progress: a service can be added to the canvas, but Cube can't read it yet.",
32
+ } as const;
33
+
34
+ /** How many of the matching services the tab shows, when it doesn't show them all */
35
+ export const getShownServicesLabel = (
36
+ shown: number,
37
+ matching: number,
38
+ ): string | undefined =>
39
+ shown < matching
40
+ ? `Showing ${shown} of ${matching} services: search to narrow the list`
41
+ : undefined;
@@ -15,6 +15,7 @@
15
15
  */
16
16
 
17
17
  export enum LEGEND_CUBE_TEST_ID {
18
+ RUNNING_NODE_BADGE = 'legend-cube__running-node-badge',
18
19
  EDITOR = 'legend-cube__editor',
19
20
  GRAPH_REGION = 'legend-cube__graph-region',
20
21
  GRID_REGION = 'legend-cube__grid-region',
@@ -26,8 +27,14 @@ export enum LEGEND_CUBE_TEST_ID {
26
27
  NODE_EDITOR = 'legend-cube__node-editor',
27
28
  EDITOR_NOTICE = 'legend-cube__editor-notice',
28
29
  ENTRY_SOURCE_ERROR = 'legend-cube__entry-source-error',
30
+ LAMBDA_IMPORT = 'legend-cube__lambda-import',
31
+ IMPORT_PURE = 'legend-cube__import-pure',
29
32
  FILTER_CONDITION = 'legend-cube__filter-condition',
30
33
  RESULT_GRID = 'legend-cube__result-grid',
34
+ DRILLDOWN_BAR = 'legend-cube__drilldown-bar',
35
+ RUN_STATS = 'legend-cube__run-stats',
36
+ COLUMN_FORMAT = 'legend-cube__column-format',
37
+ DRILLDOWN_SETTINGS = 'legend-cube__drilldown-settings',
31
38
  GRID_TOOLBAR = 'legend-cube__grid-toolbar',
32
39
  EXECUTION_ERROR = 'legend-cube__execution-error',
33
40
  SQL_PANEL = 'legend-cube__sql-panel',
@@ -117,13 +117,14 @@ export const CUBE_ENGINE_TEST__jsonToGrammar_lambda = async (
117
117
  */
118
118
  export const CUBE_ENGINE_TEST__execute = async (
119
119
  input: object | string,
120
+ serializationFormat = 'DEFAULT',
120
121
  ): Promise<{ ok: boolean; status: number; text: () => Promise<string> }> => {
121
122
  const response = await axios.post<unknown, AxiosResponse<string>>(
122
123
  `${PURE_API}/execution/execute`,
123
124
  input,
124
125
  {
125
126
  headers: JSON_HEADERS,
126
- params: { serializationFormat: 'DEFAULT' },
127
+ params: { serializationFormat },
127
128
  responseType: 'text',
128
129
  transformResponse: (data: string) => data,
129
130
  validateStatus: () => true,
@@ -16,15 +16,18 @@
16
16
 
17
17
  import {
18
18
  buildSchemasAndValidity,
19
+ ExpressionFilter,
19
20
  Extend,
21
+ getExpressionFilterSignature,
20
22
  getExtendSignature,
21
23
  type JsonObject,
22
24
  PrimitiveType,
23
25
  type Query,
24
26
  } from '@finos/legend-cube';
25
27
 
26
- // Extend columns for tests (PLAN §11.7), written as the engine's JSON, as a
27
- // column stores it: number literals as their digits
28
+ // Extend columns and filter conditions for tests (PLAN §11.7, §11.11),
29
+ // written as the engine's JSON, as a node stores it: number literals as their
30
+ // digits
28
31
 
29
32
  /** `x | <body>` and the pieces of a body */
30
33
  export const TEST__expression = {
@@ -54,6 +57,7 @@ export const TEST__expression = {
54
57
  _type: 'integer',
55
58
  value: String(value),
56
59
  }),
60
+ string: (value: string): JsonObject => ({ _type: 'string', value }),
57
61
  };
58
62
 
59
63
  /** A new column: its name, its lambda, and the type the engine gives it */
@@ -88,6 +92,29 @@ export const TEST__typedExtend = (
88
92
  });
89
93
  };
90
94
 
95
+ /**
96
+ * A Filter by Expression of this condition, checked for the input Cube infers
97
+ * for `input`'s selected node, so it is valid without the engine; the engine
98
+ * tests check the engine takes it. With an invalid input, not checked.
99
+ */
100
+ export const TEST__checkedExpressionFilter = (
101
+ id: string,
102
+ input: Query,
103
+ code: string,
104
+ lambda: JsonObject,
105
+ ): ExpressionFilter => {
106
+ const filter = new ExpressionFilter(id, code, lambda);
107
+ const schema = buildSchemasAndValidity(input).schemas.get(
108
+ input.selected ?? '',
109
+ );
110
+ return schema
111
+ ? filter.withCheck({
112
+ kind: 'checked',
113
+ signature: getExpressionFilterSignature(schema, lambda),
114
+ })
115
+ : filter;
116
+ };
117
+
91
118
  /** `a: x | $x.ORDER_ID + 1` and `b: x | $x.a * 2`, the second using the first, both Integer */
92
119
  export const TEST__ORDER_ID_EXTEND_COLUMNS: readonly TEST__ExtendColumn[] = [
93
120
  [
@@ -0,0 +1,78 @@
1
+ /**
2
+ * Copyright (c) 2026-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 { resolveCubeType, Schema, SchemaColumn } from '@finos/legend-cube';
18
+ import type {
19
+ CubeModelOutline,
20
+ CubeOutlineFunction,
21
+ } from '../graph-manager/CubeEngine.js';
22
+ import {
23
+ NORTHWIND_DATABASE,
24
+ NORTHWIND_RUNTIME,
25
+ } from './CubeNorthwindTestQueries.js';
26
+ import { FAKE_NORTHWIND_OUTLINE } from './FakeCubeEngine.js';
27
+
28
+ // The fake Northwind outline with functions that return a relation (PLAN
29
+ // §6.5), and a second runtime: one function of each kind
30
+
31
+ export const ARCHIVE_RUNTIME = 'northwind::ArchiveRuntime';
32
+
33
+ const fn = (
34
+ name: string,
35
+ parameters: CubeOutlineFunction['parameters'] = [],
36
+ extra: Partial<CubeOutlineFunction> = {},
37
+ ): CubeOutlineFunction => ({
38
+ path: `northwind::${name}`,
39
+ signature: `northwind::${name}__Relation_1_`,
40
+ parameters,
41
+ columns: [{ name: 'ORDER_ID', type: 'Integer' }],
42
+ ...extra,
43
+ });
44
+
45
+ export const ALL_ORDERS = fn('allOrders');
46
+ export const ORDERS_ABOVE = fn('ordersAbove', [
47
+ { name: 'min', type: 'Float', multiplicity: '[1]' },
48
+ { name: 'status', type: 'String', multiplicity: '[0..1]' },
49
+ ]);
50
+ export const SHIPPED = fn('shipped', [], { runtime: NORTHWIND_RUNTIME });
51
+ export const ARCHIVED = fn('archived', [], { runtime: ARCHIVE_RUNTIME });
52
+ export const ORDERS_OF = fn(
53
+ 'ordersOf',
54
+ [{ name: 'ids', type: 'Integer', multiplicity: '[*]' }],
55
+ {
56
+ problem:
57
+ 'Its parameter "ids" takes [*] values; Cube takes one value, or none',
58
+ },
59
+ );
60
+
61
+ export const FUNCTIONS_OUTLINE: CubeModelOutline = {
62
+ ...FAKE_NORTHWIND_OUTLINE,
63
+ runtimes: [
64
+ ...FAKE_NORTHWIND_OUTLINE.runtimes,
65
+ {
66
+ path: ARCHIVE_RUNTIME,
67
+ storePaths: [NORTHWIND_DATABASE],
68
+ connections: [
69
+ { storePath: NORTHWIND_DATABASE, databaseType: 'Postgres' },
70
+ ],
71
+ },
72
+ ],
73
+ functions: [ALL_ORDERS, ORDERS_ABOVE, SHIPPED, ARCHIVED, ORDERS_OF],
74
+ };
75
+
76
+ export const FUNCTION_SCHEMA = new Schema([
77
+ new SchemaColumn('ORDER_ID', resolveCubeType('Integer'), true),
78
+ ]);