@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,240 @@
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
+ buildSchemasAndValidity,
19
+ ERR_CHECKING,
20
+ ERR_TYPING,
21
+ ExpressionFilter,
22
+ Extend,
23
+ type IR,
24
+ isTypingError,
25
+ type JsonObject,
26
+ type ModelContext,
27
+ type NodeRegistry,
28
+ type Query,
29
+ QueryEmitter,
30
+ type QueryNode,
31
+ type QueryRule,
32
+ type Schema,
33
+ } from '@finos/legend-cube';
34
+ import {
35
+ getConditionRecheckWarning,
36
+ getExtendRetypeWarning,
37
+ } from '../__lib__/LegendCubeLabels.js';
38
+ import {
39
+ type CubeEngineError,
40
+ CubeEngineErrorKind,
41
+ type NodeId,
42
+ } from '../graph-manager/CubeEngine.js';
43
+ import {
44
+ buildCubeConditionCheckLambdas,
45
+ getCubeConditionCheckUpstream,
46
+ isCubeConditionCheckCurrent,
47
+ isSameCubeConditionCheck,
48
+ readCubeConditionCheck,
49
+ } from './CubeExpressionFilterCheck.js';
50
+ import {
51
+ buildCubeExtendTypingLambdas,
52
+ getCubeExtendTypingUpstream,
53
+ getCubeExtendUpstream,
54
+ isCubeExtendTypingCurrent,
55
+ isSameCubeExtendTyping,
56
+ readCubeExtendTyping,
57
+ } from './CubeExtendTyping.js';
58
+
59
+ // The nodes the engine checks in the background, outside the undo history:
60
+ // an Extend, whose columns it types (PLAN §11.7), and a Filter by Expression,
61
+ // whose condition it checks (PLAN §11.11). One path serves both, so what
62
+ // M6.11's review fixed for Extends holds for filters too.
63
+
64
+ /** A node the engine checks: an Extend or a Filter by Expression */
65
+ export type CubeEngineCheckedNode = Extend | ExpressionFilter;
66
+
67
+ export const isCubeEngineCheckedNode = (
68
+ node: QueryNode,
69
+ ): node is CubeEngineCheckedNode =>
70
+ node instanceof Extend || node instanceof ExpressionFilter;
71
+
72
+ /** The digest of what the engine was given for the node's input, which its last check recorded */
73
+ export const getCubeEngineCheckUpstream = (
74
+ node: CubeEngineCheckedNode,
75
+ ): string | undefined =>
76
+ node instanceof Extend
77
+ ? getCubeExtendTypingUpstream(node.typing)
78
+ : getCubeConditionCheckUpstream(node.check);
79
+
80
+ /** What the engine's answers make of a node: the node to store, when they say anything new */
81
+ export interface CubeEngineCheckOutcome {
82
+ /** The node with its new check, or `undefined` when the answers say what it says already */
83
+ readonly node: CubeEngineCheckedNode | undefined;
84
+ /** The engine's error, when the check failed */
85
+ readonly error?: CubeEngineError | undefined;
86
+ /**
87
+ * When the engine couldn't be reached and the node's last check still
88
+ * holds for this input, the warning that keeps it, as a source keeps its
89
+ * saved columns
90
+ */
91
+ readonly keptWarning?: string | undefined;
92
+ }
93
+
94
+ /** The lambdas that check one node, and how to read the engine's answers to them */
95
+ export interface CubeEngineCheckRequest {
96
+ readonly node: CubeEngineCheckedNode;
97
+ readonly lambdas: ReadonlyMap<NodeId, IR>;
98
+ read(
99
+ answers: ReadonlyMap<NodeId, Schema | CubeEngineError>,
100
+ ): CubeEngineCheckOutcome;
101
+ }
102
+
103
+ /** What to make of a node's new check: kept with a warning, offline, when the last one holds; else stored if new */
104
+ const outcomeOf = (
105
+ node: CubeEngineCheckedNode,
106
+ error: CubeEngineError | undefined,
107
+ stillCurrent: () => boolean,
108
+ isSame: boolean,
109
+ withCheck: () => CubeEngineCheckedNode,
110
+ warn: (firstLine: string) => string,
111
+ ): CubeEngineCheckOutcome =>
112
+ error?.kind === CubeEngineErrorKind.NETWORK && stillCurrent()
113
+ ? { node: undefined, error, keptWarning: warn(error.firstLine) }
114
+ : { node: isSame ? undefined : withCheck(), error };
115
+
116
+ /**
117
+ * The request that checks a node for the input it has now, its lambdas
118
+ * marked with the node; `undefined` when it has nothing to send yet: an
119
+ * Extend column without a lambda, or a condition with a problem Cube finds
120
+ * itself. The input must be valid.
121
+ */
122
+ export const buildCubeEngineCheckRequest = (
123
+ query: Query,
124
+ node: CubeEngineCheckedNode,
125
+ input: Schema,
126
+ upstream: string | undefined,
127
+ registry: NodeRegistry,
128
+ ): CubeEngineCheckRequest | undefined => {
129
+ if (node instanceof Extend) {
130
+ if (node.columns.some(({ lambda }) => lambda === undefined)) {
131
+ return undefined;
132
+ }
133
+ const columns = node.columns.map(({ name, lambda }) => ({
134
+ name,
135
+ lambda: lambda as JsonObject,
136
+ }));
137
+ return {
138
+ node,
139
+ lambdas: buildCubeExtendTypingLambdas(
140
+ query,
141
+ node,
142
+ columns,
143
+ registry,
144
+ false,
145
+ ),
146
+ read: (answers) => {
147
+ const { typing, error } = readCubeExtendTyping(
148
+ answers,
149
+ node,
150
+ input,
151
+ columns,
152
+ upstream,
153
+ );
154
+ return outcomeOf(
155
+ node,
156
+ error,
157
+ () => isCubeExtendTypingCurrent(node, input, upstream),
158
+ isSameCubeExtendTyping(typing, node.typing),
159
+ () => node.withTyping(typing),
160
+ getExtendRetypeWarning,
161
+ );
162
+ },
163
+ };
164
+ }
165
+ const { lambda } = node;
166
+ if (lambda === undefined || node.getConditionProblem() !== undefined) {
167
+ return undefined;
168
+ }
169
+ return {
170
+ node,
171
+ lambdas: buildCubeConditionCheckLambdas(
172
+ query,
173
+ node,
174
+ lambda,
175
+ input,
176
+ registry,
177
+ false,
178
+ ),
179
+ read: (answers) => {
180
+ const { check, error } = readCubeConditionCheck(
181
+ answers,
182
+ node,
183
+ input,
184
+ upstream,
185
+ );
186
+ return outcomeOf(
187
+ node,
188
+ error,
189
+ () => isCubeConditionCheckCurrent(node, input, upstream),
190
+ isSameCubeConditionCheck(check, node.check),
191
+ () => node.withCheck(check),
192
+ getConditionRecheckWarning,
193
+ );
194
+ },
195
+ };
196
+ };
197
+
198
+ /**
199
+ * A query rule for the editor (PLAN §11.7, §11.11): a node whose check
200
+ * recorded another input than the engine would be given now waits to be
201
+ * checked again (`ERR_TYPING` for an Extend, `ERR_CHECKING` for a filter),
202
+ * e.g. after an Extend above it gains `->toOne()`, which Cube's schema
203
+ * doesn't show. A check that recorded nothing, as one loaded, is used as it
204
+ * is; a node that already waits, or whose input is invalid, is left to its
205
+ * own checks.
206
+ */
207
+ export const createStaleCubeEngineCheckRule =
208
+ (
209
+ registry: NodeRegistry,
210
+ modelOf: () => ModelContext | undefined,
211
+ ): QueryRule =>
212
+ (query) => {
213
+ const stale = new Map<string, readonly string[]>();
214
+ const model = modelOf();
215
+ const recorded = query.nodes.filter(
216
+ (node): node is CubeEngineCheckedNode =>
217
+ isCubeEngineCheckedNode(node) &&
218
+ getCubeEngineCheckUpstream(node) !== undefined,
219
+ );
220
+ if (!model || !recorded.length) {
221
+ return stale;
222
+ }
223
+ const { validity } = buildSchemasAndValidity(query, registry.queryRules);
224
+ const emitter = new QueryEmitter(query, registry);
225
+ recorded.forEach((node) => {
226
+ if ((validity.get(node.id) ?? []).some(isTypingError)) {
227
+ return;
228
+ }
229
+ const upstream = getCubeExtendUpstream(emitter, node.id, model);
230
+ if (
231
+ upstream !== undefined &&
232
+ upstream !== getCubeEngineCheckUpstream(node)
233
+ ) {
234
+ stale.set(node.id, [
235
+ node instanceof Extend ? ERR_TYPING : ERR_CHECKING,
236
+ ]);
237
+ }
238
+ });
239
+ return stale;
240
+ };
@@ -16,6 +16,7 @@
16
16
 
