@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
@@ -16,10 +16,18 @@
16
16
 
17
17
  import {
18
18
  type CubeContext,
19
+ type EnteredValue,
20
+ FUNCTION_SOURCE_DEFINITION,
21
+ type FunctionParameter,
22
+ FunctionSource,
19
23
  getRelationalDisplayName,
20
24
  type ModelContext,
25
+ parseValue,
21
26
  RELATIONAL_TABLE_SOURCE_DEFINITION,
22
27
  RelationalTableSource,
28
+ resolveCubeType,
29
+ getFunctionParameterValueError,
30
+ Schema,
23
31
  } from '@finos/legend-cube';
24
32
  import { assertErrorThrown, type GeneratorFn } from '@finos/legend-shared';
25
33
  import {
@@ -36,17 +44,22 @@ import {
36
44
  CubeTableFlag,
37
45
  type CubeModelOutline,
38
46
  type CubeOutlineDatabase,
47
+ type CubeOutlineFunction,
39
48
  type CubeOutlineRuntime,
40
49
  type CubeOutlineSchema,
41
50
  type CubeOutlineTable,
42
51
  } from '../../graph-manager/CubeEngine.js';
43
52
  import { getRuntimesForDatabase } from '../../graph-manager/CubeModelOutlineHelper.js';
44
53
  import type { CubeEditorState } from '../CubeEditorState.js';
45
- import { loadCubeModelOutline } from '../CubeHost.js';
54
+ import { isCubeSampleDataOffered, loadCubeModelOutline } from '../CubeHost.js';
55
+ import { recheckCubeFunctionSources } from '../CubeFunctionRecheck.js';
56
+ import { CUBE_FUNCTION_MESSAGE } from '../../__lib__/LegendCubeFunctionLabels.js';
46
57
  import { type BundledModel, createTextModel } from '../LocalModelCatalog.js';
47
58
  import {
48
59
  type CubeSourcePickerTab,
49
60
  CubeSourcePickerTabKey,
61
+ CUBE_TABLE_PREVIEW_DELAY_MS,
62
+ generateCubeNodeIds,
50
63
  } from './CubeSourcePickerTab.js';
51
64
 
52
65
  const toMessage = (error: unknown): string => {
@@ -58,6 +71,31 @@ const toMessage = (error: unknown): string => {
58
71
  export const isTableSelectable = (table: CubeOutlineTable): boolean =>
59
72
  !table.flags.includes(CubeTableFlag.UNAVAILABLE);
60
73
 
74
+ /** What the tab adds from the model: a table, or a function that returns a relation (PLAN §6.5) */
75
+ export enum CubeModelReadKind {
76
+ TABLE = 'table',
77
+ FUNCTION = 'function',
78
+ }
79
+
80
+ /**
81
+ * A parameter's value from its text: none for empty text, whatever the type,
82
+ * so an optional String left empty passes `[]`, not `''`
83
+ */
84
+ export const readCubeFunctionValue = (
85
+ text: string,
86
+ parameter: FunctionParameter,
87
+ ): EnteredValue => (text === '' ? undefined : parseValue(text, parameter.type));
88
+
89
+ /** A function's parameters as Cube types: `[0..1]` ones optional */
90
+ export const getCubeFunctionParameters = (
91
+ fn: CubeOutlineFunction,
92
+ ): FunctionParameter[] =>
93
+ fn.parameters.map((parameter) => ({
94
+ name: parameter.name,
95
+ type: resolveCubeType(parameter.type),
96
+ optional: parameter.multiplicity === '[0..1]',
97
+ }));
98
+
61
99
  /**
62
100
  * The source picker's Model tab (PLAN §6.2.7, Settled before M1.8): model,
63
101
  * then database, then a runtime keyed by that database, then schema and
@@ -82,9 +120,31 @@ export class CubeInlineModelTabState implements CubeSourcePickerTab {
82
120
  databasePath: string | undefined;
83
121
  runtimePath: string | undefined;
84
122
  schemaName: string | undefined;
85
- tableName: string | undefined;
123
+ /** The picked tables, in the order picked; several are added at once */
124
+ tableNames: readonly string[] = [];
86
125
  tableSearch = '';
126
+ /** Whether the tab adds a table or a function */
127
+ readKind = CubeModelReadKind.TABLE;
128
+ functionSearch = '';
129
+ /** The picked function's full name */
130
+ functionSignature: string | undefined;
131
+ /** The text entered for each of its parameters */
132
+ functionValueTexts: string[] = [];
133
+ /** The runtime picked for a function that leaves it to its caller */
134
+ functionRuntimePath: string | undefined;
87
135
  isResolving = false;
136
+ /** The table whose columns the tab shows under the list: the one picked last */
137
+ previewTableName: string | undefined;
138
+ /**
139
+ * The columns of each table previewed, or why they couldn't be read, by
140
+ * database, schema and table; Add takes them, so it asks the engine only
141
+ * for the others (the review of the demo, 2026-10-13)
142
+ */
143
+ previewSchemas: ReadonlyMap<string, Schema | string> = new Map();
144
+ /** Counts the model, database or runtime changes, so a late preview is dropped */
145
+ private previewGeneration = 0;
146
+ /** The preview waiting for the clicks to pause */
147
+ private previewTimer: ReturnType<typeof setTimeout> | undefined;
88
148
  /** Why the outline or the table couldn't be loaded, shown in the dialog */
89
149
  error: string | undefined;
90
150
  /** Counts Add presses: closing the dialog moves it on, so the pending Add is dropped */
@@ -100,9 +160,31 @@ export class CubeInlineModelTabState implements CubeSourcePickerTab {
100
160
  databasePath: observable,
101
161
  runtimePath: observable,
102
162
  schemaName: observable,
103
- tableName: observable,
163
+ tableNames: observable.ref,
164
+ tableName: computed,
104
165
  tableSearch: observable,
166
+ readKind: observable,
167
+ functionSearch: observable,
168
+ functionSignature: observable,
169
+ functionValueTexts: observable.ref,
170
+ functionRuntimePath: observable,
105
171
  isResolving: observable,
172
+ previewTableName: observable,
173
+ previewSchemas: observable.ref,
174
+ previewedColumns: computed,
175
+ loadPreview: flow,
176
+ functions: computed,
177
+ pickedFunction: computed,
178
+ functionParameters: computed,
179
+ functionValues: computed,
180
+ functionRuntime: computed,
181
+ functionRuntimes: computed,
182
+ functionProblem: computed,
183
+ setReadKind: action,
184
+ setFunctionSearch: action,
185
+ selectFunction: action,
186
+ setFunctionValueText: action,
187
+ selectFunctionRuntime: action,
106
188
  error: observable,
107
189
  fixedContext: computed,
108
190
  fixedDatabasePath: computed,
@@ -110,6 +192,7 @@ export class CubeInlineModelTabState implements CubeSourcePickerTab {
110
192
  runtimes: computed,
111
193
  schemas: computed,
112
194
  tables: computed,
195
+ schemaTables: computed,
113
196
  canConfirm: computed,
114
197
  isBusy: computed,
115
198
  open: action,
@@ -118,12 +201,14 @@ export class CubeInlineModelTabState implements CubeSourcePickerTab {
118
201
  selectRuntime: action,
119
202
  selectSchema: action,
120
203
  selectTable: action,
204
+ toggleTable: action,
121
205
  setTableSearch: action,
122
206
  startPastingModel: action,
123
207
  setPastedModelText: action,
124
208
  selectModel: flow,
125
209
  loadPastedModel: flow,
126
210
  confirm: flow,
211
+ confirmFunction: flow,
127
212
  });
128
213
  this.editorState = editorState;
129
214
  }
@@ -177,6 +262,20 @@ export class CubeInlineModelTabState implements CubeSourcePickerTab {
177
262
  );
178
263
  }
179
264
 
265
+ /** The schema's tables, views left out */
266
+ get schemaTables(): readonly CubeOutlineTable[] {
267
+ return (
268
+ this.schemas
269
+ .find((schema) => schema.name === this.schemaName)
270
+ ?.tables.filter((table) => !table.isView) ?? []
271
+ );
272
+ }
273
+
274
+ /** The one picked table; none when several are */
275
+ get tableName(): string | undefined {
276
+ return this.tableNames.length === 1 ? this.tableNames[0] : undefined;
277
+ }
278
+
180
279
  /** The schema's tables, views left out, filtered by the search text */
181
280
  get tables(): readonly CubeOutlineTable[] {
182
281
  const search = this.tableSearch.trim().toLowerCase();
@@ -190,9 +289,71 @@ export class CubeInlineModelTabState implements CubeSourcePickerTab {
190
289
  );
191
290
  }
192
291
 
193
- /** The host serves the tab: it always serves models */
292
+ /** The model's functions that return a relation, filtered by the search text */
293
+ get functions(): readonly CubeOutlineFunction[] {
294
+ const search = this.functionSearch.trim().toLowerCase();
295
+ return (this.outline?.functions ?? []).filter((fn) =>
296
+ fn.path.toLowerCase().includes(search),
297
+ );
298
+ }
299
+
300
+ get pickedFunction(): CubeOutlineFunction | undefined {
301
+ return this.outline?.functions?.find(
302
+ (fn) => fn.signature === this.functionSignature,
303
+ );
304
+ }
305
+
306
+ get functionParameters(): readonly FunctionParameter[] {
307
+ const fn = this.pickedFunction;
308
+ return fn ? getCubeFunctionParameters(fn) : [];
309
+ }
310
+
311
+ /** The value entered for each parameter */
312
+ get functionValues(): readonly EnteredValue[] {
313
+ return this.functionParameters.map((parameter, index) =>
314
+ readCubeFunctionValue(this.functionValueTexts[index] ?? '', parameter),
315
+ );
316
+ }
317
+
318
+ /**
319
+ * The runtimes a function that leaves the runtime to its caller can run
320
+ * on: the cube's, once it has one, else every runtime of the model
321
+ */
322
+ get functionRuntimes(): readonly CubeOutlineRuntime[] {
323
+ const fixedRuntime = this.fixedContext?.runtime;
324
+ return (this.outline?.runtimes ?? []).filter(
325
+ (runtime) => fixedRuntime === undefined || runtime.path === fixedRuntime,
326
+ );
327
+ }
328
+
329
+ /**
330
+ * The runtime the picked function runs on: its own, when its body names
331
+ * one; else the one picked
332
+ */
333
+ get functionRuntime(): string | undefined {
334
+ return this.pickedFunction?.runtime ?? this.functionRuntimePath;
335
+ }
336
+
337
+ /** Why the picked function can't be added, if it can't */
338
+ get functionProblem(): string | undefined {
339
+ const fn = this.pickedFunction;
340
+ if (!fn) {
341
+ return undefined;
342
+ }
343
+ if (fn.problem !== undefined) {
344
+ return fn.problem;
345
+ }
346
+ const fixedRuntime = this.fixedContext?.runtime;
347
+ return fn.runtime !== undefined &&
348
+ fixedRuntime !== undefined &&
349
+ fn.runtime !== fixedRuntime
350
+ ? CUBE_FUNCTION_MESSAGE.OTHER_RUNTIME(fn.runtime, fixedRuntime)
351
+ : undefined;
352
+ }
353
+
354
+ /** The host serves the tab unless it offers no sample data */
194
355
  get isAvailable(): boolean {
195
- return true;
356
+ return isCubeSampleDataOffered(this.editorState.host);
196
357
  }
197
358
 
198
359
  get isBusy(): boolean {
@@ -205,16 +366,34 @@ export class CubeInlineModelTabState implements CubeSourcePickerTab {
205
366
  }
206
367
 
207
368
  get canConfirm(): boolean {
208
- const table = this.tables.find(
209
- (candidate) => candidate.name === this.tableName,
369
+ if (this.readKind === CubeModelReadKind.FUNCTION) {
370
+ return (
371
+ !this.isLoadingModel &&
372
+ !this.isResolving &&
373
+ this.model !== undefined &&
374
+ this.pickedFunction !== undefined &&
375
+ this.functionProblem === undefined &&
376
+ this.functionRuntime !== undefined &&
377
+ this.functionParameters.every(
378
+ (parameter, index) =>
379
+ getFunctionParameterValueError(
380
+ parameter,
381
+ this.functionValues[index],
382
+ ) === undefined,
383
+ )
384
+ );
385
+ }
386
+ // a picked table hidden by the search still counts
387
+ const tables = this.tableNames.map((name) =>
388
+ this.schemaTables.find((candidate) => candidate.name === name),
210
389
  );
211
390
  return (
212
391
  !this.isLoadingModel &&
213
392
  !this.isResolving &&
214
393
  this.model !== undefined &&
215
394
  this.runtimePath !== undefined &&
216
- table !== undefined &&
217
- isTableSelectable(table)
395
+ tables.length > 0 &&
396
+ tables.every((table) => table !== undefined && isTableSelectable(table))
218
397
  );
219
398
  }
220
399
 
@@ -249,6 +428,27 @@ export class CubeInlineModelTabState implements CubeSourcePickerTab {
249
428
  this.selectDatabase(
250
429
  onlyDatabase && !otherDatabases.length ? onlyDatabase.path : undefined,
251
430
  );
431
+ } else {
432
+ this.followFixedRuntime();
433
+ }
434
+ }
435
+
436
+ /**
437
+ * Takes the cube's runtime once it has one, e.g. a function's (PLAN
438
+ * §6.5): its table and function steps can't pick another
439
+ */
440
+ protected followFixedRuntime(): void {
441
+ const fixedRuntime = this.fixedContext?.runtime;
442
+ if (fixedRuntime === undefined) {
443
+ return;
444
+ }
445
+ if (this.runtimes.some((runtime) => runtime.path === fixedRuntime)) {
446
+ this.runtimePath = fixedRuntime;
447
+ }
448
+ if (
449
+ this.functionRuntimes.some((runtime) => runtime.path === fixedRuntime)
450
+ ) {
451
+ this.functionRuntimePath = fixedRuntime;
252
452
  }
253
453
  }
254
454
 
@@ -256,6 +456,7 @@ export class CubeInlineModelTabState implements CubeSourcePickerTab {
256
456
  close(): void {
257
457
  this.confirmRequest++;
258
458
  this.isResolving = false;
459
+ this.cancelPreview();
259
460
  }
260
461
 
261
462
  /** Offers a text box for a Pure model in place of the bundled ones */
@@ -340,15 +541,153 @@ export class CubeInlineModelTabState implements CubeSourcePickerTab {
340
541
  this.resetFrom('table');
341
542
  }
342
543
 
544
+ /** Picks the table alone, in place of any picked, and previews its columns */
343
545
  selectTable(name: string | undefined): void {
344
- this.tableName = name;
546
+ this.tableNames = name === undefined ? [] : [name];
547
+ this.error = undefined;
548
+ this.preview(name);
549
+ }
550
+
551
+ /** Adds the table to the picked ones, previewing it, or takes it out */
552
+ toggleTable(name: string): void {
553
+ const adding = !this.tableNames.includes(name);
554
+ this.tableNames = adding
555
+ ? [...this.tableNames, name]
556
+ : this.tableNames.filter((each) => each !== name);
345
557
  this.error = undefined;
558
+ this.preview(adding ? name : this.tableNames.at(-1));
559
+ }
560
+
561
+ private previewKey(table: string): string {
562
+ return `${this.databasePath ?? ''}\u0000${this.schemaName ?? ''}\u0000${table}`;
563
+ }
564
+
565
+ /** The previewed table's columns, `undefined` while they load, or why they couldn't be read */
566
+ get previewedColumns(): Schema | string | undefined {
567
+ const name = this.previewTableName;
568
+ return name === undefined
569
+ ? undefined
570
+ : this.previewSchemas.get(this.previewKey(name));
571
+ }
572
+
573
+ /**
574
+ * Previews the table once the clicks pause, so picking several in a row
575
+ * asks the engine for the last only; Add, Close and another pick cancel it
576
+ */
577
+ private preview(name: string | undefined): void {
578
+ this.previewTableName = name;
579
+ this.cancelPreview();
580
+ if (name !== undefined) {
581
+ this.previewTimer = setTimeout(() => {
582
+ this.previewTimer = undefined;
583
+ flowResult(this.loadPreview(name)).catch(
584
+ this.editorState.host.applicationStore.alertUnhandledError,
585
+ );
586
+ }, CUBE_TABLE_PREVIEW_DELAY_MS);
587
+ }
588
+ }
589
+
590
+ private cancelPreview(): void {
591
+ if (this.previewTimer !== undefined) {
592
+ clearTimeout(this.previewTimer);
593
+ this.previewTimer = undefined;
594
+ }
595
+ }
596
+
597
+ /** Reads a table's columns from the engine, once a table and a model's database */
598
+ *loadPreview(name: string): GeneratorFn<void> {
599
+ const key = this.previewKey(name);
600
+ const model = this.model;
601
+ const database = this.databasePath;
602
+ const schemaName = this.schemaName;
603
+ if (
604
+ this.previewSchemas.has(key) ||
605
+ !model ||
606
+ database === undefined ||
607
+ schemaName === undefined
608
+ ) {
609
+ return;
610
+ }
611
+ const generation = this.previewGeneration;
612
+ // an id of its own, as the engine stamps the table's accessor with it
613
+ const id = this.editorState.document.query.generateId(
614
+ RelationalTableSource.TYPE,
615
+ );
616
+ let answer: Schema | string;
617
+ try {
618
+ const typed = (yield this.editorState.host.engine.resolveSchemas(
619
+ model,
620
+ new Map([[id, [database, schemaName, name]]]),
621
+ )) as Awaited<
622
+ ReturnType<typeof this.editorState.host.engine.resolveSchemas>
623
+ >;
624
+ const schema = typed.get(id);
625
+ answer =
626
+ schema instanceof Schema
627
+ ? schema
628
+ : (schema?.message ?? 'The engine gave no schema for this table');
629
+ } catch (error) {
630
+ answer = toMessage(error);
631
+ }
632
+ if (generation === this.previewGeneration) {
633
+ this.previewSchemas = new Map(this.previewSchemas).set(key, answer);
634
+ }
635
+ }
636
+
637
+ /** How many sources Add adds */
638
+ get pickedCount(): number {
639
+ return this.readKind === CubeModelReadKind.FUNCTION
640
+ ? 1
641
+ : this.tableNames.length;
346
642
  }
347
643
 
348
644
  setTableSearch(search: string): void {
349
645
  this.tableSearch = search;
350
646
  }
351
647
 
648
+ /**
649
+ * What the tab reads: a model's tables or functions; a project's tables
650
+ * and functions each have a tab of their own (user, 2026-10-13)
651
+ */
652
+ get readKinds(): readonly CubeModelReadKind[] {
653
+ return [CubeModelReadKind.TABLE, CubeModelReadKind.FUNCTION];
654
+ }
655
+
656
+ /** Reads tables or functions, when the tab reads that kind */
657
+ setReadKind(kind: CubeModelReadKind): void {
658
+ if (this.readKinds.includes(kind)) {
659
+ this.readKind = kind;
660
+ this.error = undefined;
661
+ }
662
+ }
663
+
664
+ setFunctionSearch(search: string): void {
665
+ this.functionSearch = search;
666
+ }
667
+
668
+ /** Picks a function; its parameters start empty, and its runtime is the only one there is */
669
+ selectFunction(signature: string | undefined): void {
670
+ if (signature === this.functionSignature) {
671
+ return;
672
+ }
673
+ this.functionSignature = signature;
674
+ this.functionValueTexts = [];
675
+ this.error = undefined;
676
+ const [onlyRuntime, ...otherRuntimes] = this.functionRuntimes;
677
+ this.functionRuntimePath =
678
+ onlyRuntime && !otherRuntimes.length ? onlyRuntime.path : undefined;
679
+ }
680
+
681
+ setFunctionValueText(index: number, text: string): void {
682
+ const texts = [...this.functionValueTexts];
683
+ texts[index] = text;
684
+ this.functionValueTexts = texts;
685
+ }
686
+
687
+ selectFunctionRuntime(path: string | undefined): void {
688
+ this.functionRuntimePath = path;
689
+ }
690
+
352
691
  /**
353
692
  * Types the picked table with the engine, then adds it; the first table
354
693
  * also sets the cube's model and runtime, in the same undo step. The cube
@@ -360,29 +699,164 @@ export class CubeInlineModelTabState implements CubeSourcePickerTab {
360
699
  if (!this.canConfirm) {
361
700
  return false;
362
701
  }
702
+ if (this.readKind === CubeModelReadKind.FUNCTION) {
703
+ return (yield flowResult(this.confirmFunction())) as boolean;
704
+ }
363
705
  const { editorState } = this;
364
706
  const model = this.model as ModelContext;
365
707
  const runtime = this.runtimePath as string;
366
- const coordinates = {
367
- database: this.databasePath as string,
368
- schema: this.schemaName as string,
369
- table: this.tableName as string,
370
- };
708
+ const database = this.databasePath as string;
709
+ const schemaName = this.schemaName as string;
710
+ const names = [...this.tableNames];
371
711
  const contextBefore = editorState.document.context;
372
- // the engine stamps the table's accessor with its node id, so the id comes first
373
- const id = editorState.document.query.generateId(
712
+ // the engine stamps each table's accessor with its node id, so the ids come first
713
+ const ids = generateCubeNodeIds(
714
+ editorState.document.query,
374
715
  RelationalTableSource.TYPE,
716
+ names.length,
375
717
  );
718
+ this.cancelPreview();
376
719
  const request = ++this.confirmRequest;
377
720
  this.isResolving = true;
378
721
  this.error = undefined;
379
722
  try {
380
- const typed = (yield editorState.host.engine.resolveSchemas(
723
+ // a table previewed has its columns already: the engine types the others
724
+ const previewed = new Map<string, Schema>();
725
+ names.forEach((table, index) => {
726
+ const schema = this.previewSchemas.get(this.previewKey(table));
727
+ if (schema instanceof Schema) {
728
+ previewed.set(ids[index] as string, schema);
729
+ }
730
+ });
731
+ const toType = names
732
+ .map((table, index) => [ids[index] as string, table] as const)
733
+ .filter(([id]) => !previewed.has(id));
734
+ const typed = new Map<string, Schema | CubeEngineError>(previewed);
735
+ if (toType.length) {
736
+ const answer = (yield editorState.host.engine.resolveSchemas(
737
+ model,
738
+ new Map(
739
+ toType.map(([id, table]) => [id, [database, schemaName, table]]),
740
+ ),
741
+ )) as Awaited<
742
+ ReturnType<typeof editorState.host.engine.resolveSchemas>
743
+ >;
744
+ answer.forEach((schema, id) => typed.set(id, schema));
745
+ }
746
+ if (request !== this.confirmRequest) {
747
+ return false;
748
+ }
749
+ const { document } = editorState;
750
+ if (document.context !== contextBefore) {
751
+ throw new Error(
752
+ `The cube changed while the table was loading; pick the table again.`,
753
+ );
754
+ }
755
+ // each table typed is added, in the order picked; the first one picked
756
+ // is the one that runs on an empty cube, as a single table would be
757
+ let query = document.query;
758
+ const added: string[] = [];
759
+ const failed: string[] = [];
760
+ // with several tables, each failure names its table
761
+ const named = (table: string, message: string): string =>
762
+ names.length > 1
763
+ ? `${getRelationalDisplayName(table)}: ${message}`
764
+ : message;
765
+ names.forEach((table, index) => {
766
+ const id = ids[index] as string;
767
+ const schema = typed.get(id);
768
+ if (schema === undefined || schema instanceof CubeEngineError) {
769
+ failed.push(
770
+ named(
771
+ table,
772
+ schema?.message ?? 'The engine gave no schema for this table',
773
+ ),
774
+ );
775
+ return;
776
+ }
777
+ const node = RELATIONAL_TABLE_SOURCE_DEFINITION.resolve(
778
+ RELATIONAL_TABLE_SOURCE_DEFINITION.fromCoordinates(id, {
779
+ database,
780
+ schema: schemaName,
781
+ table,
782
+ }),
783
+ { kind: 'resolved', schema },
784
+ );
785
+ if (!query.canAdd(node)) {
786
+ failed.push(
787
+ named(
788
+ table,
789
+ 'The cube changed while the table was loading; pick the table again.',
790
+ ),
791
+ );
792
+ return;
793
+ }
794
+ query = query.add(node);
795
+ added.push(table);
796
+ });
797
+ if (added.length) {
798
+ // the first table sets the model and runtime; a cube saved with a model
799
+ // but no runtime takes the picked runtime and keeps the rest
800
+ editorState.applyDocument(
801
+ document.context?.runtime !== undefined
802
+ ? document.withQuery(query)
803
+ : document
804
+ .withContext({
805
+ ...document.context,
806
+ model: document.context?.model ?? model,
807
+ runtime,
808
+ })
809
+ .withQuery(query),
810
+ );
811
+ }
812
+ if (failed.length) {
813
+ // the tables added aren't picked any more, so Add again adds only the others
814
+ this.tableNames = names.filter((table) => !added.includes(table));
815
+ this.error = failed.join('\n');
816
+ return false;
817
+ }
818
+ this.resetFrom('table');
819
+ return true;
820
+ } catch (error) {
821
+ if (request === this.confirmRequest) {
822
+ this.error = toMessage(error);
823
+ }
824
+ return false;
825
+ } finally {
826
+ if (request === this.confirmRequest) {
827
+ this.isResolving = false;
828
+ }
829
+ }
830
+ }
831
+
832
+ /**
833
+ * Types the picked function's call with the engine, then adds it with its
834
+ * values; the first source also sets the cube's model and runtime, in the
835
+ * same undo step: the function's own runtime when its body names one
836
+ * (PLAN §6.5). Gives whether the function was added.
837
+ */
838
+ *confirmFunction(): GeneratorFn<boolean> {
839
+ const { editorState } = this;
840
+ const model = this.model as ModelContext;
841
+ const fn = this.pickedFunction as CubeOutlineFunction;
842
+ const runtime = this.functionRuntime as string;
843
+ const contextBefore = editorState.document.context;
844
+ const id = editorState.document.query.generateId(FunctionSource.TYPE);
845
+ const unresolved = FUNCTION_SOURCE_DEFINITION.fromCoordinates(id, {
846
+ function: fn.path,
847
+ signature: fn.signature,
848
+ parameters: this.functionParameters,
849
+ values: this.functionValues,
850
+ });
851
+ const request = ++this.confirmRequest;
852
+ this.isResolving = true;
853
+ this.error = undefined;
854
+ try {
855
+ const typed = (yield recheckCubeFunctionSources(
856
+ editorState.host.engine,
381
857
  model,
382
- new Map([
383
- [id, [coordinates.database, coordinates.schema, coordinates.table]],
384
- ]),
385
- )) as Awaited<ReturnType<typeof editorState.host.engine.resolveSchemas>>;
858
+ [unresolved],
859
+ )) as Awaited<ReturnType<typeof recheckCubeFunctionSources>>;
386
860
  if (request !== this.confirmRequest) {
387
861
  return false;
388
862
  }
@@ -392,23 +866,19 @@ export class CubeInlineModelTabState implements CubeSourcePickerTab {
392
866
  schema ??
393
867
  new CubeEngineError(
394
868
  CubeEngineErrorKind.COMPILE,
395
- `The engine gave no schema for this table`,
869
+ CUBE_FUNCTION_MESSAGE.NO_ANSWER,
396
870
  )
397
871
  );
398
872
  }
399
- const node = RELATIONAL_TABLE_SOURCE_DEFINITION.resolve(
400
- RELATIONAL_TABLE_SOURCE_DEFINITION.fromCoordinates(id, coordinates),
401
- { kind: 'resolved', schema },
402
- );
873
+ const node = FUNCTION_SOURCE_DEFINITION.resolve(unresolved, {
874
+ kind: 'resolved',
875
+ schema,
876
+ });
403
877
  const { document } = editorState;
404
878
  if (document.context !== contextBefore || !document.query.canAdd(node)) {
405
- throw new Error(
406
- `The cube changed while the table was loading; pick the table again.`,
407
- );
879
+ throw new Error(CUBE_FUNCTION_MESSAGE.CUBE_CHANGED);
408
880
  }
409
881
  const query = document.query.add(node);
410
- // the first table sets the model and runtime; a cube saved with a model
411
- // but no runtime takes the picked runtime and keeps the rest
412
882
  editorState.applyDocument(
413
883
  document.context?.runtime !== undefined
414
884
  ? document.withQuery(query)
@@ -420,7 +890,8 @@ export class CubeInlineModelTabState implements CubeSourcePickerTab {
420
890
  })
421
891
  .withQuery(query),
422
892
  );
423
- this.resetFrom('table');
893
+ this.functionSignature = undefined;
894
+ this.functionValueTexts = [];
424
895
  return true;
425
896
  } catch (error) {
426
897
  if (request === this.confirmRequest) {
@@ -437,12 +908,21 @@ export class CubeInlineModelTabState implements CubeSourcePickerTab {
437
908
  protected resetFrom(step: 'database' | 'runtime' | 'table'): void {
438
909
  if (step === 'database') {
439
910
  this.databasePath = undefined;
911
+ this.functionSignature = undefined;
912
+ this.functionValueTexts = [];
913
+ this.functionRuntimePath = undefined;
914
+ this.functionSearch = '';
440
915
  }
441
916
  if (step === 'database' || step === 'runtime') {
442
917
  this.runtimePath = undefined;
443
918
  this.schemaName = undefined;
919
+ // another model or database: its previews go, and late ones are dropped
920
+ this.previewGeneration++;
921
+ this.previewSchemas = new Map();
444
922
  }
445
- this.tableName = undefined;
923
+ this.tableNames = [];
446
924
  this.tableSearch = '';
925
+ this.previewTableName = undefined;
926
+ this.cancelPreview();
447
927
  }
448
928
  }