@finos/legend-cube-builder 0.0.3 → 0.0.4

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 (691) hide show
  1. package/README.md +52 -19
  2. package/docs/adding-an-operation.md +102 -13
  3. package/docs/hosting.md +82 -4
  4. package/docs/testing.md +114 -9
  5. package/lib/__lib__/LegendCubeCommand.d.ts +2 -1
  6. package/lib/__lib__/LegendCubeCommand.d.ts.map +1 -1
  7. package/lib/__lib__/LegendCubeCommand.js +5 -0
  8. package/lib/__lib__/LegendCubeCommand.js.map +1 -1
  9. package/lib/__lib__/LegendCubeDataProductLabels.d.ts +45 -0
  10. package/lib/__lib__/LegendCubeDataProductLabels.d.ts.map +1 -0
  11. package/lib/__lib__/LegendCubeDataProductLabels.js +60 -0
  12. package/lib/__lib__/LegendCubeDataProductLabels.js.map +1 -0
  13. package/lib/__lib__/LegendCubeDirectConnectionLabels.d.ts +56 -0
  14. package/lib/__lib__/LegendCubeDirectConnectionLabels.d.ts.map +1 -0
  15. package/lib/__lib__/LegendCubeDirectConnectionLabels.js +76 -0
  16. package/lib/__lib__/LegendCubeDirectConnectionLabels.js.map +1 -0
  17. package/lib/__lib__/LegendCubeHelpText.d.ts.map +1 -1
  18. package/lib/__lib__/LegendCubeHelpText.js +12 -2
  19. package/lib/__lib__/LegendCubeHelpText.js.map +1 -1
  20. package/lib/__lib__/LegendCubeIngestLabels.d.ts +25 -0
  21. package/lib/__lib__/LegendCubeIngestLabels.d.ts.map +1 -0
  22. package/lib/__lib__/LegendCubeIngestLabels.js +29 -0
  23. package/lib/__lib__/LegendCubeIngestLabels.js.map +1 -0
  24. package/lib/__lib__/LegendCubeLabels.d.ts +76 -3
  25. package/lib/__lib__/LegendCubeLabels.d.ts.map +1 -1
  26. package/lib/__lib__/LegendCubeLabels.js +102 -4
  27. package/lib/__lib__/LegendCubeLabels.js.map +1 -1
  28. package/lib/__lib__/LegendCubeProjectLabels.d.ts +22 -0
  29. package/lib/__lib__/LegendCubeProjectLabels.d.ts.map +1 -0
  30. package/lib/__lib__/LegendCubeProjectLabels.js +23 -0
  31. package/lib/__lib__/LegendCubeProjectLabels.js.map +1 -0
  32. package/lib/__lib__/LegendCubeTesting.d.ts +1 -0
  33. package/lib/__lib__/LegendCubeTesting.d.ts.map +1 -1
  34. package/lib/__lib__/LegendCubeTesting.js +1 -0
  35. package/lib/__lib__/LegendCubeTesting.js.map +1 -1
  36. package/lib/__test-utils__/CubeCanvasTestUtils.d.ts.map +1 -1
  37. package/lib/__test-utils__/CubeCanvasTestUtils.js +1 -1
  38. package/lib/__test-utils__/CubeCanvasTestUtils.js.map +1 -1
  39. package/lib/__test-utils__/CubeConnectionTestSupport.d.ts +22 -0
  40. package/lib/__test-utils__/CubeConnectionTestSupport.d.ts.map +1 -0
  41. package/lib/__test-utils__/CubeConnectionTestSupport.js +30 -0
  42. package/lib/__test-utils__/CubeConnectionTestSupport.js.map +1 -0
  43. package/lib/__test-utils__/CubeDirectConnectionFixtures.d.ts +31 -0
  44. package/lib/__test-utils__/CubeDirectConnectionFixtures.d.ts.map +1 -0
  45. package/lib/__test-utils__/CubeDirectConnectionFixtures.js +63 -0
  46. package/lib/__test-utils__/CubeDirectConnectionFixtures.js.map +1 -0
  47. package/lib/__test-utils__/CubeEngineTestSupport.d.ts +12 -0
  48. package/lib/__test-utils__/CubeEngineTestSupport.d.ts.map +1 -1
  49. package/lib/__test-utils__/CubeEngineTestSupport.js +21 -0
  50. package/lib/__test-utils__/CubeEngineTestSupport.js.map +1 -1
  51. package/lib/__test-utils__/CubeExpressionTestUtils.d.ts +37 -0
  52. package/lib/__test-utils__/CubeExpressionTestUtils.d.ts.map +1 -0
  53. package/lib/__test-utils__/CubeExpressionTestUtils.js +83 -0
  54. package/lib/__test-utils__/CubeExpressionTestUtils.js.map +1 -0
  55. package/lib/__test-utils__/CubeOperationsTestUtils.d.ts +25 -0
  56. package/lib/__test-utils__/CubeOperationsTestUtils.d.ts.map +1 -1
  57. package/lib/__test-utils__/CubeOperationsTestUtils.js +56 -10
  58. package/lib/__test-utils__/CubeOperationsTestUtils.js.map +1 -1
  59. package/lib/__test-utils__/CubePageTestUtils.d.ts +12 -0
  60. package/lib/__test-utils__/CubePageTestUtils.d.ts.map +1 -1
  61. package/lib/__test-utils__/CubePageTestUtils.js +25 -1
  62. package/lib/__test-utils__/CubePageTestUtils.js.map +1 -1
  63. package/lib/__test-utils__/CubeTestApplication.d.ts +5 -1
  64. package/lib/__test-utils__/CubeTestApplication.d.ts.map +1 -1
  65. package/lib/__test-utils__/CubeTestApplication.js +9 -1
  66. package/lib/__test-utils__/CubeTestApplication.js.map +1 -1
  67. package/lib/__test-utils__/FakeCubeConnectionExplorer.d.ts +33 -0
  68. package/lib/__test-utils__/FakeCubeConnectionExplorer.d.ts.map +1 -0
  69. package/lib/__test-utils__/FakeCubeConnectionExplorer.js +67 -0
  70. package/lib/__test-utils__/FakeCubeConnectionExplorer.js.map +1 -0
  71. package/lib/__test-utils__/FakeCubeDataProductCatalog.d.ts +45 -0
  72. package/lib/__test-utils__/FakeCubeDataProductCatalog.d.ts.map +1 -0
  73. package/lib/__test-utils__/FakeCubeDataProductCatalog.js +137 -0
  74. package/lib/__test-utils__/FakeCubeDataProductCatalog.js.map +1 -0
  75. package/lib/__test-utils__/FakeCubeEngine.d.ts +2 -0
  76. package/lib/__test-utils__/FakeCubeEngine.d.ts.map +1 -1
  77. package/lib/__test-utils__/FakeCubeEngine.js +14 -1
  78. package/lib/__test-utils__/FakeCubeEngine.js.map +1 -1
  79. package/lib/__test-utils__/FakeCubeIngestCatalog.d.ts +35 -0
  80. package/lib/__test-utils__/FakeCubeIngestCatalog.d.ts.map +1 -0
  81. package/lib/__test-utils__/FakeCubeIngestCatalog.js +107 -0
  82. package/lib/__test-utils__/FakeCubeIngestCatalog.js.map +1 -0
  83. package/lib/__test-utils__/FakeCubeProjectCatalog.d.ts +30 -0
  84. package/lib/__test-utils__/FakeCubeProjectCatalog.d.ts.map +1 -0
  85. package/lib/__test-utils__/FakeCubeProjectCatalog.js +64 -0
  86. package/lib/__test-utils__/FakeCubeProjectCatalog.js.map +1 -0
  87. package/lib/components/CubeAddItems.d.ts +35 -0
  88. package/lib/components/CubeAddItems.d.ts.map +1 -0
  89. package/lib/components/CubeAddItems.js +82 -0
  90. package/lib/components/CubeAddItems.js.map +1 -0
  91. package/lib/components/CubeEditor.d.ts +5 -1
  92. package/lib/components/CubeEditor.d.ts.map +1 -1
  93. package/lib/components/CubeEditor.js +33 -13
  94. package/lib/components/CubeEditor.js.map +1 -1
  95. package/lib/components/CubeEntrySourceBanner.d.ts +23 -0
  96. package/lib/components/CubeEntrySourceBanner.d.ts.map +1 -0
  97. package/lib/components/CubeEntrySourceBanner.js +32 -0
  98. package/lib/components/CubeEntrySourceBanner.js.map +1 -0
  99. package/lib/components/CubeNodeIcon.d.ts.map +1 -1
  100. package/lib/components/CubeNodeIcon.js +8 -1
  101. package/lib/components/CubeNodeIcon.js.map +1 -1
  102. package/lib/components/CubeSchemaColumnsTable.d.ts +21 -0
  103. package/lib/components/CubeSchemaColumnsTable.d.ts.map +1 -0
  104. package/lib/components/CubeSchemaColumnsTable.js +6 -0
  105. package/lib/components/CubeSchemaColumnsTable.js.map +1 -0
  106. package/lib/components/canvas/CubeCanvas.d.ts +4 -3
  107. package/lib/components/canvas/CubeCanvas.d.ts.map +1 -1
  108. package/lib/components/canvas/CubeCanvas.js +31 -12
  109. package/lib/components/canvas/CubeCanvas.js.map +1 -1
  110. package/lib/components/canvas/CubeCanvasContextMenu.d.ts +8 -4
  111. package/lib/components/canvas/CubeCanvasContextMenu.d.ts.map +1 -1
  112. package/lib/components/canvas/CubeCanvasContextMenu.js +19 -9
  113. package/lib/components/canvas/CubeCanvasContextMenu.js.map +1 -1
  114. package/lib/components/canvas/CubeCanvasDnd.d.ts +7 -5
  115. package/lib/components/canvas/CubeCanvasDnd.d.ts.map +1 -1
  116. package/lib/components/canvas/CubeCanvasDnd.js +14 -9
  117. package/lib/components/canvas/CubeCanvasDnd.js.map +1 -1
  118. package/lib/components/canvas/CubeCanvasElements.d.ts.map +1 -1
  119. package/lib/components/canvas/CubeCanvasElements.js +6 -3
  120. package/lib/components/canvas/CubeCanvasElements.js.map +1 -1
  121. package/lib/components/canvas/CubeCanvasNode.d.ts.map +1 -1
  122. package/lib/components/canvas/CubeCanvasNode.js +30 -20
  123. package/lib/components/canvas/CubeCanvasNode.js.map +1 -1
  124. package/lib/components/canvas/CubeCanvasNodeFocus.d.ts +22 -0
  125. package/lib/components/canvas/CubeCanvasNodeFocus.d.ts.map +1 -0
  126. package/lib/components/canvas/CubeCanvasNodeFocus.js +31 -0
  127. package/lib/components/canvas/CubeCanvasNodeFocus.js.map +1 -0
  128. package/lib/components/canvas/CubeNodeEditorAnchor.d.ts +44 -0
  129. package/lib/components/canvas/CubeNodeEditorAnchor.d.ts.map +1 -0
  130. package/lib/components/canvas/CubeNodeEditorAnchor.js +51 -0
  131. package/lib/components/canvas/CubeNodeEditorAnchor.js.map +1 -0
  132. package/lib/components/editors/CubeAggregationRowEditor.d.ts +48 -0
  133. package/lib/components/editors/CubeAggregationRowEditor.d.ts.map +1 -0
  134. package/lib/components/editors/CubeAggregationRowEditor.js +72 -0
  135. package/lib/components/editors/CubeAggregationRowEditor.js.map +1 -0
  136. package/lib/components/editors/CubeColumnChecklist.d.ts +42 -0
  137. package/lib/components/editors/CubeColumnChecklist.d.ts.map +1 -0
  138. package/lib/components/editors/CubeColumnChecklist.js +41 -0
  139. package/lib/components/editors/CubeColumnChecklist.js.map +1 -0
  140. package/lib/components/editors/CubeConcatEditor.d.ts +33 -0
  141. package/lib/components/editors/CubeConcatEditor.d.ts.map +1 -0
  142. package/lib/components/editors/CubeConcatEditor.js +147 -0
  143. package/lib/components/editors/CubeConcatEditor.js.map +1 -0
  144. package/lib/components/editors/CubeDataProductSourceEditor.d.ts +25 -0
  145. package/lib/components/editors/CubeDataProductSourceEditor.d.ts.map +1 -0
  146. package/lib/components/editors/CubeDataProductSourceEditor.js +53 -0
  147. package/lib/components/editors/CubeDataProductSourceEditor.js.map +1 -0
  148. package/lib/components/editors/CubeDifferenceEditor.d.ts +25 -0
  149. package/lib/components/editors/CubeDifferenceEditor.d.ts.map +1 -0
  150. package/lib/components/editors/CubeDifferenceEditor.js +29 -0
  151. package/lib/components/editors/CubeDifferenceEditor.js.map +1 -0
  152. package/lib/components/editors/CubeExtendEditor.d.ts +25 -0
  153. package/lib/components/editors/CubeExtendEditor.d.ts.map +1 -0
  154. package/lib/components/editors/CubeExtendEditor.js +86 -0
  155. package/lib/components/editors/CubeExtendEditor.js.map +1 -0
  156. package/lib/components/editors/CubeFilterEditor.d.ts.map +1 -1
  157. package/lib/components/editors/CubeFilterEditor.js +3 -3
  158. package/lib/components/editors/CubeFilterEditor.js.map +1 -1
  159. package/lib/components/editors/CubeGroupEditor.d.ts +28 -0
  160. package/lib/components/editors/CubeGroupEditor.d.ts.map +1 -0
  161. package/lib/components/editors/CubeGroupEditor.js +70 -0
  162. package/lib/components/editors/CubeGroupEditor.js.map +1 -0
  163. package/lib/components/editors/CubeIngestSourceEditor.d.ts +26 -0
  164. package/lib/components/editors/CubeIngestSourceEditor.d.ts.map +1 -0
  165. package/lib/components/editors/CubeIngestSourceEditor.js +47 -0
  166. package/lib/components/editors/CubeIngestSourceEditor.js.map +1 -0
  167. package/lib/components/editors/CubeJoinEditor.d.ts +2 -4
  168. package/lib/components/editors/CubeJoinEditor.d.ts.map +1 -1
  169. package/lib/components/editors/CubeJoinEditor.js +7 -37
  170. package/lib/components/editors/CubeJoinEditor.js.map +1 -1
  171. package/lib/components/editors/CubeJoinKeyRows.d.ts +34 -0
  172. package/lib/components/editors/CubeJoinKeyRows.d.ts.map +1 -0
  173. package/lib/components/editors/CubeJoinKeyRows.js +65 -0
  174. package/lib/components/editors/CubeJoinKeyRows.js.map +1 -0
  175. package/lib/components/editors/CubeNodeEditorPanel.d.ts +7 -5
  176. package/lib/components/editors/CubeNodeEditorPanel.d.ts.map +1 -1
  177. package/lib/components/editors/CubeNodeEditorPanel.js +51 -13
  178. package/lib/components/editors/CubeNodeEditorPanel.js.map +1 -1
  179. package/lib/components/editors/CubeNodeEditorPopper.d.ts +40 -0
  180. package/lib/components/editors/CubeNodeEditorPopper.d.ts.map +1 -0
  181. package/lib/components/editors/CubeNodeEditorPopper.js +125 -0
  182. package/lib/components/editors/CubeNodeEditorPopper.js.map +1 -0
  183. package/lib/components/editors/CubeNodeEditorRegistry.d.ts.map +1 -1
  184. package/lib/components/editors/CubeNodeEditorRegistry.js +15 -1
  185. package/lib/components/editors/CubeNodeEditorRegistry.js.map +1 -1
  186. package/lib/components/editors/CubePartitionEditor.d.ts +30 -0
  187. package/lib/components/editors/CubePartitionEditor.d.ts.map +1 -0
  188. package/lib/components/editors/CubePartitionEditor.js +93 -0
  189. package/lib/components/editors/CubePartitionEditor.js.map +1 -0
  190. package/lib/components/editors/CubeRenameEditor.d.ts.map +1 -1
  191. package/lib/components/editors/CubeRenameEditor.js +6 -4
  192. package/lib/components/editors/CubeRenameEditor.js.map +1 -1
  193. package/lib/components/editors/CubeRestrictEditor.js +1 -1
  194. package/lib/components/editors/CubeRestrictEditor.js.map +1 -1
  195. package/lib/components/editors/CubeSortEditor.d.ts.map +1 -1
  196. package/lib/components/editors/CubeSortEditor.js +10 -37
  197. package/lib/components/editors/CubeSortEditor.js.map +1 -1
  198. package/lib/components/editors/CubeSortRowEditor.d.ts +47 -0
  199. package/lib/components/editors/CubeSortRowEditor.d.ts.map +1 -0
  200. package/lib/components/editors/CubeSortRowEditor.js +62 -0
  201. package/lib/components/editors/CubeSortRowEditor.js.map +1 -0
  202. package/lib/components/editors/CubeSourceEditor.d.ts.map +1 -1
  203. package/lib/components/editors/CubeSourceEditor.js +18 -5
  204. package/lib/components/editors/CubeSourceEditor.js.map +1 -1
  205. package/lib/components/editors/CubeWarehouseControl.d.ts +30 -0
  206. package/lib/components/editors/CubeWarehouseControl.d.ts.map +1 -0
  207. package/lib/components/editors/CubeWarehouseControl.js +44 -0
  208. package/lib/components/editors/CubeWarehouseControl.js.map +1 -0
  209. package/lib/components/editors/useCubeNodeEditorDismiss.d.ts +31 -0
  210. package/lib/components/editors/useCubeNodeEditorDismiss.d.ts.map +1 -0
  211. package/lib/components/editors/useCubeNodeEditorDismiss.js +83 -0
  212. package/lib/components/editors/useCubeNodeEditorDismiss.js.map +1 -0
  213. package/lib/components/examples/CubeExamplesDialog.d.ts +26 -0
  214. package/lib/components/examples/CubeExamplesDialog.d.ts.map +1 -0
  215. package/lib/components/examples/CubeExamplesDialog.js +68 -0
  216. package/lib/components/examples/CubeExamplesDialog.js.map +1 -0
  217. package/lib/components/grid/CubeGridRegion.d.ts.map +1 -1
  218. package/lib/components/grid/CubeGridRegion.js +19 -8
  219. package/lib/components/grid/CubeGridRegion.js.map +1 -1
  220. package/lib/components/grid/CubeGridValues.d.ts +16 -0
  221. package/lib/components/grid/CubeGridValues.d.ts.map +1 -1
  222. package/lib/components/grid/CubeGridValues.js +44 -0
  223. package/lib/components/grid/CubeGridValues.js.map +1 -1
  224. package/lib/components/grid/CubeResultGrid.d.ts.map +1 -1
  225. package/lib/components/grid/CubeResultGrid.js +14 -2
  226. package/lib/components/grid/CubeResultGrid.js.map +1 -1
  227. package/lib/components/palette/CubePalette.d.ts.map +1 -1
  228. package/lib/components/palette/CubePalette.js +23 -12
  229. package/lib/components/palette/CubePalette.js.map +1 -1
  230. package/lib/components/source-picker/CubeDataProductTab.d.ts +27 -0
  231. package/lib/components/source-picker/CubeDataProductTab.d.ts.map +1 -0
  232. package/lib/components/source-picker/CubeDataProductTab.js +102 -0
  233. package/lib/components/source-picker/CubeDataProductTab.js.map +1 -0
  234. package/lib/components/source-picker/CubeDirectConnectionTab.d.ts +27 -0
  235. package/lib/components/source-picker/CubeDirectConnectionTab.d.ts.map +1 -0
  236. package/lib/components/source-picker/CubeDirectConnectionTab.js +87 -0
  237. package/lib/components/source-picker/CubeDirectConnectionTab.js.map +1 -0
  238. package/lib/components/source-picker/CubeIngestTab.d.ts +28 -0
  239. package/lib/components/source-picker/CubeIngestTab.d.ts.map +1 -0
  240. package/lib/components/source-picker/CubeIngestTab.js +66 -0
  241. package/lib/components/source-picker/CubeIngestTab.js.map +1 -0
  242. package/lib/components/source-picker/CubeInlineModelTab.d.ts +37 -0
  243. package/lib/components/source-picker/CubeInlineModelTab.d.ts.map +1 -0
  244. package/lib/components/source-picker/CubeInlineModelTab.js +71 -0
  245. package/lib/components/source-picker/CubeInlineModelTab.js.map +1 -0
  246. package/lib/components/source-picker/CubePickerStep.d.ts +27 -0
  247. package/lib/components/source-picker/CubePickerStep.d.ts.map +1 -0
  248. package/lib/components/source-picker/CubePickerStep.js +23 -0
  249. package/lib/components/source-picker/CubePickerStep.js.map +1 -0
  250. package/lib/components/source-picker/CubeProjectTab.d.ts +27 -0
  251. package/lib/components/source-picker/CubeProjectTab.d.ts.map +1 -0
  252. package/lib/components/source-picker/CubeProjectTab.js +50 -0
  253. package/lib/components/source-picker/CubeProjectTab.js.map +1 -0
  254. package/lib/components/source-picker/CubeSourcePicker.d.ts +6 -0
  255. package/lib/components/source-picker/CubeSourcePicker.d.ts.map +1 -1
  256. package/lib/components/source-picker/CubeSourcePicker.js +20 -58
  257. package/lib/components/source-picker/CubeSourcePicker.js.map +1 -1
  258. package/lib/components/spec-transfer/CubeSpecTransferDialog.js +1 -1
  259. package/lib/components/spec-transfer/CubeSpecTransferDialog.js.map +1 -1
  260. package/lib/graph-manager/CubeConnectionExplorer.d.ts +90 -0
  261. package/lib/graph-manager/CubeConnectionExplorer.d.ts.map +1 -0
  262. package/lib/graph-manager/CubeConnectionExplorer.js +34 -0
  263. package/lib/graph-manager/CubeConnectionExplorer.js.map +1 -0
  264. package/lib/graph-manager/CubeDataProduct.d.ts +66 -0
  265. package/lib/graph-manager/CubeDataProduct.d.ts.map +1 -0
  266. package/lib/graph-manager/CubeDataProduct.js +102 -0
  267. package/lib/graph-manager/CubeDataProduct.js.map +1 -0
  268. package/lib/graph-manager/CubeDataProductCatalog.d.ts +167 -0
  269. package/lib/graph-manager/CubeDataProductCatalog.d.ts.map +1 -0
  270. package/lib/graph-manager/CubeDataProductCatalog.js +116 -0
  271. package/lib/graph-manager/CubeDataProductCatalog.js.map +1 -0
  272. package/lib/graph-manager/CubeDirectConnection.d.ts +38 -0
  273. package/lib/graph-manager/CubeDirectConnection.d.ts.map +1 -0
  274. package/lib/graph-manager/CubeDirectConnection.js +48 -0
  275. package/lib/graph-manager/CubeDirectConnection.js.map +1 -0
  276. package/lib/graph-manager/CubeEngine.d.ts +37 -2
  277. package/lib/graph-manager/CubeEngine.d.ts.map +1 -1
  278. package/lib/graph-manager/CubeEngine.js +4 -1
  279. package/lib/graph-manager/CubeEngine.js.map +1 -1
  280. package/lib/graph-manager/CubeIngest.d.ts +50 -0
  281. package/lib/graph-manager/CubeIngest.d.ts.map +1 -0
  282. package/lib/graph-manager/CubeIngest.js +88 -0
  283. package/lib/graph-manager/CubeIngest.js.map +1 -0
  284. package/lib/graph-manager/CubeIngestCatalog.d.ts +116 -0
  285. package/lib/graph-manager/CubeIngestCatalog.d.ts.map +1 -0
  286. package/lib/graph-manager/CubeIngestCatalog.js +80 -0
  287. package/lib/graph-manager/CubeIngestCatalog.js.map +1 -0
  288. package/lib/graph-manager/CubeLakehouseEnvironment.d.ts +26 -0
  289. package/lib/graph-manager/CubeLakehouseEnvironment.d.ts.map +1 -0
  290. package/lib/graph-manager/CubeLakehouseEnvironment.js +17 -0
  291. package/lib/graph-manager/CubeLakehouseEnvironment.js.map +1 -0
  292. package/lib/graph-manager/CubeProject.d.ts +41 -0
  293. package/lib/graph-manager/CubeProject.d.ts.map +1 -0
  294. package/lib/graph-manager/CubeProject.js +84 -0
  295. package/lib/graph-manager/CubeProject.js.map +1 -0
  296. package/lib/graph-manager/CubeProjectCatalog.d.ts +35 -0
  297. package/lib/graph-manager/CubeProjectCatalog.d.ts.map +1 -0
  298. package/lib/graph-manager/CubeProjectCatalog.js +17 -0
  299. package/lib/graph-manager/CubeProjectCatalog.js.map +1 -0
  300. package/lib/graph-manager/protocol/pure/CubeEngineBuilder.d.ts +63 -1
  301. package/lib/graph-manager/protocol/pure/CubeEngineBuilder.d.ts.map +1 -1
  302. package/lib/graph-manager/protocol/pure/CubeEngineBuilder.js +50 -1
  303. package/lib/graph-manager/protocol/pure/CubeEngineBuilder.js.map +1 -1
  304. package/lib/graph-manager/protocol/pure/v1/V1_CubeDataProductArtifact.d.ts +44 -0
  305. package/lib/graph-manager/protocol/pure/v1/V1_CubeDataProductArtifact.d.ts.map +1 -0
  306. package/lib/graph-manager/protocol/pure/v1/V1_CubeDataProductArtifact.js +192 -0
  307. package/lib/graph-manager/protocol/pure/v1/V1_CubeDataProductArtifact.js.map +1 -0
  308. package/lib/graph-manager/protocol/pure/v1/V1_CubeDataProductModel.d.ts +29 -0
  309. package/lib/graph-manager/protocol/pure/v1/V1_CubeDataProductModel.d.ts.map +1 -0
  310. package/lib/graph-manager/protocol/pure/v1/V1_CubeDataProductModel.js +84 -0
  311. package/lib/graph-manager/protocol/pure/v1/V1_CubeDataProductModel.js.map +1 -0
  312. package/lib/graph-manager/protocol/pure/v1/V1_CubeDirectConnection.d.ts +41 -0
  313. package/lib/graph-manager/protocol/pure/v1/V1_CubeDirectConnection.d.ts.map +1 -0
  314. package/lib/graph-manager/protocol/pure/v1/V1_CubeDirectConnection.js +246 -0
  315. package/lib/graph-manager/protocol/pure/v1/V1_CubeDirectConnection.js.map +1 -0
  316. package/lib/graph-manager/protocol/pure/v1/V1_CubeDirectModel.d.ts +43 -0
  317. package/lib/graph-manager/protocol/pure/v1/V1_CubeDirectModel.d.ts.map +1 -0
  318. package/lib/graph-manager/protocol/pure/v1/V1_CubeDirectModel.js +112 -0
  319. package/lib/graph-manager/protocol/pure/v1/V1_CubeDirectModel.js.map +1 -0
  320. package/lib/graph-manager/protocol/pure/v1/V1_CubeEngineErrors.d.ts.map +1 -1
  321. package/lib/graph-manager/protocol/pure/v1/V1_CubeEngineErrors.js +30 -4
  322. package/lib/graph-manager/protocol/pure/v1/V1_CubeEngineErrors.js.map +1 -1
  323. package/lib/graph-manager/protocol/pure/v1/V1_CubeExpression.d.ts +23 -0
  324. package/lib/graph-manager/protocol/pure/v1/V1_CubeExpression.d.ts.map +1 -0
  325. package/lib/graph-manager/protocol/pure/v1/V1_CubeExpression.js +68 -0
  326. package/lib/graph-manager/protocol/pure/v1/V1_CubeExpression.js.map +1 -0
  327. package/lib/graph-manager/protocol/pure/v1/V1_CubeIngestDefinition.d.ts +30 -0
  328. package/lib/graph-manager/protocol/pure/v1/V1_CubeIngestDefinition.d.ts.map +1 -0
  329. package/lib/graph-manager/protocol/pure/v1/V1_CubeIngestDefinition.js +140 -0
  330. package/lib/graph-manager/protocol/pure/v1/V1_CubeIngestDefinition.js.map +1 -0
  331. package/lib/graph-manager/protocol/pure/v1/V1_CubeIngestModel.d.ts +62 -0
  332. package/lib/graph-manager/protocol/pure/v1/V1_CubeIngestModel.d.ts.map +1 -0
  333. package/lib/graph-manager/protocol/pure/v1/V1_CubeIngestModel.js +119 -0
  334. package/lib/graph-manager/protocol/pure/v1/V1_CubeIngestModel.js.map +1 -0
  335. package/lib/graph-manager/protocol/pure/v1/V1_CubeLakehouseEnvironmentResolver.d.ts +33 -0
  336. package/lib/graph-manager/protocol/pure/v1/V1_CubeLakehouseEnvironmentResolver.d.ts.map +1 -0
  337. package/lib/graph-manager/protocol/pure/v1/V1_CubeLakehouseEnvironmentResolver.js +94 -0
  338. package/lib/graph-manager/protocol/pure/v1/V1_CubeLakehouseEnvironmentResolver.js.map +1 -0
  339. package/lib/graph-manager/protocol/pure/v1/V1_CubeLambdaSerializer.d.ts.map +1 -1
  340. package/lib/graph-manager/protocol/pure/v1/V1_CubeLambdaSerializer.js +63 -4
  341. package/lib/graph-manager/protocol/pure/v1/V1_CubeLambdaSerializer.js.map +1 -1
  342. package/lib/graph-manager/protocol/pure/v1/V1_CubeSchemaExploration.d.ts +67 -0
  343. package/lib/graph-manager/protocol/pure/v1/V1_CubeSchemaExploration.d.ts.map +1 -0
  344. package/lib/graph-manager/protocol/pure/v1/V1_CubeSchemaExploration.js +238 -0
  345. package/lib/graph-manager/protocol/pure/v1/V1_CubeSchemaExploration.js.map +1 -0
  346. package/lib/graph-manager/protocol/pure/v1/V1_LegendCubeConnectionExplorer.d.ts +34 -0
  347. package/lib/graph-manager/protocol/pure/v1/V1_LegendCubeConnectionExplorer.d.ts.map +1 -0
  348. package/lib/graph-manager/protocol/pure/v1/V1_LegendCubeConnectionExplorer.js +64 -0
  349. package/lib/graph-manager/protocol/pure/v1/V1_LegendCubeConnectionExplorer.js.map +1 -0
  350. package/lib/graph-manager/protocol/pure/v1/V1_LegendCubeDataProductCatalog.d.ts +104 -0
  351. package/lib/graph-manager/protocol/pure/v1/V1_LegendCubeDataProductCatalog.d.ts.map +1 -0
  352. package/lib/graph-manager/protocol/pure/v1/V1_LegendCubeDataProductCatalog.js +484 -0
  353. package/lib/graph-manager/protocol/pure/v1/V1_LegendCubeDataProductCatalog.js.map +1 -0
  354. package/lib/graph-manager/protocol/pure/v1/V1_LegendCubeEngine.d.ts +97 -3
  355. package/lib/graph-manager/protocol/pure/v1/V1_LegendCubeEngine.d.ts.map +1 -1
  356. package/lib/graph-manager/protocol/pure/v1/V1_LegendCubeEngine.js +585 -20
  357. package/lib/graph-manager/protocol/pure/v1/V1_LegendCubeEngine.js.map +1 -1
  358. package/lib/graph-manager/protocol/pure/v1/V1_LegendCubeIngestCatalog.d.ts +69 -0
  359. package/lib/graph-manager/protocol/pure/v1/V1_LegendCubeIngestCatalog.d.ts.map +1 -0
  360. package/lib/graph-manager/protocol/pure/v1/V1_LegendCubeIngestCatalog.js +270 -0
  361. package/lib/graph-manager/protocol/pure/v1/V1_LegendCubeIngestCatalog.js.map +1 -0
  362. package/lib/graph-manager/protocol/pure/v1/V1_LegendCubeProjectCatalog.d.ts +35 -0
  363. package/lib/graph-manager/protocol/pure/v1/V1_LegendCubeProjectCatalog.d.ts.map +1 -0
  364. package/lib/graph-manager/protocol/pure/v1/V1_LegendCubeProjectCatalog.js +91 -0
  365. package/lib/graph-manager/protocol/pure/v1/V1_LegendCubeProjectCatalog.js.map +1 -0
  366. package/lib/graph-manager/protocol/pure/v1/__test-utils__/V1_CubeConnectionExplorerTestUtils.d.ts +25 -0
  367. package/lib/graph-manager/protocol/pure/v1/__test-utils__/V1_CubeConnectionExplorerTestUtils.d.ts.map +1 -0
  368. package/lib/graph-manager/protocol/pure/v1/__test-utils__/V1_CubeConnectionExplorerTestUtils.js +47 -0
  369. package/lib/graph-manager/protocol/pure/v1/__test-utils__/V1_CubeConnectionExplorerTestUtils.js.map +1 -0
  370. package/lib/graph-manager/protocol/pure/v1/__test-utils__/V1_CubeDataProductFixtures.d.ts +28 -0
  371. package/lib/graph-manager/protocol/pure/v1/__test-utils__/V1_CubeDataProductFixtures.d.ts.map +1 -0
  372. package/lib/graph-manager/protocol/pure/v1/__test-utils__/V1_CubeDataProductFixtures.js +310 -0
  373. package/lib/graph-manager/protocol/pure/v1/__test-utils__/V1_CubeDataProductFixtures.js.map +1 -0
  374. package/lib/graph-manager/protocol/pure/v1/__test-utils__/V1_CubeDataProductSearchFixtures.d.ts +33 -0
  375. package/lib/graph-manager/protocol/pure/v1/__test-utils__/V1_CubeDataProductSearchFixtures.d.ts.map +1 -0
  376. package/lib/graph-manager/protocol/pure/v1/__test-utils__/V1_CubeDataProductSearchFixtures.js +188 -0
  377. package/lib/graph-manager/protocol/pure/v1/__test-utils__/V1_CubeDataProductSearchFixtures.js.map +1 -0
  378. package/lib/graph-manager/protocol/pure/v1/__test-utils__/V1_CubeEngineTestUtils.d.ts +1 -1
  379. package/lib/graph-manager/protocol/pure/v1/__test-utils__/V1_CubeEngineTestUtils.d.ts.map +1 -1
  380. package/lib/graph-manager/protocol/pure/v1/__test-utils__/V1_CubeEngineTestUtils.js +27 -1
  381. package/lib/graph-manager/protocol/pure/v1/__test-utils__/V1_CubeEngineTestUtils.js.map +1 -1
  382. package/lib/index.css +2 -2
  383. package/lib/index.css.map +1 -1
  384. package/lib/index.d.ts +11 -1
  385. package/lib/index.d.ts.map +1 -1
  386. package/lib/index.js +10 -1
  387. package/lib/index.js.map +1 -1
  388. package/lib/stores/CubeAddPlacement.d.ts +32 -0
  389. package/lib/stores/CubeAddPlacement.d.ts.map +1 -0
  390. package/lib/stores/CubeAddPlacement.js +40 -0
  391. package/lib/stores/CubeAddPlacement.js.map +1 -0
  392. package/lib/stores/CubeDataProductRecheck.d.ts +27 -0
  393. package/lib/stores/CubeDataProductRecheck.d.ts.map +1 -0
  394. package/lib/stores/CubeDataProductRecheck.js +54 -0
  395. package/lib/stores/CubeDataProductRecheck.js.map +1 -0
  396. package/lib/stores/CubeDataProductRuntimeState.d.ts +88 -0
  397. package/lib/stores/CubeDataProductRuntimeState.d.ts.map +1 -0
  398. package/lib/stores/CubeDataProductRuntimeState.js +190 -0
  399. package/lib/stores/CubeDataProductRuntimeState.js.map +1 -0
  400. package/lib/stores/CubeDataProductWarehouse.d.ts +19 -0
  401. package/lib/stores/CubeDataProductWarehouse.d.ts.map +1 -0
  402. package/lib/stores/CubeDataProductWarehouse.js +25 -0
  403. package/lib/stores/CubeDataProductWarehouse.js.map +1 -0
  404. package/lib/stores/CubeEditorState.d.ts +100 -16
  405. package/lib/stores/CubeEditorState.d.ts.map +1 -1
  406. package/lib/stores/CubeEditorState.js +347 -47
  407. package/lib/stores/CubeEditorState.js.map +1 -1
  408. package/lib/stores/CubeEntrySource.d.ts +78 -0
  409. package/lib/stores/CubeEntrySource.d.ts.map +1 -0
  410. package/lib/stores/CubeEntrySource.js +200 -0
  411. package/lib/stores/CubeEntrySource.js.map +1 -0
  412. package/lib/stores/CubeExamples.d.ts +43 -0
  413. package/lib/stores/CubeExamples.d.ts.map +1 -0
  414. package/lib/stores/CubeExamples.js +296 -0
  415. package/lib/stores/CubeExamples.js.map +1 -0
  416. package/lib/stores/CubeExamplesState.d.ts +45 -0
  417. package/lib/stores/CubeExamplesState.d.ts.map +1 -0
  418. package/lib/stores/CubeExamplesState.js +81 -0
  419. package/lib/stores/CubeExamplesState.js.map +1 -0
  420. package/lib/stores/CubeExecutionState.d.ts +6 -2
  421. package/lib/stores/CubeExecutionState.d.ts.map +1 -1
  422. package/lib/stores/CubeExecutionState.js +15 -5
  423. package/lib/stores/CubeExecutionState.js.map +1 -1
  424. package/lib/stores/CubeExtendTyping.d.ts +72 -0
  425. package/lib/stores/CubeExtendTyping.d.ts.map +1 -0
  426. package/lib/stores/CubeExtendTyping.js +176 -0
  427. package/lib/stores/CubeExtendTyping.js.map +1 -0
  428. package/lib/stores/CubeGridQuickActions.d.ts +14 -6
  429. package/lib/stores/CubeGridQuickActions.d.ts.map +1 -1
  430. package/lib/stores/CubeGridQuickActions.js +53 -15
  431. package/lib/stores/CubeGridQuickActions.js.map +1 -1
  432. package/lib/stores/CubeHost.d.ts +32 -1
  433. package/lib/stores/CubeHost.d.ts.map +1 -1
  434. package/lib/stores/CubeHost.js +21 -1
  435. package/lib/stores/CubeHost.js.map +1 -1
  436. package/lib/stores/CubeIngestRecheck.d.ts +26 -0
  437. package/lib/stores/CubeIngestRecheck.d.ts.map +1 -0
  438. package/lib/stores/CubeIngestRecheck.js +53 -0
  439. package/lib/stores/CubeIngestRecheck.js.map +1 -0
  440. package/lib/stores/CubeNodeEditorState.d.ts +101 -5
  441. package/lib/stores/CubeNodeEditorState.d.ts.map +1 -1
  442. package/lib/stores/CubeNodeEditorState.js +221 -10
  443. package/lib/stores/CubeNodeEditorState.js.map +1 -1
  444. package/lib/stores/CubeShowPureState.d.ts +5 -2
  445. package/lib/stores/CubeShowPureState.d.ts.map +1 -1
  446. package/lib/stores/CubeShowPureState.js +7 -4
  447. package/lib/stores/CubeShowPureState.js.map +1 -1
  448. package/lib/stores/CubeSourcePickerState.d.ts +54 -65
  449. package/lib/stores/CubeSourcePickerState.d.ts.map +1 -1
  450. package/lib/stores/CubeSourcePickerState.js +155 -276
  451. package/lib/stores/CubeSourcePickerState.js.map +1 -1
  452. package/lib/stores/CubeSpecTransferState.d.ts +2 -2
  453. package/lib/stores/CubeSpecTransferState.js +2 -2
  454. package/lib/stores/LocalModelCatalog.d.ts +2 -0
  455. package/lib/stores/LocalModelCatalog.d.ts.map +1 -1
  456. package/lib/stores/LocalModelCatalog.js +17 -3
  457. package/lib/stores/LocalModelCatalog.js.map +1 -1
  458. package/lib/stores/editors/CubeAggregationRows.d.ts +80 -0
  459. package/lib/stores/editors/CubeAggregationRows.d.ts.map +1 -0
  460. package/lib/stores/editors/CubeAggregationRows.js +164 -0
  461. package/lib/stores/editors/CubeAggregationRows.js.map +1 -0
  462. package/lib/stores/editors/CubeConcatDraft.d.ts +30 -0
  463. package/lib/stores/editors/CubeConcatDraft.d.ts.map +1 -0
  464. package/lib/stores/editors/CubeConcatDraft.js +44 -0
  465. package/lib/stores/editors/CubeConcatDraft.js.map +1 -0
  466. package/lib/stores/editors/CubeDifferenceDraft.d.ts +49 -0
  467. package/lib/stores/editors/CubeDifferenceDraft.d.ts.map +1 -0
  468. package/lib/stores/editors/CubeDifferenceDraft.js +111 -0
  469. package/lib/stores/editors/CubeDifferenceDraft.js.map +1 -0
  470. package/lib/stores/editors/CubeExtendDraft.d.ts +110 -0
  471. package/lib/stores/editors/CubeExtendDraft.d.ts.map +1 -0
  472. package/lib/stores/editors/CubeExtendDraft.js +359 -0
  473. package/lib/stores/editors/CubeExtendDraft.js.map +1 -0
  474. package/lib/stores/editors/CubeGroupDraft.d.ts +61 -0
  475. package/lib/stores/editors/CubeGroupDraft.d.ts.map +1 -0
  476. package/lib/stores/editors/CubeGroupDraft.js +106 -0
  477. package/lib/stores/editors/CubeGroupDraft.js.map +1 -0
  478. package/lib/stores/editors/CubeJoinDraft.d.ts +9 -10
  479. package/lib/stores/editors/CubeJoinDraft.d.ts.map +1 -1
  480. package/lib/stores/editors/CubeJoinDraft.js +92 -21
  481. package/lib/stores/editors/CubeJoinDraft.js.map +1 -1
  482. package/lib/stores/editors/CubeJoinKeyPairs.d.ts +38 -0
  483. package/lib/stores/editors/CubeJoinKeyPairs.d.ts.map +1 -0
  484. package/lib/stores/editors/CubeJoinKeyPairs.js +33 -0
  485. package/lib/stores/editors/CubeJoinKeyPairs.js.map +1 -0
  486. package/lib/stores/editors/CubeNodeDraft.d.ts +20 -6
  487. package/lib/stores/editors/CubeNodeDraft.d.ts.map +1 -1
  488. package/lib/stores/editors/CubeNodeDraft.js +23 -5
  489. package/lib/stores/editors/CubeNodeDraft.js.map +1 -1
  490. package/lib/stores/editors/CubeNodeDraftRegistry.d.ts.map +1 -1
  491. package/lib/stores/editors/CubeNodeDraftRegistry.js +20 -1
  492. package/lib/stores/editors/CubeNodeDraftRegistry.js.map +1 -1
  493. package/lib/stores/editors/CubePartitionDraft.d.ts +70 -0
  494. package/lib/stores/editors/CubePartitionDraft.d.ts.map +1 -0
  495. package/lib/stores/editors/CubePartitionDraft.js +154 -0
  496. package/lib/stores/editors/CubePartitionDraft.js.map +1 -0
  497. package/lib/stores/editors/CubeSortDraft.d.ts +2 -10
  498. package/lib/stores/editors/CubeSortDraft.d.ts.map +1 -1
  499. package/lib/stores/editors/CubeSortDraft.js +9 -35
  500. package/lib/stores/editors/CubeSortDraft.js.map +1 -1
  501. package/lib/stores/editors/CubeSortRows.d.ts +34 -0
  502. package/lib/stores/editors/CubeSortRows.d.ts.map +1 -0
  503. package/lib/stores/editors/CubeSortRows.js +50 -0
  504. package/lib/stores/editors/CubeSortRows.js.map +1 -0
  505. package/lib/stores/fixtures/CubeNorthwindModel.d.ts +7 -0
  506. package/lib/stores/fixtures/CubeNorthwindModel.d.ts.map +1 -1
  507. package/lib/stores/fixtures/CubeNorthwindModel.js +99 -87
  508. package/lib/stores/fixtures/CubeNorthwindModel.js.map +1 -1
  509. package/lib/stores/fixtures/CubeSampleSql.d.ts +34 -0
  510. package/lib/stores/fixtures/CubeSampleSql.d.ts.map +1 -0
  511. package/lib/stores/fixtures/CubeSampleSql.js +64 -0
  512. package/lib/stores/fixtures/CubeSampleSql.js.map +1 -0
  513. package/lib/stores/fixtures/CubeSportsModel.d.ts +27 -0
  514. package/lib/stores/fixtures/CubeSportsModel.d.ts.map +1 -0
  515. package/lib/stores/fixtures/CubeSportsModel.js +158 -0
  516. package/lib/stores/fixtures/CubeSportsModel.js.map +1 -0
  517. package/lib/stores/fixtures/CubeTradesModel.d.ts +29 -0
  518. package/lib/stores/fixtures/CubeTradesModel.d.ts.map +1 -0
  519. package/lib/stores/fixtures/CubeTradesModel.js +197 -0
  520. package/lib/stores/fixtures/CubeTradesModel.js.map +1 -0
  521. package/lib/stores/source-picker/CubeCsvSetupSql.d.ts +71 -0
  522. package/lib/stores/source-picker/CubeCsvSetupSql.d.ts.map +1 -0
  523. package/lib/stores/source-picker/CubeCsvSetupSql.js +392 -0
  524. package/lib/stores/source-picker/CubeCsvSetupSql.js.map +1 -0
  525. package/lib/stores/source-picker/CubeDataProductTabState.d.ts +186 -0
  526. package/lib/stores/source-picker/CubeDataProductTabState.d.ts.map +1 -0
  527. package/lib/stores/source-picker/CubeDataProductTabState.js +681 -0
  528. package/lib/stores/source-picker/CubeDataProductTabState.js.map +1 -0
  529. package/lib/stores/source-picker/CubeDirectConnectionTabState.d.ts +140 -0
  530. package/lib/stores/source-picker/CubeDirectConnectionTabState.d.ts.map +1 -0
  531. package/lib/stores/source-picker/CubeDirectConnectionTabState.js +516 -0
  532. package/lib/stores/source-picker/CubeDirectConnectionTabState.js.map +1 -0
  533. package/lib/stores/source-picker/CubeIngestTabState.d.ts +114 -0
  534. package/lib/stores/source-picker/CubeIngestTabState.d.ts.map +1 -0
  535. package/lib/stores/source-picker/CubeIngestTabState.js +455 -0
  536. package/lib/stores/source-picker/CubeIngestTabState.js.map +1 -0
  537. package/lib/stores/source-picker/CubeInlineModelTabState.d.ts +107 -0
  538. package/lib/stores/source-picker/CubeInlineModelTabState.d.ts.map +1 -0
  539. package/lib/stores/source-picker/CubeInlineModelTabState.js +347 -0
  540. package/lib/stores/source-picker/CubeInlineModelTabState.js.map +1 -0
  541. package/lib/stores/source-picker/CubeProjectTabState.d.ts +62 -0
  542. package/lib/stores/source-picker/CubeProjectTabState.d.ts.map +1 -0
  543. package/lib/stores/source-picker/CubeProjectTabState.js +181 -0
  544. package/lib/stores/source-picker/CubeProjectTabState.js.map +1 -0
  545. package/lib/stores/source-picker/CubeSourcePickerTab.d.ts +48 -0
  546. package/lib/stores/source-picker/CubeSourcePickerTab.d.ts.map +1 -0
  547. package/lib/stores/source-picker/CubeSourcePickerTab.js +24 -0
  548. package/lib/stores/source-picker/CubeSourcePickerTab.js.map +1 -0
  549. package/package.json +10 -6
  550. package/src/__lib__/LegendCubeCommand.ts +5 -0
  551. package/src/__lib__/LegendCubeDataProductLabels.ts +91 -0
  552. package/src/__lib__/LegendCubeDirectConnectionLabels.ts +111 -0
  553. package/src/__lib__/LegendCubeHelpText.ts +25 -1
  554. package/src/__lib__/LegendCubeIngestLabels.ts +40 -0
  555. package/src/__lib__/LegendCubeLabels.ts +162 -4
  556. package/src/__lib__/LegendCubeProjectLabels.ts +25 -0
  557. package/src/__lib__/LegendCubeTesting.ts +1 -0
  558. package/src/__test-utils__/CubeCanvasTestUtils.ts +1 -1
  559. package/src/__test-utils__/CubeConnectionTestSupport.ts +45 -0
  560. package/src/__test-utils__/CubeDirectConnectionFixtures.ts +70 -0
  561. package/src/__test-utils__/CubeEngineTestSupport.ts +38 -0
  562. package/src/__test-utils__/CubeExpressionTestUtils.ts +119 -0
  563. package/src/__test-utils__/CubeOperationsTestUtils.ts +93 -18
  564. package/src/__test-utils__/CubePageTestUtils.tsx +35 -0
  565. package/src/__test-utils__/CubeTestApplication.ts +21 -2
  566. package/src/__test-utils__/FakeCubeConnectionExplorer.ts +111 -0
  567. package/src/__test-utils__/FakeCubeDataProductCatalog.ts +227 -0
  568. package/src/__test-utils__/FakeCubeEngine.ts +25 -1
  569. package/src/__test-utils__/FakeCubeIngestCatalog.ts +180 -0
  570. package/src/__test-utils__/FakeCubeProjectCatalog.ts +89 -0
  571. package/src/components/CubeAddItems.tsx +179 -0
  572. package/src/components/CubeEditor.tsx +73 -44
  573. package/src/components/CubeEntrySourceBanner.tsx +64 -0
  574. package/src/components/CubeNodeIcon.tsx +13 -0
  575. package/src/components/CubeSchemaColumnsTable.tsx +49 -0
  576. package/src/components/canvas/CubeCanvas.tsx +49 -14
  577. package/src/components/canvas/CubeCanvasContextMenu.tsx +31 -30
  578. package/src/components/canvas/CubeCanvasDnd.ts +16 -9
  579. package/src/components/canvas/CubeCanvasElements.ts +8 -2
  580. package/src/components/canvas/CubeCanvasNode.tsx +61 -43
  581. package/src/components/canvas/CubeCanvasNodeFocus.ts +37 -0
  582. package/src/components/canvas/CubeNodeEditorAnchor.ts +82 -0
  583. package/src/components/editors/CubeAggregationRowEditor.tsx +224 -0
  584. package/src/components/editors/CubeColumnChecklist.tsx +130 -0
  585. package/src/components/editors/CubeConcatEditor.tsx +374 -0
  586. package/src/components/editors/CubeDataProductSourceEditor.tsx +134 -0
  587. package/src/components/editors/CubeDifferenceEditor.tsx +87 -0
  588. package/src/components/editors/CubeExtendEditor.tsx +271 -0
  589. package/src/components/editors/CubeFilterEditor.tsx +7 -0
  590. package/src/components/editors/CubeGroupEditor.tsx +135 -0
  591. package/src/components/editors/CubeIngestSourceEditor.tsx +104 -0
  592. package/src/components/editors/CubeJoinEditor.tsx +12 -132
  593. package/src/components/editors/CubeJoinKeyRows.tsx +183 -0
  594. package/src/components/editors/CubeNodeEditorPanel.tsx +91 -28
  595. package/src/components/editors/CubeNodeEditorPopper.tsx +183 -0
  596. package/src/components/editors/CubeNodeEditorRegistry.ts +21 -0
  597. package/src/components/editors/CubePartitionEditor.tsx +208 -0
  598. package/src/components/editors/CubeRenameEditor.tsx +10 -5
  599. package/src/components/editors/CubeRestrictEditor.tsx +1 -1
  600. package/src/components/editors/CubeSortEditor.tsx +20 -142
  601. package/src/components/editors/CubeSortRowEditor.tsx +176 -0
  602. package/src/components/editors/CubeSourceEditor.tsx +42 -30
  603. package/src/components/editors/CubeWarehouseControl.tsx +113 -0
  604. package/src/components/editors/useCubeNodeEditorDismiss.ts +103 -0
  605. package/src/components/examples/CubeExamplesDialog.tsx +199 -0
  606. package/src/components/grid/CubeGridRegion.tsx +48 -10
  607. package/src/components/grid/CubeGridValues.ts +55 -0
  608. package/src/components/grid/CubeResultGrid.tsx +24 -8
  609. package/src/components/palette/CubePalette.tsx +33 -15
  610. package/src/components/source-picker/CubeDataProductTab.tsx +392 -0
  611. package/src/components/source-picker/CubeDirectConnectionTab.tsx +340 -0
  612. package/src/components/source-picker/CubeIngestTab.tsx +232 -0
  613. package/src/components/source-picker/CubeInlineModelTab.tsx +191 -0
  614. package/src/components/source-picker/CubePickerStep.tsx +49 -0
  615. package/src/components/source-picker/CubeProjectTab.tsx +114 -0
  616. package/src/components/source-picker/CubeSourcePicker.tsx +62 -227
  617. package/src/components/spec-transfer/CubeSpecTransferDialog.tsx +1 -1
  618. package/src/graph-manager/CubeConnectionExplorer.ts +106 -0
  619. package/src/graph-manager/CubeDataProduct.ts +150 -0
  620. package/src/graph-manager/CubeDataProductCatalog.ts +245 -0
  621. package/src/graph-manager/CubeDirectConnection.ts +67 -0
  622. package/src/graph-manager/CubeEngine.ts +43 -1
  623. package/src/graph-manager/CubeIngest.ts +144 -0
  624. package/src/graph-manager/CubeIngestCatalog.ts +169 -0
  625. package/src/graph-manager/CubeLakehouseEnvironment.ts +27 -0
  626. package/src/graph-manager/CubeProject.ts +117 -0
  627. package/src/graph-manager/CubeProjectCatalog.ts +40 -0
  628. package/src/graph-manager/protocol/pure/CubeEngineBuilder.ts +145 -1
  629. package/src/graph-manager/protocol/pure/v1/V1_CubeDataProductArtifact.ts +251 -0
  630. package/src/graph-manager/protocol/pure/v1/V1_CubeDataProductModel.ts +101 -0
  631. package/src/graph-manager/protocol/pure/v1/V1_CubeDirectConnection.ts +339 -0
  632. package/src/graph-manager/protocol/pure/v1/V1_CubeDirectModel.ts +151 -0
  633. package/src/graph-manager/protocol/pure/v1/V1_CubeEngineErrors.ts +45 -4
  634. package/src/graph-manager/protocol/pure/v1/V1_CubeExpression.ts +89 -0
  635. package/src/graph-manager/protocol/pure/v1/V1_CubeIngestDefinition.ts +201 -0
  636. package/src/graph-manager/protocol/pure/v1/V1_CubeIngestModel.ts +183 -0
  637. package/src/graph-manager/protocol/pure/v1/V1_CubeLakehouseEnvironmentResolver.ts +141 -0
  638. package/src/graph-manager/protocol/pure/v1/V1_CubeLambdaSerializer.ts +84 -4
  639. package/src/graph-manager/protocol/pure/v1/V1_CubeSchemaExploration.ts +361 -0
  640. package/src/graph-manager/protocol/pure/v1/V1_LegendCubeConnectionExplorer.ts +116 -0
  641. package/src/graph-manager/protocol/pure/v1/V1_LegendCubeDataProductCatalog.ts +744 -0
  642. package/src/graph-manager/protocol/pure/v1/V1_LegendCubeEngine.ts +967 -24
  643. package/src/graph-manager/protocol/pure/v1/V1_LegendCubeIngestCatalog.ts +459 -0
  644. package/src/graph-manager/protocol/pure/v1/V1_LegendCubeProjectCatalog.ts +147 -0
  645. package/src/graph-manager/protocol/pure/v1/__test-utils__/V1_CubeConnectionExplorerTestUtils.ts +61 -0
  646. package/src/graph-manager/protocol/pure/v1/__test-utils__/V1_CubeDataProductFixtures.ts +337 -0
  647. package/src/graph-manager/protocol/pure/v1/__test-utils__/V1_CubeDataProductSearchFixtures.ts +206 -0
  648. package/src/graph-manager/protocol/pure/v1/__test-utils__/V1_CubeEngineTestUtils.ts +42 -1
  649. package/src/index.ts +20 -0
  650. package/src/stores/CubeAddPlacement.ts +67 -0
  651. package/src/stores/CubeDataProductRecheck.ts +93 -0
  652. package/src/stores/CubeDataProductRuntimeState.ts +256 -0
  653. package/src/stores/CubeDataProductWarehouse.ts +40 -0
  654. package/src/stores/CubeEditorState.ts +511 -63
  655. package/src/stores/CubeEntrySource.ts +278 -0
  656. package/src/stores/CubeExamples.ts +457 -0
  657. package/src/stores/CubeExamplesState.ts +108 -0
  658. package/src/stores/CubeExecutionState.ts +24 -5
  659. package/src/stores/CubeExtendTyping.ts +291 -0
  660. package/src/stores/CubeGridQuickActions.ts +69 -14
  661. package/src/stores/CubeHost.ts +71 -1
  662. package/src/stores/CubeIngestRecheck.ts +92 -0
  663. package/src/stores/CubeNodeEditorState.ts +278 -9
  664. package/src/stores/CubeShowPureState.ts +7 -4
  665. package/src/stores/CubeSourcePickerState.ts +160 -330
  666. package/src/stores/CubeSpecTransferState.ts +2 -2
  667. package/src/stores/LocalModelCatalog.ts +22 -3
  668. package/src/stores/editors/CubeAggregationRows.ts +299 -0
  669. package/src/stores/editors/CubeConcatDraft.ts +49 -0
  670. package/src/stores/editors/CubeDifferenceDraft.ts +147 -0
  671. package/src/stores/editors/CubeExtendDraft.ts +532 -0
  672. package/src/stores/editors/CubeGroupDraft.ts +145 -0
  673. package/src/stores/editors/CubeJoinDraft.ts +130 -41
  674. package/src/stores/editors/CubeJoinKeyPairs.ts +68 -0
  675. package/src/stores/editors/CubeNodeDraft.ts +26 -6
  676. package/src/stores/editors/CubeNodeDraftRegistry.ts +25 -0
  677. package/src/stores/editors/CubePartitionDraft.ts +214 -0
  678. package/src/stores/editors/CubeSortDraft.ts +17 -54
  679. package/src/stores/editors/CubeSortRows.ts +84 -0
  680. package/src/stores/fixtures/CubeNorthwindModel.ts +103 -88
  681. package/src/stores/fixtures/CubeSampleSql.ts +85 -0
  682. package/src/stores/fixtures/CubeSportsModel.ts +182 -0
  683. package/src/stores/fixtures/CubeTradesModel.ts +241 -0
  684. package/src/stores/source-picker/CubeCsvSetupSql.ts +444 -0
  685. package/src/stores/source-picker/CubeDataProductTabState.ts +839 -0
  686. package/src/stores/source-picker/CubeDirectConnectionTabState.ts +647 -0
  687. package/src/stores/source-picker/CubeIngestTabState.ts +551 -0
  688. package/src/stores/source-picker/CubeInlineModelTabState.ts +448 -0
  689. package/src/stores/source-picker/CubeProjectTabState.ts +218 -0
  690. package/src/stores/source-picker/CubeSourcePickerTab.ts +50 -0
  691. package/tsconfig.json +89 -0
