@finos/legend-cube-builder 0.0.2 → 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 (761) hide show
  1. package/README.md +93 -1
  2. package/docs/adding-an-operation.md +181 -0
  3. package/docs/hosting.md +157 -0
  4. package/docs/testing.md +188 -0
  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 +21 -3
  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 +95 -3
  25. package/lib/__lib__/LegendCubeLabels.d.ts.map +1 -1
  26. package/lib/__lib__/LegendCubeLabels.js +121 -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 +18 -0
  48. package/lib/__test-utils__/CubeEngineTestSupport.d.ts.map +1 -1
  49. package/lib/__test-utils__/CubeEngineTestSupport.js +51 -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 +67 -0
  56. package/lib/__test-utils__/CubeOperationsTestUtils.d.ts.map +1 -0
  57. package/lib/__test-utils__/CubeOperationsTestUtils.js +138 -0
  58. package/lib/__test-utils__/CubeOperationsTestUtils.js.map +1 -0
  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 +21 -2
  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 +19 -2
  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 +33 -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 +2 -0
  119. package/lib/components/canvas/CubeCanvasElements.d.ts.map +1 -1
  120. package/lib/components/canvas/CubeCanvasElements.js +8 -4
  121. package/lib/components/canvas/CubeCanvasElements.js.map +1 -1
  122. package/lib/components/canvas/CubeCanvasNode.d.ts.map +1 -1
  123. package/lib/components/canvas/CubeCanvasNode.js +30 -17
  124. package/lib/components/canvas/CubeCanvasNode.js.map +1 -1
  125. package/lib/components/canvas/CubeCanvasNodeFocus.d.ts +22 -0
  126. package/lib/components/canvas/CubeCanvasNodeFocus.d.ts.map +1 -0
  127. package/lib/components/canvas/CubeCanvasNodeFocus.js +31 -0
  128. package/lib/components/canvas/CubeCanvasNodeFocus.js.map +1 -0
  129. package/lib/components/canvas/CubeNodeEditorAnchor.d.ts +44 -0
  130. package/lib/components/canvas/CubeNodeEditorAnchor.d.ts.map +1 -0
  131. package/lib/components/canvas/CubeNodeEditorAnchor.js +51 -0
  132. package/lib/components/canvas/CubeNodeEditorAnchor.js.map +1 -0
  133. package/lib/components/editors/CubeAggregationRowEditor.d.ts +48 -0
  134. package/lib/components/editors/CubeAggregationRowEditor.d.ts.map +1 -0
  135. package/lib/components/editors/CubeAggregationRowEditor.js +72 -0
  136. package/lib/components/editors/CubeAggregationRowEditor.js.map +1 -0
  137. package/lib/components/editors/CubeColumnChecklist.d.ts +42 -0
  138. package/lib/components/editors/CubeColumnChecklist.d.ts.map +1 -0
  139. package/lib/components/editors/CubeColumnChecklist.js +41 -0
  140. package/lib/components/editors/CubeColumnChecklist.js.map +1 -0
  141. package/lib/components/editors/CubeColumnPicker.d.ts +9 -2
  142. package/lib/components/editors/CubeColumnPicker.d.ts.map +1 -1
  143. package/lib/components/editors/CubeColumnPicker.js +9 -4
  144. package/lib/components/editors/CubeColumnPicker.js.map +1 -1
  145. package/lib/components/editors/CubeConcatEditor.d.ts +33 -0
  146. package/lib/components/editors/CubeConcatEditor.d.ts.map +1 -0
  147. package/lib/components/editors/CubeConcatEditor.js +147 -0
  148. package/lib/components/editors/CubeConcatEditor.js.map +1 -0
  149. package/lib/components/editors/CubeDataProductSourceEditor.d.ts +25 -0
  150. package/lib/components/editors/CubeDataProductSourceEditor.d.ts.map +1 -0
  151. package/lib/components/editors/CubeDataProductSourceEditor.js +53 -0
  152. package/lib/components/editors/CubeDataProductSourceEditor.js.map +1 -0
  153. package/lib/components/editors/CubeDifferenceEditor.d.ts +25 -0
  154. package/lib/components/editors/CubeDifferenceEditor.d.ts.map +1 -0
  155. package/lib/components/editors/CubeDifferenceEditor.js +29 -0
  156. package/lib/components/editors/CubeDifferenceEditor.js.map +1 -0
  157. package/lib/components/editors/CubeDistinctEditor.d.ts +23 -0
  158. package/lib/components/editors/CubeDistinctEditor.d.ts.map +1 -0
  159. package/lib/components/editors/CubeDistinctEditor.js +24 -0
  160. package/lib/components/editors/CubeDistinctEditor.js.map +1 -0
  161. package/lib/components/editors/CubeExtendEditor.d.ts +25 -0
  162. package/lib/components/editors/CubeExtendEditor.d.ts.map +1 -0
  163. package/lib/components/editors/CubeExtendEditor.js +86 -0
  164. package/lib/components/editors/CubeExtendEditor.js.map +1 -0
  165. package/lib/components/editors/CubeFilterEditor.d.ts.map +1 -1
  166. package/lib/components/editors/CubeFilterEditor.js +3 -3
  167. package/lib/components/editors/CubeFilterEditor.js.map +1 -1
  168. package/lib/components/editors/CubeGroupEditor.d.ts +28 -0
  169. package/lib/components/editors/CubeGroupEditor.d.ts.map +1 -0
  170. package/lib/components/editors/CubeGroupEditor.js +70 -0
  171. package/lib/components/editors/CubeGroupEditor.js.map +1 -0
  172. package/lib/components/editors/CubeIngestSourceEditor.d.ts +26 -0
  173. package/lib/components/editors/CubeIngestSourceEditor.d.ts.map +1 -0
  174. package/lib/components/editors/CubeIngestSourceEditor.js +47 -0
  175. package/lib/components/editors/CubeIngestSourceEditor.js.map +1 -0
  176. package/lib/components/editors/CubeIntegerField.d.ts +29 -0
  177. package/lib/components/editors/CubeIntegerField.d.ts.map +1 -0
  178. package/lib/components/editors/CubeIntegerField.js +30 -0
  179. package/lib/components/editors/CubeIntegerField.js.map +1 -0
  180. package/lib/components/editors/CubeJoinEditor.d.ts +2 -4
  181. package/lib/components/editors/CubeJoinEditor.d.ts.map +1 -1
  182. package/lib/components/editors/CubeJoinEditor.js +15 -37
  183. package/lib/components/editors/CubeJoinEditor.js.map +1 -1
  184. package/lib/components/editors/CubeJoinKeyRows.d.ts +34 -0
  185. package/lib/components/editors/CubeJoinKeyRows.d.ts.map +1 -0
  186. package/lib/components/editors/CubeJoinKeyRows.js +65 -0
  187. package/lib/components/editors/CubeJoinKeyRows.js.map +1 -0
  188. package/lib/components/editors/CubeNodeEditorPanel.d.ts +7 -5
  189. package/lib/components/editors/CubeNodeEditorPanel.d.ts.map +1 -1
  190. package/lib/components/editors/CubeNodeEditorPanel.js +53 -14
  191. package/lib/components/editors/CubeNodeEditorPanel.js.map +1 -1
  192. package/lib/components/editors/CubeNodeEditorPopper.d.ts +40 -0
  193. package/lib/components/editors/CubeNodeEditorPopper.d.ts.map +1 -0
  194. package/lib/components/editors/CubeNodeEditorPopper.js +125 -0
  195. package/lib/components/editors/CubeNodeEditorPopper.js.map +1 -0
  196. package/lib/components/editors/CubeNodeEditorRegistry.d.ts.map +1 -1
  197. package/lib/components/editors/CubeNodeEditorRegistry.js +28 -1
  198. package/lib/components/editors/CubeNodeEditorRegistry.js.map +1 -1
  199. package/lib/components/editors/CubePartitionEditor.d.ts +30 -0
  200. package/lib/components/editors/CubePartitionEditor.d.ts.map +1 -0
  201. package/lib/components/editors/CubePartitionEditor.js +93 -0
  202. package/lib/components/editors/CubePartitionEditor.js.map +1 -0
  203. package/lib/components/editors/CubeRenameEditor.d.ts +26 -0
  204. package/lib/components/editors/CubeRenameEditor.d.ts.map +1 -0
  205. package/lib/components/editors/CubeRenameEditor.js +60 -0
  206. package/lib/components/editors/CubeRenameEditor.js.map +1 -0
  207. package/lib/components/editors/CubeRestrictEditor.d.ts +26 -0
  208. package/lib/components/editors/CubeRestrictEditor.d.ts.map +1 -0
  209. package/lib/components/editors/CubeRestrictEditor.js +23 -0
  210. package/lib/components/editors/CubeRestrictEditor.js.map +1 -0
  211. package/lib/components/editors/CubeRowCountEditor.d.ts +25 -0
  212. package/lib/components/editors/CubeRowCountEditor.d.ts.map +1 -0
  213. package/lib/components/editors/CubeRowCountEditor.js +38 -0
  214. package/lib/components/editors/CubeRowCountEditor.js.map +1 -0
  215. package/lib/components/editors/CubeSliceEditor.d.ts +25 -0
  216. package/lib/components/editors/CubeSliceEditor.d.ts.map +1 -0
  217. package/lib/components/editors/CubeSliceEditor.js +40 -0
  218. package/lib/components/editors/CubeSliceEditor.js.map +1 -0
  219. package/lib/components/editors/CubeSortEditor.d.ts +27 -0
  220. package/lib/components/editors/CubeSortEditor.d.ts.map +1 -0
  221. package/lib/components/editors/CubeSortEditor.js +45 -0
  222. package/lib/components/editors/CubeSortEditor.js.map +1 -0
  223. package/lib/components/editors/CubeSortRowEditor.d.ts +47 -0
  224. package/lib/components/editors/CubeSortRowEditor.d.ts.map +1 -0
  225. package/lib/components/editors/CubeSortRowEditor.js +62 -0
  226. package/lib/components/editors/CubeSortRowEditor.js.map +1 -0
  227. package/lib/components/editors/CubeSourceEditor.d.ts.map +1 -1
  228. package/lib/components/editors/CubeSourceEditor.js +18 -6
  229. package/lib/components/editors/CubeSourceEditor.js.map +1 -1
  230. package/lib/components/editors/CubeValueEditor.d.ts.map +1 -1
  231. package/lib/components/editors/CubeValueEditor.js +2 -1
  232. package/lib/components/editors/CubeValueEditor.js.map +1 -1
  233. package/lib/components/editors/CubeWarehouseControl.d.ts +30 -0
  234. package/lib/components/editors/CubeWarehouseControl.d.ts.map +1 -0
  235. package/lib/components/editors/CubeWarehouseControl.js +44 -0
  236. package/lib/components/editors/CubeWarehouseControl.js.map +1 -0
  237. package/lib/components/editors/useCubeNodeEditorDismiss.d.ts +31 -0
  238. package/lib/components/editors/useCubeNodeEditorDismiss.d.ts.map +1 -0
  239. package/lib/components/editors/useCubeNodeEditorDismiss.js +83 -0
  240. package/lib/components/editors/useCubeNodeEditorDismiss.js.map +1 -0
  241. package/lib/components/examples/CubeExamplesDialog.d.ts +26 -0
  242. package/lib/components/examples/CubeExamplesDialog.d.ts.map +1 -0
  243. package/lib/components/examples/CubeExamplesDialog.js +68 -0
  244. package/lib/components/examples/CubeExamplesDialog.js.map +1 -0
  245. package/lib/components/grid/CubeGridRegion.d.ts.map +1 -1
  246. package/lib/components/grid/CubeGridRegion.js +20 -9
  247. package/lib/components/grid/CubeGridRegion.js.map +1 -1
  248. package/lib/components/grid/CubeGridValues.d.ts +16 -0
  249. package/lib/components/grid/CubeGridValues.d.ts.map +1 -1
  250. package/lib/components/grid/CubeGridValues.js +44 -0
  251. package/lib/components/grid/CubeGridValues.js.map +1 -1
  252. package/lib/components/grid/CubeResultGrid.d.ts +14 -1
  253. package/lib/components/grid/CubeResultGrid.d.ts.map +1 -1
  254. package/lib/components/grid/CubeResultGrid.js +55 -7
  255. package/lib/components/grid/CubeResultGrid.js.map +1 -1
  256. package/lib/components/palette/CubePalette.d.ts.map +1 -1
  257. package/lib/components/palette/CubePalette.js +23 -12
  258. package/lib/components/palette/CubePalette.js.map +1 -1
  259. package/lib/components/source-picker/CubeDataProductTab.d.ts +27 -0
  260. package/lib/components/source-picker/CubeDataProductTab.d.ts.map +1 -0
  261. package/lib/components/source-picker/CubeDataProductTab.js +102 -0
  262. package/lib/components/source-picker/CubeDataProductTab.js.map +1 -0
  263. package/lib/components/source-picker/CubeDirectConnectionTab.d.ts +27 -0
  264. package/lib/components/source-picker/CubeDirectConnectionTab.d.ts.map +1 -0
  265. package/lib/components/source-picker/CubeDirectConnectionTab.js +87 -0
  266. package/lib/components/source-picker/CubeDirectConnectionTab.js.map +1 -0
  267. package/lib/components/source-picker/CubeIngestTab.d.ts +28 -0
  268. package/lib/components/source-picker/CubeIngestTab.d.ts.map +1 -0
  269. package/lib/components/source-picker/CubeIngestTab.js +66 -0
  270. package/lib/components/source-picker/CubeIngestTab.js.map +1 -0
  271. package/lib/components/source-picker/CubeInlineModelTab.d.ts +37 -0
  272. package/lib/components/source-picker/CubeInlineModelTab.d.ts.map +1 -0
  273. package/lib/components/source-picker/CubeInlineModelTab.js +71 -0
  274. package/lib/components/source-picker/CubeInlineModelTab.js.map +1 -0
  275. package/lib/components/source-picker/CubePickerStep.d.ts +27 -0
  276. package/lib/components/source-picker/CubePickerStep.d.ts.map +1 -0
  277. package/lib/components/source-picker/CubePickerStep.js +23 -0
  278. package/lib/components/source-picker/CubePickerStep.js.map +1 -0
  279. package/lib/components/source-picker/CubeProjectTab.d.ts +27 -0
  280. package/lib/components/source-picker/CubeProjectTab.d.ts.map +1 -0
  281. package/lib/components/source-picker/CubeProjectTab.js +50 -0
  282. package/lib/components/source-picker/CubeProjectTab.js.map +1 -0
  283. package/lib/components/source-picker/CubeSourcePicker.d.ts +6 -0
  284. package/lib/components/source-picker/CubeSourcePicker.d.ts.map +1 -1
  285. package/lib/components/source-picker/CubeSourcePicker.js +20 -58
  286. package/lib/components/source-picker/CubeSourcePicker.js.map +1 -1
  287. package/lib/components/spec-transfer/CubeSpecTransferDialog.js +1 -1
  288. package/lib/components/spec-transfer/CubeSpecTransferDialog.js.map +1 -1
  289. package/lib/graph-manager/CubeConnectionExplorer.d.ts +90 -0
  290. package/lib/graph-manager/CubeConnectionExplorer.d.ts.map +1 -0
  291. package/lib/graph-manager/CubeConnectionExplorer.js +34 -0
  292. package/lib/graph-manager/CubeConnectionExplorer.js.map +1 -0
  293. package/lib/graph-manager/CubeDataProduct.d.ts +66 -0
  294. package/lib/graph-manager/CubeDataProduct.d.ts.map +1 -0
  295. package/lib/graph-manager/CubeDataProduct.js +102 -0
  296. package/lib/graph-manager/CubeDataProduct.js.map +1 -0
  297. package/lib/graph-manager/CubeDataProductCatalog.d.ts +167 -0
  298. package/lib/graph-manager/CubeDataProductCatalog.d.ts.map +1 -0
  299. package/lib/graph-manager/CubeDataProductCatalog.js +116 -0
  300. package/lib/graph-manager/CubeDataProductCatalog.js.map +1 -0
  301. package/lib/graph-manager/CubeDirectConnection.d.ts +38 -0
  302. package/lib/graph-manager/CubeDirectConnection.d.ts.map +1 -0
  303. package/lib/graph-manager/CubeDirectConnection.js +48 -0
  304. package/lib/graph-manager/CubeDirectConnection.js.map +1 -0
  305. package/lib/graph-manager/CubeEngine.d.ts +50 -2
  306. package/lib/graph-manager/CubeEngine.d.ts.map +1 -1
  307. package/lib/graph-manager/CubeEngine.js +4 -1
  308. package/lib/graph-manager/CubeEngine.js.map +1 -1
  309. package/lib/graph-manager/CubeIngest.d.ts +50 -0
  310. package/lib/graph-manager/CubeIngest.d.ts.map +1 -0
  311. package/lib/graph-manager/CubeIngest.js +88 -0
  312. package/lib/graph-manager/CubeIngest.js.map +1 -0
  313. package/lib/graph-manager/CubeIngestCatalog.d.ts +116 -0
  314. package/lib/graph-manager/CubeIngestCatalog.d.ts.map +1 -0
  315. package/lib/graph-manager/CubeIngestCatalog.js +80 -0
  316. package/lib/graph-manager/CubeIngestCatalog.js.map +1 -0
  317. package/lib/graph-manager/CubeLakehouseEnvironment.d.ts +26 -0
  318. package/lib/graph-manager/CubeLakehouseEnvironment.d.ts.map +1 -0
  319. package/lib/graph-manager/CubeLakehouseEnvironment.js +17 -0
  320. package/lib/graph-manager/CubeLakehouseEnvironment.js.map +1 -0
  321. package/lib/graph-manager/CubeModelOutlineHelper.d.ts +8 -0
  322. package/lib/graph-manager/CubeModelOutlineHelper.d.ts.map +1 -1
  323. package/lib/graph-manager/CubeModelOutlineHelper.js +21 -0
  324. package/lib/graph-manager/CubeModelOutlineHelper.js.map +1 -1
  325. package/lib/graph-manager/CubeProject.d.ts +41 -0
  326. package/lib/graph-manager/CubeProject.d.ts.map +1 -0
  327. package/lib/graph-manager/CubeProject.js +84 -0
  328. package/lib/graph-manager/CubeProject.js.map +1 -0
  329. package/lib/graph-manager/CubeProjectCatalog.d.ts +35 -0
  330. package/lib/graph-manager/CubeProjectCatalog.d.ts.map +1 -0
  331. package/lib/graph-manager/CubeProjectCatalog.js +17 -0
  332. package/lib/graph-manager/CubeProjectCatalog.js.map +1 -0
  333. package/lib/graph-manager/protocol/pure/CubeEngineBuilder.d.ts +63 -1
  334. package/lib/graph-manager/protocol/pure/CubeEngineBuilder.d.ts.map +1 -1
  335. package/lib/graph-manager/protocol/pure/CubeEngineBuilder.js +50 -1
  336. package/lib/graph-manager/protocol/pure/CubeEngineBuilder.js.map +1 -1
  337. package/lib/graph-manager/protocol/pure/v1/V1_CubeDataProductArtifact.d.ts +44 -0
  338. package/lib/graph-manager/protocol/pure/v1/V1_CubeDataProductArtifact.d.ts.map +1 -0
  339. package/lib/graph-manager/protocol/pure/v1/V1_CubeDataProductArtifact.js +192 -0
  340. package/lib/graph-manager/protocol/pure/v1/V1_CubeDataProductArtifact.js.map +1 -0
  341. package/lib/graph-manager/protocol/pure/v1/V1_CubeDataProductModel.d.ts +29 -0
  342. package/lib/graph-manager/protocol/pure/v1/V1_CubeDataProductModel.d.ts.map +1 -0
  343. package/lib/graph-manager/protocol/pure/v1/V1_CubeDataProductModel.js +84 -0
  344. package/lib/graph-manager/protocol/pure/v1/V1_CubeDataProductModel.js.map +1 -0
  345. package/lib/graph-manager/protocol/pure/v1/V1_CubeDirectConnection.d.ts +41 -0
  346. package/lib/graph-manager/protocol/pure/v1/V1_CubeDirectConnection.d.ts.map +1 -0
  347. package/lib/graph-manager/protocol/pure/v1/V1_CubeDirectConnection.js +246 -0
  348. package/lib/graph-manager/protocol/pure/v1/V1_CubeDirectConnection.js.map +1 -0
  349. package/lib/graph-manager/protocol/pure/v1/V1_CubeDirectModel.d.ts +43 -0
  350. package/lib/graph-manager/protocol/pure/v1/V1_CubeDirectModel.d.ts.map +1 -0
  351. package/lib/graph-manager/protocol/pure/v1/V1_CubeDirectModel.js +112 -0
  352. package/lib/graph-manager/protocol/pure/v1/V1_CubeDirectModel.js.map +1 -0
  353. package/lib/graph-manager/protocol/pure/v1/V1_CubeEngineErrors.d.ts.map +1 -1
  354. package/lib/graph-manager/protocol/pure/v1/V1_CubeEngineErrors.js +30 -4
  355. package/lib/graph-manager/protocol/pure/v1/V1_CubeEngineErrors.js.map +1 -1
  356. package/lib/graph-manager/protocol/pure/v1/V1_CubeExpression.d.ts +23 -0
  357. package/lib/graph-manager/protocol/pure/v1/V1_CubeExpression.d.ts.map +1 -0
  358. package/lib/graph-manager/protocol/pure/v1/V1_CubeExpression.js +68 -0
  359. package/lib/graph-manager/protocol/pure/v1/V1_CubeExpression.js.map +1 -0
  360. package/lib/graph-manager/protocol/pure/v1/V1_CubeIngestDefinition.d.ts +30 -0
  361. package/lib/graph-manager/protocol/pure/v1/V1_CubeIngestDefinition.d.ts.map +1 -0
  362. package/lib/graph-manager/protocol/pure/v1/V1_CubeIngestDefinition.js +140 -0
  363. package/lib/graph-manager/protocol/pure/v1/V1_CubeIngestDefinition.js.map +1 -0
  364. package/lib/graph-manager/protocol/pure/v1/V1_CubeIngestModel.d.ts +62 -0
  365. package/lib/graph-manager/protocol/pure/v1/V1_CubeIngestModel.d.ts.map +1 -0
  366. package/lib/graph-manager/protocol/pure/v1/V1_CubeIngestModel.js +119 -0
  367. package/lib/graph-manager/protocol/pure/v1/V1_CubeIngestModel.js.map +1 -0
  368. package/lib/graph-manager/protocol/pure/v1/V1_CubeLakehouseEnvironmentResolver.d.ts +33 -0
  369. package/lib/graph-manager/protocol/pure/v1/V1_CubeLakehouseEnvironmentResolver.d.ts.map +1 -0
  370. package/lib/graph-manager/protocol/pure/v1/V1_CubeLakehouseEnvironmentResolver.js +94 -0
  371. package/lib/graph-manager/protocol/pure/v1/V1_CubeLakehouseEnvironmentResolver.js.map +1 -0
  372. package/lib/graph-manager/protocol/pure/v1/V1_CubeLambdaSerializer.d.ts.map +1 -1
  373. package/lib/graph-manager/protocol/pure/v1/V1_CubeLambdaSerializer.js +63 -4
  374. package/lib/graph-manager/protocol/pure/v1/V1_CubeLambdaSerializer.js.map +1 -1
  375. package/lib/graph-manager/protocol/pure/v1/V1_CubeModelOutlineBuilder.d.ts.map +1 -1
  376. package/lib/graph-manager/protocol/pure/v1/V1_CubeModelOutlineBuilder.js +56 -3
  377. package/lib/graph-manager/protocol/pure/v1/V1_CubeModelOutlineBuilder.js.map +1 -1
  378. package/lib/graph-manager/protocol/pure/v1/V1_CubeSchemaExploration.d.ts +67 -0
  379. package/lib/graph-manager/protocol/pure/v1/V1_CubeSchemaExploration.d.ts.map +1 -0
  380. package/lib/graph-manager/protocol/pure/v1/V1_CubeSchemaExploration.js +238 -0
  381. package/lib/graph-manager/protocol/pure/v1/V1_CubeSchemaExploration.js.map +1 -0
  382. package/lib/graph-manager/protocol/pure/v1/V1_LegendCubeConnectionExplorer.d.ts +34 -0
  383. package/lib/graph-manager/protocol/pure/v1/V1_LegendCubeConnectionExplorer.d.ts.map +1 -0
  384. package/lib/graph-manager/protocol/pure/v1/V1_LegendCubeConnectionExplorer.js +64 -0
  385. package/lib/graph-manager/protocol/pure/v1/V1_LegendCubeConnectionExplorer.js.map +1 -0
  386. package/lib/graph-manager/protocol/pure/v1/V1_LegendCubeDataProductCatalog.d.ts +104 -0
  387. package/lib/graph-manager/protocol/pure/v1/V1_LegendCubeDataProductCatalog.d.ts.map +1 -0
  388. package/lib/graph-manager/protocol/pure/v1/V1_LegendCubeDataProductCatalog.js +484 -0
  389. package/lib/graph-manager/protocol/pure/v1/V1_LegendCubeDataProductCatalog.js.map +1 -0
  390. package/lib/graph-manager/protocol/pure/v1/V1_LegendCubeEngine.d.ts +97 -3
  391. package/lib/graph-manager/protocol/pure/v1/V1_LegendCubeEngine.d.ts.map +1 -1
  392. package/lib/graph-manager/protocol/pure/v1/V1_LegendCubeEngine.js +585 -20
  393. package/lib/graph-manager/protocol/pure/v1/V1_LegendCubeEngine.js.map +1 -1
  394. package/lib/graph-manager/protocol/pure/v1/V1_LegendCubeIngestCatalog.d.ts +69 -0
  395. package/lib/graph-manager/protocol/pure/v1/V1_LegendCubeIngestCatalog.d.ts.map +1 -0
  396. package/lib/graph-manager/protocol/pure/v1/V1_LegendCubeIngestCatalog.js +270 -0
  397. package/lib/graph-manager/protocol/pure/v1/V1_LegendCubeIngestCatalog.js.map +1 -0
  398. package/lib/graph-manager/protocol/pure/v1/V1_LegendCubeProjectCatalog.d.ts +35 -0
  399. package/lib/graph-manager/protocol/pure/v1/V1_LegendCubeProjectCatalog.d.ts.map +1 -0
  400. package/lib/graph-manager/protocol/pure/v1/V1_LegendCubeProjectCatalog.js +91 -0
  401. package/lib/graph-manager/protocol/pure/v1/V1_LegendCubeProjectCatalog.js.map +1 -0
  402. package/lib/graph-manager/protocol/pure/v1/__test-utils__/V1_CubeConnectionExplorerTestUtils.d.ts +25 -0
  403. package/lib/graph-manager/protocol/pure/v1/__test-utils__/V1_CubeConnectionExplorerTestUtils.d.ts.map +1 -0
  404. package/lib/graph-manager/protocol/pure/v1/__test-utils__/V1_CubeConnectionExplorerTestUtils.js +47 -0
  405. package/lib/graph-manager/protocol/pure/v1/__test-utils__/V1_CubeConnectionExplorerTestUtils.js.map +1 -0
  406. package/lib/graph-manager/protocol/pure/v1/__test-utils__/V1_CubeDataProductFixtures.d.ts +28 -0
  407. package/lib/graph-manager/protocol/pure/v1/__test-utils__/V1_CubeDataProductFixtures.d.ts.map +1 -0
  408. package/lib/graph-manager/protocol/pure/v1/__test-utils__/V1_CubeDataProductFixtures.js +310 -0
  409. package/lib/graph-manager/protocol/pure/v1/__test-utils__/V1_CubeDataProductFixtures.js.map +1 -0
  410. package/lib/graph-manager/protocol/pure/v1/__test-utils__/V1_CubeDataProductSearchFixtures.d.ts +33 -0
  411. package/lib/graph-manager/protocol/pure/v1/__test-utils__/V1_CubeDataProductSearchFixtures.d.ts.map +1 -0
  412. package/lib/graph-manager/protocol/pure/v1/__test-utils__/V1_CubeDataProductSearchFixtures.js +188 -0
  413. package/lib/graph-manager/protocol/pure/v1/__test-utils__/V1_CubeDataProductSearchFixtures.js.map +1 -0
  414. package/lib/graph-manager/protocol/pure/v1/__test-utils__/V1_CubeEngineTestUtils.d.ts +1 -1
  415. package/lib/graph-manager/protocol/pure/v1/__test-utils__/V1_CubeEngineTestUtils.d.ts.map +1 -1
  416. package/lib/graph-manager/protocol/pure/v1/__test-utils__/V1_CubeEngineTestUtils.js +30 -4
  417. package/lib/graph-manager/protocol/pure/v1/__test-utils__/V1_CubeEngineTestUtils.js.map +1 -1
  418. package/lib/index.css +2 -2
  419. package/lib/index.css.map +1 -1
  420. package/lib/index.d.ts +11 -1
  421. package/lib/index.d.ts.map +1 -1
  422. package/lib/index.js +10 -1
  423. package/lib/index.js.map +1 -1
  424. package/lib/stores/CubeAddPlacement.d.ts +32 -0
  425. package/lib/stores/CubeAddPlacement.d.ts.map +1 -0
  426. package/lib/stores/CubeAddPlacement.js +40 -0
  427. package/lib/stores/CubeAddPlacement.js.map +1 -0
  428. package/lib/stores/CubeDataProductRecheck.d.ts +27 -0
  429. package/lib/stores/CubeDataProductRecheck.d.ts.map +1 -0
  430. package/lib/stores/CubeDataProductRecheck.js +54 -0
  431. package/lib/stores/CubeDataProductRecheck.js.map +1 -0
  432. package/lib/stores/CubeDataProductRuntimeState.d.ts +88 -0
  433. package/lib/stores/CubeDataProductRuntimeState.d.ts.map +1 -0
  434. package/lib/stores/CubeDataProductRuntimeState.js +190 -0
  435. package/lib/stores/CubeDataProductRuntimeState.js.map +1 -0
  436. package/lib/stores/CubeDataProductWarehouse.d.ts +19 -0
  437. package/lib/stores/CubeDataProductWarehouse.d.ts.map +1 -0
  438. package/lib/stores/CubeDataProductWarehouse.js +25 -0
  439. package/lib/stores/CubeDataProductWarehouse.js.map +1 -0
  440. package/lib/stores/CubeEditorState.d.ts +133 -19
  441. package/lib/stores/CubeEditorState.d.ts.map +1 -1
  442. package/lib/stores/CubeEditorState.js +433 -52
  443. package/lib/stores/CubeEditorState.js.map +1 -1
  444. package/lib/stores/CubeEntrySource.d.ts +78 -0
  445. package/lib/stores/CubeEntrySource.d.ts.map +1 -0
  446. package/lib/stores/CubeEntrySource.js +200 -0
  447. package/lib/stores/CubeEntrySource.js.map +1 -0
  448. package/lib/stores/CubeExamples.d.ts +43 -0
  449. package/lib/stores/CubeExamples.d.ts.map +1 -0
  450. package/lib/stores/CubeExamples.js +296 -0
  451. package/lib/stores/CubeExamples.js.map +1 -0
  452. package/lib/stores/CubeExamplesState.d.ts +45 -0
  453. package/lib/stores/CubeExamplesState.d.ts.map +1 -0
  454. package/lib/stores/CubeExamplesState.js +81 -0
  455. package/lib/stores/CubeExamplesState.js.map +1 -0
  456. package/lib/stores/CubeExecutionState.d.ts +6 -2
  457. package/lib/stores/CubeExecutionState.d.ts.map +1 -1
  458. package/lib/stores/CubeExecutionState.js +34 -8
  459. package/lib/stores/CubeExecutionState.js.map +1 -1
  460. package/lib/stores/CubeExtendTyping.d.ts +72 -0
  461. package/lib/stores/CubeExtendTyping.d.ts.map +1 -0
  462. package/lib/stores/CubeExtendTyping.js +176 -0
  463. package/lib/stores/CubeExtendTyping.js.map +1 -0
  464. package/lib/stores/CubeGridQuickActions.d.ts +48 -0
  465. package/lib/stores/CubeGridQuickActions.d.ts.map +1 -0
  466. package/lib/stores/CubeGridQuickActions.js +124 -0
  467. package/lib/stores/CubeGridQuickActions.js.map +1 -0
  468. package/lib/stores/CubeHost.d.ts +32 -1
  469. package/lib/stores/CubeHost.d.ts.map +1 -1
  470. package/lib/stores/CubeHost.js +21 -1
  471. package/lib/stores/CubeHost.js.map +1 -1
  472. package/lib/stores/CubeIngestRecheck.d.ts +26 -0
  473. package/lib/stores/CubeIngestRecheck.d.ts.map +1 -0
  474. package/lib/stores/CubeIngestRecheck.js +53 -0
  475. package/lib/stores/CubeIngestRecheck.js.map +1 -0
  476. package/lib/stores/CubeNodeEditorState.d.ts +120 -6
  477. package/lib/stores/CubeNodeEditorState.d.ts.map +1 -1
  478. package/lib/stores/CubeNodeEditorState.js +275 -9
  479. package/lib/stores/CubeNodeEditorState.js.map +1 -1
  480. package/lib/stores/CubeShowPureState.d.ts +9 -3
  481. package/lib/stores/CubeShowPureState.d.ts.map +1 -1
  482. package/lib/stores/CubeShowPureState.js +28 -8
  483. package/lib/stores/CubeShowPureState.js.map +1 -1
  484. package/lib/stores/CubeSourcePickerState.d.ts +54 -65
  485. package/lib/stores/CubeSourcePickerState.d.ts.map +1 -1
  486. package/lib/stores/CubeSourcePickerState.js +155 -276
  487. package/lib/stores/CubeSourcePickerState.js.map +1 -1
  488. package/lib/stores/CubeSpecTransferState.d.ts +2 -2
  489. package/lib/stores/CubeSpecTransferState.js +2 -2
  490. package/lib/stores/LocalModelCatalog.d.ts +2 -0
  491. package/lib/stores/LocalModelCatalog.d.ts.map +1 -1
  492. package/lib/stores/LocalModelCatalog.js +17 -3
  493. package/lib/stores/LocalModelCatalog.js.map +1 -1
  494. package/lib/stores/editors/CubeAggregationRows.d.ts +80 -0
  495. package/lib/stores/editors/CubeAggregationRows.d.ts.map +1 -0
  496. package/lib/stores/editors/CubeAggregationRows.js +164 -0
  497. package/lib/stores/editors/CubeAggregationRows.js.map +1 -0
  498. package/lib/stores/editors/CubeConcatDraft.d.ts +30 -0
  499. package/lib/stores/editors/CubeConcatDraft.d.ts.map +1 -0
  500. package/lib/stores/editors/CubeConcatDraft.js +44 -0
  501. package/lib/stores/editors/CubeConcatDraft.js.map +1 -0
  502. package/lib/stores/editors/CubeDifferenceDraft.d.ts +49 -0
  503. package/lib/stores/editors/CubeDifferenceDraft.d.ts.map +1 -0
  504. package/lib/stores/editors/CubeDifferenceDraft.js +111 -0
  505. package/lib/stores/editors/CubeDifferenceDraft.js.map +1 -0
  506. package/lib/stores/editors/CubeExtendDraft.d.ts +110 -0
  507. package/lib/stores/editors/CubeExtendDraft.d.ts.map +1 -0
  508. package/lib/stores/editors/CubeExtendDraft.js +359 -0
  509. package/lib/stores/editors/CubeExtendDraft.js.map +1 -0
  510. package/lib/stores/editors/CubeGroupDraft.d.ts +61 -0
  511. package/lib/stores/editors/CubeGroupDraft.d.ts.map +1 -0
  512. package/lib/stores/editors/CubeGroupDraft.js +106 -0
  513. package/lib/stores/editors/CubeGroupDraft.js.map +1 -0
  514. package/lib/stores/editors/CubeIntegerText.d.ts +24 -0
  515. package/lib/stores/editors/CubeIntegerText.d.ts.map +1 -0
  516. package/lib/stores/editors/CubeIntegerText.js +33 -0
  517. package/lib/stores/editors/CubeIntegerText.js.map +1 -0
  518. package/lib/stores/editors/CubeJoinDraft.d.ts +20 -13
  519. package/lib/stores/editors/CubeJoinDraft.d.ts.map +1 -1
  520. package/lib/stores/editors/CubeJoinDraft.js +109 -29
  521. package/lib/stores/editors/CubeJoinDraft.js.map +1 -1
  522. package/lib/stores/editors/CubeJoinKeyPairs.d.ts +38 -0
  523. package/lib/stores/editors/CubeJoinKeyPairs.d.ts.map +1 -0
  524. package/lib/stores/editors/CubeJoinKeyPairs.js +33 -0
  525. package/lib/stores/editors/CubeJoinKeyPairs.js.map +1 -0
  526. package/lib/stores/editors/CubeNodeDraft.d.ts +20 -6
  527. package/lib/stores/editors/CubeNodeDraft.d.ts.map +1 -1
  528. package/lib/stores/editors/CubeNodeDraft.js +23 -5
  529. package/lib/stores/editors/CubeNodeDraft.js.map +1 -1
  530. package/lib/stores/editors/CubeNodeDraftRegistry.d.ts +6 -0
  531. package/lib/stores/editors/CubeNodeDraftRegistry.d.ts.map +1 -1
  532. package/lib/stores/editors/CubeNodeDraftRegistry.js +42 -1
  533. package/lib/stores/editors/CubeNodeDraftRegistry.js.map +1 -1
  534. package/lib/stores/editors/CubePartitionDraft.d.ts +70 -0
  535. package/lib/stores/editors/CubePartitionDraft.d.ts.map +1 -0
  536. package/lib/stores/editors/CubePartitionDraft.js +154 -0
  537. package/lib/stores/editors/CubePartitionDraft.js.map +1 -0
  538. package/lib/stores/editors/CubeRenameDraft.d.ts +44 -0
  539. package/lib/stores/editors/CubeRenameDraft.d.ts.map +1 -0
  540. package/lib/stores/editors/CubeRenameDraft.js +79 -0
  541. package/lib/stores/editors/CubeRenameDraft.js.map +1 -0
  542. package/lib/stores/editors/CubeRestrictDraft.d.ts +37 -0
  543. package/lib/stores/editors/CubeRestrictDraft.d.ts.map +1 -0
  544. package/lib/stores/editors/CubeRestrictDraft.js +73 -0
  545. package/lib/stores/editors/CubeRestrictDraft.js.map +1 -0
  546. package/lib/stores/editors/CubeRowCountDraft.d.ts +42 -0
  547. package/lib/stores/editors/CubeRowCountDraft.d.ts.map +1 -0
  548. package/lib/stores/editors/CubeRowCountDraft.js +55 -0
  549. package/lib/stores/editors/CubeRowCountDraft.js.map +1 -0
  550. package/lib/stores/editors/CubeSliceDraft.d.ts +42 -0
  551. package/lib/stores/editors/CubeSliceDraft.d.ts.map +1 -0
  552. package/lib/stores/editors/CubeSliceDraft.js +72 -0
  553. package/lib/stores/editors/CubeSliceDraft.js.map +1 -0
  554. package/lib/stores/editors/CubeSortDraft.d.ts +41 -0
  555. package/lib/stores/editors/CubeSortDraft.d.ts.map +1 -0
  556. package/lib/stores/editors/CubeSortDraft.js +73 -0
  557. package/lib/stores/editors/CubeSortDraft.js.map +1 -0
  558. package/lib/stores/editors/CubeSortRows.d.ts +34 -0
  559. package/lib/stores/editors/CubeSortRows.d.ts.map +1 -0
  560. package/lib/stores/editors/CubeSortRows.js +50 -0
  561. package/lib/stores/editors/CubeSortRows.js.map +1 -0
  562. package/lib/stores/fixtures/CubeNorthwindModel.d.ts +7 -0
  563. package/lib/stores/fixtures/CubeNorthwindModel.d.ts.map +1 -1
  564. package/lib/stores/fixtures/CubeNorthwindModel.js +99 -87
  565. package/lib/stores/fixtures/CubeNorthwindModel.js.map +1 -1
  566. package/lib/stores/fixtures/CubeSampleSql.d.ts +34 -0
  567. package/lib/stores/fixtures/CubeSampleSql.d.ts.map +1 -0
  568. package/lib/stores/fixtures/CubeSampleSql.js +64 -0
  569. package/lib/stores/fixtures/CubeSampleSql.js.map +1 -0
  570. package/lib/stores/fixtures/CubeSportsModel.d.ts +27 -0
  571. package/lib/stores/fixtures/CubeSportsModel.d.ts.map +1 -0
  572. package/lib/stores/fixtures/CubeSportsModel.js +158 -0
  573. package/lib/stores/fixtures/CubeSportsModel.js.map +1 -0
  574. package/lib/stores/fixtures/CubeTradesModel.d.ts +29 -0
  575. package/lib/stores/fixtures/CubeTradesModel.d.ts.map +1 -0
  576. package/lib/stores/fixtures/CubeTradesModel.js +197 -0
  577. package/lib/stores/fixtures/CubeTradesModel.js.map +1 -0
  578. package/lib/stores/source-picker/CubeCsvSetupSql.d.ts +71 -0
  579. package/lib/stores/source-picker/CubeCsvSetupSql.d.ts.map +1 -0
  580. package/lib/stores/source-picker/CubeCsvSetupSql.js +392 -0
  581. package/lib/stores/source-picker/CubeCsvSetupSql.js.map +1 -0
  582. package/lib/stores/source-picker/CubeDataProductTabState.d.ts +186 -0
  583. package/lib/stores/source-picker/CubeDataProductTabState.d.ts.map +1 -0
  584. package/lib/stores/source-picker/CubeDataProductTabState.js +681 -0
  585. package/lib/stores/source-picker/CubeDataProductTabState.js.map +1 -0
  586. package/lib/stores/source-picker/CubeDirectConnectionTabState.d.ts +140 -0
  587. package/lib/stores/source-picker/CubeDirectConnectionTabState.d.ts.map +1 -0
  588. package/lib/stores/source-picker/CubeDirectConnectionTabState.js +516 -0
  589. package/lib/stores/source-picker/CubeDirectConnectionTabState.js.map +1 -0
  590. package/lib/stores/source-picker/CubeIngestTabState.d.ts +114 -0
  591. package/lib/stores/source-picker/CubeIngestTabState.d.ts.map +1 -0
  592. package/lib/stores/source-picker/CubeIngestTabState.js +455 -0
  593. package/lib/stores/source-picker/CubeIngestTabState.js.map +1 -0
  594. package/lib/stores/source-picker/CubeInlineModelTabState.d.ts +107 -0
  595. package/lib/stores/source-picker/CubeInlineModelTabState.d.ts.map +1 -0
  596. package/lib/stores/source-picker/CubeInlineModelTabState.js +347 -0
  597. package/lib/stores/source-picker/CubeInlineModelTabState.js.map +1 -0
  598. package/lib/stores/source-picker/CubeProjectTabState.d.ts +62 -0
  599. package/lib/stores/source-picker/CubeProjectTabState.d.ts.map +1 -0
  600. package/lib/stores/source-picker/CubeProjectTabState.js +181 -0
  601. package/lib/stores/source-picker/CubeProjectTabState.js.map +1 -0
  602. package/lib/stores/source-picker/CubeSourcePickerTab.d.ts +48 -0
  603. package/lib/stores/source-picker/CubeSourcePickerTab.d.ts.map +1 -0
  604. package/lib/stores/source-picker/CubeSourcePickerTab.js +24 -0
  605. package/lib/stores/source-picker/CubeSourcePickerTab.js.map +1 -0
  606. package/package.json +12 -8
  607. package/src/__lib__/LegendCubeCommand.ts +5 -0
  608. package/src/__lib__/LegendCubeDataProductLabels.ts +91 -0
  609. package/src/__lib__/LegendCubeDirectConnectionLabels.ts +111 -0
  610. package/src/__lib__/LegendCubeHelpText.ts +46 -2
  611. package/src/__lib__/LegendCubeIngestLabels.ts +40 -0
  612. package/src/__lib__/LegendCubeLabels.ts +192 -4
  613. package/src/__lib__/LegendCubeProjectLabels.ts +25 -0
  614. package/src/__lib__/LegendCubeTesting.ts +1 -0
  615. package/src/__test-utils__/CubeCanvasTestUtils.ts +1 -1
  616. package/src/__test-utils__/CubeConnectionTestSupport.ts +45 -0
  617. package/src/__test-utils__/CubeDirectConnectionFixtures.ts +70 -0
  618. package/src/__test-utils__/CubeEngineTestSupport.ts +73 -0
  619. package/src/__test-utils__/CubeExpressionTestUtils.ts +119 -0
  620. package/src/__test-utils__/CubeOperationsTestUtils.ts +252 -0
  621. package/src/__test-utils__/CubePageTestUtils.tsx +35 -0
  622. package/src/__test-utils__/CubeTestApplication.ts +21 -2
  623. package/src/__test-utils__/FakeCubeConnectionExplorer.ts +111 -0
  624. package/src/__test-utils__/FakeCubeDataProductCatalog.ts +227 -0
  625. package/src/__test-utils__/FakeCubeEngine.ts +32 -2
  626. package/src/__test-utils__/FakeCubeIngestCatalog.ts +180 -0
  627. package/src/__test-utils__/FakeCubeProjectCatalog.ts +89 -0
  628. package/src/components/CubeAddItems.tsx +179 -0
  629. package/src/components/CubeEditor.tsx +73 -44
  630. package/src/components/CubeEntrySourceBanner.tsx +64 -0
  631. package/src/components/CubeNodeIcon.tsx +31 -1
  632. package/src/components/CubeSchemaColumnsTable.tsx +49 -0
  633. package/src/components/canvas/CubeCanvas.tsx +51 -14
  634. package/src/components/canvas/CubeCanvasContextMenu.tsx +31 -30
  635. package/src/components/canvas/CubeCanvasDnd.ts +16 -9
  636. package/src/components/canvas/CubeCanvasElements.ts +12 -3
  637. package/src/components/canvas/CubeCanvasNode.tsx +62 -36
  638. package/src/components/canvas/CubeCanvasNodeFocus.ts +37 -0
  639. package/src/components/canvas/CubeNodeEditorAnchor.ts +82 -0
  640. package/src/components/editors/CubeAggregationRowEditor.tsx +224 -0
  641. package/src/components/editors/CubeColumnChecklist.tsx +130 -0
  642. package/src/components/editors/CubeColumnPicker.tsx +36 -12
  643. package/src/components/editors/CubeConcatEditor.tsx +374 -0
  644. package/src/components/editors/CubeDataProductSourceEditor.tsx +134 -0
  645. package/src/components/editors/CubeDifferenceEditor.tsx +87 -0
  646. package/src/components/editors/CubeDistinctEditor.tsx +28 -0
  647. package/src/components/editors/CubeExtendEditor.tsx +271 -0
  648. package/src/components/editors/CubeFilterEditor.tsx +7 -0
  649. package/src/components/editors/CubeGroupEditor.tsx +135 -0
  650. package/src/components/editors/CubeIngestSourceEditor.tsx +104 -0
  651. package/src/components/editors/CubeIntegerField.tsx +51 -0
  652. package/src/components/editors/CubeJoinEditor.tsx +34 -131
  653. package/src/components/editors/CubeJoinKeyRows.tsx +183 -0
  654. package/src/components/editors/CubeNodeEditorPanel.tsx +103 -29
  655. package/src/components/editors/CubeNodeEditorPopper.tsx +183 -0
  656. package/src/components/editors/CubeNodeEditorRegistry.ts +41 -0
  657. package/src/components/editors/CubePartitionEditor.tsx +208 -0
  658. package/src/components/editors/CubeRenameEditor.tsx +148 -0
  659. package/src/components/editors/CubeRestrictEditor.tsx +103 -0
  660. package/src/components/editors/CubeRowCountEditor.tsx +53 -0
  661. package/src/components/editors/CubeSliceEditor.tsx +69 -0
  662. package/src/components/editors/CubeSortEditor.tsx +84 -0
  663. package/src/components/editors/CubeSortRowEditor.tsx +176 -0
  664. package/src/components/editors/CubeSourceEditor.tsx +42 -40
  665. package/src/components/editors/CubeValueEditor.tsx +2 -1
  666. package/src/components/editors/CubeWarehouseControl.tsx +113 -0
  667. package/src/components/editors/useCubeNodeEditorDismiss.ts +103 -0
  668. package/src/components/examples/CubeExamplesDialog.tsx +199 -0
  669. package/src/components/grid/CubeGridRegion.tsx +49 -10
  670. package/src/components/grid/CubeGridValues.ts +55 -0
  671. package/src/components/grid/CubeResultGrid.tsx +83 -13
  672. package/src/components/palette/CubePalette.tsx +33 -15
  673. package/src/components/source-picker/CubeDataProductTab.tsx +392 -0
  674. package/src/components/source-picker/CubeDirectConnectionTab.tsx +340 -0
  675. package/src/components/source-picker/CubeIngestTab.tsx +232 -0
  676. package/src/components/source-picker/CubeInlineModelTab.tsx +191 -0
  677. package/src/components/source-picker/CubePickerStep.tsx +49 -0
  678. package/src/components/source-picker/CubeProjectTab.tsx +114 -0
  679. package/src/components/source-picker/CubeSourcePicker.tsx +62 -227
  680. package/src/components/spec-transfer/CubeSpecTransferDialog.tsx +1 -1
  681. package/src/graph-manager/CubeConnectionExplorer.ts +106 -0
  682. package/src/graph-manager/CubeDataProduct.ts +150 -0
  683. package/src/graph-manager/CubeDataProductCatalog.ts +245 -0
  684. package/src/graph-manager/CubeDirectConnection.ts +67 -0
  685. package/src/graph-manager/CubeEngine.ts +57 -1
  686. package/src/graph-manager/CubeIngest.ts +144 -0
  687. package/src/graph-manager/CubeIngestCatalog.ts +169 -0
  688. package/src/graph-manager/CubeLakehouseEnvironment.ts +27 -0
  689. package/src/graph-manager/CubeModelOutlineHelper.ts +26 -0
  690. package/src/graph-manager/CubeProject.ts +117 -0
  691. package/src/graph-manager/CubeProjectCatalog.ts +40 -0
  692. package/src/graph-manager/protocol/pure/CubeEngineBuilder.ts +145 -1
  693. package/src/graph-manager/protocol/pure/v1/V1_CubeDataProductArtifact.ts +251 -0
  694. package/src/graph-manager/protocol/pure/v1/V1_CubeDataProductModel.ts +101 -0
  695. package/src/graph-manager/protocol/pure/v1/V1_CubeDirectConnection.ts +339 -0
  696. package/src/graph-manager/protocol/pure/v1/V1_CubeDirectModel.ts +151 -0
  697. package/src/graph-manager/protocol/pure/v1/V1_CubeEngineErrors.ts +45 -4
  698. package/src/graph-manager/protocol/pure/v1/V1_CubeExpression.ts +89 -0
  699. package/src/graph-manager/protocol/pure/v1/V1_CubeIngestDefinition.ts +201 -0
  700. package/src/graph-manager/protocol/pure/v1/V1_CubeIngestModel.ts +183 -0
  701. package/src/graph-manager/protocol/pure/v1/V1_CubeLakehouseEnvironmentResolver.ts +141 -0
  702. package/src/graph-manager/protocol/pure/v1/V1_CubeLambdaSerializer.ts +84 -4
  703. package/src/graph-manager/protocol/pure/v1/V1_CubeModelOutlineBuilder.ts +89 -3
  704. package/src/graph-manager/protocol/pure/v1/V1_CubeSchemaExploration.ts +361 -0
  705. package/src/graph-manager/protocol/pure/v1/V1_LegendCubeConnectionExplorer.ts +116 -0
  706. package/src/graph-manager/protocol/pure/v1/V1_LegendCubeDataProductCatalog.ts +744 -0
  707. package/src/graph-manager/protocol/pure/v1/V1_LegendCubeEngine.ts +967 -24
  708. package/src/graph-manager/protocol/pure/v1/V1_LegendCubeIngestCatalog.ts +459 -0
  709. package/src/graph-manager/protocol/pure/v1/V1_LegendCubeProjectCatalog.ts +147 -0
  710. package/src/graph-manager/protocol/pure/v1/__test-utils__/V1_CubeConnectionExplorerTestUtils.ts +61 -0
  711. package/src/graph-manager/protocol/pure/v1/__test-utils__/V1_CubeDataProductFixtures.ts +337 -0
  712. package/src/graph-manager/protocol/pure/v1/__test-utils__/V1_CubeDataProductSearchFixtures.ts +206 -0
  713. package/src/graph-manager/protocol/pure/v1/__test-utils__/V1_CubeEngineTestUtils.ts +48 -4
  714. package/src/index.ts +20 -0
  715. package/src/stores/CubeAddPlacement.ts +67 -0
  716. package/src/stores/CubeDataProductRecheck.ts +93 -0
  717. package/src/stores/CubeDataProductRuntimeState.ts +256 -0
  718. package/src/stores/CubeDataProductWarehouse.ts +40 -0
  719. package/src/stores/CubeEditorState.ts +621 -68
  720. package/src/stores/CubeEntrySource.ts +278 -0
  721. package/src/stores/CubeExamples.ts +457 -0
  722. package/src/stores/CubeExamplesState.ts +108 -0
  723. package/src/stores/CubeExecutionState.ts +60 -8
  724. package/src/stores/CubeExtendTyping.ts +291 -0
  725. package/src/stores/CubeGridQuickActions.ts +184 -0
  726. package/src/stores/CubeHost.ts +71 -1
  727. package/src/stores/CubeIngestRecheck.ts +92 -0
  728. package/src/stores/CubeNodeEditorState.ts +348 -10
  729. package/src/stores/CubeShowPureState.ts +33 -8
  730. package/src/stores/CubeSourcePickerState.ts +160 -330
  731. package/src/stores/CubeSpecTransferState.ts +2 -2
  732. package/src/stores/LocalModelCatalog.ts +22 -3
  733. package/src/stores/editors/CubeAggregationRows.ts +299 -0
  734. package/src/stores/editors/CubeConcatDraft.ts +49 -0
  735. package/src/stores/editors/CubeDifferenceDraft.ts +147 -0
  736. package/src/stores/editors/CubeExtendDraft.ts +532 -0
  737. package/src/stores/editors/CubeGroupDraft.ts +145 -0
  738. package/src/stores/editors/CubeIntegerText.ts +34 -0
  739. package/src/stores/editors/CubeJoinDraft.ts +170 -54
  740. package/src/stores/editors/CubeJoinKeyPairs.ts +68 -0
  741. package/src/stores/editors/CubeNodeDraft.ts +26 -6
  742. package/src/stores/editors/CubeNodeDraftRegistry.ts +60 -1
  743. package/src/stores/editors/CubePartitionDraft.ts +214 -0
  744. package/src/stores/editors/CubeRenameDraft.ts +110 -0
  745. package/src/stores/editors/CubeRestrictDraft.ts +83 -0
  746. package/src/stores/editors/CubeRowCountDraft.ts +69 -0
  747. package/src/stores/editors/CubeSliceDraft.ts +87 -0
  748. package/src/stores/editors/CubeSortDraft.ts +98 -0
  749. package/src/stores/editors/CubeSortRows.ts +84 -0
  750. package/src/stores/fixtures/CubeNorthwindModel.ts +103 -88
  751. package/src/stores/fixtures/CubeSampleSql.ts +85 -0
  752. package/src/stores/fixtures/CubeSportsModel.ts +182 -0
  753. package/src/stores/fixtures/CubeTradesModel.ts +241 -0
  754. package/src/stores/source-picker/CubeCsvSetupSql.ts +444 -0
  755. package/src/stores/source-picker/CubeDataProductTabState.ts +839 -0
  756. package/src/stores/source-picker/CubeDirectConnectionTabState.ts +647 -0
  757. package/src/stores/source-picker/CubeIngestTabState.ts +551 -0
  758. package/src/stores/source-picker/CubeInlineModelTabState.ts +448 -0
  759. package/src/stores/source-picker/CubeProjectTabState.ts +218 -0
  760. package/src/stores/source-picker/CubeSourcePickerTab.ts +50 -0
  761. package/tsconfig.json +104 -0
