@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
@@ -0,0 +1,151 @@
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 { observer } from 'mobx-react-lite';
18
+ import {
19
+ CUBE_SERVICE_MESSAGE,
20
+ getShownServicesLabel,
21
+ } from '../../__lib__/LegendCubeServiceLabels.js';
22
+ import { CUBE_PENDING_LABEL } from '../../__lib__/LegendCubeLabels.js';
23
+ import type { CubeServiceTabState } from '../../stores/source-picker/CubeServiceTabState.js';
24
+ import { CubeButton } from '../CubeButton.js';
25
+ import {
26
+ CUBE_PICKER_LIST_CLASS,
27
+ CubePickerListItem,
28
+ } from './CubePickerListItem.js';
29
+
30
+ const INPUT_CLASS =
31
+ 'h-7 rounded-sm border border-[var(--color-border-default)] bg-[var(--color-bg-input)] px-1 text-base text-[var(--color-text-primary)]';
32
+
33
+ /**
34
+ * The source dialog's Service tab (PLAN §6.4), in progress: the deployed
35
+ * services, searched by title, name and pattern, and the picked one's
36
+ * details. A service can be added, but Cube can't read it yet.
37
+ */
38
+ export const CubeServiceTab = observer(
39
+ (props: { tab: CubeServiceTabState }) => {
40
+ const { tab } = props;
41
+ const picked = tab.service;
42
+ const shownLabel = getShownServicesLabel(
43
+ tab.shownServices.length,
44
+ tab.matchingServices.length,
45
+ );
46
+ return (
47
+ <div className="flex flex-col gap-2">
48
+ <span className="text-sm text-[var(--color-text-muted)]">
49
+ {CUBE_SERVICE_MESSAGE.IN_PROGRESS}
50
+ </span>
51
+ <input
52
+ className={INPUT_CLASS}
53
+ placeholder="Search services"
54
+ aria-label="Search services"
55
+ value={tab.search}
56
+ onChange={(event) => tab.setSearch(event.target.value)}
57
+ />
58
+ {tab.isLoading && (
59
+ <div className="text-base text-[var(--color-text-secondary)]">
60
+ listing services
61
+ </div>
62
+ )}
63
+ {tab.services && (
64
+ <>
65
+ {tab.shownServices.length ? (
66
+ <ul
67
+ className={`h-56 overflow-auto ${CUBE_PICKER_LIST_CLASS}`}
68
+ aria-label="Services"
69
+ >
70
+ {tab.shownServices.map((service) => (
71
+ <CubePickerListItem
72
+ key={service.pattern}
73
+ picked={tab.pattern === service.pattern}
74
+ title={service.name}
75
+ adds={true}
76
+ onPick={() => tab.selectService(service.pattern)}
77
+ >
78
+ <span className="min-w-0 flex-1 truncate">
79
+ {service.title ?? service.name}
80
+ </span>
81
+ <span className="max-w-[50%] shrink-0 truncate text-sm text-[var(--color-text-muted)]">
82
+ {service.pattern}
83
+ </span>
84
+ </CubePickerListItem>
85
+ ))}
86
+ </ul>
87
+ ) : (
88
+ <div className="text-base text-[var(--color-text-secondary)]">
89
+ {tab.services.length
90
+ ? CUBE_SERVICE_MESSAGE.NO_MATCH
91
+ : CUBE_SERVICE_MESSAGE.NONE}
92
+ </div>
93
+ )}
94
+ {shownLabel !== undefined && (
95
+ <span className="text-sm text-[var(--color-text-muted)]">
96
+ {shownLabel}
97
+ </span>
98
+ )}
99
+ </>
100
+ )}
101
+ {picked && (
102
+ <section
103
+ aria-label="Service details"
104
+ className="flex flex-col gap-1 text-base"
105
+ >
106
+ <span className="break-all font-medium">{picked.name}</span>
107
+ <span className="break-all text-[var(--color-text-secondary)]">
108
+ {picked.pattern}
109
+ </span>
110
+ {picked.owners.length > 0 && (
111
+ <span className="text-sm text-[var(--color-text-muted)]">
112
+ {`Owners: ${picked.owners.join(', ')}`}
113
+ </span>
114
+ )}
115
+ {picked.documentation.trim() !== '' && (
116
+ <p className="max-h-20 overflow-auto whitespace-pre-wrap text-sm text-[var(--color-text-secondary)]">
117
+ {picked.documentation}
118
+ </p>
119
+ )}
120
+ </section>
121
+ )}
122
+ {tab.isAdding && (
123
+ <div className="text-base text-[var(--color-text-secondary)]">
124
+ {CUBE_PENDING_LABEL.RESOLVING_SOURCE}
125
+ </div>
126
+ )}
127
+ {tab.error !== undefined && (
128
+ <div
129
+ className="flex flex-col gap-1 text-base text-[var(--color-status-error)]"
130
+ role="alert"
131
+ >
132
+ <span>{tab.error.message}</span>
133
+ {tab.error.detail !== undefined && (
134
+ <details className="text-sm">
135
+ <summary className="cursor-pointer">Details</summary>
136
+ <pre className="whitespace-pre-wrap break-words">
137
+ {tab.error.detail}
138
+ </pre>
139
+ </details>
140
+ )}
141
+ {tab.services === undefined && (
142
+ <div>
143
+ <CubeButton onClick={() => tab.retry()}>Retry</CubeButton>
144
+ </div>
145
+ )}
146
+ </div>
147
+ )}
148
+ </div>
149
+ );
150
+ },
151
+ );
@@ -26,14 +26,20 @@ import {
26
26
  } from '@finos/legend-art';
