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