@@ -13,12 +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, 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';
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';
21
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';
22
35
  import { CubeNodeEditorState } from './CubeNodeEditorState.js';
23
36
  import { CubeShowPureState } from './CubeShowPureState.js';
24
37
  import { CubeSourcePickerState } from './CubeSourcePickerState.js';
@@ -31,6 +44,8 @@ const isTypingText = () => {
31
44
  element instanceof HTMLTextAreaElement ||
32
45
  (element instanceof HTMLElement && element.isContentEditable));
33
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;
34
49
  /**
35
50
  * The state of one Cube page (PLAN §7.8). The document is immutable: every
36
51
  * edit makes a new one through `applyDocument`, which keeps the previous one
@@ -41,9 +56,14 @@ export class CubeEditorState {
41
56
  host;
42
57
  /** One registry for inference, emission and the saved spec */
43
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;
44
61
  execution;
62
+ /** Where a lakehouse cube runs, a data product's or an ingest one's: its class and warehouse */
63
+ dataProductRuntime;
45
64
  sourcePicker;
46
65
  specTransfer;
66
+ examples;
47
67
  showPure;
48
68
  nodeEditor;
49
69
  document;
@@ -64,6 +84,10 @@ export class CubeEditorState {
64
84
  modelOutlines = new Map();
65
85
  /** Sources sent to the engine to be typed again, until it answers */
66
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;
67
91
  /** The rows a run returns; kept per user, never in the cube */
68
92
  rowLimit;
69
93
  /** The palette shows icons only; kept per user, never in the cube */
@@ -80,6 +104,10 @@ export class CubeEditorState {
80
104
  constructor(host, document = new CubeDocument()) {
81
105
  makeObservable(this, {
82
106
  pendingSources: observable.ref,
107
+ typingExtends: observable.ref,
108
+ extendsToType: computed,
109
+ isTypingExtends: computed,
110
+ retypeExtends: flow,
83
111
  modelOutlines: observable.ref,
84
112
  modelOutline: computed,
85
113
  loadModelOutline: flow,
@@ -87,6 +115,7 @@ export class CubeEditorState {
87
115
  history: observable.ref,
88
116
  hostIssues: observable.ref,
89
117
  warnings: observable.ref,
118
+ derivedWarnings: computed,
90
119
  isResolvingSources: computed,
91
120
  rowLimit: observable,
92
121
  isPaletteCollapsed: observable,
@@ -94,6 +123,9 @@ export class CubeEditorState {
94
123
  analysis: computed,
95
124
  emitter: computed,
96
125
  canUndo: computed,
126
+ hasEditsToApply: computed,
127
+ executeEdited: action,
128
+ undoEdited: action,
97
129
  isDialogOpen: computed,
98
130
  applyDocument: action,
99
131
  undo: action,
@@ -104,6 +136,7 @@ export class CubeEditorState {
104
136
  select: action,
105
137
  connect: action,
106
138
  addNode: action,
139
+ addConfiguredNode: action,
107
140
  dropNode: action,
108
141
  removeNode: action,
109
142
  swapInputs: action,
@@ -115,6 +148,7 @@ export class CubeEditorState {
115
148
  });
116
149
  this.host = host;
117
150
  this.registry = createNodeRegistry();
151
+ this.staleExtendTyping = createStaleCubeExtendTypingRule(this.registry, () => this.document.context?.model);
118
152
  this.document = document;
119
153
  const storedLimit = host.applicationStore.userDataService.getNumericValue(LEGEND_CUBE_USER_DATA_KEY.ROW_LIMIT);
120
154
  this.rowLimit = isValidRowLimit(storedLimit)
@@ -123,14 +157,28 @@ export class CubeEditorState {
123
157
  this.isPaletteCollapsed =
124
158
  host.applicationStore.userDataService.getBooleanValue(LEGEND_CUBE_USER_DATA_KEY.PALETTE_COLLAPSED) ?? false;
125
159
  this.execution = new CubeExecutionState(this);
160
+ this.dataProductRuntime = new CubeDataProductRuntimeState(this);
126
161
  this.sourcePicker = new CubeSourcePickerState(this);
127
162
  this.specTransfer = new CubeSpecTransferState(this);
163
+ this.examples = new CubeExamplesState(this);
128
164
  this.showPure = new CubeShowPureState(this);
129
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 });
130
171
  }
131
- /** 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
+ */
132
177
  get analysis() {
133
- return buildSchemasAndValidity(this.document.query, this.registry.queryRules);
178
+ return buildSchemasAndValidity(this.document.query, [
179
+ ...this.registry.queryRules,
180
+ this.staleExtendTyping,
181
+ ]);
134
182
  }
135
183
  get emitter() {
136
184
  return new QueryEmitter(this.document.query, this.registry);
@@ -143,6 +191,152 @@ export class CubeEditorState {
143
191
  isPendingSource(node) {
144
192
  return this.pendingSources.has(node);
145
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
+ }
304
+ /**
305
+ * Warnings worked out from the query, by node id: a Sort whose order is
306
+ * lost before it is used (PLAN §11.4). Never stored and never errors, so
307
+ * Execute stays enabled; they go as soon as the query no longer loses it.
308
+ * A partial loss names each node that removes some of the Sort's columns,
309
+ * then the columns that came after a removed one. A loss waits until the
310
+ * Sort and every node it names have no errors, e.g. a Restrict just added,
311
+ * with no column yet: their own errors come first.
312
+ */
313
+ get derivedWarnings() {
314
+ const { validity, schemas } = this.analysis;
315
+ const isValid = (nodeId) => validity.get(nodeId)?.length === 0;
316
+ const { query } = this.document;
317
+ return new Map(Array.from(findLostSortOrders(query, undefined, schemas))
318
+ .filter(([sortId, loss]) => isValid(sortId) &&
319
+ isValid(loss.nodeId) &&
320
+ (loss.removals ?? []).every(({ nodeId }) => isValid(nodeId)))
321
+ .map(([sortId, loss]) => [
322
+ sortId,
323
+ loss.removals
324
+ ? [
325
+ ...loss.removals.map(({ nodeId, columns }) => MESSAGE_SORT_COLUMNS_DROPPED(columns, nodeId)),
326
+ ...(loss.cutColumns?.length
327
+ ? [MESSAGE_SORT_COLUMNS_CUT(loss.cutColumns)]
328
+ : []),
329
+ ]
330
+ : [MESSAGE_SORT_ORDER_LOST(loss.nodeId)],
331
+ ]));
332
+ }
333
+ /** A node's warnings: the stored ones (by key), then the derived ones (by id) */
334
+ getNodeWarnings(node) {
335
+ return [
336
+ ...(this.warnings.get(node.key) ?? []),
337
+ ...(this.derivedWarnings.get(node.id) ?? []),
338
+ ];
339
+ }
146
340
  /**
147
341
  * The node's errors, each once: its own and those of the query rules, then
148
342
  * the first line of the engine's error on it
@@ -159,19 +353,48 @@ export class CubeEditorState {
159
353
  /** The outline of the cube's model, once an editor has loaded it */
160
354
  get modelOutline() {
161
355
  const model = this.document.context?.model;
162
- return model === undefined ? undefined : this.modelOutlines.get(model);
356
+ return model === undefined ? undefined : this.getModelOutline(model);
357
+ }
358
+ /** The outline of a model, once loaded */
359
+ getModelOutline(model) {
360
+ return this.modelOutlines.get(model);
163
361
  }
164
362
  /**
165
- * Loads the outline of the cube's model, once per model. It only adds
166
- * warnings, so a model that fails to load shows none.
363
+ * The database type a run of the query up to the node needs, with the
364
+ * model's runtime (PLAN §11.4), from the model's outline once it is loaded
365
+ * (`loadModelOutline`): the type of the runtime's connections to the
366
+ * databases the node reads. None without an outline, which writes every
367
+ * operation the native way.
167
368
  */
168
- *loadModelOutline() {
169
- const model = this.document.context?.model;
369
+ getRunDatabaseType(query, nodeId, model, runtime) {
370
+ const outline = this.getModelOutline(model);
371
+ if (!outline) {
372
+ return undefined;
373
+ }
374
+ const databases = new Set();
375
+ const visit = (id) => {
376
+ const node = query.getNode(id);
377
+ if (node instanceof RelationalTableSource) {
378
+ databases.add(node.database);
379
+ }
380
+ query
381
+ .getInputIds(id)
382
+ .forEach((inputId) => inputId !== undefined && visit(inputId));
383
+ };
384
+ visit(nodeId);
385
+ return getDatabaseType(outline, runtime, [...databases]);
386
+ }
387
+ /**
388
+ * Loads the outline of a model, the cube's by default, once per model. It
389
+ * only adds warnings and database types, so a model that fails to load
390
+ * shows none and runs every operation the native way.
391
+ */
392
+ *loadModelOutline(model = this.document.context?.model) {
170
393
  if (model === undefined || this.modelOutlines.has(model)) {
171
394
  return;
172
395
  }
173
396
  try {
174
- const outline = (yield this.host.modelCatalog.loadOutline(model));
397
+ const outline = (yield loadCubeModelOutline(this.host, model));
175
398
  this.modelOutlines = new Map([...this.modelOutlines, [model, outline]]);
176
399
  }
177
400
  catch {
@@ -181,6 +404,7 @@ export class CubeEditorState {
181
404
  /** One of Cube's dialogs is open: the source picker, Import or Export, Show Pure */
182
405
  get isDialogOpen() {
183
406
  return (this.sourcePicker.isOpen ||
407
+ this.examples.isOpen ||
184
408
  this.specTransfer.mode !== undefined ||
185
409
  this.showPure.isOpen);
186
410
  }
@@ -188,25 +412,73 @@ export class CubeEditorState {
188
412
  * The page's keyboard shortcuts, while it is open (spec §17.12). Each does
189
413
  * nothing when its button can't be used, and nothing while a Cube dialog
190
414
  * is open, since a dialog doesn't stop the app's shortcuts (user's choice,
191
- * 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.
192
419
  */
193
420
  registerCommands() {
194
- const { commandService, alertUnhandledError } = this.host.applicationStore;
421
+ const { commandService } = this.host.applicationStore;
195
422
  commandService.registerCommand({
196
423
  key: LEGEND_CUBE_COMMAND_KEY.EXECUTE,
197
424
  trigger: () => !this.isDialogOpen &&
198
- this.execution.canExecute &&
199
- !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
+ },
200
440
  action: () => {
201
- 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
+ }
202
445
  },
203
446
  });
204
447
  commandService.registerCommand({
205
448
  key: LEGEND_CUBE_COMMAND_KEY.UNDO,
206
- trigger: () => !this.isDialogOpen && this.canUndo && !isTypingText(),
207
- 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()),
208
454
  });
209
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
+ }
210
482
  deregisterCommands() {
211
483
  Object.values(LEGEND_CUBE_COMMAND_KEY).forEach((key) => this.host.applicationStore.commandService.deregisterCommand(key));
212
484
  }
@@ -239,10 +511,15 @@ export class CubeEditorState {
239
511
  this.document = next;
240
512
  this.readOnly = readOnly;
241
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);
242
517
  }
243
518
  /**
244
- * Types the cube's tables again, in one engine call, outside the undo
245
- * 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:
246
523
  * - a table whose columns are the saved ones is left as it is;
247
524
  * - a table that changed takes its new columns, with a warning listing the
248
525
  * changes;
@@ -257,28 +534,62 @@ export class CubeEditorState {
257
534
  * left alone.
258
535
  *
259
536
  * `only` types just these sources of the cube shown, e.g. one Refresh. A
260
- * 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.
261
539
  */
262
- *reresolveSources(only) {
540
+ *reresolveSources(only, fresh = false) {
263
541
  const { context, query } = this.document;
264
- const sources = (only ?? query.nodes).filter((node) => node instanceof RelationalTableSource &&
265
- query.getNode(node.id) === node);
266
- 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) {
267
560
  return;
268
561
  }
269
562
  this.pendingSources = new Set([...this.pendingSources, ...sources]);
270
563
  let answers;
271
564
  try {
272
- answers = (yield this.host.engine.resolveSchemas(context.model, new Map(sources.map((source) => [
273
- source.id,
274
- [source.database, source.schema, source.table],
275
- ]))));
276
- }
277
- catch (error) {
278
- const failure = error instanceof CubeEngineError
279
- ? error
280
- : new CubeEngineError(CubeEngineErrorKind.NETWORK, error instanceof Error ? error.message : String(error));
281
- 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
+ ]);
282
593
  }
283
594
  finally {
284
595
  this.pendingSources = new Set([...this.pendingSources].filter((node) => !sources.includes(node)));
@@ -287,14 +598,26 @@ export class CubeEditorState {
287
598
  /** Each typed source, by the object that was sent, and what replaces it */
288
599
  const replacements = new Map();
289
600
  sources.forEach((source) => {
601
+ const isAccessPoint = source instanceof DataProductAccessPointSource;
602
+ const isDataSet = source instanceof IngestDatasetSource;
290
603
  const answer = answers.get(source.id) ??
291
- 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);
292
609
  const saved = source.resolution.kind === 'resolved'
293
610
  ? source.resolution.schema
294
611
  : undefined;
295
612
  if (answer instanceof CubeEngineError) {
296
613
  if (saved) {
297
- 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
+ ]);
298
621
  }
299
622
  else if (source.resolution.kind !== 'failed' ||
300
623
  source.resolution.message !== answer.detail) {
@@ -312,13 +635,28 @@ export class CubeEditorState {
312
635
  schema: answer,
313
636
  });
314
637
  if (saved) {
638
+ const diff = diffSchemas(saved, answer);
315
639
  warnings.set(resolved.key, [
316
- getSchemaDriftWarning(diffSchemas(saved, answer)),
640
+ isAccessPoint
641
+ ? getAccessPointDriftWarning(diff)
642
+ : isDataSet
643
+ ? getDataSetDriftWarning(diff)
644
+ : getSchemaDriftWarning(diff),
317
645
  ]);
318
646
  }
319
647
  replacements.set(source, resolved);
320
648
  });
321
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) {
322
660
  if (!replacements.size) {
323
661
  return;
324
662
  }
@@ -330,7 +668,8 @@ export class CubeEditorState {
330
668
  if (checked === undefined) {
331
669
  let replaced = document.query;
332
670
  replacements.forEach((resolved, source) => {
333
- if (replaced.getNode(source.id) === source) {
671
+ if (replaced.getNode(source.id) === source &&
672
+ (accepts?.(document.query, resolved) ?? true)) {
334
673
  replaced = replaced.replace(resolved);
335
674
  }
336
675
  });
@@ -359,21 +698,27 @@ export class CubeEditorState {
359
698
  }
360
699
  }
361
700
  /**
362
- * Types a table again with the engine, from its Source panel (spec §17.6),
363
- * as a re-check after an import does: no undo step, nothing changes when
364
- * 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.
365
705
  */
366
706
  *refreshSource(nodeId) {
367
707
  const source = this.document.query.getNode(nodeId);
368
- if (source instanceof RelationalTableSource) {
369
- 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));
370
713
  }
371
714
  }
372
715
  /**
373
716
  * Restores the document before the last edit; does nothing when there is
374
717
  * no history. A restored query is a new object (PLAN §4.3), so rows that
375
- * ran before the edit show as stale. An edit that left the query alone,
376
- * 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
377
722
  * import closes the node editor and the picker, as the import did.
378
723
  */
379
724
  undo() {
@@ -397,9 +742,14 @@ export class CubeEditorState {
397
742
  }
398
743
  this.history = [...this.history, this.document].slice(-MAX_UNDO_STEPS);
399
744
  }
400
- /** 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
+ */
401
750
  replaceDocument(next) {
402
- if (next.query !== this.document.query) {
751
+ if (next.query !== this.document.query ||
752
+ next.context !== this.document.context) {
403
753
  this.hostIssues = new Map();
404
754
  this.execution.clearError();
405
755
  }
@@ -424,10 +774,23 @@ export class CubeEditorState {
424
774
  this.applyQuery(query.connect(sourceId, targetId, port));
425
775
  }
426
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
+ }
427
788
  /**
428
789
  * Whether a node of the type can be added: a transform, unconnected or
429
790
  * spliced in after `afterId`, when the query allows it; a source only
430
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).
431
794
  */
432
795
  canAddNode(type, afterId) {
433
796
  const definition = this.registry.get(type);
@@ -435,14 +798,18 @@ export class CubeEditorState {
435
798
  return false;
436
799
  }
437
800
  if (definition.kind === 'source') {
438
- 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));
439
806
  }
440
807
  const { query } = this.document;
441
808
  return query.canAdd(definition.create(query.generateId(type)), afterId);
442
809
  }
443
810
  /**
444
- * Adds a node of the type, as the palette and the context menu do (spec
445
- * §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
446
813
  * after `afterId`; a source opens the source picker, which adds it once
447
814
  * the engine has typed it. Does nothing `canAddNode` refuses.
448
815
  */
@@ -452,12 +819,25 @@ export class CubeEditorState {
452
819
  return;
453
820
  }
454
821
  if (definition.kind === 'source') {
455
- this.sourcePicker.open();
822
+ this.sourcePicker.open(this.sourcePicker.tabForSourceType(type)?.key);
456
823
  return;
457
824
  }
458
825
  const { query } = this.document;
459
826
  this.applyQuery(query.add(definition.create(query.generateId(type)), afterId));
460
827
  }
828
+ /**
829
+ * Adds a node made elsewhere, with its settings, as the grid's quick
830
+ * actions do (spec §12.4): spliced in after `afterId`, so it becomes the
831
+ * node that runs when that one did, as one undo step. Does nothing in a
832
+ * read-only cube, or when the query can't take it.
833
+ */
834
+ addConfiguredNode(node, afterId) {
835
+ const { query } = this.document;
836
+ if (this.readOnly || !query.canAdd(node, afterId)) {
837
+ return;
838
+ }
839
+ this.applyQuery(query.add(node, afterId));
840
+ }
461
841
  /** Whether dropping a node on another does anything: connect it, or else move it after it */
462
842
  canDropNode(nodeId, targetId) {
463
843
  const { query } = this.document;
@@ -544,6 +924,7 @@ export class CubeEditorState {
544
924
  }
545
925
  /** Stops any run; call when the page closes */
546
926
  dispose() {
927
+ this.retyping();
547
928
  this.execution.stop();
548
929
  this.nodeEditor.dispose();
549
930
  }