17
17
  import {
18
18
  AggregationFunction,
19
+ Pivot,
19
20
  ColumnComparisonFilter,
20
21
  CompositeFilter,
21
22
  CompositeFilterOperator,
@@ -55,6 +56,12 @@ import {
55
56
  CUBE_TRADES_RUNTIME,
56
57
  CUBE_TRADES_SCHEMA,
57
58
  } from './fixtures/CubeTradesModel.js';
59
+ import {
60
+ CUBE_SALES_DATABASE,
61
+ CUBE_SALES_MODEL,
62
+ CUBE_SALES_RUNTIME,
63
+ CUBE_SALES_SCHEMA,
64
+ } from './fixtures/CubeSalesDuckDbModel.js';
58
65
 
59
66
  // The example cubes the source dialog opens (PLAN §6.9): two over each
60
67
  // bundled model. Each is built here rather than saved, so it has no schema
@@ -120,9 +127,21 @@ const TRADES: CubeExampleDataset = {
120
127
  schema: CUBE_TRADES_SCHEMA,
121
128
  };
122
129
 
130
+ const SALES: CubeExampleDataset = {
131
+ id: 'sales',
132
+ name: 'Sales (DuckDB)',
133
+ description:
134
+ 'Made-up sales of tea and coffee by country and year, on DuckDB, which runs Pivot',
135
+ tables: ['sales'],
136
+ model: CUBE_SALES_MODEL,
137
+ runtime: CUBE_SALES_RUNTIME,
138
+ database: CUBE_SALES_DATABASE,
139
+ schema: CUBE_SALES_SCHEMA,
140
+ };
141
+
123
142
  /** The datasets, in the order the examples show them */
124
143
  export const CUBE_EXAMPLE_DATASETS: readonly CubeExampleDataset[] =
125
- Object.freeze([NORTHWIND, SPORTS, TRADES]);
144
+ Object.freeze([NORTHWIND, SPORTS, TRADES, SALES]);
126
145
 
127
146
  /**
128
147
  * A cube over the model: the nodes in order, each after the one before it
@@ -454,4 +473,54 @@ export const CUBE_EXAMPLES: readonly CubeExample[] = Object.freeze([
454
473
  ]),
455
474
  }),
456
475
  ),
476
+ example(
477
+ SALES,
478
+ 'sales-by-year',
479
+ 'Sales by country and year',
480
+ 'Pivots the sales by year: a row per country, a column per year summing the amounts',
481
+ (table) => ({
482
+ nodes: [
483
+ table('relational101', '"sales"'),
484
+ new Pivot(
485
+ 'pivot101',
486
+ ['country'],
487
+ 'year',
488
+ ['2022', '2023', '2024'].map((value) => ({
489
+ kind: 'integer' as const,
490
+ value,
491
+ })),
492
+ { column: 'amount', function: AggregationFunction.SUM },
493
+ ),
494
+ new Sort('sort101', [
495
+ { column: 'country', direction: SortDirection.ASC },
496
+ ]),
497
+ ],
498
+ connections: chain(['relational101', 'pivot101', 'sort101']),
499
+ }),
500
+ ),
501
+ example(
502
+ SALES,
503
+ 'sales-by-product',
504
+ 'Sales count by country and product',
505
+ 'Pivots the sales by product: a row per country, a column per product counting its sales',
506
+ (table) => ({
507
+ nodes: [
508
+ table('relational101', '"sales"'),
509
+ new Pivot(
510
+ 'pivot101',
511
+ ['country'],
512
+ 'product',
513
+ ['Coffee', 'Tea'].map((value) => ({
514
+ kind: 'string' as const,
515
+ value,
516
+ })),
517
+ { column: undefined, function: AggregationFunction.COUNT_ROWS },
518
+ ),
519
+ new Sort('sort101', [
520
+ { column: 'country', direction: SortDirection.ASC },
521
+ ]),
522
+ ],
523
+ connections: chain(['relational101', 'pivot101', 'sort101']),
524
+ }),
525
+ ),
457
526
  ]);
@@ -74,7 +74,7 @@ export class CubeExamplesState {
74
74
  /**
75
75
  * Starts a new cube on the dataset's model, in place of the cube (one undo
76
76
  * step), and opens the source dialog's Sample Data tab on it to add a first
77
- * table
77
+ * table, with a way back to the examples
78
78
  */
79
79
  startOnDataset(dataset: CubeExampleDataset): void {
80
80
  this.close();
@@ -84,7 +84,9 @@ export class CubeExamplesState {
84
84
  }),
85
85
  false,
86
86
  );