27
27
  import { flowResult } from 'mobx';
28
28
  import { observer } from 'mobx-react-lite';
29
- import { SELECT_SOURCE_TYPE_PROMPT } from '../../__lib__/LegendCubeLabels.js';
29
+ import {
30
+ CUBE_PICK_TO_ADD_TITLE,
31
+ SELECT_SOURCE_TYPE_PROMPT,
32
+ } from '../../__lib__/LegendCubeLabels.js';
30
33
  import type { CubeEditorState } from '../../stores/CubeEditorState.js';
31
34
  import { CubeSourcePickerTabKey } from '../../stores/source-picker/CubeSourcePickerTab.js';
32
35
  import { CubeDataProductTab } from './CubeDataProductTab.js';
33
36
  import { CubeIngestTab } from './CubeIngestTab.js';
37
+ import { CubeServiceTab } from './CubeServiceTab.js';
34
38
  import { CubeProjectTab } from './CubeProjectTab.js';
35
39
  import { CubeDirectConnectionTab } from './CubeDirectConnectionTab.js';
36
40
  import { CubeInlineModelTab } from './CubeInlineModelTab.js';
41
+ import { CubePickerConfirmContext } from './CubePickerListItem.js';
42
+ import { CUBE_PRIMARY_BUTTON_DARK_MODE } from '../CubeDialogTheme.js';
37
43
 
