@finos/legend-cube-builder 0.0.3 → 0.0.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (971) hide show
  1. package/README.md +59 -20
  2. package/docs/adding-an-operation.md +112 -13
  3. package/docs/demo/DEMO-FAST-NOTES.md +67 -0
  4. package/docs/demo/README.md +102 -0
  5. package/docs/demo/specs/duckdb-sales-pivot.cube.json +110 -0
  6. package/docs/demo/specs/trades-desks-1-joined.cube.json +123 -0
  7. package/docs/demo/specs/trades-desks-2-grouped.cube.json +140 -0
  8. package/docs/demo/specs/trades-desks-3-ranked.cube.json +158 -0
  9. package/docs/demo/specs/trades-desks-4-extended.cube.json +208 -0
  10. package/docs/demo/specs/trades-desks-5-final.cube.json +248 -0
  11. package/docs/hosting.md +132 -7
  12. package/docs/testing.md +146 -9
  13. package/lib/__lib__/LegendCubeCommand.d.ts +4 -1
  14. package/lib/__lib__/LegendCubeCommand.d.ts.map +1 -1
  15. package/lib/__lib__/LegendCubeCommand.js +12 -0
  16. package/lib/__lib__/LegendCubeCommand.js.map +1 -1
  17. package/lib/__lib__/LegendCubeDataProductLabels.d.ts +45 -0
  18. package/lib/__lib__/LegendCubeDataProductLabels.d.ts.map +1 -0
  19. package/lib/__lib__/LegendCubeDataProductLabels.js +60 -0
  20. package/lib/__lib__/LegendCubeDataProductLabels.js.map +1 -0
  21. package/lib/__lib__/LegendCubeDirectConnectionLabels.d.ts +56 -0
  22. package/lib/__lib__/LegendCubeDirectConnectionLabels.d.ts.map +1 -0
  23. package/lib/__lib__/LegendCubeDirectConnectionLabels.js +76 -0
  24. package/lib/__lib__/LegendCubeDirectConnectionLabels.js.map +1 -0
  25. package/lib/__lib__/LegendCubeFunctionLabels.d.ts +29 -0
  26. package/lib/__lib__/LegendCubeFunctionLabels.d.ts.map +1 -0
  27. package/lib/__lib__/LegendCubeFunctionLabels.js +31 -0
  28. package/lib/__lib__/LegendCubeFunctionLabels.js.map +1 -0
  29. package/lib/__lib__/LegendCubeHelpText.d.ts +5 -1
  30. package/lib/__lib__/LegendCubeHelpText.d.ts.map +1 -1
  31. package/lib/__lib__/LegendCubeHelpText.js +25 -3
  32. package/lib/__lib__/LegendCubeHelpText.js.map +1 -1
  33. package/lib/__lib__/LegendCubeIngestLabels.d.ts +25 -0
  34. package/lib/__lib__/LegendCubeIngestLabels.d.ts.map +1 -0
  35. package/lib/__lib__/LegendCubeIngestLabels.js +29 -0
  36. package/lib/__lib__/LegendCubeIngestLabels.js.map +1 -0
  37. package/lib/__lib__/LegendCubeLabels.d.ts +171 -6
  38. package/lib/__lib__/LegendCubeLabels.d.ts.map +1 -1
  39. package/lib/__lib__/LegendCubeLabels.js +226 -13
  40. package/lib/__lib__/LegendCubeLabels.js.map +1 -1
  41. package/lib/__lib__/LegendCubeProjectLabels.d.ts +22 -0
  42. package/lib/__lib__/LegendCubeProjectLabels.d.ts.map +1 -0
  43. package/lib/__lib__/LegendCubeProjectLabels.js +23 -0
  44. package/lib/__lib__/LegendCubeProjectLabels.js.map +1 -0
  45. package/lib/__lib__/LegendCubeProjectSourceLabels.d.ts +26 -0
  46. package/lib/__lib__/LegendCubeProjectSourceLabels.d.ts.map +1 -0
  47. package/lib/__lib__/LegendCubeProjectSourceLabels.js +26 -0
  48. package/lib/__lib__/LegendCubeProjectSourceLabels.js.map +1 -0
  49. package/lib/__lib__/LegendCubeServiceLabels.d.ts +27 -0
  50. package/lib/__lib__/LegendCubeServiceLabels.d.ts.map +1 -0
  51. package/lib/__lib__/LegendCubeServiceLabels.js +32 -0
  52. package/lib/__lib__/LegendCubeServiceLabels.js.map +1 -0
  53. package/lib/__lib__/LegendCubeTesting.d.ts +8 -0
  54. package/lib/__lib__/LegendCubeTesting.d.ts.map +1 -1
  55. package/lib/__lib__/LegendCubeTesting.js +8 -0
  56. package/lib/__lib__/LegendCubeTesting.js.map +1 -1
  57. package/lib/__test-utils__/CubeCanvasTestUtils.d.ts.map +1 -1
  58. package/lib/__test-utils__/CubeCanvasTestUtils.js +1 -1
  59. package/lib/__test-utils__/CubeCanvasTestUtils.js.map +1 -1
  60. package/lib/__test-utils__/CubeConnectionTestSupport.d.ts +22 -0
  61. package/lib/__test-utils__/CubeConnectionTestSupport.d.ts.map +1 -0
  62. package/lib/__test-utils__/CubeConnectionTestSupport.js +30 -0
  63. package/lib/__test-utils__/CubeConnectionTestSupport.js.map +1 -0
  64. package/lib/__test-utils__/CubeDirectConnectionFixtures.d.ts +31 -0
  65. package/lib/__test-utils__/CubeDirectConnectionFixtures.d.ts.map +1 -0
  66. package/lib/__test-utils__/CubeDirectConnectionFixtures.js +63 -0
  67. package/lib/__test-utils__/CubeDirectConnectionFixtures.js.map +1 -0
  68. package/lib/__test-utils__/CubeEngineTestSupport.d.ts +13 -1
  69. package/lib/__test-utils__/CubeEngineTestSupport.d.ts.map +1 -1
  70. package/lib/__test-utils__/CubeEngineTestSupport.js +23 -2
  71. package/lib/__test-utils__/CubeEngineTestSupport.js.map +1 -1
  72. package/lib/__test-utils__/CubeExpressionTestUtils.d.ts +44 -0
  73. package/lib/__test-utils__/CubeExpressionTestUtils.d.ts.map +1 -0
  74. package/lib/__test-utils__/CubeExpressionTestUtils.js +100 -0
  75. package/lib/__test-utils__/CubeExpressionTestUtils.js.map +1 -0
  76. package/lib/__test-utils__/CubeFunctionTestOutline.d.ts +26 -0
  77. package/lib/__test-utils__/CubeFunctionTestOutline.d.ts.map +1 -0
  78. package/lib/__test-utils__/CubeFunctionTestOutline.js +56 -0
  79. package/lib/__test-utils__/CubeFunctionTestOutline.js.map +1 -0
  80. package/lib/__test-utils__/CubeLambdaCorpus.d.ts +36 -0
  81. package/lib/__test-utils__/CubeLambdaCorpus.d.ts.map +1 -0
  82. package/lib/__test-utils__/CubeLambdaCorpus.js +83 -0
  83. package/lib/__test-utils__/CubeLambdaCorpus.js.map +1 -0
  84. package/lib/__test-utils__/CubeOperationsTestUtils.d.ts +25 -0
  85. package/lib/__test-utils__/CubeOperationsTestUtils.d.ts.map +1 -1
  86. package/lib/__test-utils__/CubeOperationsTestUtils.js +56 -10
  87. package/lib/__test-utils__/CubeOperationsTestUtils.js.map +1 -1
  88. package/lib/__test-utils__/CubePageTestUtils.d.ts +18 -0
  89. package/lib/__test-utils__/CubePageTestUtils.d.ts.map +1 -1
  90. package/lib/__test-utils__/CubePageTestUtils.js +46 -1
  91. package/lib/__test-utils__/CubePageTestUtils.js.map +1 -1
  92. package/lib/__test-utils__/CubeTestApplication.d.ts +14 -1
  93. package/lib/__test-utils__/CubeTestApplication.d.ts.map +1 -1
  94. package/lib/__test-utils__/CubeTestApplication.js +25 -1
  95. package/lib/__test-utils__/CubeTestApplication.js.map +1 -1
  96. package/lib/__test-utils__/FakeCubeConnectionExplorer.d.ts +33 -0
  97. package/lib/__test-utils__/FakeCubeConnectionExplorer.d.ts.map +1 -0
  98. package/lib/__test-utils__/FakeCubeConnectionExplorer.js +67 -0
  99. package/lib/__test-utils__/FakeCubeConnectionExplorer.js.map +1 -0
  100. package/lib/__test-utils__/FakeCubeDataProductCatalog.d.ts +45 -0
  101. package/lib/__test-utils__/FakeCubeDataProductCatalog.d.ts.map +1 -0
  102. package/lib/__test-utils__/FakeCubeDataProductCatalog.js +137 -0
  103. package/lib/__test-utils__/FakeCubeDataProductCatalog.js.map +1 -0
  104. package/lib/__test-utils__/FakeCubeEngine.d.ts +7 -0
  105. package/lib/__test-utils__/FakeCubeEngine.d.ts.map +1 -1
  106. package/lib/__test-utils__/FakeCubeEngine.js +31 -1
  107. package/lib/__test-utils__/FakeCubeEngine.js.map +1 -1
  108. package/lib/__test-utils__/FakeCubeIngestCatalog.d.ts +41 -0
  109. package/lib/__test-utils__/FakeCubeIngestCatalog.d.ts.map +1 -0
  110. package/lib/__test-utils__/FakeCubeIngestCatalog.js +123 -0
  111. package/lib/__test-utils__/FakeCubeIngestCatalog.js.map +1 -0
  112. package/lib/__test-utils__/FakeCubeProjectCatalog.d.ts +30 -0
  113. package/lib/__test-utils__/FakeCubeProjectCatalog.d.ts.map +1 -0
  114. package/lib/__test-utils__/FakeCubeProjectCatalog.js +64 -0
  115. package/lib/__test-utils__/FakeCubeProjectCatalog.js.map +1 -0
  116. package/lib/__test-utils__/FakeCubeServiceCatalog.d.ts +26 -0
  117. package/lib/__test-utils__/FakeCubeServiceCatalog.d.ts.map +1 -0
  118. package/lib/__test-utils__/FakeCubeServiceCatalog.js +40 -0
  119. package/lib/__test-utils__/FakeCubeServiceCatalog.js.map +1 -0
  120. package/lib/components/CubeAddItems.d.ts +35 -0
  121. package/lib/components/CubeAddItems.d.ts.map +1 -0
  122. package/lib/components/CubeAddItems.js +85 -0
  123. package/lib/components/CubeAddItems.js.map +1 -0
  124. package/lib/components/CubeDialogTheme.d.ts +25 -0
  125. package/lib/components/CubeDialogTheme.d.ts.map +1 -0
  126. package/lib/components/CubeDialogTheme.js +25 -0
  127. package/lib/components/CubeDialogTheme.js.map +1 -0
  128. package/lib/components/CubeEditor.d.ts +17 -2
  129. package/lib/components/CubeEditor.d.ts.map +1 -1
  130. package/lib/components/CubeEditor.js +39 -17
  131. package/lib/components/CubeEditor.js.map +1 -1
  132. package/lib/components/CubeEntrySourceBanner.d.ts +23 -0
  133. package/lib/components/CubeEntrySourceBanner.d.ts.map +1 -0
  134. package/lib/components/CubeEntrySourceBanner.js +32 -0
  135. package/lib/components/CubeEntrySourceBanner.js.map +1 -0
  136. package/lib/components/CubeFileMenu.d.ts +28 -0
  137. package/lib/components/CubeFileMenu.d.ts.map +1 -0
  138. package/lib/components/CubeFileMenu.js +77 -0
  139. package/lib/components/CubeFileMenu.js.map +1 -0
  140. package/lib/components/CubeLambdaImportBanner.d.ts +26 -0
  141. package/lib/components/CubeLambdaImportBanner.d.ts.map +1 -0
  142. package/lib/components/CubeLambdaImportBanner.js +47 -0
  143. package/lib/components/CubeLambdaImportBanner.js.map +1 -0
  144. package/lib/components/CubeNodeIcon.d.ts.map +1 -1
  145. package/lib/components/CubeNodeIcon.js +12 -1
  146. package/lib/components/CubeNodeIcon.js.map +1 -1
  147. package/lib/components/CubeSchemaColumnsTable.d.ts +21 -0
  148. package/lib/components/CubeSchemaColumnsTable.d.ts.map +1 -0
  149. package/lib/components/CubeSchemaColumnsTable.js +6 -0
  150. package/lib/components/CubeSchemaColumnsTable.js.map +1 -0
  151. package/lib/components/canvas/CubeCanvas.d.ts +4 -3
  152. package/lib/components/canvas/CubeCanvas.d.ts.map +1 -1
  153. package/lib/components/canvas/CubeCanvas.js +68 -16
  154. package/lib/components/canvas/CubeCanvas.js.map +1 -1
  155. package/lib/components/canvas/CubeCanvasContextMenu.d.ts +8 -4
  156. package/lib/components/canvas/CubeCanvasContextMenu.d.ts.map +1 -1
  157. package/lib/components/canvas/CubeCanvasContextMenu.js +20 -9
  158. package/lib/components/canvas/CubeCanvasContextMenu.js.map +1 -1
  159. package/lib/components/canvas/CubeCanvasDnd.d.ts +7 -5
  160. package/lib/components/canvas/CubeCanvasDnd.d.ts.map +1 -1
  161. package/lib/components/canvas/CubeCanvasDnd.js +14 -9
  162. package/lib/components/canvas/CubeCanvasDnd.js.map +1 -1
  163. package/lib/components/canvas/CubeCanvasElements.d.ts +18 -1
  164. package/lib/components/canvas/CubeCanvasElements.d.ts.map +1 -1
  165. package/lib/components/canvas/CubeCanvasElements.js +63 -5
  166. package/lib/components/canvas/CubeCanvasElements.js.map +1 -1
  167. package/lib/components/canvas/CubeCanvasLayout.js +1 -1
  168. package/lib/components/canvas/CubeCanvasNode.d.ts.map +1 -1
  169. package/lib/components/canvas/CubeCanvasNode.js +35 -21
  170. package/lib/components/canvas/CubeCanvasNode.js.map +1 -1
  171. package/lib/components/canvas/CubeCanvasNodeFocus.d.ts +22 -0
  172. package/lib/components/canvas/CubeCanvasNodeFocus.d.ts.map +1 -0
  173. package/lib/components/canvas/CubeCanvasNodeFocus.js +31 -0
  174. package/lib/components/canvas/CubeCanvasNodeFocus.js.map +1 -0
  175. package/lib/components/canvas/CubeNodeEditorAnchor.d.ts +44 -0
  176. package/lib/components/canvas/CubeNodeEditorAnchor.d.ts.map +1 -0
  177. package/lib/components/canvas/CubeNodeEditorAnchor.js +51 -0
  178. package/lib/components/canvas/CubeNodeEditorAnchor.js.map +1 -0
  179. package/lib/components/dev-settings/CubeDevSettings.d.ts +35 -0
  180. package/lib/components/dev-settings/CubeDevSettings.d.ts.map +1 -0
  181. package/lib/components/dev-settings/CubeDevSettings.js +50 -0
  182. package/lib/components/dev-settings/CubeDevSettings.js.map +1 -0
  183. package/lib/components/editors/CubeAggregationRowEditor.d.ts +48 -0
  184. package/lib/components/editors/CubeAggregationRowEditor.d.ts.map +1 -0
  185. package/lib/components/editors/CubeAggregationRowEditor.js +72 -0
  186. package/lib/components/editors/CubeAggregationRowEditor.js.map +1 -0
  187. package/lib/components/editors/CubeColumnChecklist.d.ts +42 -0
  188. package/lib/components/editors/CubeColumnChecklist.d.ts.map +1 -0
  189. package/lib/components/editors/CubeColumnChecklist.js +41 -0
  190. package/lib/components/editors/CubeColumnChecklist.js.map +1 -0
  191. package/lib/components/editors/CubeColumnPicker.d.ts.map +1 -1
  192. package/lib/components/editors/CubeColumnPicker.js +3 -3
  193. package/lib/components/editors/CubeColumnPicker.js.map +1 -1
  194. package/lib/components/editors/CubeConcatEditor.d.ts +33 -0
  195. package/lib/components/editors/CubeConcatEditor.d.ts.map +1 -0
  196. package/lib/components/editors/CubeConcatEditor.js +147 -0
  197. package/lib/components/editors/CubeConcatEditor.js.map +1 -0
  198. package/lib/components/editors/CubeDataProductSourceEditor.d.ts +25 -0
  199. package/lib/components/editors/CubeDataProductSourceEditor.d.ts.map +1 -0
  200. package/lib/components/editors/CubeDataProductSourceEditor.js +53 -0
  201. package/lib/components/editors/CubeDataProductSourceEditor.js.map +1 -0
  202. package/lib/components/editors/CubeDifferenceEditor.d.ts +25 -0
  203. package/lib/components/editors/CubeDifferenceEditor.d.ts.map +1 -0
  204. package/lib/components/editors/CubeDifferenceEditor.js +29 -0
  205. package/lib/components/editors/CubeDifferenceEditor.js.map +1 -0
  206. package/lib/components/editors/CubeExpressionFilterEditor.d.ts +25 -0
  207. package/lib/components/editors/CubeExpressionFilterEditor.d.ts.map +1 -0
  208. package/lib/components/editors/CubeExpressionFilterEditor.js +83 -0
  209. package/lib/components/editors/CubeExpressionFilterEditor.js.map +1 -0
  210. package/lib/components/editors/CubeExtendEditor.d.ts +27 -0
  211. package/lib/components/editors/CubeExtendEditor.d.ts.map +1 -0
  212. package/lib/components/editors/CubeExtendEditor.js +86 -0
  213. package/lib/components/editors/CubeExtendEditor.js.map +1 -0
  214. package/lib/components/editors/CubeFilterEditor.d.ts.map +1 -1
  215. package/lib/components/editors/CubeFilterEditor.js +15 -4
  216. package/lib/components/editors/CubeFilterEditor.js.map +1 -1
  217. package/lib/components/editors/CubeFunctionSourceEditor.d.ts +25 -0
  218. package/lib/components/editors/CubeFunctionSourceEditor.d.ts.map +1 -0
  219. package/lib/components/editors/CubeFunctionSourceEditor.js +55 -0
  220. package/lib/components/editors/CubeFunctionSourceEditor.js.map +1 -0
  221. package/lib/components/editors/CubeGroupEditor.d.ts +28 -0
  222. package/lib/components/editors/CubeGroupEditor.d.ts.map +1 -0
  223. package/lib/components/editors/CubeGroupEditor.js +70 -0
  224. package/lib/components/editors/CubeGroupEditor.js.map +1 -0
  225. package/lib/components/editors/CubeIngestSourceEditor.d.ts +26 -0
  226. package/lib/components/editors/CubeIngestSourceEditor.d.ts.map +1 -0
  227. package/lib/components/editors/CubeIngestSourceEditor.js +47 -0
  228. package/lib/components/editors/CubeIngestSourceEditor.js.map +1 -0
  229. package/lib/components/editors/CubeJoinEditor.d.ts +2 -4
  230. package/lib/components/editors/CubeJoinEditor.d.ts.map +1 -1
  231. package/lib/components/editors/CubeJoinEditor.js +21 -39
  232. package/lib/components/editors/CubeJoinEditor.js.map +1 -1
  233. package/lib/components/editors/CubeJoinKeyRows.d.ts +34 -0
  234. package/lib/components/editors/CubeJoinKeyRows.d.ts.map +1 -0
  235. package/lib/components/editors/CubeJoinKeyRows.js +65 -0
  236. package/lib/components/editors/CubeJoinKeyRows.js.map +1 -0
  237. package/lib/components/editors/CubeNodeEditorPanel.d.ts +7 -5
  238. package/lib/components/editors/CubeNodeEditorPanel.d.ts.map +1 -1
  239. package/lib/components/editors/CubeNodeEditorPanel.js +64 -16
  240. package/lib/components/editors/CubeNodeEditorPanel.js.map +1 -1
  241. package/lib/components/editors/CubeNodeEditorPopper.d.ts +44 -0
  242. package/lib/components/editors/CubeNodeEditorPopper.d.ts.map +1 -0
  243. package/lib/components/editors/CubeNodeEditorPopper.js +133 -0
  244. package/lib/components/editors/CubeNodeEditorPopper.js.map +1 -0
  245. package/lib/components/editors/CubeNodeEditorRegistry.d.ts.map +1 -1
  246. package/lib/components/editors/CubeNodeEditorRegistry.js +23 -1
  247. package/lib/components/editors/CubeNodeEditorRegistry.js.map +1 -1
  248. package/lib/components/editors/CubePartitionEditor.d.ts +30 -0
  249. package/lib/components/editors/CubePartitionEditor.d.ts.map +1 -0
  250. package/lib/components/editors/CubePartitionEditor.js +93 -0
  251. package/lib/components/editors/CubePartitionEditor.js.map +1 -0
  252. package/lib/components/editors/CubePivotEditor.d.ts +26 -0
  253. package/lib/components/editors/CubePivotEditor.d.ts.map +1 -0
  254. package/lib/components/editors/CubePivotEditor.js +93 -0
  255. package/lib/components/editors/CubePivotEditor.js.map +1 -0
  256. package/lib/components/editors/CubeRenameEditor.d.ts.map +1 -1
  257. package/lib/components/editors/CubeRenameEditor.js +6 -4
  258. package/lib/components/editors/CubeRenameEditor.js.map +1 -1
  259. package/lib/components/editors/CubeRestrictEditor.d.ts.map +1 -1
  260. package/lib/components/editors/CubeRestrictEditor.js +2 -2
  261. package/lib/components/editors/CubeRestrictEditor.js.map +1 -1
  262. package/lib/components/editors/CubeServiceSourceEditor.d.ts +25 -0
  263. package/lib/components/editors/CubeServiceSourceEditor.d.ts.map +1 -0
  264. package/lib/components/editors/CubeServiceSourceEditor.js +41 -0
  265. package/lib/components/editors/CubeServiceSourceEditor.js.map +1 -0
  266. package/lib/components/editors/CubeSortEditor.d.ts.map +1 -1
  267. package/lib/components/editors/CubeSortEditor.js +10 -37
  268. package/lib/components/editors/CubeSortEditor.js.map +1 -1
  269. package/lib/components/editors/CubeSortRowEditor.d.ts +47 -0
  270. package/lib/components/editors/CubeSortRowEditor.d.ts.map +1 -0
  271. package/lib/components/editors/CubeSortRowEditor.js +62 -0
  272. package/lib/components/editors/CubeSortRowEditor.js.map +1 -0
  273. package/lib/components/editors/CubeSourceEditor.d.ts.map +1 -1
  274. package/lib/components/editors/CubeSourceEditor.js +18 -5
  275. package/lib/components/editors/CubeSourceEditor.js.map +1 -1
  276. package/lib/components/editors/CubeWarehouseControl.d.ts +30 -0
  277. package/lib/components/editors/CubeWarehouseControl.d.ts.map +1 -0
  278. package/lib/components/editors/CubeWarehouseControl.js +44 -0
  279. package/lib/components/editors/CubeWarehouseControl.js.map +1 -0
  280. package/lib/components/editors/useCubeNodeEditorDismiss.d.ts +31 -0
  281. package/lib/components/editors/useCubeNodeEditorDismiss.d.ts.map +1 -0
  282. package/lib/components/editors/useCubeNodeEditorDismiss.js +83 -0
  283. package/lib/components/editors/useCubeNodeEditorDismiss.js.map +1 -0
  284. package/lib/components/examples/CubeExamplesDialog.d.ts +26 -0
  285. package/lib/components/examples/CubeExamplesDialog.d.ts.map +1 -0
  286. package/lib/components/examples/CubeExamplesDialog.js +68 -0
  287. package/lib/components/examples/CubeExamplesDialog.js.map +1 -0
  288. package/lib/components/grid/CubeColumnFormatDialog.d.ts +28 -0
  289. package/lib/components/grid/CubeColumnFormatDialog.d.ts.map +1 -0
  290. package/lib/components/grid/CubeColumnFormatDialog.js +94 -0
  291. package/lib/components/grid/CubeColumnFormatDialog.js.map +1 -0
  292. package/lib/components/grid/CubeDrilldownBar.d.ts +37 -0
  293. package/lib/components/grid/CubeDrilldownBar.d.ts.map +1 -0
  294. package/lib/components/grid/CubeDrilldownBar.js +77 -0
  295. package/lib/components/grid/CubeDrilldownBar.js.map +1 -0
  296. package/lib/components/grid/CubeGridRegion.d.ts.map +1 -1
  297. package/lib/components/grid/CubeGridRegion.js +56 -31
  298. package/lib/components/grid/CubeGridRegion.js.map +1 -1
  299. package/lib/components/grid/CubeGridValues.d.ts +47 -1
  300. package/lib/components/grid/CubeGridValues.d.ts.map +1 -1
  301. package/lib/components/grid/CubeGridValues.js +152 -1
  302. package/lib/components/grid/CubeGridValues.js.map +1 -1
  303. package/lib/components/grid/CubeResultGrid.d.ts +68 -5
  304. package/lib/components/grid/CubeResultGrid.d.ts.map +1 -1
  305. package/lib/components/grid/CubeResultGrid.js +316 -31
  306. package/lib/components/grid/CubeResultGrid.js.map +1 -1
  307. package/lib/components/grid/CubeRunStatsPanel.d.ts +28 -0
  308. package/lib/components/grid/CubeRunStatsPanel.d.ts.map +1 -0
  309. package/lib/components/grid/CubeRunStatsPanel.js +61 -0
  310. package/lib/components/grid/CubeRunStatsPanel.js.map +1 -0
  311. package/lib/components/grid/CubeServerSideGrid.d.ts +36 -0
  312. package/lib/components/grid/CubeServerSideGrid.d.ts.map +1 -0
  313. package/lib/components/grid/CubeServerSideGrid.js +114 -0
  314. package/lib/components/grid/CubeServerSideGrid.js.map +1 -0
  315. package/lib/components/grid/CubeSqlDialog.d.ts +24 -0
  316. package/lib/components/grid/CubeSqlDialog.d.ts.map +1 -0
  317. package/lib/components/grid/CubeSqlDialog.js +39 -0
  318. package/lib/components/grid/CubeSqlDialog.js.map +1 -0
  319. package/lib/components/grid/CubeSqlFormat.d.ts +20 -0
  320. package/lib/components/grid/CubeSqlFormat.d.ts.map +1 -0
  321. package/lib/components/grid/CubeSqlFormat.js +32 -0
  322. package/lib/components/grid/CubeSqlFormat.js.map +1 -0
  323. package/lib/components/palette/CubePalette.d.ts.map +1 -1
  324. package/lib/components/palette/CubePalette.js +44 -14
  325. package/lib/components/palette/CubePalette.js.map +1 -1
  326. package/lib/components/show-pure/CubeShowPureDialog.d.ts +4 -1
  327. package/lib/components/show-pure/CubeShowPureDialog.d.ts.map +1 -1
  328. package/lib/components/show-pure/CubeShowPureDialog.js +8 -4
  329. package/lib/components/show-pure/CubeShowPureDialog.js.map +1 -1
  330. package/lib/components/source-picker/CubeDataProductTab.d.ts +27 -0
  331. package/lib/components/source-picker/CubeDataProductTab.d.ts.map +1 -0
  332. package/lib/components/source-picker/CubeDataProductTab.js +123 -0
  333. package/lib/components/source-picker/CubeDataProductTab.js.map +1 -0
  334. package/lib/components/source-picker/CubeDirectConnectionTab.d.ts +27 -0
  335. package/lib/components/source-picker/CubeDirectConnectionTab.d.ts.map +1 -0
  336. package/lib/components/source-picker/CubeDirectConnectionTab.js +89 -0
  337. package/lib/components/source-picker/CubeDirectConnectionTab.js.map +1 -0
  338. package/lib/components/source-picker/CubeFunctionSteps.d.ts +36 -0
  339. package/lib/components/source-picker/CubeFunctionSteps.d.ts.map +1 -0
  340. package/lib/components/source-picker/CubeFunctionSteps.js +76 -0
  341. package/lib/components/source-picker/CubeFunctionSteps.js.map +1 -0
  342. package/lib/components/source-picker/CubeIngestTab.d.ts +28 -0
  343. package/lib/components/source-picker/CubeIngestTab.d.ts.map +1 -0
  344. package/lib/components/source-picker/CubeIngestTab.js +89 -0
  345. package/lib/components/source-picker/CubeIngestTab.js.map +1 -0
  346. package/lib/components/source-picker/CubeInlineModelTab.d.ts +38 -0
  347. package/lib/components/source-picker/CubeInlineModelTab.d.ts.map +1 -0
  348. package/lib/components/source-picker/CubeInlineModelTab.js +81 -0
  349. package/lib/components/source-picker/CubeInlineModelTab.js.map +1 -0
  350. package/lib/components/source-picker/CubePickerListItem.d.ts +47 -0
  351. package/lib/components/source-picker/CubePickerListItem.d.ts.map +1 -0
  352. package/lib/components/source-picker/CubePickerListItem.js +62 -0
  353. package/lib/components/source-picker/CubePickerListItem.js.map +1 -0
  354. package/lib/components/source-picker/CubePickerStep.d.ts +27 -0
  355. package/lib/components/source-picker/CubePickerStep.d.ts.map +1 -0
  356. package/lib/components/source-picker/CubePickerStep.js +23 -0
  357. package/lib/components/source-picker/CubePickerStep.js.map +1 -0
  358. package/lib/components/source-picker/CubeProjectTab.d.ts +28 -0
  359. package/lib/components/source-picker/CubeProjectTab.d.ts.map +1 -0
  360. package/lib/components/source-picker/CubeProjectTab.js +53 -0
  361. package/lib/components/source-picker/CubeProjectTab.js.map +1 -0
  362. package/lib/components/source-picker/CubeServiceTab.d.ts +27 -0
  363. package/lib/components/source-picker/CubeServiceTab.d.ts.map +1 -0
  364. package/lib/components/source-picker/CubeServiceTab.js +36 -0
  365. package/lib/components/source-picker/CubeServiceTab.js.map +1 -0
  366. package/lib/components/source-picker/CubeSourcePicker.d.ts +6 -0
  367. package/lib/components/source-picker/CubeSourcePicker.d.ts.map +1 -1
  368. package/lib/components/source-picker/CubeSourcePicker.js +33 -58
  369. package/lib/components/source-picker/CubeSourcePicker.js.map +1 -1
  370. package/lib/components/source-picker/CubeTablePreview.d.ts +29 -0
  371. package/lib/components/source-picker/CubeTablePreview.d.ts.map +1 -0
  372. package/lib/components/source-picker/CubeTablePreview.js +10 -0
  373. package/lib/components/source-picker/CubeTablePreview.js.map +1 -0
  374. package/lib/components/spec-transfer/CubeImportPureDialog.d.ts +27 -0
  375. package/lib/components/spec-transfer/CubeImportPureDialog.d.ts.map +1 -0
  376. package/lib/components/spec-transfer/CubeImportPureDialog.js +38 -0
  377. package/lib/components/spec-transfer/CubeImportPureDialog.js.map +1 -0
  378. package/lib/components/spec-transfer/CubeSpecTransferDialog.d.ts.map +1 -1
  379. package/lib/components/spec-transfer/CubeSpecTransferDialog.js +9 -3
  380. package/lib/components/spec-transfer/CubeSpecTransferDialog.js.map +1 -1
  381. package/lib/graph-manager/CubeConnectionExplorer.d.ts +90 -0
  382. package/lib/graph-manager/CubeConnectionExplorer.d.ts.map +1 -0
  383. package/lib/graph-manager/CubeConnectionExplorer.js +34 -0
  384. package/lib/graph-manager/CubeConnectionExplorer.js.map +1 -0
  385. package/lib/graph-manager/CubeDataProduct.d.ts +66 -0
  386. package/lib/graph-manager/CubeDataProduct.d.ts.map +1 -0
  387. package/lib/graph-manager/CubeDataProduct.js +102 -0
  388. package/lib/graph-manager/CubeDataProduct.js.map +1 -0
  389. package/lib/graph-manager/CubeDataProductCatalog.d.ts +177 -0
  390. package/lib/graph-manager/CubeDataProductCatalog.d.ts.map +1 -0
  391. package/lib/graph-manager/CubeDataProductCatalog.js +116 -0
  392. package/lib/graph-manager/CubeDataProductCatalog.js.map +1 -0
  393. package/lib/graph-manager/CubeDirectConnection.d.ts +38 -0
  394. package/lib/graph-manager/CubeDirectConnection.d.ts.map +1 -0
  395. package/lib/graph-manager/CubeDirectConnection.js +48 -0
  396. package/lib/graph-manager/CubeDirectConnection.js.map +1 -0
  397. package/lib/graph-manager/CubeEngine.d.ts +83 -3
  398. package/lib/graph-manager/CubeEngine.d.ts.map +1 -1
  399. package/lib/graph-manager/CubeEngine.js +4 -1
  400. package/lib/graph-manager/CubeEngine.js.map +1 -1
  401. package/lib/graph-manager/CubeEngineClientSettings.d.ts +43 -0
  402. package/lib/graph-manager/CubeEngineClientSettings.d.ts.map +1 -0
  403. package/lib/graph-manager/CubeEngineClientSettings.js +51 -0
  404. package/lib/graph-manager/CubeEngineClientSettings.js.map +1 -0
  405. package/lib/graph-manager/CubeIngest.d.ts +55 -0
  406. package/lib/graph-manager/CubeIngest.d.ts.map +1 -0
  407. package/lib/graph-manager/CubeIngest.js +98 -0
  408. package/lib/graph-manager/CubeIngest.js.map +1 -0
  409. package/lib/graph-manager/CubeIngestCatalog.d.ts +142 -0
  410. package/lib/graph-manager/CubeIngestCatalog.d.ts.map +1 -0
  411. package/lib/graph-manager/CubeIngestCatalog.js +86 -0
  412. package/lib/graph-manager/CubeIngestCatalog.js.map +1 -0
  413. package/lib/graph-manager/CubeLakehouseEnvironment.d.ts +26 -0
  414. package/lib/graph-manager/CubeLakehouseEnvironment.d.ts.map +1 -0
  415. package/lib/graph-manager/CubeLakehouseEnvironment.js +17 -0
  416. package/lib/graph-manager/CubeLakehouseEnvironment.js.map +1 -0
  417. package/lib/graph-manager/CubeLakehouseRuntime.d.ts +29 -0
  418. package/lib/graph-manager/CubeLakehouseRuntime.d.ts.map +1 -0
  419. package/lib/graph-manager/CubeLakehouseRuntime.js +40 -0
  420. package/lib/graph-manager/CubeLakehouseRuntime.js.map +1 -0
  421. package/lib/graph-manager/CubeProject.d.ts +41 -0
  422. package/lib/graph-manager/CubeProject.d.ts.map +1 -0
  423. package/lib/graph-manager/CubeProject.js +84 -0
  424. package/lib/graph-manager/CubeProject.js.map +1 -0
  425. package/lib/graph-manager/CubeProjectCatalog.d.ts +35 -0
  426. package/lib/graph-manager/CubeProjectCatalog.d.ts.map +1 -0
  427. package/lib/graph-manager/CubeProjectCatalog.js +17 -0
  428. package/lib/graph-manager/CubeProjectCatalog.js.map +1 -0
  429. package/lib/graph-manager/CubeService.d.ts +20 -0
  430. package/lib/graph-manager/CubeService.d.ts.map +1 -0
  431. package/lib/graph-manager/CubeService.js +22 -0
  432. package/lib/graph-manager/CubeService.js.map +1 -0
  433. package/lib/graph-manager/CubeServiceCatalog.d.ts +31 -0
  434. package/lib/graph-manager/CubeServiceCatalog.d.ts.map +1 -0
  435. package/lib/graph-manager/CubeServiceCatalog.js +17 -0
  436. package/lib/graph-manager/CubeServiceCatalog.js.map +1 -0
  437. package/lib/graph-manager/protocol/pure/CubeEngineBuilder.d.ts +111 -2
  438. package/lib/graph-manager/protocol/pure/CubeEngineBuilder.d.ts.map +1 -1
  439. package/lib/graph-manager/protocol/pure/CubeEngineBuilder.js +108 -1
  440. package/lib/graph-manager/protocol/pure/CubeEngineBuilder.js.map +1 -1
  441. package/lib/graph-manager/protocol/pure/v1/V1_CubeDataProductArtifact.d.ts +44 -0
  442. package/lib/graph-manager/protocol/pure/v1/V1_CubeDataProductArtifact.d.ts.map +1 -0
  443. package/lib/graph-manager/protocol/pure/v1/V1_CubeDataProductArtifact.js +192 -0
  444. package/lib/graph-manager/protocol/pure/v1/V1_CubeDataProductArtifact.js.map +1 -0
  445. package/lib/graph-manager/protocol/pure/v1/V1_CubeDataProductModel.d.ts +32 -0
  446. package/lib/graph-manager/protocol/pure/v1/V1_CubeDataProductModel.d.ts.map +1 -0
  447. package/lib/graph-manager/protocol/pure/v1/V1_CubeDataProductModel.js +88 -0
  448. package/lib/graph-manager/protocol/pure/v1/V1_CubeDataProductModel.js.map +1 -0
  449. package/lib/graph-manager/protocol/pure/v1/V1_CubeDirectConnection.d.ts +41 -0
  450. package/lib/graph-manager/protocol/pure/v1/V1_CubeDirectConnection.d.ts.map +1 -0
  451. package/lib/graph-manager/protocol/pure/v1/V1_CubeDirectConnection.js +246 -0
  452. package/lib/graph-manager/protocol/pure/v1/V1_CubeDirectConnection.js.map +1 -0
  453. package/lib/graph-manager/protocol/pure/v1/V1_CubeDirectModel.d.ts +43 -0
  454. package/lib/graph-manager/protocol/pure/v1/V1_CubeDirectModel.d.ts.map +1 -0
  455. package/lib/graph-manager/protocol/pure/v1/V1_CubeDirectModel.js +112 -0
  456. package/lib/graph-manager/protocol/pure/v1/V1_CubeDirectModel.js.map +1 -0
  457. package/lib/graph-manager/protocol/pure/v1/V1_CubeEngineErrors.d.ts.map +1 -1
  458. package/lib/graph-manager/protocol/pure/v1/V1_CubeEngineErrors.js +30 -4
  459. package/lib/graph-manager/protocol/pure/v1/V1_CubeEngineErrors.js.map +1 -1
  460. package/lib/graph-manager/protocol/pure/v1/V1_CubeExpression.d.ts +23 -0
  461. package/lib/graph-manager/protocol/pure/v1/V1_CubeExpression.d.ts.map +1 -0
  462. package/lib/graph-manager/protocol/pure/v1/V1_CubeExpression.js +68 -0
  463. package/lib/graph-manager/protocol/pure/v1/V1_CubeExpression.js.map +1 -0
  464. package/lib/graph-manager/protocol/pure/v1/V1_CubeFunctionOutlineBuilder.d.ts +30 -0
  465. package/lib/graph-manager/protocol/pure/v1/V1_CubeFunctionOutlineBuilder.d.ts.map +1 -0
  466. package/lib/graph-manager/protocol/pure/v1/V1_CubeFunctionOutlineBuilder.js +229 -0
  467. package/lib/graph-manager/protocol/pure/v1/V1_CubeFunctionOutlineBuilder.js.map +1 -0
  468. package/lib/graph-manager/protocol/pure/v1/V1_CubeIngestDefinition.d.ts +30 -0
  469. package/lib/graph-manager/protocol/pure/v1/V1_CubeIngestDefinition.d.ts.map +1 -0
  470. package/lib/graph-manager/protocol/pure/v1/V1_CubeIngestDefinition.js +149 -0
  471. package/lib/graph-manager/protocol/pure/v1/V1_CubeIngestDefinition.js.map +1 -0
  472. package/lib/graph-manager/protocol/pure/v1/V1_CubeIngestModel.d.ts +57 -0
  473. package/lib/graph-manager/protocol/pure/v1/V1_CubeIngestModel.d.ts.map +1 -0
  474. package/lib/graph-manager/protocol/pure/v1/V1_CubeIngestModel.js +120 -0
  475. package/lib/graph-manager/protocol/pure/v1/V1_CubeIngestModel.js.map +1 -0
  476. package/lib/graph-manager/protocol/pure/v1/V1_CubeLakehouseEnvironmentResolver.d.ts +33 -0
  477. package/lib/graph-manager/protocol/pure/v1/V1_CubeLakehouseEnvironmentResolver.d.ts.map +1 -0
  478. package/lib/graph-manager/protocol/pure/v1/V1_CubeLakehouseEnvironmentResolver.js +94 -0
  479. package/lib/graph-manager/protocol/pure/v1/V1_CubeLakehouseEnvironmentResolver.js.map +1 -0
  480. package/lib/graph-manager/protocol/pure/v1/V1_CubeLambdaReader.d.ts +34 -0
  481. package/lib/graph-manager/protocol/pure/v1/V1_CubeLambdaReader.d.ts.map +1 -0
  482. package/lib/graph-manager/protocol/pure/v1/V1_CubeLambdaReader.js +332 -0
  483. package/lib/graph-manager/protocol/pure/v1/V1_CubeLambdaReader.js.map +1 -0
  484. package/lib/graph-manager/protocol/pure/v1/V1_CubeLambdaSerializer.d.ts.map +1 -1
  485. package/lib/graph-manager/protocol/pure/v1/V1_CubeLambdaSerializer.js +111 -13
  486. package/lib/graph-manager/protocol/pure/v1/V1_CubeLambdaSerializer.js.map +1 -1
  487. package/lib/graph-manager/protocol/pure/v1/V1_CubeModelOutlineBuilder.d.ts +1 -1
  488. package/lib/graph-manager/protocol/pure/v1/V1_CubeModelOutlineBuilder.d.ts.map +1 -1
  489. package/lib/graph-manager/protocol/pure/v1/V1_CubeModelOutlineBuilder.js +3 -1
  490. package/lib/graph-manager/protocol/pure/v1/V1_CubeModelOutlineBuilder.js.map +1 -1
  491. package/lib/graph-manager/protocol/pure/v1/V1_CubeSchemaExploration.d.ts +67 -0
  492. package/lib/graph-manager/protocol/pure/v1/V1_CubeSchemaExploration.d.ts.map +1 -0
  493. package/lib/graph-manager/protocol/pure/v1/V1_CubeSchemaExploration.js +238 -0
  494. package/lib/graph-manager/protocol/pure/v1/V1_CubeSchemaExploration.js.map +1 -0
  495. package/lib/graph-manager/protocol/pure/v1/V1_LegendCubeConnectionExplorer.d.ts +35 -0
  496. package/lib/graph-manager/protocol/pure/v1/V1_LegendCubeConnectionExplorer.d.ts.map +1 -0
  497. package/lib/graph-manager/protocol/pure/v1/V1_LegendCubeConnectionExplorer.js +65 -0
  498. package/lib/graph-manager/protocol/pure/v1/V1_LegendCubeConnectionExplorer.js.map +1 -0
  499. package/lib/graph-manager/protocol/pure/v1/V1_LegendCubeDataProductCatalog.d.ts +104 -0
  500. package/lib/graph-manager/protocol/pure/v1/V1_LegendCubeDataProductCatalog.d.ts.map +1 -0
  501. package/lib/graph-manager/protocol/pure/v1/V1_LegendCubeDataProductCatalog.js +484 -0
  502. package/lib/graph-manager/protocol/pure/v1/V1_LegendCubeDataProductCatalog.js.map +1 -0
  503. package/lib/graph-manager/protocol/pure/v1/V1_LegendCubeEngine.d.ts +115 -3
  504. package/lib/graph-manager/protocol/pure/v1/V1_LegendCubeEngine.d.ts.map +1 -1
  505. package/lib/graph-manager/protocol/pure/v1/V1_LegendCubeEngine.js +654 -21
  506. package/lib/graph-manager/protocol/pure/v1/V1_LegendCubeEngine.js.map +1 -1
  507. package/lib/graph-manager/protocol/pure/v1/V1_LegendCubeIngestCatalog.d.ts +69 -0
  508. package/lib/graph-manager/protocol/pure/v1/V1_LegendCubeIngestCatalog.d.ts.map +1 -0
  509. package/lib/graph-manager/protocol/pure/v1/V1_LegendCubeIngestCatalog.js +270 -0
  510. package/lib/graph-manager/protocol/pure/v1/V1_LegendCubeIngestCatalog.js.map +1 -0
  511. package/lib/graph-manager/protocol/pure/v1/V1_LegendCubeProjectCatalog.d.ts +35 -0
  512. package/lib/graph-manager/protocol/pure/v1/V1_LegendCubeProjectCatalog.d.ts.map +1 -0
  513. package/lib/graph-manager/protocol/pure/v1/V1_LegendCubeProjectCatalog.js +94 -0
  514. package/lib/graph-manager/protocol/pure/v1/V1_LegendCubeProjectCatalog.js.map +1 -0
  515. package/lib/graph-manager/protocol/pure/v1/V1_LegendCubeServiceCatalog.d.ts +31 -0
  516. package/lib/graph-manager/protocol/pure/v1/V1_LegendCubeServiceCatalog.d.ts.map +1 -0
  517. package/lib/graph-manager/protocol/pure/v1/V1_LegendCubeServiceCatalog.js +69 -0
  518. package/lib/graph-manager/protocol/pure/v1/V1_LegendCubeServiceCatalog.js.map +1 -0
  519. package/lib/graph-manager/protocol/pure/v1/__test-utils__/V1_CubeConnectionExplorerTestUtils.d.ts +25 -0
  520. package/lib/graph-manager/protocol/pure/v1/__test-utils__/V1_CubeConnectionExplorerTestUtils.d.ts.map +1 -0
  521. package/lib/graph-manager/protocol/pure/v1/__test-utils__/V1_CubeConnectionExplorerTestUtils.js +47 -0
  522. package/lib/graph-manager/protocol/pure/v1/__test-utils__/V1_CubeConnectionExplorerTestUtils.js.map +1 -0
  523. package/lib/graph-manager/protocol/pure/v1/__test-utils__/V1_CubeDataProductFixtures.d.ts +28 -0
  524. package/lib/graph-manager/protocol/pure/v1/__test-utils__/V1_CubeDataProductFixtures.d.ts.map +1 -0
  525. package/lib/graph-manager/protocol/pure/v1/__test-utils__/V1_CubeDataProductFixtures.js +310 -0
  526. package/lib/graph-manager/protocol/pure/v1/__test-utils__/V1_CubeDataProductFixtures.js.map +1 -0
  527. package/lib/graph-manager/protocol/pure/v1/__test-utils__/V1_CubeDataProductSearchFixtures.d.ts +33 -0
  528. package/lib/graph-manager/protocol/pure/v1/__test-utils__/V1_CubeDataProductSearchFixtures.d.ts.map +1 -0
  529. package/lib/graph-manager/protocol/pure/v1/__test-utils__/V1_CubeDataProductSearchFixtures.js +188 -0
  530. package/lib/graph-manager/protocol/pure/v1/__test-utils__/V1_CubeDataProductSearchFixtures.js.map +1 -0
  531. package/lib/graph-manager/protocol/pure/v1/__test-utils__/V1_CubeEngineTestUtils.d.ts +1 -1
  532. package/lib/graph-manager/protocol/pure/v1/__test-utils__/V1_CubeEngineTestUtils.d.ts.map +1 -1
  533. package/lib/graph-manager/protocol/pure/v1/__test-utils__/V1_CubeEngineTestUtils.js +33 -3
  534. package/lib/graph-manager/protocol/pure/v1/__test-utils__/V1_CubeEngineTestUtils.js.map +1 -1
  535. package/lib/index.css +2 -2
  536. package/lib/index.css.map +1 -1
  537. package/lib/index.d.ts +22 -3
  538. package/lib/index.d.ts.map +1 -1
  539. package/lib/index.js +19 -1
  540. package/lib/index.js.map +1 -1
  541. package/lib/stores/CubeAddPlacement.d.ts +39 -0
  542. package/lib/stores/CubeAddPlacement.d.ts.map +1 -0
  543. package/lib/stores/CubeAddPlacement.js +51 -0
  544. package/lib/stores/CubeAddPlacement.js.map +1 -0
  545. package/lib/stores/CubeDataProductRecheck.d.ts +27 -0
  546. package/lib/stores/CubeDataProductRecheck.d.ts.map +1 -0
  547. package/lib/stores/CubeDataProductRecheck.js +54 -0
  548. package/lib/stores/CubeDataProductRecheck.js.map +1 -0
  549. package/lib/stores/CubeDataProductRuntimeState.d.ts +88 -0
  550. package/lib/stores/CubeDataProductRuntimeState.d.ts.map +1 -0
  551. package/lib/stores/CubeDataProductRuntimeState.js +190 -0
  552. package/lib/stores/CubeDataProductRuntimeState.js.map +1 -0
  553. package/lib/stores/CubeDataProductWarehouse.d.ts +19 -0
  554. package/lib/stores/CubeDataProductWarehouse.d.ts.map +1 -0
  555. package/lib/stores/CubeDataProductWarehouse.js +25 -0
  556. package/lib/stores/CubeDataProductWarehouse.js.map +1 -0
  557. package/lib/stores/CubeDevSettingsState.d.ts +47 -0
  558. package/lib/stores/CubeDevSettingsState.d.ts.map +1 -0
  559. package/lib/stores/CubeDevSettingsState.js +99 -0
  560. package/lib/stores/CubeDevSettingsState.js.map +1 -0
  561. package/lib/stores/CubeEditorState.d.ts +242 -28
  562. package/lib/stores/CubeEditorState.d.ts.map +1 -1
  563. package/lib/stores/CubeEditorState.js +751 -66
  564. package/lib/stores/CubeEditorState.js.map +1 -1
  565. package/lib/stores/CubeEngineChecks.d.ts +59 -0
  566. package/lib/stores/CubeEngineChecks.d.ts.map +1 -0
  567. package/lib/stores/CubeEngineChecks.js +100 -0
  568. package/lib/stores/CubeEngineChecks.js.map +1 -0
  569. package/lib/stores/CubeEntrySource.d.ts +78 -0
  570. package/lib/stores/CubeEntrySource.d.ts.map +1 -0
  571. package/lib/stores/CubeEntrySource.js +200 -0
  572. package/lib/stores/CubeEntrySource.js.map +1 -0
  573. package/lib/stores/CubeExamples.d.ts +43 -0
  574. package/lib/stores/CubeExamples.d.ts.map +1 -0
  575. package/lib/stores/CubeExamples.js +333 -0
  576. package/lib/stores/CubeExamples.js.map +1 -0
  577. package/lib/stores/CubeExamplesState.d.ts +45 -0
  578. package/lib/stores/CubeExamplesState.d.ts.map +1 -0
  579. package/lib/stores/CubeExamplesState.js +81 -0
  580. package/lib/stores/CubeExamplesState.js.map +1 -0
  581. package/lib/stores/CubeExecutionState.d.ts +6 -2
  582. package/lib/stores/CubeExecutionState.d.ts.map +1 -1
  583. package/lib/stores/CubeExecutionState.js +39 -38
  584. package/lib/stores/CubeExecutionState.js.map +1 -1
  585. package/lib/stores/CubeExportState.d.ts +41 -0
  586. package/lib/stores/CubeExportState.d.ts.map +1 -0
  587. package/lib/stores/CubeExportState.js +134 -0
  588. package/lib/stores/CubeExportState.js.map +1 -0
  589. package/lib/stores/CubeExpressionFilterCheck.d.ts +51 -0
  590. package/lib/stores/CubeExpressionFilterCheck.d.ts.map +1 -0
  591. package/lib/stores/CubeExpressionFilterCheck.js +134 -0
  592. package/lib/stores/CubeExpressionFilterCheck.js.map +1 -0
  593. package/lib/stores/CubeExtendTyping.d.ts +64 -0
  594. package/lib/stores/CubeExtendTyping.d.ts.map +1 -0
  595. package/lib/stores/CubeExtendTyping.js +149 -0
  596. package/lib/stores/CubeExtendTyping.js.map +1 -0
  597. package/lib/stores/CubeFunctionRecheck.d.ts +30 -0
  598. package/lib/stores/CubeFunctionRecheck.d.ts.map +1 -0
  599. package/lib/stores/CubeFunctionRecheck.js +67 -0
  600. package/lib/stores/CubeFunctionRecheck.js.map +1 -0
  601. package/lib/stores/CubeGridFetcher.d.ts +75 -0
  602. package/lib/stores/CubeGridFetcher.d.ts.map +1 -0
  603. package/lib/stores/CubeGridFetcher.js +197 -0
  604. package/lib/stores/CubeGridFetcher.js.map +1 -0
  605. package/lib/stores/CubeGridQuickActions.d.ts +27 -7
  606. package/lib/stores/CubeGridQuickActions.d.ts.map +1 -1
  607. package/lib/stores/CubeGridQuickActions.js +79 -21
  608. package/lib/stores/CubeGridQuickActions.js.map +1 -1
  609. package/lib/stores/CubeGridState.d.ts +136 -0
  610. package/lib/stores/CubeGridState.d.ts.map +1 -0
  611. package/lib/stores/CubeGridState.js +317 -0
  612. package/lib/stores/CubeGridState.js.map +1 -0
  613. package/lib/stores/CubeHost.d.ts +74 -1
  614. package/lib/stores/CubeHost.d.ts.map +1 -1
  615. package/lib/stores/CubeHost.js +25 -1
  616. package/lib/stores/CubeHost.js.map +1 -1
  617. package/lib/stores/CubeIngestRecheck.d.ts +26 -0
  618. package/lib/stores/CubeIngestRecheck.d.ts.map +1 -0
  619. package/lib/stores/CubeIngestRecheck.js +53 -0
  620. package/lib/stores/CubeIngestRecheck.js.map +1 -0
  621. package/lib/stores/CubeLambdaImportState.d.ts +118 -0
  622. package/lib/stores/CubeLambdaImportState.d.ts.map +1 -0
  623. package/lib/stores/CubeLambdaImportState.js +302 -0
  624. package/lib/stores/CubeLambdaImportState.js.map +1 -0
  625. package/lib/stores/CubeLambdaSources.d.ts +45 -0
  626. package/lib/stores/CubeLambdaSources.d.ts.map +1 -0
  627. package/lib/stores/CubeLambdaSources.js +261 -0
  628. package/lib/stores/CubeLambdaSources.js.map +1 -0
  629. package/lib/stores/CubeNodeEditorState.d.ts +101 -5
  630. package/lib/stores/CubeNodeEditorState.d.ts.map +1 -1
  631. package/lib/stores/CubeNodeEditorState.js +221 -10
  632. package/lib/stores/CubeNodeEditorState.js.map +1 -1
  633. package/lib/stores/CubeQueryRun.d.ts +59 -0
  634. package/lib/stores/CubeQueryRun.d.ts.map +1 -0
  635. package/lib/stores/CubeQueryRun.js +101 -0
  636. package/lib/stores/CubeQueryRun.js.map +1 -0
  637. package/lib/stores/CubeRunStatsState.d.ts +61 -0
  638. package/lib/stores/CubeRunStatsState.d.ts.map +1 -0
  639. package/lib/stores/CubeRunStatsState.js +54 -0
  640. package/lib/stores/CubeRunStatsState.js.map +1 -0
  641. package/lib/stores/CubeRunningStepLambda.d.ts +25 -0
  642. package/lib/stores/CubeRunningStepLambda.d.ts.map +1 -0
  643. package/lib/stores/CubeRunningStepLambda.js +45 -0
  644. package/lib/stores/CubeRunningStepLambda.js.map +1 -0
  645. package/lib/stores/CubeServiceRecheck.d.ts +29 -0
  646. package/lib/stores/CubeServiceRecheck.d.ts.map +1 -0
  647. package/lib/stores/CubeServiceRecheck.js +33 -0
  648. package/lib/stores/CubeServiceRecheck.js.map +1 -0
  649. package/lib/stores/CubeShowPureState.d.ts +18 -2
  650. package/lib/stores/CubeShowPureState.d.ts.map +1 -1
  651. package/lib/stores/CubeShowPureState.js +46 -13
  652. package/lib/stores/CubeShowPureState.js.map +1 -1
  653. package/lib/stores/CubeSourcePickerState.d.ts +70 -65
  654. package/lib/stores/CubeSourcePickerState.d.ts.map +1 -1
  655. package/lib/stores/CubeSourcePickerState.js +207 -267
  656. package/lib/stores/CubeSourcePickerState.js.map +1 -1
  657. package/lib/stores/CubeSpecTransferState.d.ts +2 -2
  658. package/lib/stores/CubeSpecTransferState.js +2 -2
  659. package/lib/stores/LocalModelCatalog.d.ts +2 -0
  660. package/lib/stores/LocalModelCatalog.d.ts.map +1 -1
  661. package/lib/stores/LocalModelCatalog.js +19 -3
  662. package/lib/stores/LocalModelCatalog.js.map +1 -1
  663. package/lib/stores/editors/CubeAggregationRows.d.ts +80 -0
  664. package/lib/stores/editors/CubeAggregationRows.d.ts.map +1 -0
  665. package/lib/stores/editors/CubeAggregationRows.js +164 -0
  666. package/lib/stores/editors/CubeAggregationRows.js.map +1 -0
  667. package/lib/stores/editors/CubeConcatDraft.d.ts +30 -0
  668. package/lib/stores/editors/CubeConcatDraft.d.ts.map +1 -0
  669. package/lib/stores/editors/CubeConcatDraft.js +44 -0
  670. package/lib/stores/editors/CubeConcatDraft.js.map +1 -0
  671. package/lib/stores/editors/CubeDifferenceDraft.d.ts +49 -0
  672. package/lib/stores/editors/CubeDifferenceDraft.d.ts.map +1 -0
  673. package/lib/stores/editors/CubeDifferenceDraft.js +111 -0
  674. package/lib/stores/editors/CubeDifferenceDraft.js.map +1 -0
  675. package/lib/stores/editors/CubeExpressionFilterDraft.d.ts +91 -0
  676. package/lib/stores/editors/CubeExpressionFilterDraft.d.ts.map +1 -0
  677. package/lib/stores/editors/CubeExpressionFilterDraft.js +254 -0
  678. package/lib/stores/editors/CubeExpressionFilterDraft.js.map +1 -0
  679. package/lib/stores/editors/CubeExtendDraft.d.ts +110 -0
  680. package/lib/stores/editors/CubeExtendDraft.d.ts.map +1 -0
  681. package/lib/stores/editors/CubeExtendDraft.js +359 -0
  682. package/lib/stores/editors/CubeExtendDraft.js.map +1 -0
  683. package/lib/stores/editors/CubeFunctionDraft.d.ts +34 -0
  684. package/lib/stores/editors/CubeFunctionDraft.d.ts.map +1 -0
  685. package/lib/stores/editors/CubeFunctionDraft.js +69 -0
  686. package/lib/stores/editors/CubeFunctionDraft.js.map +1 -0
  687. package/lib/stores/editors/CubeGroupDraft.d.ts +61 -0
  688. package/lib/stores/editors/CubeGroupDraft.d.ts.map +1 -0
  689. package/lib/stores/editors/CubeGroupDraft.js +106 -0
  690. package/lib/stores/editors/CubeGroupDraft.js.map +1 -0
  691. package/lib/stores/editors/CubeJoinDraft.d.ts +9 -10
  692. package/lib/stores/editors/CubeJoinDraft.d.ts.map +1 -1
  693. package/lib/stores/editors/CubeJoinDraft.js +92 -21
  694. package/lib/stores/editors/CubeJoinDraft.js.map +1 -1
  695. package/lib/stores/editors/CubeJoinKeyPairs.d.ts +38 -0
  696. package/lib/stores/editors/CubeJoinKeyPairs.d.ts.map +1 -0
  697. package/lib/stores/editors/CubeJoinKeyPairs.js +33 -0
  698. package/lib/stores/editors/CubeJoinKeyPairs.js.map +1 -0
  699. package/lib/stores/editors/CubeNodeDraft.d.ts +20 -6
  700. package/lib/stores/editors/CubeNodeDraft.d.ts.map +1 -1
  701. package/lib/stores/editors/CubeNodeDraft.js +23 -5
  702. package/lib/stores/editors/CubeNodeDraft.js.map +1 -1
  703. package/lib/stores/editors/CubeNodeDraftRegistry.d.ts +4 -2
  704. package/lib/stores/editors/CubeNodeDraftRegistry.d.ts.map +1 -1
  705. package/lib/stores/editors/CubeNodeDraftRegistry.js +39 -3
  706. package/lib/stores/editors/CubeNodeDraftRegistry.js.map +1 -1
  707. package/lib/stores/editors/CubePartitionDraft.d.ts +70 -0
  708. package/lib/stores/editors/CubePartitionDraft.d.ts.map +1 -0
  709. package/lib/stores/editors/CubePartitionDraft.js +154 -0
  710. package/lib/stores/editors/CubePartitionDraft.js.map +1 -0
  711. package/lib/stores/editors/CubePivotDraft.d.ts +93 -0
  712. package/lib/stores/editors/CubePivotDraft.d.ts.map +1 -0
  713. package/lib/stores/editors/CubePivotDraft.js +267 -0
  714. package/lib/stores/editors/CubePivotDraft.js.map +1 -0
  715. package/lib/stores/editors/CubeSortDraft.d.ts +2 -10
  716. package/lib/stores/editors/CubeSortDraft.d.ts.map +1 -1
  717. package/lib/stores/editors/CubeSortDraft.js +9 -35
  718. package/lib/stores/editors/CubeSortDraft.js.map +1 -1
  719. package/lib/stores/editors/CubeSortRows.d.ts +34 -0
  720. package/lib/stores/editors/CubeSortRows.d.ts.map +1 -0
  721. package/lib/stores/editors/CubeSortRows.js +50 -0
  722. package/lib/stores/editors/CubeSortRows.js.map +1 -0
  723. package/lib/stores/fixtures/CubeNorthwindModel.d.ts +7 -0
  724. package/lib/stores/fixtures/CubeNorthwindModel.d.ts.map +1 -1
  725. package/lib/stores/fixtures/CubeNorthwindModel.js +99 -87
  726. package/lib/stores/fixtures/CubeNorthwindModel.js.map +1 -1
  727. package/lib/stores/fixtures/CubeSalesDuckDbModel.d.ts +26 -0
  728. package/lib/stores/fixtures/CubeSalesDuckDbModel.d.ts.map +1 -0
  729. package/lib/stores/fixtures/CubeSalesDuckDbModel.js +46 -0
  730. package/lib/stores/fixtures/CubeSalesDuckDbModel.js.map +1 -0
  731. package/lib/stores/fixtures/CubeSampleSql.d.ts +34 -0
  732. package/lib/stores/fixtures/CubeSampleSql.d.ts.map +1 -0
  733. package/lib/stores/fixtures/CubeSampleSql.js +64 -0
  734. package/lib/stores/fixtures/CubeSampleSql.js.map +1 -0
  735. package/lib/stores/fixtures/CubeSportsModel.d.ts +27 -0
  736. package/lib/stores/fixtures/CubeSportsModel.d.ts.map +1 -0
  737. package/lib/stores/fixtures/CubeSportsModel.js +158 -0
  738. package/lib/stores/fixtures/CubeSportsModel.js.map +1 -0
  739. package/lib/stores/fixtures/CubeTradesModel.d.ts +33 -0
  740. package/lib/stores/fixtures/CubeTradesModel.d.ts.map +1 -0
  741. package/lib/stores/fixtures/CubeTradesModel.js +227 -0
  742. package/lib/stores/fixtures/CubeTradesModel.js.map +1 -0
  743. package/lib/stores/source-picker/CubeCsvSetupSql.d.ts +71 -0
  744. package/lib/stores/source-picker/CubeCsvSetupSql.d.ts.map +1 -0
  745. package/lib/stores/source-picker/CubeCsvSetupSql.js +392 -0
  746. package/lib/stores/source-picker/CubeCsvSetupSql.js.map +1 -0
  747. package/lib/stores/source-picker/CubeDataProductTabState.d.ts +215 -0
  748. package/lib/stores/source-picker/CubeDataProductTabState.d.ts.map +1 -0
  749. package/lib/stores/source-picker/CubeDataProductTabState.js +766 -0
  750. package/lib/stores/source-picker/CubeDataProductTabState.js.map +1 -0
  751. package/lib/stores/source-picker/CubeDirectConnectionTabState.d.ts +163 -0
  752. package/lib/stores/source-picker/CubeDirectConnectionTabState.d.ts.map +1 -0
  753. package/lib/stores/source-picker/CubeDirectConnectionTabState.js +668 -0
  754. package/lib/stores/source-picker/CubeDirectConnectionTabState.js.map +1 -0
  755. package/lib/stores/source-picker/CubeIngestTabState.d.ts +127 -0
  756. package/lib/stores/source-picker/CubeIngestTabState.d.ts.map +1 -0
  757. package/lib/stores/source-picker/CubeIngestTabState.js +510 -0
  758. package/lib/stores/source-picker/CubeIngestTabState.js.map +1 -0
  759. package/lib/stores/source-picker/CubeInlineModelTabState.d.ts +203 -0
  760. package/lib/stores/source-picker/CubeInlineModelTabState.d.ts.map +1 -0
  761. package/lib/stores/source-picker/CubeInlineModelTabState.js +734 -0
  762. package/lib/stores/source-picker/CubeInlineModelTabState.js.map +1 -0
  763. package/lib/stores/source-picker/CubeProjectTabState.d.ts +77 -0
  764. package/lib/stores/source-picker/CubeProjectTabState.d.ts.map +1 -0
  765. package/lib/stores/source-picker/CubeProjectTabState.js +206 -0
  766. package/lib/stores/source-picker/CubeProjectTabState.js.map +1 -0
  767. package/lib/stores/source-picker/CubeServiceTabState.d.ts +74 -0
  768. package/lib/stores/source-picker/CubeServiceTabState.d.ts.map +1 -0
  769. package/lib/stores/source-picker/CubeServiceTabState.js +216 -0
  770. package/lib/stores/source-picker/CubeServiceTabState.js.map +1 -0
  771. package/lib/stores/source-picker/CubeSourcePickerTab.d.ts +60 -0
  772. package/lib/stores/source-picker/CubeSourcePickerTab.d.ts.map +1 -0
  773. package/lib/stores/source-picker/CubeSourcePickerTab.js +45 -0
  774. package/lib/stores/source-picker/CubeSourcePickerTab.js.map +1 -0
  775. package/package.json +12 -7
  776. package/src/__lib__/LegendCubeCommand.ts +12 -0
  777. package/src/__lib__/LegendCubeDataProductLabels.ts +91 -0
  778. package/src/__lib__/LegendCubeDirectConnectionLabels.ts +111 -0
  779. package/src/__lib__/LegendCubeFunctionLabels.ts +41 -0
  780. package/src/__lib__/LegendCubeHelpText.ts +48 -2
  781. package/src/__lib__/LegendCubeIngestLabels.ts +40 -0
  782. package/src/__lib__/LegendCubeLabels.ts +327 -12
  783. package/src/__lib__/LegendCubeProjectLabels.ts +25 -0
  784. package/src/__lib__/LegendCubeProjectSourceLabels.ts +26 -0
  785. package/src/__lib__/LegendCubeServiceLabels.ts +41 -0
  786. package/src/__lib__/LegendCubeTesting.ts +8 -0
  787. package/src/__test-utils__/CubeCanvasTestUtils.ts +1 -1
  788. package/src/__test-utils__/CubeConnectionTestSupport.ts +45 -0
  789. package/src/__test-utils__/CubeDirectConnectionFixtures.ts +70 -0
  790. package/src/__test-utils__/CubeEngineTestSupport.ts +40 -1
  791. package/src/__test-utils__/CubeExpressionTestUtils.ts +146 -0
  792. package/src/__test-utils__/CubeFunctionTestOutline.ts +78 -0
  793. package/src/__test-utils__/CubeLambdaCorpus.ts +137 -0
  794. package/src/__test-utils__/CubeOperationsTestUtils.ts +93 -18
  795. package/src/__test-utils__/CubePageTestUtils.tsx +69 -0
  796. package/src/__test-utils__/CubeTestApplication.ts +46 -2
  797. package/src/__test-utils__/FakeCubeConnectionExplorer.ts +111 -0
  798. package/src/__test-utils__/FakeCubeDataProductCatalog.ts +227 -0
  799. package/src/__test-utils__/FakeCubeEngine.ts +52 -1
  800. package/src/__test-utils__/FakeCubeIngestCatalog.ts +198 -0
  801. package/src/__test-utils__/FakeCubeProjectCatalog.ts +89 -0
  802. package/src/__test-utils__/FakeCubeServiceCatalog.ts +57 -0
  803. package/src/components/CubeAddItems.tsx +186 -0
  804. package/src/components/CubeDialogTheme.ts +25 -0
  805. package/src/components/CubeEditor.tsx +195 -140
  806. package/src/components/CubeEntrySourceBanner.tsx +64 -0
  807. package/src/components/CubeFileMenu.tsx +127 -0
  808. package/src/components/CubeLambdaImportBanner.tsx +97 -0
  809. package/src/components/CubeNodeIcon.tsx +20 -0
  810. package/src/components/CubeSchemaColumnsTable.tsx +54 -0
  811. package/src/components/canvas/CubeCanvas.tsx +94 -20
  812. package/src/components/canvas/CubeCanvasContextMenu.tsx +64 -32
  813. package/src/components/canvas/CubeCanvasDnd.ts +16 -9
  814. package/src/components/canvas/CubeCanvasElements.ts +84 -5
  815. package/src/components/canvas/CubeCanvasLayout.ts +1 -1
  816. package/src/components/canvas/CubeCanvasNode.tsx +88 -43
  817. package/src/components/canvas/CubeCanvasNodeFocus.ts +37 -0
  818. package/src/components/canvas/CubeNodeEditorAnchor.ts +82 -0
  819. package/src/components/dev-settings/CubeDevSettings.tsx +154 -0
  820. package/src/components/editors/CubeAggregationRowEditor.tsx +224 -0
  821. package/src/components/editors/CubeColumnChecklist.tsx +136 -0
  822. package/src/components/editors/CubeColumnPicker.tsx +6 -3
  823. package/src/components/editors/CubeConcatEditor.tsx +374 -0
  824. package/src/components/editors/CubeDataProductSourceEditor.tsx +134 -0
  825. package/src/components/editors/CubeDifferenceEditor.tsx +87 -0
  826. package/src/components/editors/CubeExpressionFilterEditor.tsx +193 -0
  827. package/src/components/editors/CubeExtendEditor.tsx +271 -0
  828. package/src/components/editors/CubeFilterEditor.tsx +20 -1
  829. package/src/components/editors/CubeFunctionSourceEditor.tsx +140 -0
  830. package/src/components/editors/CubeGroupEditor.tsx +135 -0
  831. package/src/components/editors/CubeIngestSourceEditor.tsx +104 -0
  832. package/src/components/editors/CubeJoinEditor.tsx +34 -135
  833. package/src/components/editors/CubeJoinKeyRows.tsx +183 -0
  834. package/src/components/editors/CubeNodeEditorPanel.tsx +111 -36
  835. package/src/components/editors/CubeNodeEditorPopper.tsx +191 -0
  836. package/src/components/editors/CubeNodeEditorRegistry.ts +33 -0
  837. package/src/components/editors/CubePartitionEditor.tsx +208 -0
  838. package/src/components/editors/CubePivotEditor.tsx +277 -0
  839. package/src/components/editors/CubeRenameEditor.tsx +10 -5
  840. package/src/components/editors/CubeRestrictEditor.tsx +9 -3
  841. package/src/components/editors/CubeServiceSourceEditor.tsx +77 -0
  842. package/src/components/editors/CubeSortEditor.tsx +20 -142
  843. package/src/components/editors/CubeSortRowEditor.tsx +176 -0
  844. package/src/components/editors/CubeSourceEditor.tsx +42 -30
  845. package/src/components/editors/CubeWarehouseControl.tsx +113 -0
  846. package/src/components/editors/useCubeNodeEditorDismiss.ts +103 -0
  847. package/src/components/examples/CubeExamplesDialog.tsx +199 -0
  848. package/src/components/grid/CubeColumnFormatDialog.tsx +289 -0
  849. package/src/components/grid/CubeDrilldownBar.tsx +219 -0
  850. package/src/components/grid/CubeGridRegion.tsx +214 -60
  851. package/src/components/grid/CubeGridValues.ts +201 -1
  852. package/src/components/grid/CubeResultGrid.tsx +461 -43
  853. package/src/components/grid/CubeRunStatsPanel.tsx +156 -0
  854. package/src/components/grid/CubeServerSideGrid.tsx +200 -0
  855. package/src/components/grid/CubeSqlDialog.tsx +90 -0
  856. package/src/components/grid/CubeSqlFormat.ts +37 -0
  857. package/src/components/palette/CubePalette.tsx +70 -19
  858. package/src/components/show-pure/CubeShowPureDialog.tsx +19 -5
  859. package/src/components/source-picker/CubeDataProductTab.tsx +486 -0
  860. package/src/components/source-picker/CubeDirectConnectionTab.tsx +352 -0
  861. package/src/components/source-picker/CubeFunctionSteps.tsx +244 -0
  862. package/src/components/source-picker/CubeIngestTab.tsx +312 -0
  863. package/src/components/source-picker/CubeInlineModelTab.tsx +220 -0
  864. package/src/components/source-picker/CubePickerListItem.tsx +118 -0
  865. package/src/components/source-picker/CubePickerStep.tsx +49 -0
  866. package/src/components/source-picker/CubeProjectTab.tsx +117 -0
  867. package/src/components/source-picker/CubeServiceTab.tsx +151 -0
  868. package/src/components/source-picker/CubeSourcePicker.tsx +99 -228
  869. package/src/components/source-picker/CubeTablePreview.tsx +49 -0
  870. package/src/components/spec-transfer/CubeImportPureDialog.tsx +122 -0
  871. package/src/components/spec-transfer/CubeSpecTransferDialog.tsx +22 -9
  872. package/src/graph-manager/CubeConnectionExplorer.ts +106 -0
  873. package/src/graph-manager/CubeDataProduct.ts +150 -0
  874. package/src/graph-manager/CubeDataProductCatalog.ts +256 -0
  875. package/src/graph-manager/CubeDirectConnection.ts +67 -0
  876. package/src/graph-manager/CubeEngine.ts +94 -2
  877. package/src/graph-manager/CubeEngineClientSettings.ts +64 -0
  878. package/src/graph-manager/CubeIngest.ts +159 -0
  879. package/src/graph-manager/CubeIngestCatalog.ts +202 -0
  880. package/src/graph-manager/CubeLakehouseEnvironment.ts +27 -0
  881. package/src/graph-manager/CubeLakehouseRuntime.ts +43 -0
  882. package/src/graph-manager/CubeProject.ts +117 -0
  883. package/src/graph-manager/CubeProjectCatalog.ts +40 -0
  884. package/src/graph-manager/CubeService.ts +29 -0
  885. package/src/graph-manager/CubeServiceCatalog.ts +35 -0
  886. package/src/graph-manager/protocol/pure/CubeEngineBuilder.ts +256 -2
  887. package/src/graph-manager/protocol/pure/v1/V1_CubeDataProductArtifact.ts +251 -0
  888. package/src/graph-manager/protocol/pure/v1/V1_CubeDataProductModel.ts +107 -0
  889. package/src/graph-manager/protocol/pure/v1/V1_CubeDirectConnection.ts +339 -0
  890. package/src/graph-manager/protocol/pure/v1/V1_CubeDirectModel.ts +151 -0
  891. package/src/graph-manager/protocol/pure/v1/V1_CubeEngineErrors.ts +45 -4
  892. package/src/graph-manager/protocol/pure/v1/V1_CubeExpression.ts +89 -0
  893. package/src/graph-manager/protocol/pure/v1/V1_CubeFunctionOutlineBuilder.ts +312 -0
  894. package/src/graph-manager/protocol/pure/v1/V1_CubeIngestDefinition.ts +227 -0
  895. package/src/graph-manager/protocol/pure/v1/V1_CubeIngestModel.ts +174 -0
  896. package/src/graph-manager/protocol/pure/v1/V1_CubeLakehouseEnvironmentResolver.ts +141 -0
  897. package/src/graph-manager/protocol/pure/v1/V1_CubeLambdaReader.ts +471 -0
  898. package/src/graph-manager/protocol/pure/v1/V1_CubeLambdaSerializer.ts +153 -18
  899. package/src/graph-manager/protocol/pure/v1/V1_CubeModelOutlineBuilder.ts +3 -1
  900. package/src/graph-manager/protocol/pure/v1/V1_CubeSchemaExploration.ts +361 -0
  901. package/src/graph-manager/protocol/pure/v1/V1_LegendCubeConnectionExplorer.ts +122 -0
  902. package/src/graph-manager/protocol/pure/v1/V1_LegendCubeDataProductCatalog.ts +744 -0
  903. package/src/graph-manager/protocol/pure/v1/V1_LegendCubeEngine.ts +1083 -25
  904. package/src/graph-manager/protocol/pure/v1/V1_LegendCubeIngestCatalog.ts +459 -0
  905. package/src/graph-manager/protocol/pure/v1/V1_LegendCubeProjectCatalog.ts +152 -0
  906. package/src/graph-manager/protocol/pure/v1/V1_LegendCubeServiceCatalog.ts +92 -0
  907. package/src/graph-manager/protocol/pure/v1/__test-utils__/V1_CubeConnectionExplorerTestUtils.ts +61 -0
  908. package/src/graph-manager/protocol/pure/v1/__test-utils__/V1_CubeDataProductFixtures.ts +337 -0
  909. package/src/graph-manager/protocol/pure/v1/__test-utils__/V1_CubeDataProductSearchFixtures.ts +206 -0
  910. package/src/graph-manager/protocol/pure/v1/__test-utils__/V1_CubeEngineTestUtils.ts +48 -2
  911. package/src/index.ts +52 -2
  912. package/src/stores/CubeAddPlacement.ts +87 -0
  913. package/src/stores/CubeDataProductRecheck.ts +93 -0
  914. package/src/stores/CubeDataProductRuntimeState.ts +256 -0
  915. package/src/stores/CubeDataProductWarehouse.ts +40 -0
  916. package/src/stores/CubeDevSettingsState.ts +117 -0
  917. package/src/stores/CubeEditorState.ts +1030 -92
  918. package/src/stores/CubeEngineChecks.ts +240 -0
  919. package/src/stores/CubeEntrySource.ts +278 -0
  920. package/src/stores/CubeExamples.ts +526 -0
  921. package/src/stores/CubeExamplesState.ts +110 -0
  922. package/src/stores/CubeExecutionState.ts +50 -62
  923. package/src/stores/CubeExportState.ts +196 -0
  924. package/src/stores/CubeExpressionFilterCheck.ts +218 -0
  925. package/src/stores/CubeExtendTyping.ts +251 -0
  926. package/src/stores/CubeFunctionRecheck.ts +97 -0
  927. package/src/stores/CubeGridFetcher.ts +302 -0
  928. package/src/stores/CubeGridQuickActions.ts +97 -20
  929. package/src/stores/CubeGridState.ts +450 -0
  930. package/src/stores/CubeHost.ts +119 -1
  931. package/src/stores/CubeIngestRecheck.ts +92 -0
  932. package/src/stores/CubeLambdaImportState.ts +434 -0
  933. package/src/stores/CubeLambdaSources.ts +390 -0
  934. package/src/stores/CubeNodeEditorState.ts +278 -9
  935. package/src/stores/CubeQueryRun.ts +169 -0
  936. package/src/stores/CubeRunStatsState.ts +91 -0
  937. package/src/stores/CubeRunningStepLambda.ts +62 -0
  938. package/src/stores/CubeServiceRecheck.ts +53 -0
  939. package/src/stores/CubeShowPureState.ts +57 -15
  940. package/src/stores/CubeSourcePickerState.ts +231 -325
  941. package/src/stores/CubeSpecTransferState.ts +2 -2
  942. package/src/stores/LocalModelCatalog.ts +27 -3
  943. package/src/stores/editors/CubeAggregationRows.ts +299 -0
  944. package/src/stores/editors/CubeConcatDraft.ts +49 -0
  945. package/src/stores/editors/CubeDifferenceDraft.ts +147 -0
  946. package/src/stores/editors/CubeExpressionFilterDraft.ts +385 -0
  947. package/src/stores/editors/CubeExtendDraft.ts +532 -0
  948. package/src/stores/editors/CubeFunctionDraft.ts +92 -0
  949. package/src/stores/editors/CubeGroupDraft.ts +145 -0
  950. package/src/stores/editors/CubeJoinDraft.ts +130 -41
  951. package/src/stores/editors/CubeJoinKeyPairs.ts +68 -0
  952. package/src/stores/editors/CubeNodeDraft.ts +26 -6
  953. package/src/stores/editors/CubeNodeDraftRegistry.ts +52 -2
  954. package/src/stores/editors/CubePartitionDraft.ts +214 -0
  955. package/src/stores/editors/CubePivotDraft.ts +355 -0
  956. package/src/stores/editors/CubeSortDraft.ts +17 -54
  957. package/src/stores/editors/CubeSortRows.ts +84 -0
  958. package/src/stores/fixtures/CubeNorthwindModel.ts +103 -88
  959. package/src/stores/fixtures/CubeSalesDuckDbModel.ts +54 -0
  960. package/src/stores/fixtures/CubeSampleSql.ts +85 -0
  961. package/src/stores/fixtures/CubeSportsModel.ts +182 -0
  962. package/src/stores/fixtures/CubeTradesModel.ts +276 -0
  963. package/src/stores/source-picker/CubeCsvSetupSql.ts +444 -0
  964. package/src/stores/source-picker/CubeDataProductTabState.ts +966 -0
  965. package/src/stores/source-picker/CubeDirectConnectionTabState.ts +846 -0
  966. package/src/stores/source-picker/CubeIngestTabState.ts +625 -0
  967. package/src/stores/source-picker/CubeInlineModelTabState.ts +928 -0
  968. package/src/stores/source-picker/CubeProjectTabState.ts +250 -0
  969. package/src/stores/source-picker/CubeServiceTabState.ts +288 -0
  970. package/src/stores/source-picker/CubeSourcePickerTab.ts +79 -0
  971. package/tsconfig.json +139 -0