87
- this.editorState.sourcePicker.open(CubeSourcePickerTabKey.MODEL);
87
+ this.editorState.sourcePicker.openFromExamples(
88
+ CubeSourcePickerTabKey.MODEL,
89
+ );
88
90
  }
89
91
 
90
92
  /** Opens the example in place of the cube, then runs it */
@@ -17,26 +17,19 @@
17
17
  import {
18
18
  type CubeContext,
19
19
  isSchemasError,
20
- needsDatabaseType,
21
20
  type Query,
22
21
  type Schema,
23
22
  } from '@finos/legend-cube';
24
23
  import { assertErrorThrown, type GeneratorFn } from '@finos/legend-shared';
25
- import {
26
- action,
27
- computed,
28
- flow,
29
- flowResult,
30
- makeObservable,
31
- observable,
32
- } from 'mobx';
24
+ import { action, computed, flow, makeObservable, observable } from 'mobx';
33
25
  import {
34
26
  CubeEngineError,
35
27
  CubeEngineErrorKind,
36
- type CubeResult,
37
28
  type CubeResultValue,
38
29
  } from '../graph-manager/CubeEngine.js';
30
+ import { CUBE_RUN_LABEL } from '../__lib__/LegendCubeLabels.js';
39
31
  import type { CubeEditorState } from './CubeEditorState.js';