@@ -13,13 +13,25 @@
13
13
  * See the License for the specific language governing permissions and
14
14
  * limitations under the License.
15
15
  */
16
- import { buildSchemasAndValidity, createNodeRegistry, CubeDocument, diffSchemas, findLostSortOrders, MESSAGE_SORT_COLUMNS_CUT, MESSAGE_SORT_COLUMNS_DROPPED, MESSAGE_SORT_ORDER_LOST, QueryEmitter, RelationalTableSource, rereadQueryFilterValues, } from '@finos/legend-cube';
17
- import { action, computed, flow, flowResult, makeObservable, observable, } from 'mobx';
16
+ import { DataProductAccessPointSource, IngestDatasetSource, buildSchemasAndValidity, createNodeRegistry, CubeDocument, diffSchemas, Extend, findLostSortOrders, isTypingError, MESSAGE_SORT_COLUMNS_CUT, MESSAGE_SORT_COLUMNS_DROPPED, MESSAGE_SORT_ORDER_LOST, QueryEmitter, RelationalTableSource, rereadQueryFilterValues, } from '@finos/legend-cube';
17
+ import { action, computed, flow, flowResult, makeObservable, observable, reaction, } from 'mobx';
18
18
  import { LEGEND_CUBE_COMMAND_KEY } from '../__lib__/LegendCubeCommand.js';