@@ -22,21 +22,85 @@ import {
22
22
  type Schema,
23
23
  storeAccessor,
24
24
  } from '@finos/legend-cube';
25
- import { V1_EngineServerClient, V1_RenderStyle } from '@finos/legend-graph';
26
25
  import {
26
+ EXECUTION_SERIALIZATION_FORMAT,
27
+ V1_EngineServerClient,
28
+ V1_RenderStyle,
29
+ } from '@finos/legend-graph';
30
+ import {
31
+ ContentType,
32
+ HttpHeader,
33
+ parseLosslessJSON,
27
34
  type PlainObject,
28
35
  stringifyLosslessJSON,
29
36
  type TracerService,
30
37
  } from '@finos/legend-shared';
38
+ import type {
39
+ CubeDirectConnection,
40
+ CubeDirectDatabaseType,
41
+ } from '../../../CubeConnectionExplorer.js';
42
+ import {
43
+ checkCubeDataProductModel,
44
+ CUBE_DATA_PRODUCT_RUNTIME_PATH,
45
+ type CubeDataProductProject,
46
+ getCubeDataProductProject,
47
+ getEffectiveCubeWarehouse,
48
+ isCubeDataProductModel,
49
+ } from '../../../CubeDataProduct.js';
50
+ import {
51
+ checkCubeIngestModel,
52
+ CUBE_INGEST_RUNTIME_PATH,
53
+ type CubeIngestSettings,
54
+ getCubeIngestSettings,
55
+ isCubeIngestModel,
56
+ } from '../../../CubeIngest.js';
57
+ import type { CubeEngineClientSettings } from '../../../CubeEngineClientSettings.js';
58
+ import type { CubeDataProductModelSource } from '../../../CubeDataProductCatalog.js';
59
+ import type { CubeLakehouseEnvironment } from '../../../CubeLakehouseEnvironment.js';
60
+ import {
61
+ checkCubeProjectModel,
62
+ isCubeProjectModel,
63
+ } from '../../../CubeProject.js';
64
+ import {
65
+ CUBE_DIRECT_DATABASE_PATH,
66
+ CUBE_DIRECT_MODEL_TYPE,
67
+ CUBE_DIRECT_RUNTIME_PATH,
68
+ getCubeDirectConnection,
69
+ } from '../../../CubeDirectConnection.js';
31
70
  import {
32
71
  type AccessorPath,
33
72
  type CubeEngine,
34
73
  CubeEngineError,
35
74
  CubeEngineErrorKind,
36
75
  type CubeModelOutline,
76
+ type CubeParsedExpression,
37
77
  type CubeResult,
38
78
  type NodeId,
39
79
  } from '../../../CubeEngine.js';