32
+ import { type CubeQueryRunResult, runCubeQuery } from './CubeQueryRun.js';
40
33
 
41
34
  /** What the grid shows of a run: the rows within the limit, under the schema the run was made with */
42
35
  export interface CubeExecutionResult {
@@ -157,7 +150,9 @@ export class CubeExecutionState {
157
150
  }
158
151
  const captureId = query.selected;
159
152
  if (captureId === undefined) {
160
- reasons.push('Select the node to run.');
153
+ reasons.push(
154
+ 'Pick the step to run: Run this step, from its menu or editor.',
155
+ );
161
156
  } else if (
162
157
  !emitter.canEmit(captureId) ||
163
158
  // as the editor sees it: an Extend typed for another input waits
@@ -176,7 +171,7 @@ export class CubeExecutionState {
176
171
  if (this.isRunning || !this.canExecute) {
177
172
  return;
178
173
  }
179
- const { document, emitter, analysis, rowLimit, host } = this.editorState;
174
+ const { document, analysis, rowLimit } = this.editorState;
180
175
  const { query, context } = document;
181
176
  const warehouse = this.editorState.dataProductRuntime.effectiveWarehouse;
182
177
  // checked by canExecute
@@ -192,64 +187,33 @@ export class CubeExecutionState {
192
187
  this.runController = controller;
193
188
  this.error = undefined;
194
189
  this.editorState.clearHostIssues();
190
+ // an export's failure is of the run it exported
191
+ this.editorState.export.clearError();
195
192
  try {
196
- // a Drop, Slice, Limit or Distinct is written for the database it runs on
197
- // (PLAN §11.4), which the model's outline gives: loaded once, waited
198
- // for only then; the query, model and runtime are the ones captured
199
- let databaseType: string | undefined;
200
- if (needsDatabaseType(query, captureId)) {
201
- yield flowResult(this.editorState.loadModelOutline(model));
202
- if (this.runController !== controller || controller.signal.aborted) {
203
- return;
204
- }
205
- databaseType = this.editorState.getRunDatabaseType(
206
- query,
207
- captureId,
208
- model,
209
- runtime,
210
- );
211
- }
212
- const lambda = emitter.emitExecutionLambda({
213
- rowLimit,
193
+ // the query, model and runtime are the ones captured
194
+ const run = (yield runCubeQuery(this.editorState, {
195
+ query,
196
+ model,
214
197
  runtime,
215
- databaseType,
216
- });
217
- const response = (yield host.engine.execute(model, lambda, {
198
+ schema,
199
+ rowLimit,
218
200
  abortController: controller,
219
- })) as CubeResult;
201
+ label: CUBE_RUN_LABEL.EXECUTE,
202
+ })) as CubeQueryRunResult;
220
203
  if (this.runController !== controller) {
221
204
  return;
222
205
  }
223
- // rows are read by position, so the engine's columns must be the query's
224
- if (response.columns.length !== schema.columns.length) {
225
- throw new CubeEngineError(
226
- CubeEngineErrorKind.EXECUTION,
227
- `The engine returned ${response.columns.length} columns, but the query has ${schema.columns.length}`,
228
- captureId,
229
- );
230
- }
231
- const misplaced = schema.columns.findIndex(
232
- (column, position) => response.columns[position] !== column.name,
233
- );
234
- if (misplaced !== -1) {
235
- throw new CubeEngineError(
236
- CubeEngineErrorKind.EXECUTION,
237
- `The engine returned the column "${response.columns[misplaced]}" at position ${misplaced + 1}, but the query has "${schema.columns[misplaced]?.name}" there`,
238
- captureId,
239
- );
240
- }
241
- const limited = response.rows.length > rowLimit;
242
206
  this.result = {
243
207
  id: ++this.runCount,
244
208
  query,
245
209
  context,
246
210
  warehouse,
247
211
  schema,
248
- rows: limited ? response.rows.slice(0, rowLimit) : response.rows,
212
+ rows: run.rows,
249
213
  rowLimit,
250
- limited,
251
- sql: response.sql,
252
- durationMs: response.durationMs,
214
+ limited: run.limited,
215
+ sql: run.sql,
216
+ durationMs: run.durationMs,
253
217
  };
254
218
  } catch (error) {
255
219
  // a stopped or replaced run shows nothing
@@ -301,6 +265,11 @@ export class CubeExecutionState {
301
265
  /** Stops any run and forgets the last one's rows and error, e.g. when another cube is opened */
302
266
  reset(): void {
303
267
  this.stop();
268
+ this.editorState.gridFetcher.purge();
269
+ this.editorState.export.stop();
270
+ // an export's failure is of the run it exported (review of M7)
271
+ this.editorState.export.clearError();
272
+ this.editorState.grid.closeSettings();
304
273
  this.result = undefined;
305
274
  this.error = undefined;
306
275
  }
@@ -0,0 +1,196 @@
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
+ checkDrilldown,
19
+ type ColumnDirection,
20
+ deriveDrilldownLevel,
21
+ type IR,
22
+ needsDatabaseType,
23
+ QueryEmitter,
24
+ } from '@finos/legend-cube';
25
+ import {
26
+ assertErrorThrown,
27
+ ContentType,
28
+ downloadFileUsingDataURI,
29
+ type GeneratorFn,
30
+ } from '@finos/legend-shared';
31
+ import {
32
+ action,
33
+ computed,
34
+ flow,
35
+ flowResult,
36
+ makeObservable,
37
+ observable,
38
+ } from 'mobx';
39
+ import {
40
+ CubeEngineError,
41
+ CubeEngineErrorKind,
42
+ } from '../graph-manager/CubeEngine.js';
43
+ import { CUBE_RUN_LABEL } from '../__lib__/LegendCubeLabels.js';
44
+ import type { CubeEditorState } from './CubeEditorState.js';
45
+ import type { CubeExecutionResult } from './CubeExecutionState.js';
46
+
47
+ export const CUBE_EXPORT_CONTEXT_CHANGED =
48
+ "The cube's model, runtime or warehouse changed since this run: execute again to export it.";
49
+
50
+ /** A file name for a cube's export, from its name, e.g. `Largest_buys.csv` */
51
+ export const getCubeExportFileName = (
52
+ name: string | undefined,
53
+ extension: 'csv' | 'xlsx',
54
+ ): string => {
55
+ const base = name?.trim().replace(/[^\w.-]+/gu, '_') ?? '';
56
+ return `${base.length ? base : 'cube'}.${extension}`;
57
+ };
58
+
59
+ /**
60
+ * The results' export (spec §12.5, PLAN §11.10): CSV of the whole query,
61
+ * run on the engine with no row limit, sorted as the grid is, saved by the
62
+ * browser. Only the run on screen is exported, in the context it ran in. A
63
+ * failure is kept for the grid region; Stop aborts the export.
64
+ */
65
+ export class CubeExportState {
66
+ readonly editorState: CubeEditorState;
67
+ error: CubeEngineError | undefined;
68
+ private controller: AbortController | undefined;
69
+
70
+ constructor(editorState: CubeEditorState) {
71
+ makeObservable<CubeExportState, 'controller'>(this, {
72
+ error: observable.ref,
73
+ controller: observable.ref,
74
+ isExporting: computed,
75
+ exportCsv: flow,
76
+ stop: action,
77
+ clearError: action,
78
+ });
79
+ this.editorState = editorState;
80
+ }
81
+
82
+ get isExporting(): boolean {
83
+ return this.controller !== undefined;
84
+ }
85
+
86
+ /** The run's whole query as CSV, sorted as the grid is (by the run's column names) */
87
+ *exportCsv(
88
+ result: CubeExecutionResult,
89
+ sorts: readonly ColumnDirection[] = [],
90
+ ): GeneratorFn<void> {
91
+ const { editorState } = this;
92
+ const model = result.context?.model;
93
+ const runtime = result.context?.runtime;
94
+ const captureId = result.query.selected;
95
+ if (this.isExporting || !model || !runtime || captureId === undefined) {
96
+ return;
97
+ }
98
+ this.error = undefined;
99
+ // the warehouse is read from the page when the query runs
100
+ if (
101
+ result.context !== editorState.document.context ||
102
+ result.warehouse !== editorState.dataProductRuntime.effectiveWarehouse
103
+ ) {
104
+ this.error = new CubeEngineError(
105
+ CubeEngineErrorKind.EXECUTION,
106
+ CUBE_EXPORT_CONTEXT_CHANGED,
107
+ captureId,
108
+ );
109
+ return;
110
+ }
111
+ const controller = new AbortController();
112
+ this.controller = controller;
113
+ const startedAt = Date.now();
114
+ // kept for the Runs panel, once written (PLAN §11.16)
115
+ let lambda: IR | undefined;
116
+ try {
117
+ // the run's rows, sorted as the grid is: no drill-down level
118
+ const { query } = deriveDrilldownLevel({
119
+ query: result.query,
120
+ captureId,
121
+ schema: result.schema,
122
+ drilldown: checkDrilldown(
123
+ { columns: [], aggregations: [] },
124
+ result.schema,
125
+ ),
126
+ keys: [],
127
+ sorts,
128
+ });
129
+ const runId = query.selected as string;
130
+ let databaseType: string | undefined;
131
+ if (needsDatabaseType(query, runId)) {
132
+ yield flowResult(editorState.loadModelOutline(model));
133
+ databaseType = editorState.getRunDatabaseType(
134
+ query,
135
+ runId,
136
+ model,
137
+ runtime,
138
+ );
139
+ }
140
+ if (controller.signal.aborted) {
141
+ return;
142
+ }
143
+ lambda = new QueryEmitter(
144
+ query,
145
+ editorState.registry,
146
+ ).emitExecutionLambda({ runtime, databaseType });
147
+ const csv = (yield editorState.host.engine.exportCsv(model, lambda, {
148
+ abortController: controller,
149
+ })) as string;
150
+ // stopped while it ran: `stop()` lets go of it
151
+ if (this.controller !== controller) {
152
+ return;
153
+ }
154
+ downloadFileUsingDataURI(
155
+ getCubeExportFileName(editorState.document.name, 'csv'),
156
+ csv,
157
+ ContentType.TEXT_CSV,
158
+ );
159
+ editorState.runStats.record(CUBE_RUN_LABEL.EXPORT_CSV, {
160
+ durationMs: Date.now() - startedAt,
161
+ lambda,
162
+ });
163
+ } catch (error) {
164
+ if (controller.signal.aborted) {
165
+ return;
166
+ }
167
+ assertErrorThrown(error);
168
+ this.error =
169
+ error instanceof CubeEngineError
170
+ ? error
171
+ : new CubeEngineError(
172
+ CubeEngineErrorKind.EXECUTION,
173
+ error.message,
174
+ captureId,
175
+ );
176
+ editorState.runStats.record(CUBE_RUN_LABEL.EXPORT_CSV, {
177
+ durationMs: Date.now() - startedAt,
178
+ lambda,
179
+ error: this.error.firstLine,
180
+ });
181
+ } finally {
182
+ if (this.controller === controller) {
183
+ this.controller = undefined;
184
+ }
185
+ }
186
+ }
187
+
188
+ stop(): void {
189
+ this.controller?.abort();
190
+ this.controller = undefined;
191
+ }
192
+
193
+ clearError(): void {
194
+ this.error = undefined;
195
+ }
196
+ }