19
- import { CUBE_EDITOR_CLOSED_REASON, DEFAULT_ROW_LIMIT, getSchemaDriftWarning, getSourceRecheckWarning, LEGEND_CUBE_USER_DATA_KEY, MAX_UNDO_STEPS, } from '../__lib__/LegendCubeLabels.js';
19
+ import { LEGEND_CUBE_TEST_ID } from '../__lib__/LegendCubeTesting.js';
20
+ import { CUBE_EDITOR_CLOSED_REASON, DEFAULT_ROW_LIMIT, getSchemaDriftWarning, getExtendRetypeWarning, getSourceRecheckWarning, LEGEND_CUBE_USER_DATA_KEY, MAX_UNDO_STEPS, } from '../__lib__/LegendCubeLabels.js';
21
+ import { CUBE_DATA_PRODUCT_RECHECK_MESSAGE, getAccessPointDriftWarning, getAccessPointRecheckWarning, } from '../__lib__/LegendCubeDataProductLabels.js';
22
+ import { CUBE_INGEST_RECHECK_MESSAGE, getDataSetDriftWarning, getDataSetRecheckWarning, } from '../__lib__/LegendCubeIngestLabels.js';
23
+ import { isCubeDataProductModel } from '../graph-manager/CubeDataProduct.js';
24
+ import { isCubeIngestModel } from '../graph-manager/CubeIngest.js';
20
25
  import { CubeEngineError, CubeEngineErrorKind, } from '../graph-manager/CubeEngine.js';