38
44
  /**
39
45
  * Adds a source to the cube (PLAN §6.1, §6.2.7, §6.8): a tab per way to find
@@ -63,6 +69,17 @@ export const CubeSourcePicker = observer(
63
69
  isLoading={!picker.isChoosingTab && activeTab.isBusy}
64
70
  />
65
71
  <ModalBody>
72
+ {picker.isFromExamples && (
73
+ // a link back, under the title, as the dialog came from Examples
74
+ <button
75
+ type="button"
76
+ className="mb-2 self-start text-base text-[var(--color-accent)] hover:underline"
77
+ title="Back to the examples, to open an example cube instead"
78
+ onClick={() => picker.backToExamples()}
79
+ >
80
+ ← Back to Examples
81
+ </button>
82
+ )}
66
83
  {tabs.length > 1 && (
67
84
  <div
68
85
  className="mb-2 flex gap-1 border-b border-[var(--color-border-subtle)]"
@@ -99,28 +116,47 @@ export const CubeSourcePicker = observer(
99
116
  : undefined
100
117
  }
101
118
  >
102
- {picker.isChoosingTab ? (
103
- <div className="py-4 text-center text-base text-[var(--color-text-secondary)]">
104
- {SELECT_SOURCE_TYPE_PROMPT}
105
- </div>
106
- ) : activeTab.key === CubeSourcePickerTabKey.DIRECT_CONNECTION ? (
107
- <CubeDirectConnectionTab tab={picker.directTab} />
108
- ) : activeTab.key === CubeSourcePickerTabKey.DATA_PRODUCT ? (
109
- <CubeDataProductTab tab={picker.dataProductTab} />
110
- ) : activeTab.key === CubeSourcePickerTabKey.INGEST ? (
111
- <CubeIngestTab tab={picker.ingestTab} />
112
- ) : activeTab.key === CubeSourcePickerTabKey.PROJECT ? (
113
- <CubeProjectTab tab={picker.projectTab} />
114
- ) : (
115
- <CubeInlineModelTab tab={picker.modelTab} />
116
- )}
119
+ <CubePickerConfirmContext.Provider value={confirm}>
120
+ {picker.isChoosingTab ? (
121
+ <div className="py-4 text-center text-base text-[var(--color-text-secondary)]">
122
+ {SELECT_SOURCE_TYPE_PROMPT}
123
+ </div>
124
+ ) : activeTab.key ===
125
+ CubeSourcePickerTabKey.DIRECT_CONNECTION ? (
126
+ <CubeDirectConnectionTab tab={picker.directTab} />
127
+ ) : activeTab.key === CubeSourcePickerTabKey.DATA_PRODUCT ? (
128
+ <CubeDataProductTab tab={picker.dataProductTab} />
129
+ ) : activeTab.key === CubeSourcePickerTabKey.INGEST ? (
130
+ <CubeIngestTab tab={picker.ingestTab} />
131
+ ) : activeTab.key === CubeSourcePickerTabKey.PROJECT ? (
132
+ <CubeProjectTab tab={picker.projectTab} />
133
+ ) : activeTab.key ===
134
+ CubeSourcePickerTabKey.PROJECT_FUNCTION ? (
135
+ <CubeProjectTab tab={picker.projectFunctionTab} />
136
+ ) : activeTab.key === CubeSourcePickerTabKey.SERVICE ? (
137
+ <CubeServiceTab tab={picker.serviceTab} />
138
+ ) : (
139
+ <CubeInlineModelTab tab={picker.modelTab} />
140
+ )}
141
+ </CubePickerConfirmContext.Provider>
117
142
  </div>
118
143
  </ModalBody>
119
144
  <ModalFooter>
120
145
  <ModalFooterButton
121
- darkMode={darkMode}
146
+ darkMode={CUBE_PRIMARY_BUTTON_DARK_MODE}
122
147
  formatText={false}
123
- text="Add"
148
+ text={
149
+ (picker.activeTab.pickedCount ?? 1) > 1
150
+ ? `Add ${picker.activeTab.pickedCount}`
151
+ : 'Add'
152
+ }
153
+ // the legacy footer button looks the same disabled
154
+ className="disabled:cursor-not-allowed disabled:opacity-50"
155
+ title={
156
+ picker.canConfirm
157
+ ? 'Add it to the cube'
158
+ : CUBE_PICK_TO_ADD_TITLE
159
+ }
124
160
  disabled={!picker.canConfirm}
125
161
  onClick={confirm}
126
162
  />
@@ -0,0 +1,49 @@
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 type { Schema } from '@finos/legend-cube';
18
+ import { CubeSchemaColumnsTable } from '../CubeSchemaColumnsTable.js';
19
+
20
+ /**
21
+ * The columns of the table picked last, under the source dialog's list, as
22
+ * an access point's preview shows them (the review of the demo, 2026-10-13):
23
+ * loading, then the columns, or why they couldn't be read. A failure doesn't
24
+ * keep the table from being added: Add asks the engine again.
25
+ */
26
+ export const CubeTablePreview: React.FC<{
27
+ /** The table's name, as the list shows it */
28
+ name: string;
29
+ /** Its columns, or why they couldn't be read; `undefined` while they load */
30
+ columns: Schema | string | undefined;
31
+ }> = ({ name, columns }) => (
32
+ <section
33
+ className="flex max-h-48 flex-col gap-1 overflow-auto rounded-sm border border-[var(--color-border-default)] p-2"
34
+ aria-label="Table preview"
35
+ >
36
+ <span className="font-medium">{`Columns of ${name}`}</span>
37
+ {columns === undefined ? (
38
+ <span className="text-base text-[var(--color-text-secondary)]">
39
+ loading columns
40
+ </span>
41
+ ) : typeof columns === 'string' ? (
42
+ <span className="text-base text-[var(--color-status-error)]">
43
+ {columns}
44
+ </span>
45
+ ) : (
46
+ <CubeSchemaColumnsTable schema={columns} />
47
+ )}
48
+ </section>
49
+ );
@@ -0,0 +1,122 @@
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 {
18
+ Dialog,
19
+ Modal,
20
+ ModalBody,
21
+ ModalFooter,
22
+ ModalFooterButton,
23
+ ModalHeader,
24
+ PanelLoadingIndicator,
25
+ } from '@finos/legend-art';
26
+ import { flowResult } from 'mobx';
27
+ import { observer } from 'mobx-react-lite';
28
+ import { LEGEND_CUBE_TEST_ID } from '../../__lib__/LegendCubeTesting.js';
29
+ import type { CubeEditorState } from '../../stores/CubeEditorState.js';
30
+ import { CUBE_PRIMARY_BUTTON_DARK_MODE } from '../CubeDialogTheme.js';
31
+
32
+ const TEXT_AREA_CLASS_NAME =
33
+ 'h-80 w-full resize-none rounded-sm border border-[var(--color-border-default)] bg-[var(--color-bg-input)] p-1 font-mono text-sm text-[var(--color-text-primary)]';
34
+
35
+ /**
36
+ * Import Pure (PLAN §11.18): a lambda pasted as Pure, as Show Pure shows one,
37
+ * or as the engine's JSON, read into the steps Cube writes it with, in
38
+ * place of this cube
39
+ */
40
+ export const CubeImportPureDialog = observer(
41
+ (props: { editorState: CubeEditorState }) => {
42
+ const { editorState } = props;
43
+ const { lambdaImport } = editorState;
44
+ const { applicationStore } = editorState.host;
45
+ const darkMode =
46
+ !applicationStore.layoutService.TEMPORARY__isLightColorThemeEnabled;
47
+ const importText = (): void => {
48
+ flowResult(lambdaImport.importText()).catch(
49
+ applicationStore.alertUnhandledError,
50
+ );
51
+ };
52
+ return (
53
+ <Dialog
54
+ open={lambdaImport.isDialogOpen}
55
+ onClose={() => lambdaImport.closeDialog()}
56
+ >
57
+ <Modal darkMode={darkMode} className="w-[720px] max-w-full">
58
+ <ModalHeader>
59
+ <div className="modal__title">Import Pure</div>
60
+ </ModalHeader>
61
+ <PanelLoadingIndicator isLoading={lambdaImport.isImporting} />
62
+ <ModalBody>
63
+ <div
64
+ className="flex flex-col gap-2"
65
+ data-testid={LEGEND_CUBE_TEST_ID.IMPORT_PURE}
66
+ >
67
+ <div className="text-base text-[var(--color-text-secondary)]">
68
+ Paste a query, as Show Pure shows one, e.g.{' '}
69
+ <code>
70
+ {'|#>{db::Store.SCHEMA.TABLE}#->filter(x | $x.ID > 1)'}
71
+ </code>
72
+ , or its JSON. Cube reads it into steps that replace this cube;
73
+ Undo brings it back. Its sources are read where the source
74
+ dialog reads them.
75
+ </div>
76
+ <textarea
77
+ className={TEXT_AREA_CLASS_NAME}
78
+ aria-label="Pure query"
79
+ placeholder="Pure query"
80
+ spellCheck={false}
81
+ value={lambdaImport.text}
82
+ onChange={(event) => lambdaImport.setText(event.target.value)}
83
+ />
84
+ {lambdaImport.dialogError !== undefined && (
85
+ <div
86
+ className="break-words text-base text-[var(--color-status-error)]"
87
+ role="alert"
88
+ >
89
+ {lambdaImport.dialogError.message}
90
+ {lambdaImport.dialogError.detail !== undefined && (
91
+ <details>
92
+ <summary className="cursor-pointer">Details</summary>
93
+ <pre className="whitespace-pre-wrap text-sm">
94
+ {lambdaImport.dialogError.detail}
95
+ </pre>
96
+ </details>
97
+ )}
98
+ </div>
99
+ )}
100
+ </div>
101
+ </ModalBody>
102
+ <ModalFooter>
103
+ <ModalFooterButton
104
+ darkMode={CUBE_PRIMARY_BUTTON_DARK_MODE}
105
+ formatText={false}
106
+ text="Import"
107
+ disabled={!lambdaImport.text.trim() || lambdaImport.isImporting}
108
+ onClick={importText}
109
+ />
110
+ <ModalFooterButton
111
+ darkMode={darkMode}
112
+ formatText={false}
113
+ type="secondary"
114
+ text="Cancel"
115
+ onClick={() => lambdaImport.closeDialog()}
116
+ />
117
+ </ModalFooter>
118
+ </Modal>
119
+ </Dialog>
120
+ );
121
+ },
122
+ );
@@ -23,10 +23,15 @@ import {
23
23
  ModalHeader,
24
24
  PanelLoadingIndicator,
25
25
  } from '@finos/legend-art';