80
+ import {
81
+ V1_canonicalCubeDirectConnection,
82
+ V1_checkCubeDirectConnection,
83
+ } from './V1_CubeDirectConnection.js';
84
+ import {
85
+ V1_buildCubeDataProductExecutionContext,
86
+ V1_buildCubeDataProductTypingContext,
87
+ V1_hasCubeDataProductAccessor,
88
+ } from './V1_CubeDataProductModel.js';
89
+ import {
90
+ V1_buildCubeIngestExecutionContext,
91
+ V1_buildCubeIngestTypingContext,
92
+ V1_checkCubeIngestAccessors,
93
+ V1_collectCubeIngestAccessors,
94
+ type V1_CubeIngestDefinitionSource,
95
+ V1_getCubeIngestUrns,
96
+ V1_hasCubeIngestAccessor,
97
+ } from './V1_CubeIngestModel.js';
98
+ import {
99
+ V1_buildCubeDirectModelContext,
100
+ V1_collectCubeStoreAccessors,
101
+ V1_CUBE_DIRECT_DATABASE,
102
+ type V1_CubeDirectTable,
103
+ } from './V1_CubeDirectModel.js';
40
104
  import {
41
105
  V1_buildCubeEngineError,
42
106
  V1_toCubeEngineError,
@@ -45,23 +109,37 @@ import {
45
109
  V1_CubeUnreadableResultError,
46
110
  V1_readCubeExecutionResult,
47
111
  } from './V1_CubeExecutionResultReader.js';
112
+ import { V1_readCubeExpression } from './V1_CubeExpression.js';
48
113
  import { V1_serializeCubeLambda } from './V1_CubeLambdaSerializer.js';
49
114
  import { V1_buildCubeModelOutline } from './V1_CubeModelOutlineBuilder.js';
50
115
  import { V1_buildCubeSchema } from './V1_CubeRelationTypeAdapter.js';
116
+ import {
117
+ V1_buildCubeSchemaExplorationInput,
118
+ V1_buildExploredDatabase,
119
+ type V1_CubeExploredTablePath,
120
+ V1_toCubeExplorationError,
121
+ V1_unquoteCubeName,
122
+ } from './V1_CubeSchemaExploration.js';
51
123
 
52
124
  /** The engine client's configuration, as the host gives it (legend-graph doesn't export its type) */
53
125
  export type V1_CubeEngineConfig = ConstructorParameters<
54
126
  typeof V1_EngineServerClient
55
127
  >[0];
56
128
 
57
- /** The only model kind the slice runs: Pure text (PLAN §6.2.2) */
129
+ /** Pure text (PLAN §6.2.2); the other kind run is a direct connection (§6.8) */
58
130
  const TEXT_MODEL_TYPE = 'text';
59
131
 
60
132
  const EXECUTION_CLIENT_VERSION = 'vX_X_X';
61
133
 
134
+ /** The engine client's trace name for its grammar-to-JSON calls */
135
+ const GRAMMAR_TO_JSON_TRACE = 'transform Pure code to protocol';
136
+
62
137
  /**
63
- * The node an execution lambda runs: the one its `from` call is stamped with
64
- * (`{| <relation>->limit(…)->from(runtime)}`), where errors without a stamp go
138
+ * The node an execution lambda runs: the one its outermost call is stamped
139
+ * with, `from` in `{| <relation>->limit(…)->from(runtime)}` and `limit` in
140
+ * the let form, `{| {| <lets>; <relation>}->from(runtime)->limit(…)}` (PLAN
141
+ * §8.6), or the capture's sort or `from` when Show Pure leaves the limit out,
142
+ * where errors without a stamp go
65
143
  */
66
144
  const captureNodeOf = (executionLambda: IR): NodeId | undefined => {
67
145
  const from =
@@ -69,10 +147,131 @@ const captureNodeOf = (executionLambda: IR): NodeId | undefined => {
69
147
  return from?.k === 'func' ? from.origin?.nodeId : undefined;
70
148
  };
71
149
 
150
+ /** Why a lambda can't run on the cube's model: data products and database tables are kept apart (PLAN §6.8) */
151
+ const DATA_PRODUCT_ONLY = 'Only a data product cube can read data products';
152
+ const TABLES_IN_DATA_PRODUCT_CUBE =
153
+ "A data product cube can't read database tables";
154
+ const NO_LAKEHOUSE =
155
+ "This page can't run data products: its host has no lakehouse";
156
+ /** Why a lambda can't run on the cube's model: ingest data sets are kept apart too (PLAN §6.7) */
157
+ const INGEST_ONLY = 'Only an ingest cube can read ingest data sets';
158
+ const OTHER_SOURCES_IN_INGEST_CUBE =
159
+ 'An ingest cube reads ingest data sets only';
160
+ const NO_INGEST =
161
+ "This page can't read ingest data sets: its host has no ingest servers";
162
+
163
+ /** The kinds of model a cube's sources must match */
164
+ enum CubeSourceFamily {
165
+ DATA_PRODUCT = 'dataProduct',
166
+ INGEST = 'ingest',
167
+ TABLES = 'tables',
168
+ }
169
+
170
+ const familyOf = (model: ModelContext): CubeSourceFamily =>
171
+ isCubeDataProductModel(model)
172
+ ? CubeSourceFamily.DATA_PRODUCT
173
+ : isCubeIngestModel(model)
174
+ ? CubeSourceFamily.INGEST
175
+ : CubeSourceFamily.TABLES;
176
+
177
+ /** Why a lambda reads a source its cube's kind can't, if it does */
178
+ const foreignSourceProblemOf = (
179
+ family: CubeSourceFamily,
180
+ ir: IR,
181
+ ): string | undefined => {
182
+ const readsTables = V1_collectCubeStoreAccessors(ir).length > 0;
183
+ const readsDataProducts = V1_hasCubeDataProductAccessor(ir);
184
+ const readsIngest = V1_hasCubeIngestAccessor(ir);
185
+ switch (family) {
186
+ case CubeSourceFamily.DATA_PRODUCT:
187
+ return readsTables
188
+ ? TABLES_IN_DATA_PRODUCT_CUBE
189
+ : readsIngest
190
+ ? INGEST_ONLY
191
+ : undefined;
192
+ case CubeSourceFamily.INGEST:
193
+ return readsTables || readsDataProducts
194
+ ? OTHER_SOURCES_IN_INGEST_CUBE
195
+ : undefined;
196
+ default:
197
+ return readsDataProducts
198
+ ? DATA_PRODUCT_ONLY
199
+ : readsIngest
200
+ ? INGEST_ONLY
201
+ : undefined;
202
+ }
203
+ };
204
+
205
+ /** An error of the host's ingest servers, placed on a node */
206
+ const toIngestError = (
207
+ error: unknown,
208
+ kind: CubeEngineErrorKind,
209
+ nodeId: NodeId | undefined,
210
+ ): CubeEngineError =>
211
+ error instanceof CubeEngineError
212
+ ? new CubeEngineError(error.kind, error.detail, nodeId)
213
+ : new CubeEngineError(
214
+ kind,
215
+ error instanceof Error ? error.message : String(error),
216
+ nodeId,
217
+ );
218
+
72
219
  /** The message for a model of a kind this version can't run (PLAN §8.7) */
73
220
  export const V1_unsupportedModelMessage = (type: string): string =>
74
221
  `This cube's model kind "${type}" isn't supported yet.`;
75
222
 
223
+ /** A table of a direct-connection cube, as the database stores its names */
224
+ const directTableOf = (path: AccessorPath): V1_CubeExploredTablePath => [
225
+ V1_unquoteCubeName(path[1]),
226
+ V1_unquoteCubeName(path[2]),
227
+ ];
228
+
229
+ const tableKey = (path: V1_CubeExploredTablePath): string =>
230
+ JSON.stringify(path);
231
+
232
+ /** The error of a table a direct-connection cube's database doesn't have */
233
+ const missingTableError = (
234
+ path: V1_CubeExploredTablePath,
235
+ kind: CubeEngineErrorKind,
236
+ nodeId: NodeId | undefined,
237
+ ): CubeEngineError =>
238
+ new CubeEngineError(
239
+ kind,
240
+ `The database has no table ${path[1]} in schema ${path[0]}`,
241
+ nodeId,
242
+ );
243
+
244
+ /** The error of a table that isn't in a direct-connection cube's one Database */
245
+ const foreignTableError = (
246
+ path: AccessorPath,
247
+ kind: CubeEngineErrorKind,
248
+ nodeId: NodeId | undefined,
249
+ ): CubeEngineError =>
250
+ new CubeEngineError(
251
+ kind,
252
+ `The table is in "${path[0]}", not in the cube's database connection`,
253
+ nodeId,
254
+ );
255
+
256
+ /** A lambda's problem with a direct-connection cube's tables, if any */
257
+ const tableProblemOf = (
258
+ accessors: readonly AccessorPath[],
259
+ missing: ReadonlySet<string>,
260
+ kind: CubeEngineErrorKind,
261
+ nodeId: NodeId | undefined,
262
+ ): CubeEngineError | undefined => {
263
+ const foreign = accessors.find(
264
+ (path) => path[0] !== CUBE_DIRECT_DATABASE_PATH,
265
+ );
266
+ if (foreign) {
267
+ return foreignTableError(foreign, kind, nodeId);
268
+ }
269
+ const absent = accessors
270
+ .map(directTableOf)
271
+ .find((path) => missing.has(tableKey(path)));
272
+ return absent ? missingTableError(absent, kind, nodeId) : undefined;
273
+ };
274
+
76
275
  /**
77
276
  * The Legend engine behind the Cube engine port (PLAN §8.7). It sends the
78
277
  * cube's saved model context as it is, lambdas as protocol JSON with lossless
@@ -81,11 +280,159 @@ export const V1_unsupportedModelMessage = (type: string): string =>
81
280
  */
82
281
  export class V1_LegendCubeEngine implements CubeEngine {
83
282
  readonly client: V1_EngineServerClient;
283
+ /**
284
+ * The tables this session has read from direct connections, by connection
285
+ * and table: picking or re-checking a table reads it again, and typing and
286
+ * running reuse what was read
287
+ */
288
+ private readonly directTables = new Map<string, V1_CubeDirectTable>();
84
289
 
85
- constructor(config: V1_CubeEngineConfig, tracerService: TracerService) {
290
+ /** The viewer's lakehouse environment, which data product runs need */
291
+ private readonly lakehouseEnvironment: CubeLakehouseEnvironment | undefined;
292
+ /** The warehouse the viewer last picked, for a data product cube without its own */
293
+ private readonly getRememberedWarehouse: () => string | undefined;
294
+ /** The deployed ingest definitions, which ingest cubes read */
295
+ private readonly ingestDefinitions: V1_CubeIngestDefinitionSource | undefined;
296
+ /** The model data product cubes read their project from, when not its deployed version */
297
+ private readonly dataProductModels: CubeDataProductModelSource | undefined;
298
+
299
+ constructor(
300
+ config: V1_CubeEngineConfig,
301
+ tracerService: TracerService,
302
+ options?: {
303
+ lakehouseEnvironment?: CubeLakehouseEnvironment | undefined;
304
+ getRememberedWarehouse?: (() => string | undefined) | undefined;
305
+ ingestDefinitions?: V1_CubeIngestDefinitionSource | undefined;
306
+ /** Dev Settings' engine URL and compression (PLAN §11.16) */
307
+ clientSettings?: CubeEngineClientSettings | undefined;
308
+ dataProductModels?: CubeDataProductModelSource | undefined;
309
+ },
310
+ ) {
86
311
  this.client = new V1_EngineServerClient(config);
87
312
  // every call throws without one
88
313
  this.client.setTracerService(tracerService);
314
+ options?.clientSettings?.register(this.client);
315
+ this.lakehouseEnvironment = options?.lakehouseEnvironment;
316
+ this.getRememberedWarehouse =
317
+ options?.getRememberedWarehouse ?? (() => undefined);
318
+ this.ingestDefinitions = options?.ingestDefinitions;
319
+ this.dataProductModels = options?.dataProductModels;
320
+ }
321
+
322
+ /**
323
+ * The elements an ingest cube's model holds: the host's, when it has more
324
+ * than the definitions (Studio's workspace), else the definitions read
325
+ */
326
+ private async ingestModelElementsOf(
327
+ definitions: ReadonlyMap<string, PlainObject | CubeEngineError>,
328
+ ): Promise<readonly PlainObject[]> {
329
+ const source = this.ingestDefinitions;
330
+ return source?.getModelElements
331
+ ? source.getModelElements()
332
+ : [...definitions.values()].filter(
333
+ (read): read is PlainObject => !(read instanceof CubeEngineError),
334
+ );
335
+ }
336
+
337
+ /** The model a data product cube's project is read from: the host's, else its deployed version's pointer */
338
+ private async dataProductProjectModelOf(
339
+ project: CubeDataProductProject,
340
+ ): Promise<PlainObject | undefined> {
341
+ return this.dataProductModels?.getProjectModel(project);
342
+ }
343
+
344
+ /** An ingest model's settings, or an unsupported-model error naming its problems */
345
+ private ingestSettingsOf(
346
+ model: ModelContext,
347
+ nodeId?: NodeId,
348
+ ): CubeIngestSettings {
349
+ const settings = getCubeIngestSettings(model);
350
+ if (!settings) {
351
+ throw new CubeEngineError(
352
+ CubeEngineErrorKind.UNSUPPORTED_MODEL,
353
+ checkCubeIngestModel(model).join('\n'),
354
+ nodeId,
355
+ );
356
+ }
357
+ return settings;
358
+ }
359
+
360
+ /**
361
+ * The definitions the URNs name, read from the host's ingest servers, each
362
+ * once; a definition that can't be read gives its error instead
363
+ */
364
+ private async ingestDefinitionsOf(
365
+ urns: readonly string[],
366
+ settings: CubeIngestSettings,
367
+ ): Promise<Map<string, PlainObject | CubeEngineError>> {
368
+ const source = this.ingestDefinitions;
369
+ return new Map(
370
+ await Promise.all(
371
+ urns.map(
372
+ async (urn): Promise<[string, PlainObject | CubeEngineError]> => {
373
+ if (!source) {
374
+ return [
375
+ urn,
376
+ new CubeEngineError(
377
+ CubeEngineErrorKind.UNSUPPORTED_MODEL,
378
+ NO_INGEST,
379
+ ),
380
+ ];
381
+ }
382
+ try {
383
+ return [
384
+ urn,
385
+ await source.getDefinitionElement(
386
+ urn,
387
+ settings.environmentType,
388
+ ),
389
+ ];
390
+ } catch (error) {
391
+ return [
392
+ urn,
393
+ toIngestError(error, CubeEngineErrorKind.NETWORK, undefined),
394
+ ];
395
+ }
396
+ },
397
+ ),
398
+ ),
399
+ );
400
+ }
401
+
402
+ /** A data product model's project, or an unsupported-model error naming its problems */
403
+ private dataProductProjectOf(
404
+ model: ModelContext,
405
+ nodeId?: NodeId,
406
+ ): CubeDataProductProject {
407
+ const project = getCubeDataProductProject(model);
408
+ if (!project) {
409
+ throw new CubeEngineError(
410
+ CubeEngineErrorKind.UNSUPPORTED_MODEL,
411
+ checkCubeDataProductModel(model).join('\n'),
412
+ nodeId,
413
+ );
414
+ }
415
+ return project;
416
+ }
417
+
418
+ /**
419
+ * Checks a tables cube's model can be sent to the engine: Pure text, or a
420
+ * project pointer at a released version (PLAN §6.3); else an
421
+ * unsupported-model error
422
+ */
423
+ private checkTablesModel(model: ModelContext, nodeId?: NodeId): void {
424
+ if (isCubeProjectModel(model)) {
425
+ const problems = checkCubeProjectModel(model);
426
+ if (problems.length) {
427
+ throw new CubeEngineError(
428
+ CubeEngineErrorKind.UNSUPPORTED_MODEL,
429
+ problems.join('\n'),
430
+ nodeId,
431
+ );
432
+ }
433
+ return;
434
+ }
435
+ this.textOf(model, nodeId);
89
436
  }
90
437
 
91
438
  /** The model's Pure text, or an unsupported-model error for any other kind */
@@ -100,7 +447,128 @@ export class V1_LegendCubeEngine implements CubeEngine {
100
447
  return model.code;
101
448
  }
102
449
 
450
+ /**
451
+ * A direct-connection model's connection, or an unsupported-model error when
452
+ * Cube can't use it (an imported cube then shows its saved schemas)
453
+ */
454
+ private directConnectionOf(
455
+ model: ModelContext,
456
+ nodeId?: NodeId,
457
+ ): CubeDirectConnection {
458
+ const connection = getCubeDirectConnection(model);
459
+ const problems = V1_checkCubeDirectConnection(connection);
460
+ if (!connection || problems.length) {
461
+ throw new CubeEngineError(
462
+ CubeEngineErrorKind.UNSUPPORTED_MODEL,
463
+ problems.join('\n'),
464
+ nodeId,
465
+ );
466
+ }
467
+ return connection;
468
+ }
469
+
470
+ /**
471
+ * The model a call on a direct-connection cube runs on, holding the tables
472
+ * it needs, and those its database doesn't have. Tables this session
473
+ * hasn't read are read in one call; `fresh` reads them all again
474
+ */
475
+ private async directContextFor(
476
+ connection: CubeDirectConnection,
477
+ tables: readonly V1_CubeExploredTablePath[],
478
+ fresh: boolean,
479
+ ): Promise<{ context: PlainObject; missing: ReadonlySet<string> }> {
480
+ const connectionKey = V1_canonicalCubeDirectConnection(connection);
481
+ const cacheKey = (path: V1_CubeExploredTablePath): string =>
482
+ JSON.stringify([connectionKey, ...path]);
483
+ const needed = [
484
+ ...new Map(tables.map((path) => [tableKey(path), path])).values(),
485
+ ];
486
+ const toRead = fresh
487
+ ? needed
488
+ : needed.filter((path) => !this.directTables.has(cacheKey(path)));
489
+ if (toRead.length) {
490
+ const { database, missing } = V1_buildExploredDatabase(
491
+ await this.client.buildDatabase(
492
+ V1_buildCubeSchemaExplorationInput(
493
+ connection,
494
+ connection.databaseType as CubeDirectDatabaseType,
495
+ V1_CUBE_DIRECT_DATABASE,
496
+ { kind: 'columns', tables: toRead },
497
+ ),
498
+ ),
499
+ toRead,
500
+ );
501
+ (database.schemas as PlainObject[]).forEach((schema) =>
502
+ (schema.tables as PlainObject[]).forEach((definition) => {
503
+ const path: V1_CubeExploredTablePath = [
504
+ V1_unquoteCubeName(schema.name as string),
505
+ V1_unquoteCubeName(definition.name as string),
506
+ ];
507
+ this.directTables.set(cacheKey(path), { path, definition });
508
+ }),
509
+ );
510
+ missing.forEach((path) => this.directTables.delete(cacheKey(path)));
511
+ }
512
+ const found: V1_CubeDirectTable[] = [];
513
+ const missing = new Set<string>();
514
+ needed.forEach((path) => {
515
+ const table = this.directTables.get(cacheKey(path));
516
+ if (table) {
517
+ found.push(table);
518
+ } else {
519
+ missing.add(tableKey(path));
520
+ }
521
+ });
522
+ return {
523
+ context: V1_buildCubeDirectModelContext(connection, found),
524
+ missing,
525
+ };
526
+ }
527
+
103
528
  async loadModel(model: ModelContext): Promise<CubeModelOutline> {
529
+ if (isCubeIngestModel(model)) {
530
+ this.ingestSettingsOf(model);
531
+ // its data sets are listed through the ingest catalog
532
+ return {
533
+ databases: [],
534
+ runtimes: [{ path: CUBE_INGEST_RUNTIME_PATH, storePaths: [] }],
535
+ };
536
+ }
537
+ if (isCubeDataProductModel(model)) {
538
+ this.dataProductProjectOf(model);
539
+ // its access points are listed through the data product catalog
540
+ return {
541
+ databases: [],
542
+ runtimes: [{ path: CUBE_DATA_PRODUCT_RUNTIME_PATH, storePaths: [] }],
543
+ };
544
+ }
545
+ if (model._type === CUBE_DIRECT_MODEL_TYPE) {
546
+ const connection = this.directConnectionOf(model);
547
+ // its tables are listed through the connection explorer; its one
548
+ // connection gives the database type operations are written for
549
+ return {
550
+ databases: [],
551
+ runtimes: [
552
+ {
553
+ path: CUBE_DIRECT_RUNTIME_PATH,
554
+ storePaths: [CUBE_DIRECT_DATABASE_PATH],
555
+ connections: [
556
+ {
557
+ storePath: CUBE_DIRECT_DATABASE_PATH,
558
+ databaseType: connection.databaseType as string,
559
+ },
560
+ ],
561
+ },
562
+ ],
563
+ };
564
+ }
565
+ if (isCubeProjectModel(model)) {
566
+ // its Databases and runtimes are listed through the project catalog
567
+ throw new CubeEngineError(
568
+ CubeEngineErrorKind.UNSUPPORTED_MODEL,
569
+ `A project's outline comes from its depot, through the project catalog`,
570
+ );
571
+ }
104
572
  const code = this.textOf(model);
105
573
  try {
106
574
  return V1_buildCubeModelOutline(
@@ -115,31 +583,301 @@ export class V1_LegendCubeEngine implements CubeEngine {
115
583
  model: ModelContext,
116
584
  accessors: ReadonlyMap<NodeId, AccessorPath>,
117
585
  ): Promise<Map<NodeId, Schema | CubeEngineError>> {
118
- return this.typeAll(
119
- model,
120
- new Map(
121
- [...accessors].map(([nodeId, path]) => [
586
+ const lambdas = new Map(
587
+ [...accessors].map(([nodeId, path]) => [
588
+ nodeId,
589
+ lambda([], [storeAccessor(path, { nodeId, role: EmitRole.ACCESSOR })]),
590
+ ]),
591
+ );
592
+ if (isCubeDataProductModel(model) || isCubeIngestModel(model)) {
593
+ return Promise.resolve(
594
+ new Map(
595
+ [...accessors.keys()].map((nodeId) => [
596
+ nodeId,
597
+ new CubeEngineError(
598
+ CubeEngineErrorKind.UNSUPPORTED_MODEL,
599
+ isCubeIngestModel(model)
600
+ ? OTHER_SOURCES_IN_INGEST_CUBE
601
+ : TABLES_IN_DATA_PRODUCT_CUBE,
602
+ nodeId,
603
+ ),
604
+ ]),
605
+ ),
606
+ );
607
+ }
608
+ // a table is read again from its database whenever it is resolved
609
+ return model._type === CUBE_DIRECT_MODEL_TYPE
610
+ ? this.typeDirect(model, lambdas, true)
611
+ : this.typeAll(model, lambdas);
612
+ }
613
+
614
+ async typeLambdas(
615
+ model: ModelContext,
616
+ lambdas: ReadonlyMap<NodeId, IR>,
617
+ ): Promise<Map<NodeId, Schema | CubeEngineError>> {
618
+ const family = familyOf(model);
619
+ // a lambda reading another kind of source is refused before any call
620
+ const refused = new Map<NodeId, CubeEngineError>();
621
+ const typable = new Map<NodeId, IR>();
622
+ lambdas.forEach((ir, nodeId) => {
623
+ const problem = foreignSourceProblemOf(family, ir);
624
+ if (problem) {
625
+ refused.set(
122
626
  nodeId,
123
- lambda(
124
- [],
125
- [storeAccessor(path, { nodeId, role: EmitRole.ACCESSOR })],
627
+ new CubeEngineError(CubeEngineErrorKind.COMPILE, problem, nodeId),
628
+ );
629
+ } else {
630
+ typable.set(nodeId, ir);
631
+ }
632
+ });
633
+ const typed =
634
+ family === CubeSourceFamily.DATA_PRODUCT
635
+ ? await this.typeDataProduct(model, typable)
636
+ : family === CubeSourceFamily.INGEST
637
+ ? await this.typeIngest(model, typable)
638
+ : model._type === CUBE_DIRECT_MODEL_TYPE
639
+ ? await this.typeDirect(model, typable, false)
640
+ : await this.typeAll(model, typable);
641
+ // in the order the lambdas were given
642
+ return new Map(
643
+ [...lambdas.keys()].map((nodeId) => [
644
+ nodeId,
645
+ (refused.get(nodeId) ?? typed.get(nodeId)) as Schema | CubeEngineError,
646
+ ]),
647
+ );
648
+ }
649
+
650
+ /**
651
+ * Types lambdas on a data product cube: on its project at its saved
652
+ * version, with no runtime. The open-source engine reads no data product,
653
+ * so there every lambda fails as the engine says
654
+ */
655
+ private async typeDataProduct(
656
+ model: ModelContext,
657
+ lambdas: ReadonlyMap<NodeId, IR>,
658
+ ): Promise<Map<NodeId, Schema | CubeEngineError>> {
659
+ let project: CubeDataProductProject;
660
+ try {
661
+ project = this.dataProductProjectOf(model);
662
+ } catch (error) {
663
+ return new Map(
664
+ [...lambdas.keys()].map((nodeId) => [
665
+ nodeId,
666
+ new CubeEngineError(
667
+ (error as CubeEngineError).kind,
668
+ (error as CubeEngineError).detail,
669
+ nodeId,
126
670
  ),
127
671
  ]),
672
+ );
673
+ }
674
+ let projectModel: PlainObject | undefined;
675
+ try {
676
+ projectModel = await this.dataProductProjectModelOf(project);
677
+ } catch (error) {
678
+ return new Map(
679
+ [...lambdas.keys()].map((nodeId) => [
680
+ nodeId,
681
+ V1_toCubeEngineError(error, nodeId, CubeEngineErrorKind.COMPILE),
682
+ ]),
683
+ );
684
+ }
685
+ return this.typeOn(
686
+ V1_buildCubeDataProductTypingContext(project, projectModel),
687
+ lambdas,
688
+ );
689
+ }
690
+
691
+ /**
692
+ * Types lambdas on an ingest cube: on the definitions they read, as the
693
+ * ingest servers serve them, with no runtime. A lambda whose data sets
694
+ * can't be read on the cube, or whose definition can't be fetched, fails
695
+ * on its own node. The open-source engine reads no ingest definition
696
+ */
697
+ private async typeIngest(
698
+ model: ModelContext,
699
+ lambdas: ReadonlyMap<NodeId, IR>,
700
+ ): Promise<Map<NodeId, Schema | CubeEngineError>> {
701
+ const typed = new Map<NodeId, Schema | CubeEngineError>();
702
+ if (!lambdas.size) {
703
+ return typed;
704
+ }
705
+ let settings: CubeIngestSettings;
706
+ try {
707
+ settings = this.ingestSettingsOf(model);
708
+ } catch (error) {
709
+ return new Map(
710
+ [...lambdas.keys()].map((nodeId) => [
711
+ nodeId,
712
+ toIngestError(error, CubeEngineErrorKind.COMPILE, nodeId),
713
+ ]),
714
+ );
715
+ }
716
+ const accessorsOf = new Map(
717
+ [...lambdas].map(([nodeId, ir]) => [
718
+ nodeId,
719
+ V1_collectCubeIngestAccessors(ir),
720
+ ]),
721
+ );
722
+ const checked = new Map<NodeId, IR>();
723
+ lambdas.forEach((ir, nodeId) => {
724
+ const problem = V1_checkCubeIngestAccessors(
725
+ accessorsOf.get(nodeId) ?? [],
726
+ settings,
727
+ );
728
+ if (problem) {
729
+ typed.set(
730
+ nodeId,
731
+ new CubeEngineError(CubeEngineErrorKind.COMPILE, problem, nodeId),
732
+ );
733
+ } else {
734
+ checked.set(nodeId, ir);
735
+ }
736
+ });
737
+ const definitions = await this.ingestDefinitionsOf(
738
+ V1_getCubeIngestUrns(
739
+ [...checked.keys()].flatMap((nodeId) => accessorsOf.get(nodeId) ?? []),
128
740
  ),
741
+ settings,
742
+ );
743
+ const typable = new Map<NodeId, IR>();
744
+ checked.forEach((ir, nodeId) => {
745
+ const failure = V1_getCubeIngestUrns(accessorsOf.get(nodeId) ?? [])
746
+ .map((urn) => definitions.get(urn))
747
+ .find((read) => read instanceof CubeEngineError);
748
+ if (failure) {
749
+ typed.set(
750
+ nodeId,
751
+ toIngestError(failure, CubeEngineErrorKind.COMPILE, nodeId),
752
+ );
753
+ } else {
754
+ typable.set(nodeId, ir);
755
+ }
756
+ });
757
+ let elements: readonly PlainObject[];
758
+ try {
759
+ elements = await this.ingestModelElementsOf(definitions);
760
+ } catch (error) {
761
+ typable.forEach((_ir, nodeId) =>
762
+ typed.set(
763
+ nodeId,
764
+ toIngestError(error, CubeEngineErrorKind.COMPILE, nodeId),
765
+ ),
766
+ );
767
+ typable.clear();
768
+ elements = [];
769
+ }
770
+ (
771
+ await this.typeOn(V1_buildCubeIngestTypingContext(elements), typable)
772
+ ).forEach((schema, nodeId) => typed.set(nodeId, schema));
773
+ // in the order the lambdas were given
774
+ return new Map(
775
+ [...lambdas.keys()].map((nodeId) => [
776
+ nodeId,
777
+ typed.get(nodeId) as Schema | CubeEngineError,
778
+ ]),
129
779
  );
130
780
  }
131
781
 
132
- typeLambdas(
782
+ /**
783
+ * Types lambdas on a direct-connection cube: the tables they use are read
784
+ * from its database in one call, then typed in one batch on the model built
785
+ * from them
786
+ */
787
+ private async typeDirect(
133
788
  model: ModelContext,
134
789
  lambdas: ReadonlyMap<NodeId, IR>,
790
+ fresh: boolean,
135
791
  ): Promise<Map<NodeId, Schema | CubeEngineError>> {
136
- return this.typeAll(model, lambdas);
792
+ const typed = new Map<NodeId, Schema | CubeEngineError>();
793
+ if (!lambdas.size) {
794
+ return typed;
795
+ }
796
+ const failAll = (
797
+ toError: (nodeId: NodeId) => CubeEngineError,
798
+ ): Map<NodeId, CubeEngineError> =>
799
+ new Map([...lambdas.keys()].map((nodeId) => [nodeId, toError(nodeId)]));
800
+ let connection: CubeDirectConnection;
801
+ try {
802
+ connection = this.directConnectionOf(model);
803
+ } catch (error) {
804
+ return failAll(
805
+ (nodeId) =>
806
+ new CubeEngineError(
807
+ (error as CubeEngineError).kind,
808
+ (error as CubeEngineError).detail,
809
+ nodeId,
810
+ ),
811
+ );
812
+ }
813
+ const accessorsOf = new Map(
814
+ [...lambdas].map(([nodeId, ir]) => [
815
+ nodeId,
816
+ V1_collectCubeStoreAccessors(ir),
817
+ ]),
818
+ );
819
+ const tables = [...accessorsOf.values()]
820
+ .flat()
821
+ .filter((path) => path[0] === CUBE_DIRECT_DATABASE_PATH)
822
+ .map(directTableOf);
823
+ let built: { context: PlainObject; missing: ReadonlySet<string> };
824
+ try {
825
+ built = await this.directContextFor(connection, tables, fresh);
826
+ } catch (error) {
827
+ return failAll((nodeId) =>
828
+ V1_toCubeExplorationError(error, CubeEngineErrorKind.COMPILE, nodeId),
829
+ );
830
+ }
831
+ const typable = new Map<NodeId, IR>();
832
+ lambdas.forEach((ir, nodeId) => {
833
+ const problem = tableProblemOf(
834
+ accessorsOf.get(nodeId) ?? [],
835
+ built.missing,
836
+ CubeEngineErrorKind.COMPILE,
837
+ nodeId,
838
+ );
839
+ if (problem) {
840
+ typed.set(nodeId, problem);
841
+ } else {
842
+ typable.set(nodeId, ir);
843
+ }
844
+ });
845
+ (await this.typeOn(built.context, typable)).forEach((schema, nodeId) =>
846
+ typed.set(nodeId, schema),
847
+ );
848
+ // in the order the lambdas were given
849
+ return new Map(
850
+ [...lambdas.keys()].map((nodeId) => [
851
+ nodeId,
852
+ typed.get(nodeId) as Schema | CubeEngineError,
853
+ ]),
854
+ );
137
855
  }
138
856
 
139
- /** Types every lambda in one batch call: one entry per key, whatever fails */
857
+ /** Types every lambda in one batch call on a text model: one entry per key, whatever fails */
140
858
  private async typeAll(
141
859
  model: ModelContext,
142
860
  lambdas: ReadonlyMap<NodeId, IR>,
861
+ ): Promise<Map<NodeId, Schema | CubeEngineError>> {
862
+ if (lambdas.size) {
863
+ try {
864
+ this.checkTablesModel(model);
865
+ } catch (error) {
866
+ return new Map(
867
+ [...lambdas.keys()].map((nodeId) => [
868
+ nodeId,
869
+ V1_toCubeEngineError(error, nodeId, CubeEngineErrorKind.COMPILE),
870
+ ]),
871
+ );
872
+ }
873
+ }
874
+ return this.typeOn(model, lambdas);
875
+ }
876
+
877
+ /** Types every lambda in one batch call on a model context: one entry per key, whatever fails */
878
+ private async typeOn(
879
+ context: ModelContext | PlainObject,
880
+ lambdas: ReadonlyMap<NodeId, IR>,
143
881
  ): Promise<Map<NodeId, Schema | CubeEngineError>> {
144
882
  const typed = new Map<NodeId, Schema | CubeEngineError>();
145
883
  if (!lambdas.size) {
@@ -154,9 +892,8 @@ export class V1_LegendCubeEngine implements CubeEngine {
154
892
  );
155
893
  let response: PlainObject;
156
894
  try {
157
- this.textOf(model);
158
895
  const body = stringifyLosslessJSON({
159
- model,
896
+ model: context,
160
897
  lambdas: Object.fromEntries(
161
898
  [...lambdas].map(([nodeId, ir]) => [
162
899
  nodeId,
@@ -218,16 +955,15 @@ export class V1_LegendCubeEngine implements CubeEngine {
218
955
  ): Promise<CubeResult> {
219
956
  const captureId = captureNodeOf(executionLambda);
220
957
  const startedAt = Date.now();
958
+ const context = await this.executionContextOf(
959
+ model,
960
+ executionLambda,
961
+ captureId,
962
+ options?.abortController,
963
+ );
221
964
  let text: string;
222
965
  try {
223
- this.textOf(model);
224
- const body = stringifyLosslessJSON({
225
- clientVersion: EXECUTION_CLIENT_VERSION,
226
- function: V1_serializeCubeLambda(executionLambda),
227
- model,
228
- context: { _type: 'BaseExecutionContext' },
229
- parameterValues: [],
230
- });
966
+ const body = this.executionBodyOf(model, context, executionLambda);
231
967
  // `returnAsResponse` leaves the body unread, so it can be read losslessly
232
968
  const response = (await this.client.runQuery(
233
969
  body as unknown as PlainObject,
@@ -261,6 +997,328 @@ export class V1_LegendCubeEngine implements CubeEngine {
261
997
  }
262
998
  }
263
999
 
1000
+ async exportCsv(
1001
+ model: ModelContext,
1002
+ executionLambda: IR,
1003
+ options?: { abortController?: AbortController | undefined },
1004
+ ): Promise<string> {
1005
+ const captureId = captureNodeOf(executionLambda);
1006
+ const context = await this.executionContextOf(
1007
+ model,
1008
+ executionLambda,
1009
+ captureId,
1010
+ options?.abortController,
1011
+ );
1012
+ try {
1013
+ const body = this.executionBodyOf(model, context, executionLambda);
1014
+ // the engine answers CSV under a JSON content type, and a failure as JSON with status 500 (PLAN §11.10)
1015
+ const response = (await this.client.runQuery(
1016
+ body as unknown as PlainObject,
1017
+ {
1018
+ returnAsResponse: true,
1019
+ serializationFormat: EXECUTION_SERIALIZATION_FORMAT.CSV,
1020
+ abortController: options?.abortController,
1021
+ },
1022
+ )) as Response;
1023
+ return await response.text();
1024
+ } catch (error) {
1025
+ throw V1_toCubeEngineError(
1026
+ error,
1027
+ captureId,
1028
+ CubeEngineErrorKind.EXECUTION,
1029
+ );
1030
+ }
1031
+ }
1032
+
1033
+ /**
1034
+ * The model a run on a data product cube runs on (PLAN §6.8): its project at
1035
+ * the saved version, and a lakehouse runtime at Cube's fixed path, in the
1036
+ * viewer's environment, with the cube's warehouse, else the default
1037
+ */
1038
+ private async dataProductExecutionContext(
1039
+ model: ModelContext,
1040
+ executionLambda: IR,
1041
+ captureId: NodeId | undefined,
1042
+ ): Promise<PlainObject> {
1043
+ const project = this.dataProductProjectOf(model, captureId);
1044
+ if (V1_collectCubeStoreAccessors(executionLambda).length) {
1045
+ throw new CubeEngineError(
1046
+ CubeEngineErrorKind.EXECUTION,
1047
+ TABLES_IN_DATA_PRODUCT_CUBE,
1048
+ captureId,
1049
+ );
1050
+ }
1051
+ if (!this.lakehouseEnvironment) {
1052
+ throw new CubeEngineError(
1053
+ CubeEngineErrorKind.UNSUPPORTED_MODEL,
1054
+ NO_LAKEHOUSE,
1055
+ captureId,
1056
+ );
1057
+ }
1058
+ let environment: string;
1059
+ try {
1060
+ environment = await this.lakehouseEnvironment.resolveEnvironment(project);
1061
+ } catch (error) {
1062
+ throw error instanceof CubeEngineError
1063
+ ? new CubeEngineError(error.kind, error.detail, captureId)
1064
+ : new CubeEngineError(
1065
+ CubeEngineErrorKind.EXECUTION,
1066
+ error instanceof Error ? error.message : String(error),
1067
+ captureId,
1068
+ );
1069
+ }
1070
+ let projectModel: PlainObject | undefined;
1071
+ try {
1072
+ projectModel = await this.dataProductProjectModelOf(project);
1073
+ } catch (error) {
1074
+ throw V1_toCubeEngineError(
1075
+ error,
1076
+ captureId,
1077
+ CubeEngineErrorKind.EXECUTION,
1078
+ );
1079
+ }
1080
+ return V1_buildCubeDataProductExecutionContext(
1081
+ project,
1082
+ environment,
1083
+ getEffectiveCubeWarehouse(project, this.getRememberedWarehouse()),
1084
+ projectModel,
1085
+ );
1086
+ }
1087
+
1088
+ /**
1089
+ * The model a run on an ingest cube runs on (PLAN §6.7): the definitions it
1090
+ * reads, as the ingest servers serve them, and a lakehouse runtime at
1091
+ * Cube's fixed path, in the environment of the cube's class, with the
1092
+ * cube's warehouse, else the one the viewer last picked, else the default
1093
+ */
1094
+ private async ingestExecutionContext(
1095
+ model: ModelContext,
1096
+ executionLambda: IR,
1097
+ captureId: NodeId | undefined,
1098
+ ): Promise<PlainObject> {
1099
+ const settings = this.ingestSettingsOf(model, captureId);
1100
+ const accessors = V1_collectCubeIngestAccessors(executionLambda);
1101
+ const problem = V1_checkCubeIngestAccessors(accessors, settings);
1102
+ if (problem) {
1103
+ throw new CubeEngineError(
1104
+ CubeEngineErrorKind.EXECUTION,
1105
+ problem,
1106
+ captureId,
1107
+ );
1108
+ }
1109
+ const source = this.ingestDefinitions;
1110
+ if (!source) {
1111
+ throw new CubeEngineError(
1112
+ CubeEngineErrorKind.UNSUPPORTED_MODEL,
1113
+ NO_INGEST,
1114
+ captureId,
1115
+ );
1116
+ }
1117
+ const definitions = await this.ingestDefinitionsOf(
1118
+ V1_getCubeIngestUrns(accessors),
1119
+ settings,
1120
+ );
1121
+ definitions.forEach((read) => {
1122
+ if (read instanceof CubeEngineError) {
1123
+ throw toIngestError(read, CubeEngineErrorKind.EXECUTION, captureId);
1124
+ }
1125
+ });
1126
+ let elements: readonly PlainObject[];
1127
+ try {
1128
+ elements = await this.ingestModelElementsOf(definitions);
1129
+ } catch (error) {
1130
+ throw toIngestError(error, CubeEngineErrorKind.EXECUTION, captureId);
1131
+ }
1132
+ let environment: string;
1133
+ try {
1134
+ environment = await source.getRuntimeEnvironment(
1135
+ settings.environmentType,
1136
+ );
1137
+ } catch (error) {
1138
+ throw toIngestError(error, CubeEngineErrorKind.EXECUTION, captureId);
1139
+ }
1140
+ return V1_buildCubeIngestExecutionContext(
1141
+ elements,
1142
+ environment,
1143
+ getEffectiveCubeWarehouse(settings, this.getRememberedWarehouse()),
1144
+ );
1145
+ }
1146
+
1147
+ /**
1148
+ * The model a run on a direct-connection cube runs on: the tables it uses,
1149
+ * read from its database when this session hasn't read them. A run stopped
1150
+ * meanwhile goes no further
1151
+ */
1152
+ private async directExecutionContext(
1153
+ model: ModelContext,
1154
+ executionLambda: IR,
1155
+ captureId: NodeId | undefined,
1156
+ abortController: AbortController | undefined,
1157
+ ): Promise<PlainObject> {
1158
+ const connection = this.directConnectionOf(model, captureId);
1159
+ const accessors = V1_collectCubeStoreAccessors(executionLambda);
1160
+ const foreign = accessors.find(
1161
+ (path) => path[0] !== CUBE_DIRECT_DATABASE_PATH,
1162
+ );
1163
+ if (foreign) {
1164
+ throw foreignTableError(
1165
+ foreign,
1166
+ CubeEngineErrorKind.EXECUTION,
1167
+ captureId,
1168
+ );
1169
+ }
1170
+ let built: { context: PlainObject; missing: ReadonlySet<string> };
1171
+ try {
1172
+ built = await this.directContextFor(
1173
+ connection,
1174
+ accessors.map(directTableOf),
1175
+ false,
1176
+ );
1177
+ } catch (error) {
1178
+ throw V1_toCubeExplorationError(
1179
+ error,
1180
+ CubeEngineErrorKind.EXECUTION,
1181
+ captureId,
1182
+ );
1183
+ }
1184
+ const problem = tableProblemOf(
1185
+ accessors,
1186
+ built.missing,
1187
+ CubeEngineErrorKind.EXECUTION,
1188
+ captureId,
1189
+ );
1190
+ if (problem) {
1191
+ throw problem;
1192
+ }
1193
+ if (abortController?.signal.aborted) {
1194
+ throw new CubeEngineError(
1195
+ CubeEngineErrorKind.EXECUTION,
1196
+ 'The run was stopped',
1197
+ captureId,
1198
+ );
1199
+ }
1200
+ return built.context;
1201
+ }
1202
+
1203
+ /**
1204
+ * The model a run of the lambda runs on: the cube's, or the context its
1205
+ * data products, ingest data sets or direct connection need. A lambda
1206
+ * reading another kind of source is refused first
1207
+ */
1208
+ private async executionContextOf(
1209
+ model: ModelContext,
1210
+ executionLambda: IR,
1211
+ captureId: NodeId | undefined,
1212
+ abortController: AbortController | undefined,
1213
+ ): Promise<ModelContext | PlainObject> {
1214
+ const family = familyOf(model);
1215
+ const problem = foreignSourceProblemOf(family, executionLambda);
1216
+ if (problem) {
1217
+ throw new CubeEngineError(
1218
+ CubeEngineErrorKind.EXECUTION,
1219
+ problem,
1220
+ captureId,
1221
+ );
1222
+ }
1223
+ return family === CubeSourceFamily.DATA_PRODUCT
1224
+ ? this.dataProductExecutionContext(model, executionLambda, captureId)
1225
+ : family === CubeSourceFamily.INGEST
1226
+ ? this.ingestExecutionContext(model, executionLambda, captureId)
1227
+ : model._type === CUBE_DIRECT_MODEL_TYPE
1228
+ ? this.directExecutionContext(
1229
+ model,
1230
+ executionLambda,
1231
+ captureId,
1232
+ abortController,
1233
+ )
1234
+ : model;
1235
+ }
1236
+
1237
+ /** The body of a run, or of its plan, as text, so numbers keep every digit */
1238
+ private executionBodyOf(
1239
+ model: ModelContext,
1240
+ context: ModelContext | PlainObject,
1241
+ executionLambda: IR,
1242
+ ): string {
1243
+ if (
1244
+ model._type !== CUBE_DIRECT_MODEL_TYPE &&
1245
+ familyOf(model) === CubeSourceFamily.TABLES
1246
+ ) {
1247
+ this.checkTablesModel(model);
1248
+ }
1249
+ return stringifyLosslessJSON({
1250
+ clientVersion: EXECUTION_CLIENT_VERSION,
1251
+ function: V1_serializeCubeLambda(executionLambda),
1252
+ model: context,
1253
+ context: { _type: 'BaseExecutionContext' },
1254
+ parameterValues: [],
1255
+ });
1256
+ }
1257
+
1258
+ async planLambda(model: ModelContext, executionLambda: IR): Promise<void> {
1259
+ const captureId = captureNodeOf(executionLambda);
1260
+ const context = await this.executionContextOf(
1261
+ model,
1262
+ executionLambda,
1263
+ captureId,
1264
+ undefined,
1265
+ );
1266
+ try {
1267
+ await this.client.generatePlan(
1268
+ this.executionBodyOf(
1269
+ model,
1270
+ context,
1271
+ executionLambda,
1272
+ ) as unknown as PlainObject,
1273
+ );
1274
+ } catch (error) {
1275
+ throw V1_toCubeEngineError(
1276
+ error,
1277
+ captureId,
1278
+ CubeEngineErrorKind.EXECUTION,
1279
+ );
1280
+ }
1281
+ }
1282
+
1283
+ async parseExpression(
1284
+ code: string,
1285
+ sourceId: string,
1286
+ ): Promise<CubeParsedExpression> {
1287
+ let text: string;
1288
+ try {
1289
+ // unread, so it can be read losslessly: a literal keeps its digits
1290
+ const response = await this.client.postWithTracing<Response>(
1291
+ this.client.getTraceData(GRAMMAR_TO_JSON_TRACE),
1292
+ `${this.client._grammarToJSON()}/valueSpecification`,
1293
+ code,
1294
+ {},
1295
+ { [HttpHeader.CONTENT_TYPE]: ContentType.TEXT_PLAIN },
1296
+ { sourceId, returnSourceInformation: true },
1297
+ { enableCompression: true },
1298
+ { skipProcessing: true },
1299
+ );
1300
+ text = await response.text();
1301
+ } catch (error) {
1302
+ throw V1_toCubeEngineError(error, undefined, CubeEngineErrorKind.COMPILE);
1303
+ }
1304
+ try {
1305
+ return V1_readCubeExpression(parseLosslessJSON(text));
1306
+ } catch (error) {
1307
+ throw new CubeEngineError(
1308
+ CubeEngineErrorKind.COMPILE,
1309
+ (error as Error).message,
1310
+ );
1311
+ }
1312
+ }
1313
+
1314
+ serializeLambda(lambdaIR: IR): string {
1315
+ return stringifyLosslessJSON(
1316
+ V1_serializeCubeLambda(lambdaIR),
1317
+ undefined,
1318
+ 2,
1319
+ );
1320
+ }
1321
+
264
1322
  async renderPure(lambdaIR: IR): Promise<string> {
265
1323
  try {
266
1324
  // sent as text, as typing and execution are: the serialized lambda holds