21
26
  import { getDatabaseType } from '../graph-manager/CubeModelOutlineHelper.js';
27
+ import { recheckCubeDataProductSources } from './CubeDataProductRecheck.js';
28
+ import { recheckCubeIngestSources } from './CubeIngestRecheck.js';
29
+ import { CubeDataProductRuntimeState } from './CubeDataProductRuntimeState.js';
30
+ import { CubeExamplesState } from './CubeExamplesState.js';
22
31
  import { CubeExecutionState } from './CubeExecutionState.js';
32
+ import { CubeExtendDraft } from './editors/CubeExtendDraft.js';
33
+ import { buildCubeExtendTypingLambdas, createStaleCubeExtendTypingRule, getCubeExtendTypingUpstream, getCubeExtendUpstream, isCubeExtendTypingCurrent, isSameCubeExtendTyping, readCubeExtendTyping, } from './CubeExtendTyping.js';
34
+ import { loadCubeModelOutline } from './CubeHost.js';
23
35
  import { CubeNodeEditorState } from './CubeNodeEditorState.js';
24
36
  import { CubeShowPureState } from './CubeShowPureState.js';
25
37
  import { CubeSourcePickerState } from './CubeSourcePickerState.js';
@@ -32,6 +44,8 @@ const isTypingText = () => {
32
44
  element instanceof HTMLTextAreaElement ||
33
45
  (element instanceof HTMLElement && element.isContentEditable));