26
+ import { CodeEditor } from '@finos/legend-lego/code-editor';
26
27
  import { flowResult } from 'mobx';
27
28
  import { observer } from 'mobx-react-lite';
28
29
  import type { CubeEditorState } from '../../stores/CubeEditorState.js';
29
30
  import { CUBE_SPEC_TRANSFER_MODE } from '../../stores/CubeSpecTransferState.js';
31
+ import { CUBE_PRIMARY_BUTTON_DARK_MODE } from '../CubeDialogTheme.js';
32
+
33
+ /** The code editor's language: legend-code-editor's `CODE_EDITOR_LANGUAGE.JSON` */
34
+ const JSON_LANGUAGE = 'json';
30
35
 
31
36
  const TEXT_AREA_CLASS_NAME =
32
37
  'h-80 w-full resize-none rounded-sm border border-[var(--color-border-default)] bg-[var(--color-bg-input)] p-1 font-mono text-sm text-[var(--color-text-primary)]';
@@ -60,12 +65,20 @@ export const CubeSpecTransferDialog = observer(
60
65
  <div className="flex flex-col gap-2">
61
66
  {isExport ? (
62
67
  transfer.exportText !== undefined && (
63
- <textarea
64
- className={TEXT_AREA_CLASS_NAME}
68
+ // a code editor, so each object and list folds from the gutter
69
+ <div
70
+ className="h-80 w-full overflow-hidden rounded-sm border border-[var(--color-border-default)]"
65
71
  aria-label="Cube spec"
66
- readOnly={true}
67
- value={transfer.exportText}
68
- />
72
+ >
73
+ <CodeEditor
74
+ inputValue={transfer.exportText}
75
+ language={JSON_LANGUAGE}
76
+ isReadOnly={true}
77
+ hideMinimap={true}
78
+ hideActionBar={true}
79
+ extraEditorOptions={{ scrollBeyondLastLine: false }}
80
+ />
81
+ </div>
69
82
  )
70
83
  ) : (
71
84
  <>
@@ -115,7 +128,7 @@ export const CubeSpecTransferDialog = observer(
115
128
  {isExport ? (
116
129
  <>
117
130
  <ModalFooterButton
118
- darkMode={darkMode}
131
+ darkMode={CUBE_PRIMARY_BUTTON_DARK_MODE}
119
132
  formatText={false}
120
133
  text="Copy"
121
134
  disabled={transfer.exportText === undefined}
@@ -126,7 +139,7 @@ export const CubeSpecTransferDialog = observer(
126
139
  }}
127
140
  />
128
141
  <ModalFooterButton
129
- darkMode={darkMode}
142
+ darkMode={CUBE_PRIMARY_BUTTON_DARK_MODE}
130
143
  formatText={false}
131
144
  text="Download"
132
145
  disabled={transfer.exportText === undefined}
@@ -135,7 +148,7 @@ export const CubeSpecTransferDialog = observer(
135
148
  </>
136
149
  ) : (
137
150
  <ModalFooterButton
138
- darkMode={darkMode}
151
+ darkMode={CUBE_PRIMARY_BUTTON_DARK_MODE}
139
152
  formatText={false}
140
153
  text="Import"
141
154
  disabled={!transfer.importText.trim() || transfer.isReadingFile}
@@ -15,6 +15,7 @@
15
15
  */
16
16
 
17
17
  import type { Schema } from '@finos/legend-cube';
18
+ import type { PlainObject } from '@finos/legend-shared';
18
19
  import {
19
20
  type CubeDataProductEnvironmentType,
20
21
  type CubeDataProductProject,
@@ -243,3 +244,13 @@ export interface CubeDataProductCatalog {
243
244
  signal?: AbortSignal,
244
245
  ): Promise<ReadonlyMap<string, CubeAccessPointGroupAccess>>;
245
246
  }
247
+
248
+ /**
249
+ * Where a data product cube's engine reads the project its data products
250
+ * are in, as protocol JSON: by default the project at the version they were
251
+ * deployed from (a pointer); a host's own, e.g. Studio's workspace, whose
252
+ * data products aren't deployed. Fails with a `CubeEngineError`
253
+ */
254
+ export interface CubeDataProductModelSource {
255
+ getProjectModel(project: CubeDataProductProject): Promise<PlainObject>;
256
+ }
@@ -84,10 +84,45 @@ export interface CubeOutlineRuntime {
84
84
  readonly connections?: readonly CubeOutlineConnection[];
85
85
  }
86
86
 
87
- /** What a model offers the source picker: its databases and runtimes, as plain data */
87
+ /** A parameter of a function, as its signature declares it */
88
+ export interface CubeOutlineFunctionParameter {
89
+ readonly name: string;
90
+ /** Its type's path, as written, e.g. `Float` */
91
+ readonly type: string;
92
+ /** Its multiplicity, as written, e.g. `[1]`, `[0..1]` or `[*]` */
93
+ readonly multiplicity: string;
94
+ }
95
+
96
+ /** A column a function declares it returns, e.g. `ID:Integer` */
97
+ export interface CubeOutlineFunctionColumn {
98
+ readonly name: string;
99
+ readonly type: string;
100
+ }
101
+
102
+ /** A function of a model that returns a relation (PLAN §6.5), as plain data */
103
+ export interface CubeOutlineFunction {
104
+ /** The path the lambda calls it by, e.g. `sales::ordersAbove` */
105
+ readonly path: string;
106
+ /** The engine's full name, e.g. `sales::ordersAbove_Float_1__Relation_1_` */
107
+ readonly signature: string;
108
+ readonly parameters: readonly CubeOutlineFunctionParameter[];
109
+ readonly columns: readonly CubeOutlineFunctionColumn[];
110
+ /**
111
+ * The runtime it reads through, as its body's `from()` names it, directly
112
+ * or through a function it calls; none when it leaves the runtime to its
113
+ * caller
114
+ */
115
+ readonly runtime?: string | undefined;
116
+ /** Why it can't be added, e.g. a parameter Cube can't take a value for */
117
+ readonly problem?: string | undefined;
118
+ }
119
+
120
+ /** What a model offers the source picker: its databases, runtimes and functions, as plain data */
88
121
  export interface CubeModelOutline {
89
122
  readonly databases: readonly CubeOutlineDatabase[];
90
123
  readonly runtimes: readonly CubeOutlineRuntime[];
124
+ /** Its functions that return a relation; optional, as an outline from before them has none */
125
+ readonly functions?: readonly CubeOutlineFunction[] | undefined;
91
126
  }
92
127
 
93
128
  export enum CubeEngineErrorKind {
@@ -192,8 +227,23 @@ export interface CubeEngine {
192
227
  lambda: IR,
193
228
  options?: { abortController?: AbortController | undefined },
194
229
  ): Promise<CubeResult>;
230
+ /**
231
+ * Runs an execution lambda and gives its rows as CSV text (PLAN §11.10):
232
+ * the engine's own, a header row first, every value as the engine writes
233
+ * it; rejects with a `CubeEngineError`
234
+ */
235
+ exportCsv(
236
+ model: ModelContext,
237
+ lambda: IR,
238
+ options?: { abortController?: AbortController | undefined },
239
+ ): Promise<string>;
195
240
  /** The Pure text of a lambda, for display only: never parsed back */
196
241
  renderPure(lambda: IR): Promise<string>;
242
+ /**
243
+ * A lambda as the engine receives it, pretty-printed, its numbers kept
244
+ * exact (PLAN §11.16): for a viewer to copy while debugging a run
245
+ */
246
+ serializeLambda(lambda: IR): string;
197
247
  /**
198
248
  * An Extend column's expression as the engine's JSON (PLAN §11.7), located
199
249
  * under the source id; rejects with a `CubeEngineError` placed in the text
@@ -0,0 +1,64 @@
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
+ /** What Dev Settings changes on an engine client: the engine server client's own setters */
18
+ export interface CubeEngineClientControls {
19
+ setBaseUrl(url: string | undefined): void;
20
+ setCompression(enabled: boolean): void;
21
+ }
22
+
23
+ /**
24
+ * The settings every engine client of Cube shares (PLAN §11.16): the
25
+ * engine's URL and whether requests are compressed. The engine, the
26
+ * connection explorer and the catalogs each have their own client, built
27
+ * from the same configuration; each registers here, so Dev Settings changes
28
+ * them all at once. A change takes effect from the next request.
29
+ */
30
+ export class CubeEngineClientSettings {
31
+ /** The URL the host configured, to go back to */
32
+ readonly defaultBaseUrl: string | undefined;
33
+ baseUrl: string | undefined;
34
+ requestCompression: boolean;
35
+ private readonly clients: CubeEngineClientControls[] = [];
36
+
37
+ constructor(config: {
38
+ readonly baseUrl?: string | undefined;
39
+ readonly enableCompression?: boolean | undefined;
40
+ }) {
41
+ this.defaultBaseUrl = config.baseUrl;
42
+ this.baseUrl = config.baseUrl;
43
+ this.requestCompression = Boolean(config.enableCompression);
44
+ }
45
+
46
+ /** Adds a client built from the same configuration, given the settings changed since */
47
+ register(client: CubeEngineClientControls): void {
48
+ this.clients.push(client);
49
+ if (this.baseUrl !== this.defaultBaseUrl) {
50
+ client.setBaseUrl(this.baseUrl);
51
+ }
52
+ client.setCompression(this.requestCompression);
53
+ }
54
+
55
+ setBaseUrl(url: string | undefined): void {
56
+ this.baseUrl = url;
57
+ this.clients.forEach((client) => client.setBaseUrl(url));
58
+ }
59
+
60
+ setRequestCompression(enabled: boolean): void {
61
+ this.requestCompression = enabled;
62
+ this.clients.forEach((client) => client.setCompression(enabled));
63
+ }
64
+ }
@@ -118,6 +118,21 @@ export interface CubeIngestUrn {
118
118
  readonly definition: string;
119
119
  }
120
120
 
121
+ /** The URN's environment segment of each class */
122
+ const URN_ENVIRONMENTS: Readonly<
123
+ Record<CubeDataProductEnvironmentType, string>
124
+ > = {
125
+ [CubeDataProductEnvironmentType.PRODUCTION]: 'prod',
126
+ [CubeDataProductEnvironmentType.PRODUCTION_PARALLEL]: 'prod-parallel',
127
+ };
128
+
129
+ /**
130
+ * The URN of a definition deployed from SDLC, as `parseCubeIngestUrn` reads
131
+ * it: for a host naming definitions of its own, e.g. Studio's workspace
132
+ */
133
+ export const formatCubeIngestUrn = (urn: CubeIngestUrn): string =>
134
+ `urn:lakehouse:${URN_ENVIRONMENTS[urn.environmentType]}:ingest:definition:alloy-git:${urn.groupId}~${urn.artifactId}~${urn.definition}`;
135
+
121
136
  const SDLC_DEPLOYED_URN =
122
137
  /^urn:lakehouse:(?<environment>[^:]+):ingest:definition:alloy-git:(?<groupId>[^~]+)~(?<artifactId>[^~]+)~(?<definition>.+)$/u;
123
138