34
46
  };
47
+ /** Focus is in the node editor, whose shortcuts give it back to the node (PLAN §11.8) */
48
+ const isFocusInNodeEditor = () => document.activeElement?.closest(`[data-testid="${LEGEND_CUBE_TEST_ID.NODE_EDITOR}"]`) !== null && document.activeElement !== null;
35
49
  /**
36
50
  * The state of one Cube page (PLAN §7.8). The document is immutable: every
37
51
  * edit makes a new one through `applyDocument`, which keeps the previous one
@@ -42,9 +56,14 @@ export class CubeEditorState {
42
56
  host;
43
57
  /** One registry for inference, emission and the saved spec */
44
58
  registry;
59
+ /** The editor's own query rule: an Extend typed for another input than its own waits to be typed again (PLAN §11.7) */
60
+ staleExtendTyping;
45
61
  execution;
62
+ /** Where a lakehouse cube runs, a data product's or an ingest one's: its class and warehouse */
63
+ dataProductRuntime;
46
64
  sourcePicker;
47
65
  specTransfer;
66
+ examples;
48
67
  showPure;
49
68
  nodeEditor;
50
69
  document;
@@ -65,6 +84,10 @@ export class CubeEditorState {
65
84
  modelOutlines = new Map();
66
85
  /** Sources sent to the engine to be typed again, until it answers */
67
86
  pendingSources = new Set();
87
+ /** Extends sent to the engine to be typed, until it answers (PLAN §11.7) */
88
+ typingExtends = new Set();
89
+ /** Types the Extends that wait for it, whenever one does (PLAN §11.7 Q4) */
90
+ retyping;
68
91
  /** The rows a run returns; kept per user, never in the cube */
69
92
  rowLimit;
70
93
  /** The palette shows icons only; kept per user, never in the cube */
@@ -81,6 +104,10 @@ export class CubeEditorState {
81
104
  constructor(host, document = new CubeDocument()) {
82
105
  makeObservable(this, {
83
106
  pendingSources: observable.ref,
107
+ typingExtends: observable.ref,
108
+ extendsToType: computed,
109
+ isTypingExtends: computed,
110
+ retypeExtends: flow,
84
111
  modelOutlines: observable.ref,
85
112
  modelOutline: computed,
86
113
  loadModelOutline: flow,
@@ -96,6 +123,9 @@ export class CubeEditorState {
96
123
  analysis: computed,
97
124
  emitter: computed,
98
125
  canUndo: computed,
126
+ hasEditsToApply: computed,
127
+ executeEdited: action,
128
+ undoEdited: action,
99
129
  isDialogOpen: computed,
100
130
  applyDocument: action,
101
131
  undo: action,
@@ -118,6 +148,7 @@ export class CubeEditorState {
118
148
  });
119
149
  this.host = host;
120
150
  this.registry = createNodeRegistry();
151
+ this.staleExtendTyping = createStaleCubeExtendTypingRule(this.registry, () => this.document.context?.model);
121
152
  this.document = document;
122
153
  const storedLimit = host.applicationStore.userDataService.getNumericValue(LEGEND_CUBE_USER_DATA_KEY.ROW_LIMIT);
123
154
  this.rowLimit = isValidRowLimit(storedLimit)
@@ -126,14 +157,28 @@ export class CubeEditorState {
126
157
  this.isPaletteCollapsed =
127
158
  host.applicationStore.userDataService.getBooleanValue(LEGEND_CUBE_USER_DATA_KEY.PALETTE_COLLAPSED) ?? false;
128
159
  this.execution = new CubeExecutionState(this);
160
+ this.dataProductRuntime = new CubeDataProductRuntimeState(this);
129
161
  this.sourcePicker = new CubeSourcePickerState(this);
130
162
  this.specTransfer = new CubeSpecTransferState(this);
163
+ this.examples = new CubeExamplesState(this);
131
164
  this.showPure = new CubeShowPureState(this);
132
165
  this.nodeEditor = new CubeNodeEditorState(this);
166
+ this.retyping = reaction(() => this.extendsToType, (waiting) => {
167
+ if (waiting.length) {
168
+ flowResult(this.retypeExtends(waiting)).catch(this.host.applicationStore.alertUnhandledError);
169
+ }
170
+ }, { fireImmediately: true });
133
171
  }
134
- /** Each node's schema and errors, query-level rules included, as the emitter sees them */
172
+ /**
173
+ * Each node's schema and errors, query-level rules included, as the
174
+ * emitter sees them, and an Extend typed for another input than its own
175
+ * waiting (`ERR_TYPING`), which only the editor can tell
176
+ */
135
177
  get analysis() {
136
- return buildSchemasAndValidity(this.document.query, this.registry.queryRules);
178
+ return buildSchemasAndValidity(this.document.query, [
179
+ ...this.registry.queryRules,
180
+ this.staleExtendTyping,
181
+ ]);
137
182
  }
138
183
  get emitter() {
139
184
  return new QueryEmitter(this.document.query, this.registry);
@@ -146,6 +191,116 @@ export class CubeEditorState {
146
191
  isPendingSource(node) {
147
192
  return this.pendingSources.has(node);
148
193
  }
194
+ /**
195
+ * The Extends of the cube shown that wait for the engine to type their
196
+ * columns, their input valid, and that aren't being typed (PLAN §11.7):
197
+ * new expressions, or an input that changed
198
+ */
199
+ get extendsToType() {
200
+ const { validity } = this.analysis;
201
+ return this.document.query.nodes.filter((node) => node instanceof Extend &&
202
+ !this.typingExtends.has(node) &&
203
+ (validity.get(node.id) ?? []).some(isTypingError));
204
+ }
205
+ /** The cube shown has Extends the engine is typing */
206
+ get isTypingExtends() {
207
+ return this.document.query.nodes.some((node) => this.typingExtends.has(node));
208
+ }
209
+ /** The node waits for the engine to type it, or is being typed: an Extend (PLAN §11.7) */
210
+ isTypingNode(node) {
211
+ return (this.typingExtends.has(node) ||
212
+ (this.analysis.validity.get(node.id) ?? []).some(isTypingError));
213
+ }
214
+ /**
215
+ * Types Extends' columns with the engine, in one call, outside the undo
216
+ * history (PLAN §11.7 Q4): each for the input it has now, its columns
217
+ * after its input's relation, as typing types any node. The typing goes in
218
+ * place of the very nodes sent, in the cube shown and the undo snapshots
219
+ * that give the engine the same input; one the user changed meanwhile is
220
+ * left to type again. Each typing records the input as the engine was given
221
+ * it (`upstream`). A typing the engine couldn't give names the column it
222
+ * failed on; when the engine can't be reached, a typing still current for
223
+ * the input is kept, with a warning, as a source's saved columns are.
224
+ */
225
+ *retypeExtends(nodes) {
226
+ const { context, query } = this.document;
227
+ if (!context) {
228
+ return;
229
+ }
230
+ const { schemas } = this.analysis;
231
+ const emitter = new QueryEmitter(query, this.registry);
232
+ const requests = nodes.flatMap((node) => {
233
+ const [inputId] = query.getInputIds(node.id);
234
+ const input = inputId === undefined ? undefined : schemas.get(inputId);
235
+ if (query.getNode(node.id) !== node ||
236
+ this.typingExtends.has(node) ||
237
+ !input ||
238
+ node.columns.some(({ lambda }) => lambda === undefined)) {
239
+ return [];
240
+ }
241
+ const columns = node.columns.map(({ name, lambda }) => ({
242
+ name,
243
+ lambda: lambda,
244
+ }));
245
+ return [
246
+ {
247
+ node,
248
+ input,
249
+ columns,
250
+ upstream: getCubeExtendUpstream(emitter, node.id, context.model),
251
+ lambdas: buildCubeExtendTypingLambdas(query, node, columns, this.registry, false),
252
+ },
253
+ ];
254
+ });
255
+ if (!requests.length) {
256
+ return;
257
+ }
258
+ const sent = requests.map(({ node }) => node);
259
+ this.typingExtends = new Set([...this.typingExtends, ...sent]);
260
+ let answers;
261
+ try {
262
+ answers = (yield this.host.engine.typeLambdas(context.model, new Map(requests.flatMap(({ lambdas }) => [...lambdas]))));
263
+ }
264
+ catch (error) {
265
+ const failure = error instanceof CubeEngineError
266
+ ? error
267
+ : new CubeEngineError(CubeEngineErrorKind.NETWORK, error instanceof Error ? error.message : String(error));
268
+ answers = new Map(requests.flatMap(({ lambdas }) => [...lambdas.keys()].map((key) => [key, failure])));
269
+ }
270
+ finally {
271
+ this.typingExtends = new Set([...this.typingExtends].filter((node) => !sent.includes(node)));
272
+ }
273
+ // a typing that comes back the same leaves its node, and the query, alone
274
+ const warnings = new Map(this.warnings);
275
+ const replacements = new Map(requests.flatMap(({ node, input, columns, upstream }) => {
276
+ const { typing, error } = readCubeExtendTyping(answers, node, input, columns, upstream);
277
+ if (error?.kind === CubeEngineErrorKind.NETWORK &&
278
+ isCubeExtendTypingCurrent(node, input, upstream)) {
279
+ warnings.set(node.key, [getExtendRetypeWarning(error.firstLine)]);
280
+ return [];
281
+ }
282
+ warnings.delete(node.key);
283
+ return isSameCubeExtendTyping(typing, node.typing)
284
+ ? []
285
+ : [[node, node.withTyping(typing)]];
286
+ }));
287
+ this.warnings = warnings;
288
+ // an undo snapshot whose input differs keeps the typing it had
289
+ const emitters = new Map([[query, emitter]]);
290
+ this.replaceOutsideHistory(replacements, (snapshot, resolved) => {
291
+ const upstream = getCubeExtendTypingUpstream(resolved.typing);
292
+ if (upstream === undefined) {
293
+ return true;
294
+ }
295
+ let snapshotEmitter = emitters.get(snapshot);
296
+ if (!snapshotEmitter) {
297
+ snapshotEmitter = new QueryEmitter(snapshot, this.registry);
298
+ emitters.set(snapshot, snapshotEmitter);
299
+ }
300
+ return (getCubeExtendUpstream(snapshotEmitter, resolved.id, context.model) ===
301
+ upstream);
302
+ });
303
+ }
149
304
  /**
150
305
  * Warnings worked out from the query, by node id: a Sort whose order is
151
306
  * lost before it is used (PLAN §11.4). Never stored and never errors, so
@@ -239,7 +394,7 @@ export class CubeEditorState {
239
394
  return;
240
395
  }
241
396
  try {
242
- const outline = (yield this.host.modelCatalog.loadOutline(model));
397
+ const outline = (yield loadCubeModelOutline(this.host, model));
243
398
  this.modelOutlines = new Map([...this.modelOutlines, [model, outline]]);
244
399
  }
245
400
  catch {
@@ -249,6 +404,7 @@ export class CubeEditorState {
249
404
  /** One of Cube's dialogs is open: the source picker, Import or Export, Show Pure */
250
405
  get isDialogOpen() {
251
406
  return (this.sourcePicker.isOpen ||
407
+ this.examples.isOpen ||
252
408
  this.specTransfer.mode !== undefined ||
253
409
  this.showPure.isOpen);
254
410
  }
@@ -256,25 +412,73 @@ export class CubeEditorState {
256
412
  * The page's keyboard shortcuts, while it is open (spec §17.12). Each does
257
413
  * nothing when its button can't be used, and nothing while a Cube dialog
258
414
  * is open, since a dialog doesn't stop the app's shortcuts (user's choice,
259
- * 2026-10-07). Undo leaves Ctrl+Z to a text field that has the focus.
415
+ * 2026-10-07), or while something opened from the node editor holds it
416
+ * open. Like their buttons, they finish the node editor first (PLAN §11.8):
417
+ * F9 runs the edited query, and Ctrl+Z undoes what finishing applied. Undo
418
+ * leaves Ctrl+Z to a text field that has the focus.
260
419
  */
261
420
  registerCommands() {
262
- const { commandService, alertUnhandledError } = this.host.applicationStore;
421
+ const { commandService } = this.host.applicationStore;
263
422
  commandService.registerCommand({
264
423
  key: LEGEND_CUBE_COMMAND_KEY.EXECUTE,
265
424
  trigger: () => !this.isDialogOpen &&
266
- this.execution.canExecute &&
267
- !this.execution.isRunning,
425
+ !this.nodeEditor.isHeld &&
426
+ !this.execution.isRunning &&
427
+ (this.execution.canExecute || this.hasEditsToApply),
428
+ action: () => this.nodeEditor.runFromKeyboard(() => this.executeEdited(), isFocusInNodeEditor()),
429
+ });
430
+ // F10 in the Extend editor (PLAN §11.7)
431
+ commandService.registerCommand({
432
+ key: LEGEND_CUBE_COMMAND_KEY.VALIDATE_EXPRESSIONS,
433
+ trigger: () => {
434
+ const { draft } = this.nodeEditor;
435
+ return (!this.isDialogOpen &&
436
+ !this.readOnly &&
437
+ draft instanceof CubeExtendDraft &&
438
+ !draft.validating);
439
+ },
268
440
  action: () => {
269
- flowResult(this.execution.execute()).catch(alertUnhandledError);
441
+ const { draft } = this.nodeEditor;
442
+ if (draft instanceof CubeExtendDraft) {
443
+ flowResult(draft.validate()).catch(this.host.applicationStore.alertUnhandledError);
444
+ }
270
445
  },
271
446
  });
272
447
  commandService.registerCommand({
273
448
  key: LEGEND_CUBE_COMMAND_KEY.UNDO,
274
- trigger: () => !this.isDialogOpen && this.canUndo && !isTypingText(),
275
- action: () => this.undo(),
449
+ trigger: () => !this.isDialogOpen &&
450
+ !this.nodeEditor.isHeld &&
451
+ (this.canUndo || this.hasEditsToApply) &&
452
+ !isTypingText(),
453
+ action: () => this.nodeEditor.runFromKeyboard(() => this.undoEdited(), isFocusInNodeEditor()),
276
454
  });
277
455
  }
456
+ /** The node editor has edits that closing it would apply */
457
+ get hasEditsToApply() {
458
+ return this.nodeEditor.hasChanges && !this.readOnly;
459
+ }
460
+ /**
461
+ * Execute, as its button and F9 do (spec §17.5): finishes the node editor
462
+ * first, so the edits run, then runs the query if it can; runs nothing
463
+ * when the edits had to be dropped, since the run would not be what the
464
+ * user edited
465
+ */
466
+ executeEdited() {
467
+ if (!this.nodeEditor.finishApplied() || !this.execution.canExecute) {
468
+ return;
469
+ }
470
+ flowResult(this.execution.execute()).catch(this.host.applicationStore.alertUnhandledError);
471
+ }
472
+ /**
473
+ * Undo, as its button and Ctrl+Z do: finishes the node editor first, then
474
+ * undoes the last change, which drops the edits it just applied; when the
475
+ * edits had to be dropped instead, that was the undo
476
+ */
477
+ undoEdited() {
478
+ if (this.nodeEditor.finishApplied()) {
479
+ this.undo();
480
+ }
481
+ }
278
482
  deregisterCommands() {
279
483
  Object.values(LEGEND_CUBE_COMMAND_KEY).forEach((key) => this.host.applicationStore.commandService.deregisterCommand(key));
280
484
  }
@@ -307,10 +511,15 @@ export class CubeEditorState {
307
511
  this.document = next;
308
512
  this.readOnly = readOnly;
309
513
  flowResult(this.reresolveSources()).catch(this.host.applicationStore.alertUnhandledError);
514
+ // typed once on load too, as sources are checked again: the model may
515
+ // have changed the types of its functions (PLAN §11.7)
516
+ flowResult(this.retypeExtends(next.query.nodes.filter((node) => node instanceof Extend))).catch(this.host.applicationStore.alertUnhandledError);
310
517
  }
311
518
  /**
312
- * Types the cube's tables again, in one engine call, outside the undo
313
- * history (PLAN §10.3, Settled before M1.8):
519
+ * Types the cube's sources again, outside the undo history (PLAN §10.3,
520
+ * Settled before M1.8): its tables in one engine call, a data product
521
+ * cube's access points through the catalog, from the deployed artifact at
522
+ * the cube's version (PLAN §6.8). Warnings name the kind of source:
314
523
  * - a table whose columns are the saved ones is left as it is;
315
524
  * - a table that changed takes its new columns, with a warning listing the
316
525
  * changes;
@@ -325,28 +534,62 @@ export class CubeEditorState {
325
534
  * left alone.
326
535
  *
327
536
  * `only` types just these sources of the cube shown, e.g. one Refresh. A
328
- * table found unchanged loses any earlier warning.
537
+ * table found unchanged loses any earlier warning. `fresh` reads a data
538
+ * product's artifact again rather than what this page visit read.
329
539
  */
330
- *reresolveSources(only) {
540
+ *reresolveSources(only, fresh = false) {
331
541
  const { context, query } = this.document;
332
- const sources = (only ?? query.nodes).filter((node) => node instanceof RelationalTableSource &&
333
- query.getNode(node.id) === node);
334
- if (!context || !sources.length) {
542
+ if (!context) {
543
+ return;
544
+ }
545
+ const kept = (only ?? query.nodes).filter((node) => query.getNode(node.id) === node);
546
+ const tables = kept.filter((node) => node instanceof RelationalTableSource);
547
+ // an access point on a cube of tables is the no-mix rule's to flag
548
+ const accessPoints = isCubeDataProductModel(context.model)
549
+ ? kept.filter((node) => node instanceof DataProductAccessPointSource)
550
+ : [];
551
+ const dataSets = isCubeIngestModel(context.model)
552
+ ? kept.filter((node) => node instanceof IngestDatasetSource)
553
+ : [];
554
+ const sources = [
555
+ ...tables,
556
+ ...accessPoints,
557
+ ...dataSets,
558
+ ];
559
+ if (!sources.length) {
335
560
  return;
336
561
  }
337
562
  this.pendingSources = new Set([...this.pendingSources, ...sources]);
338
563
  let answers;
339
564
  try {
340
- answers = (yield this.host.engine.resolveSchemas(context.model, new Map(sources.map((source) => [
341
- source.id,
342
- [source.database, source.schema, source.table],
343
- ]))));
344
- }
345
- catch (error) {
346
- const failure = error instanceof CubeEngineError
347
- ? error
348
- : new CubeEngineError(CubeEngineErrorKind.NETWORK, error instanceof Error ? error.message : String(error));
349
- answers = new Map(sources.map((source) => [source.id, failure]));
565
+ const [tableAnswers, accessPointAnswers, dataSetAnswers] = (yield Promise.all([
566
+ tables.length
567
+ ? this.host.engine
568
+ .resolveSchemas(context.model, new Map(tables.map((source) => [
569
+ source.id,
570
+ [source.database, source.schema, source.table],
571
+ ])))
572
+ .catch((error) => {
573
+ const failure = error instanceof CubeEngineError
574
+ ? error
575
+ : new CubeEngineError(CubeEngineErrorKind.NETWORK, error instanceof Error
576
+ ? error.message
577
+ : String(error));
578
+ return new Map(tables.map((source) => [source.id, failure]));
579
+ })
580
+ : new Map(),
581
+ accessPoints.length
582
+ ? recheckCubeDataProductSources(this.host.dataProductCatalog, context.model, accessPoints, fresh)
583
+ : new Map(),
584
+ dataSets.length
585
+ ? recheckCubeIngestSources(this.host.ingestCatalog, context.model, dataSets, fresh)
586
+ : new Map(),
587
+ ]));
588
+ answers = new Map([
589
+ ...(tableAnswers ?? []),
590
+ ...(accessPointAnswers ?? []),
591
+ ...(dataSetAnswers ?? []),
592
+ ]);
350
593
  }
351
594
  finally {
352
595
  this.pendingSources = new Set([...this.pendingSources].filter((node) => !sources.includes(node)));
@@ -355,14 +598,26 @@ export class CubeEditorState {
355
598
  /** Each typed source, by the object that was sent, and what replaces it */
356
599
  const replacements = new Map();
357
600
  sources.forEach((source) => {
601
+ const isAccessPoint = source instanceof DataProductAccessPointSource;
602
+ const isDataSet = source instanceof IngestDatasetSource;
358
603
  const answer = answers.get(source.id) ??
359
- new CubeEngineError(CubeEngineErrorKind.COMPILE, 'The engine gave no schema for this table', source.id);
604
+ new CubeEngineError(CubeEngineErrorKind.COMPILE, isAccessPoint
605
+ ? CUBE_DATA_PRODUCT_RECHECK_MESSAGE.NO_ANSWER
606
+ : isDataSet
607
+ ? CUBE_INGEST_RECHECK_MESSAGE.NO_ANSWER
608
+ : 'The engine gave no schema for this table', source.id);
360
609
  const saved = source.resolution.kind === 'resolved'
361
610
  ? source.resolution.schema
362
611
  : undefined;
363
612
  if (answer instanceof CubeEngineError) {
364
613
  if (saved) {
365
- warnings.set(source.key, [getSourceRecheckWarning(answer.firstLine)]);
614
+ warnings.set(source.key, [
615
+ isAccessPoint
616
+ ? getAccessPointRecheckWarning(answer.firstLine)
617
+ : isDataSet
618
+ ? getDataSetRecheckWarning(answer.firstLine)
619
+ : getSourceRecheckWarning(answer.firstLine),
620
+ ]);
366
621
  }
367
622
  else if (source.resolution.kind !== 'failed' ||
368
623
  source.resolution.message !== answer.detail) {
@@ -380,13 +635,28 @@ export class CubeEditorState {
380
635
  schema: answer,
381
636
  });
382
637
  if (saved) {
638
+ const diff = diffSchemas(saved, answer);
383
639
  warnings.set(resolved.key, [
384
- getSchemaDriftWarning(diffSchemas(saved, answer)),
640
+ isAccessPoint
641
+ ? getAccessPointDriftWarning(diff)
642
+ : isDataSet
643
+ ? getDataSetDriftWarning(diff)
644
+ : getSchemaDriftWarning(diff),
385
645
  ]);
386
646
  }
387
647
  replacements.set(source, resolved);
388
648
  });
389
649
  this.warnings = warnings;
650
+ this.replaceOutsideHistory(replacements);
651
+ }
652
+ /**
653
+ * Puts nodes the engine checked in place of the very objects that were
654
+ * sent, outside the undo history: in the cube shown and in the undo
655
+ * snapshots taken meanwhile, so undoing an edit made meanwhile keeps them.
656
+ * A node the user changed meanwhile is a new object, and is left alone.
657
+ * Filter values saved as invalid text are read again against the columns.
658
+ */
659
+ replaceOutsideHistory(replacements, accepts) {
390
660
  if (!replacements.size) {
391
661
  return;
392
662
  }
@@ -398,7 +668,8 @@ export class CubeEditorState {
398
668
  if (checked === undefined) {
399
669
  let replaced = document.query;
400
670
  replacements.forEach((resolved, source) => {
401
- if (replaced.getNode(source.id) === source) {
671
+ if (replaced.getNode(source.id) === source &&
672
+ (accepts?.(document.query, resolved) ?? true)) {
402
673
  replaced = replaced.replace(resolved);
403
674
  }
404
675
  });
@@ -427,21 +698,27 @@ export class CubeEditorState {
427
698
  }
428
699
  }
429
700
  /**
430
- * Types a table again with the engine, from its Source panel (spec §17.6),
431
- * as a re-check after an import does: no undo step, nothing changes when
432
- * its columns are the same, and a warning lists any change.
701
+ * Types a source again, from its Source panel (spec §17.6), as a re-check
702
+ * after an import does: a table with the engine, an access point through
703
+ * the catalog. No undo step, nothing changes when its columns are the
704
+ * same, and a warning lists any change.
433
705
  */
434
706
  *refreshSource(nodeId) {
435
707
  const source = this.document.query.getNode(nodeId);
436
- if (source instanceof RelationalTableSource) {
437
- yield flowResult(this.reresolveSources([source]));
708
+ if (source instanceof RelationalTableSource ||
709
+ source instanceof DataProductAccessPointSource ||
710
+ source instanceof IngestDatasetSource) {
711
+ // a Refresh reads the deployed artifact or definition again
712
+ yield flowResult(this.reresolveSources([source], true));
438
713
  }
439
714
  }
440
715
  /**
441
716
  * Restores the document before the last edit; does nothing when there is
442
717
  * no history. A restored query is a new object (PLAN §4.3), so rows that
443
- * ran before the edit show as stale. An edit that left the query alone,
444
- * such as a rename, keeps it, with its rows and engine errors. Undoing an
718
+ * ran before the edit show as stale. An edit that left the query and the
719
+ * context alone, such as a rename, keeps them, with the rows and engine
720
+ * errors; undoing a warehouse edit brings back the context the rows ran
721
+ * with. Undoing an
445
722
  * import closes the node editor and the picker, as the import did.
446
723
  */
447
724
  undo() {
@@ -465,9 +742,14 @@ export class CubeEditorState {
465
742
  }
466
743
  this.history = [...this.history, this.document].slice(-MAX_UNDO_STEPS);
467
744
  }
468
- /** Engine errors belong to the query they came from, so they are dropped when the query changes */
745
+ /**
746
+ * Engine errors belong to the query and the context they came from, so
747
+ * they are dropped when either changes, e.g. a data product cube's
748
+ * warehouse
749
+ */
469
750
  replaceDocument(next) {
470
- if (next.query !== this.document.query) {
751
+ if (next.query !== this.document.query ||
752
+ next.context !== this.document.context) {
471
753
  this.hostIssues = new Map();
472
754
  this.execution.clearError();
473
755
  }
@@ -492,10 +774,23 @@ export class CubeEditorState {
492
774
  this.applyQuery(query.connect(sourceId, targetId, port));
493
775
  }
494
776
  }
777
+ /**
778
+ * The kinds of source the host serves: data products and ingest data sets
779
+ * only with their catalogs. The cube's kind may still disable one
780
+ * (`canAddNode`)
781
+ */
782
+ get offeredSources() {
783
+ return this.registry.sources.filter((definition) => (definition.type !== DataProductAccessPointSource.TYPE ||
784
+ this.sourcePicker.dataProductTab.isAvailable) &&
785
+ (definition.type !== IngestDatasetSource.TYPE ||
786
+ this.sourcePicker.ingestTab.isAvailable));
787
+ }
495
788
  /**
496
789
  * Whether a node of the type can be added: a transform, unconnected or
497
790
  * spliced in after `afterId`, when the query allows it; a source only
498
791
  * unconnected, through the source picker. Never while the cube is read-only.
792
+ * The low-level rule: the palette, drops and menus place nodes through
793
+ * `CubeAddPlacement` (PLAN §11.8).
499
794
  */
500
795
  canAddNode(type, afterId) {
501
796
  const definition = this.registry.get(type);
@@ -503,14 +798,18 @@ export class CubeEditorState {
503
798
  return false;
504
799
  }
505
800
  if (definition.kind === 'source') {
506
- return afterId === undefined;
801
+ // through its tab, which the cube's kind may disable (PLAN §6.8)
802
+ const tab = this.sourcePicker.tabForSourceType(type);
803
+ return (afterId === undefined &&
804
+ tab !== undefined &&
805
+ this.sourcePicker.isTabEnabled(tab));
507
806
  }
508
807
  const { query } = this.document;
509
808
  return query.canAdd(definition.create(query.generateId(type)), afterId);
510
809
  }
511
810
  /**
512
- * Adds a node of the type, as the palette and the context menu do (spec
513
- * §17.4): a transform with its default settings, unconnected or spliced in
811
+ * Adds a node of the type (spec §17.4), the low-level add that
812
+ * `CubeAddPlacement` places for the palette, drops and menus: a transform with its default settings, unconnected or spliced in
514
813
  * after `afterId`; a source opens the source picker, which adds it once
515
814
  * the engine has typed it. Does nothing `canAddNode` refuses.
516
815
  */
@@ -520,7 +819,7 @@ export class CubeEditorState {
520
819
  return;
521
820
  }
522
821
  if (definition.kind === 'source') {
523
- this.sourcePicker.open();
822
+ this.sourcePicker.open(this.sourcePicker.tabForSourceType(type)?.key);
524
823
  return;
525
824
  }
526
825
  const { query } = this.document;
@@ -625,6 +924,7 @@ export class CubeEditorState {
625
924
  }
626
925
  /** Stops any run; call when the page closes */
627
926
  dispose() {
927
+ this.retyping();
628
928
  this.execution.stop();
629
929
  this.nodeEditor.dispose();
630
930
  }