@finos/legend-cube-builder 0.0.3 → 0.0.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +52 -19
- package/docs/adding-an-operation.md +102 -13
- package/docs/hosting.md +82 -4
- package/docs/testing.md +114 -9
- 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 +12 -2
- 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 +76 -3
- package/lib/__lib__/LegendCubeLabels.d.ts.map +1 -1
- package/lib/__lib__/LegendCubeLabels.js +102 -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 +12 -0
- package/lib/__test-utils__/CubeEngineTestSupport.d.ts.map +1 -1
- package/lib/__test-utils__/CubeEngineTestSupport.js +21 -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 +25 -0
- package/lib/__test-utils__/CubeOperationsTestUtils.d.ts.map +1 -1
- package/lib/__test-utils__/CubeOperationsTestUtils.js +56 -10
- package/lib/__test-utils__/CubeOperationsTestUtils.js.map +1 -1
- 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 +14 -1
- 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 +8 -1
- 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 +31 -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.map +1 -1
- package/lib/components/canvas/CubeCanvasElements.js +6 -3
- 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 -20
- 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/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/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/CubeJoinEditor.d.ts +2 -4
- package/lib/components/editors/CubeJoinEditor.d.ts.map +1 -1
- package/lib/components/editors/CubeJoinEditor.js +7 -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 +51 -13
- 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 +15 -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.map +1 -1
- package/lib/components/editors/CubeRenameEditor.js +6 -4
- package/lib/components/editors/CubeRenameEditor.js.map +1 -1
- package/lib/components/editors/CubeRestrictEditor.js +1 -1
- package/lib/components/editors/CubeRestrictEditor.js.map +1 -1
- package/lib/components/editors/CubeSortEditor.d.ts.map +1 -1
- package/lib/components/editors/CubeSortEditor.js +10 -37
- package/lib/components/editors/CubeSortEditor.js.map +1 -1
- 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 -5
- package/lib/components/editors/CubeSourceEditor.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 +19 -8
- 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.map +1 -1
- package/lib/components/grid/CubeResultGrid.js +14 -2
- 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 +37 -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/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_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 +27 -1
- 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 +100 -16
- package/lib/stores/CubeEditorState.d.ts.map +1 -1
- package/lib/stores/CubeEditorState.js +347 -47
- 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 +15 -5
- 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 +14 -6
- package/lib/stores/CubeGridQuickActions.d.ts.map +1 -1
- package/lib/stores/CubeGridQuickActions.js +53 -15
- package/lib/stores/CubeGridQuickActions.js.map +1 -1
- 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 +101 -5
- package/lib/stores/CubeNodeEditorState.d.ts.map +1 -1
- package/lib/stores/CubeNodeEditorState.js +221 -10
- package/lib/stores/CubeNodeEditorState.js.map +1 -1
- package/lib/stores/CubeShowPureState.d.ts +5 -2
- package/lib/stores/CubeShowPureState.d.ts.map +1 -1
- package/lib/stores/CubeShowPureState.js +7 -4
- 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/CubeJoinDraft.d.ts +9 -10
- package/lib/stores/editors/CubeJoinDraft.d.ts.map +1 -1
- package/lib/stores/editors/CubeJoinDraft.js +92 -21
- 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.map +1 -1
- package/lib/stores/editors/CubeNodeDraftRegistry.js +20 -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/CubeSortDraft.d.ts +2 -10
- package/lib/stores/editors/CubeSortDraft.d.ts.map +1 -1
- package/lib/stores/editors/CubeSortDraft.js +9 -35
- package/lib/stores/editors/CubeSortDraft.js.map +1 -1
- 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 +10 -6
- 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 +25 -1
- package/src/__lib__/LegendCubeIngestLabels.ts +40 -0
- package/src/__lib__/LegendCubeLabels.ts +162 -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 +38 -0
- package/src/__test-utils__/CubeExpressionTestUtils.ts +119 -0
- package/src/__test-utils__/CubeOperationsTestUtils.ts +93 -18
- 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 +25 -1
- 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 +13 -0
- package/src/components/CubeSchemaColumnsTable.tsx +49 -0
- package/src/components/canvas/CubeCanvas.tsx +49 -14
- package/src/components/canvas/CubeCanvasContextMenu.tsx +31 -30
- package/src/components/canvas/CubeCanvasDnd.ts +16 -9
- package/src/components/canvas/CubeCanvasElements.ts +8 -2
- package/src/components/canvas/CubeCanvasNode.tsx +61 -43
- 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/CubeConcatEditor.tsx +374 -0
- package/src/components/editors/CubeDataProductSourceEditor.tsx +134 -0
- package/src/components/editors/CubeDifferenceEditor.tsx +87 -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/CubeJoinEditor.tsx +12 -132
- package/src/components/editors/CubeJoinKeyRows.tsx +183 -0
- package/src/components/editors/CubeNodeEditorPanel.tsx +91 -28
- package/src/components/editors/CubeNodeEditorPopper.tsx +183 -0
- package/src/components/editors/CubeNodeEditorRegistry.ts +21 -0
- package/src/components/editors/CubePartitionEditor.tsx +208 -0
- package/src/components/editors/CubeRenameEditor.tsx +10 -5
- package/src/components/editors/CubeRestrictEditor.tsx +1 -1
- package/src/components/editors/CubeSortEditor.tsx +20 -142
- package/src/components/editors/CubeSortRowEditor.tsx +176 -0
- package/src/components/editors/CubeSourceEditor.tsx +42 -30
- 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 +48 -10
- package/src/components/grid/CubeGridValues.ts +55 -0
- package/src/components/grid/CubeResultGrid.tsx +24 -8
- 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 +43 -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/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_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 +42 -1
- 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 +511 -63
- 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 +24 -5
- package/src/stores/CubeExtendTyping.ts +291 -0
- package/src/stores/CubeGridQuickActions.ts +69 -14
- package/src/stores/CubeHost.ts +71 -1
- package/src/stores/CubeIngestRecheck.ts +92 -0
- package/src/stores/CubeNodeEditorState.ts +278 -9
- package/src/stores/CubeShowPureState.ts +7 -4
- 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/CubeJoinDraft.ts +130 -41
- package/src/stores/editors/CubeJoinKeyPairs.ts +68 -0
- package/src/stores/editors/CubeNodeDraft.ts +26 -6
- package/src/stores/editors/CubeNodeDraftRegistry.ts +25 -0
- package/src/stores/editors/CubePartitionDraft.ts +214 -0
- package/src/stores/editors/CubeSortDraft.ts +17 -54
- 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 +89 -0
|
@@ -15,11 +15,16 @@
|
|
|
15
15
|
*/
|
|
16
16
|
|
|
17
17
|
import {
|
|
18
|
+
DataProductAccessPointSource,
|
|
19
|
+
IngestDatasetSource,
|
|
18
20
|
buildSchemasAndValidity,
|
|
19
21
|
createNodeRegistry,
|
|
20
22
|
CubeDocument,
|
|
21
23
|
diffSchemas,
|
|
24
|
+
Extend,
|
|
22
25
|
findLostSortOrders,
|
|
26
|
+
isTypingError,
|
|
27
|
+
type JsonObject,
|
|
23
28
|
MESSAGE_SORT_COLUMNS_CUT,
|
|
24
29
|
MESSAGE_SORT_COLUMNS_DROPPED,
|
|
25
30
|
MESSAGE_SORT_ORDER_LOST,
|
|
@@ -28,10 +33,12 @@ import {
|
|
|
28
33
|
type Query,
|
|
29
34
|
QueryEmitter,
|
|
30
35
|
type QueryNode,
|
|
36
|
+
type QueryRule,
|
|
31
37
|
RelationalTableSource,
|
|
32
38
|
rereadQueryFilterValues,
|
|
33
39
|
type Schema,
|
|
34
40
|
type SchemaInferenceResult,
|
|
41
|
+
type SourceDefinition,
|
|
35
42
|
} from '@finos/legend-cube';
|
|
36
43
|
import type { CommandRegistrar } from '@finos/legend-application';
|
|
37
44
|
import type { GeneratorFn } from '@finos/legend-shared';
|
|
@@ -40,26 +47,57 @@ import {
|
|
|
40
47
|
computed,
|
|
41
48
|
flow,
|
|
42
49
|
flowResult,
|
|
50
|
+
type IReactionDisposer,
|
|
43
51
|
makeObservable,
|
|
44
52
|
observable,
|
|
53
|
+
reaction,
|
|
45
54
|
} from 'mobx';
|
|
46
55
|
import { LEGEND_CUBE_COMMAND_KEY } from '../__lib__/LegendCubeCommand.js';
|
|
56
|
+
import { LEGEND_CUBE_TEST_ID } from '../__lib__/LegendCubeTesting.js';
|
|
47
57
|
import {
|
|
48
58
|
CUBE_EDITOR_CLOSED_REASON,
|
|
49
59
|
DEFAULT_ROW_LIMIT,
|
|
50
60
|
getSchemaDriftWarning,
|
|
61
|
+
getExtendRetypeWarning,
|
|
51
62
|
getSourceRecheckWarning,
|
|
52
63
|
LEGEND_CUBE_USER_DATA_KEY,
|
|
53
64
|
MAX_UNDO_STEPS,
|
|
54
65
|
} from '../__lib__/LegendCubeLabels.js';
|
|
66
|
+
import {
|
|
67
|
+
CUBE_DATA_PRODUCT_RECHECK_MESSAGE,
|
|
68
|
+
getAccessPointDriftWarning,
|
|
69
|
+
getAccessPointRecheckWarning,
|
|
70
|
+
} from '../__lib__/LegendCubeDataProductLabels.js';
|
|
71
|
+
import {
|
|
72
|
+
CUBE_INGEST_RECHECK_MESSAGE,
|
|
73
|
+
getDataSetDriftWarning,
|
|
74
|
+
getDataSetRecheckWarning,
|
|
75
|
+
} from '../__lib__/LegendCubeIngestLabels.js';
|
|
76
|
+
import { isCubeDataProductModel } from '../graph-manager/CubeDataProduct.js';
|
|
77
|
+
import { isCubeIngestModel } from '../graph-manager/CubeIngest.js';
|
|
55
78
|
import {
|
|
56
79
|
CubeEngineError,
|
|
57
80
|
CubeEngineErrorKind,
|
|
58
81
|
type CubeModelOutline,
|
|
82
|
+
type NodeId,
|
|
59
83
|
} from '../graph-manager/CubeEngine.js';
|
|
60
84
|
import { getDatabaseType } from '../graph-manager/CubeModelOutlineHelper.js';
|
|
85
|
+
import { recheckCubeDataProductSources } from './CubeDataProductRecheck.js';
|
|
86
|
+
import { recheckCubeIngestSources } from './CubeIngestRecheck.js';
|
|
87
|
+
import { CubeDataProductRuntimeState } from './CubeDataProductRuntimeState.js';
|
|
88
|
+
import { CubeExamplesState } from './CubeExamplesState.js';
|
|
61
89
|
import { CubeExecutionState } from './CubeExecutionState.js';
|
|
62
|
-
import
|
|
90
|
+
import { CubeExtendDraft } from './editors/CubeExtendDraft.js';
|
|
91
|
+
import {
|
|
92
|
+
buildCubeExtendTypingLambdas,
|
|
93
|
+
createStaleCubeExtendTypingRule,
|
|
94
|
+
getCubeExtendTypingUpstream,
|
|
95
|
+
getCubeExtendUpstream,
|
|
96
|
+
isCubeExtendTypingCurrent,
|
|
97
|
+
isSameCubeExtendTyping,
|
|
98
|
+
readCubeExtendTyping,
|
|
99
|
+
} from './CubeExtendTyping.js';
|
|
100
|
+
import { type CubeHost, loadCubeModelOutline } from './CubeHost.js';
|
|
63
101
|
import { CubeNodeEditorState } from './CubeNodeEditorState.js';
|
|
64
102
|
import { CubeShowPureState } from './CubeShowPureState.js';
|
|
65
103
|
import { CubeSourcePickerState } from './CubeSourcePickerState.js';
|
|
@@ -84,6 +122,18 @@ const isTypingText = (): boolean => {
|
|
|
84
122
|
);
|
|
85
123
|
};
|
|
86
124
|
|
|
125
|
+
/** Focus is in the node editor, whose shortcuts give it back to the node (PLAN §11.8) */
|
|
126
|
+
const isFocusInNodeEditor = (): boolean =>
|
|
127
|
+
document.activeElement?.closest(
|
|
128
|
+
`[data-testid="${LEGEND_CUBE_TEST_ID.NODE_EDITOR}"]`,
|
|
129
|
+
) !== null && document.activeElement !== null;
|
|
130
|
+
|
|
131
|
+
/** A source Cube types again to see drift: a table, or a data product's access point */
|
|
132
|
+
type RecheckedSource =
|
|
133
|
+
| RelationalTableSource
|
|
134
|
+
| DataProductAccessPointSource
|
|
135
|
+
| IngestDatasetSource;
|
|
136
|
+
|
|
87
137
|
/**
|
|
88
138
|
* The state of one Cube page (PLAN §7.8). The document is immutable: every
|
|
89
139
|
* edit makes a new one through `applyDocument`, which keeps the previous one
|
|
@@ -94,9 +144,14 @@ export class CubeEditorState implements CommandRegistrar {
|
|
|
94
144
|
readonly host: CubeHost;
|
|
95
145
|
/** One registry for inference, emission and the saved spec */
|
|
96
146
|
readonly registry: NodeRegistry;
|
|
147
|
+
/** The editor's own query rule: an Extend typed for another input than its own waits to be typed again (PLAN §11.7) */
|
|
148
|
+
private readonly staleExtendTyping: QueryRule;
|
|
97
149
|
readonly execution: CubeExecutionState;
|
|
150
|
+
/** Where a lakehouse cube runs, a data product's or an ingest one's: its class and warehouse */
|
|
151
|
+
readonly dataProductRuntime: CubeDataProductRuntimeState;
|
|
98
152
|
readonly sourcePicker: CubeSourcePickerState;
|
|
99
153
|
readonly specTransfer: CubeSpecTransferState;
|
|
154
|
+
readonly examples: CubeExamplesState;
|
|
100
155
|
readonly showPure: CubeShowPureState;
|
|
101
156
|
readonly nodeEditor: CubeNodeEditorState;
|
|
102
157
|
|
|
@@ -119,6 +174,10 @@ export class CubeEditorState implements CommandRegistrar {
|
|
|
119
174
|
new Map();
|
|
120
175
|
/** Sources sent to the engine to be typed again, until it answers */
|
|
121
176
|
private pendingSources: ReadonlySet<QueryNode> = new Set();
|
|
177
|
+
/** Extends sent to the engine to be typed, until it answers (PLAN §11.7) */
|
|
178
|
+
private typingExtends: ReadonlySet<QueryNode> = new Set();
|
|
179
|
+
/** Types the Extends that wait for it, whenever one does (PLAN §11.7 Q4) */
|
|
180
|
+
private readonly retyping: IReactionDisposer;
|
|
122
181
|
/** The rows a run returns; kept per user, never in the cube */
|
|
123
182
|
rowLimit: number;
|
|
124
183
|
/** The palette shows icons only; kept per user, never in the cube */
|
|
@@ -134,8 +193,15 @@ export class CubeEditorState implements CommandRegistrar {
|
|
|
134
193
|
private readonly importedOver = new WeakSet<CubeDocument>();
|
|
135
194
|
|
|
136
195
|
constructor(host: CubeHost, document = new CubeDocument()) {
|
|
137
|
-
makeObservable<
|
|
196
|
+
makeObservable<
|
|
197
|
+
CubeEditorState,
|
|
198
|
+
'pendingSources' | 'modelOutlines' | 'typingExtends'
|
|
199
|
+
>(this, {
|
|
138
200
|
pendingSources: observable.ref,
|
|
201
|
+
typingExtends: observable.ref,
|
|
202
|
+
extendsToType: computed,
|
|
203
|
+
isTypingExtends: computed,
|
|
204
|
+
retypeExtends: flow,
|
|
139
205
|
modelOutlines: observable.ref,
|
|
140
206
|
modelOutline: computed,
|
|
141
207
|
loadModelOutline: flow,
|
|
@@ -151,6 +217,9 @@ export class CubeEditorState implements CommandRegistrar {
|
|
|
151
217
|
analysis: computed,
|
|
152
218
|
emitter: computed,
|
|
153
219
|
canUndo: computed,
|
|
220
|
+
hasEditsToApply: computed,
|
|
221
|
+
executeEdited: action,
|
|
222
|
+
undoEdited: action,
|
|
154
223
|
isDialogOpen: computed,
|
|
155
224
|
applyDocument: action,
|
|
156
225
|
undo: action,
|
|
@@ -173,6 +242,10 @@ export class CubeEditorState implements CommandRegistrar {
|
|
|
173
242
|
});
|
|
174
243
|
this.host = host;
|
|
175
244
|
this.registry = createNodeRegistry();
|
|
245
|
+
this.staleExtendTyping = createStaleCubeExtendTypingRule(
|
|
246
|
+
this.registry,
|
|
247
|
+
() => this.document.context?.model,
|
|
248
|
+
);
|
|
176
249
|
this.document = document;
|
|
177
250
|
const storedLimit = host.applicationStore.userDataService.getNumericValue(
|
|
178
251
|
LEGEND_CUBE_USER_DATA_KEY.ROW_LIMIT,
|
|
@@ -185,18 +258,35 @@ export class CubeEditorState implements CommandRegistrar {
|
|
|
185
258
|
LEGEND_CUBE_USER_DATA_KEY.PALETTE_COLLAPSED,
|
|
186
259
|
) ?? false;
|
|
187
260
|
this.execution = new CubeExecutionState(this);
|
|
261
|
+
this.dataProductRuntime = new CubeDataProductRuntimeState(this);
|
|
188
262
|
this.sourcePicker = new CubeSourcePickerState(this);
|
|
189
263
|
this.specTransfer = new CubeSpecTransferState(this);
|
|
264
|
+
this.examples = new CubeExamplesState(this);
|
|
190
265
|
this.showPure = new CubeShowPureState(this);
|
|
191
266
|
this.nodeEditor = new CubeNodeEditorState(this);
|
|
267
|
+
this.retyping = reaction(
|
|
268
|
+
() => this.extendsToType,
|
|
269
|
+
(waiting) => {
|
|
270
|
+
if (waiting.length) {
|
|
271
|
+
flowResult(this.retypeExtends(waiting)).catch(
|
|
272
|
+
this.host.applicationStore.alertUnhandledError,
|
|
273
|
+
);
|
|
274
|
+
}
|
|
275
|
+
},
|
|
276
|
+
{ fireImmediately: true },
|
|
277
|
+
);
|
|
192
278
|
}
|
|
193
279
|
|
|
194
|
-
/**
|
|
280
|
+
/**
|
|
281
|
+
* Each node's schema and errors, query-level rules included, as the
|
|
282
|
+
* emitter sees them, and an Extend typed for another input than its own
|
|
283
|
+
* waiting (`ERR_TYPING`), which only the editor can tell
|
|
284
|
+
*/
|
|
195
285
|
get analysis(): SchemaInferenceResult {
|
|
196
|
-
return buildSchemasAndValidity(
|
|
197
|
-
this.
|
|
198
|
-
this.
|
|
199
|
-
);
|
|
286
|
+
return buildSchemasAndValidity(this.document.query, [
|
|
287
|
+
...this.registry.queryRules,
|
|
288
|
+
this.staleExtendTyping,
|
|
289
|
+
]);
|
|
200
290
|
}
|
|
201
291
|
|
|
202
292
|
get emitter(): QueryEmitter {
|
|
@@ -215,6 +305,160 @@ export class CubeEditorState implements CommandRegistrar {
|
|
|
215
305
|
return this.pendingSources.has(node);
|
|
216
306
|
}
|
|
217
307
|
|
|
308
|
+
/**
|
|
309
|
+
* The Extends of the cube shown that wait for the engine to type their
|
|
310
|
+
* columns, their input valid, and that aren't being typed (PLAN §11.7):
|
|
311
|
+
* new expressions, or an input that changed
|
|
312
|
+
*/
|
|
313
|
+
get extendsToType(): readonly Extend[] {
|
|
314
|
+
const { validity } = this.analysis;
|
|
315
|
+
return this.document.query.nodes.filter(
|
|
316
|
+
(node): node is Extend =>
|
|
317
|
+
node instanceof Extend &&
|
|
318
|
+
!this.typingExtends.has(node) &&
|
|
319
|
+
(validity.get(node.id) ?? []).some(isTypingError),
|
|
320
|
+
);
|
|
321
|
+
}
|
|
322
|
+
|
|
323
|
+
/** The cube shown has Extends the engine is typing */
|
|
324
|
+
get isTypingExtends(): boolean {
|
|
325
|
+
return this.document.query.nodes.some((node) =>
|
|
326
|
+
this.typingExtends.has(node),
|
|
327
|
+
);
|
|
328
|
+
}
|
|
329
|
+
|
|
330
|
+
/** The node waits for the engine to type it, or is being typed: an Extend (PLAN §11.7) */
|
|
331
|
+
isTypingNode(node: QueryNode): boolean {
|
|
332
|
+
return (
|
|
333
|
+
this.typingExtends.has(node) ||
|
|
334
|
+
(this.analysis.validity.get(node.id) ?? []).some(isTypingError)
|
|
335
|
+
);
|
|
336
|
+
}
|
|
337
|
+
|
|
338
|
+
/**
|
|
339
|
+
* Types Extends' columns with the engine, in one call, outside the undo
|
|
340
|
+
* history (PLAN §11.7 Q4): each for the input it has now, its columns
|
|
341
|
+
* after its input's relation, as typing types any node. The typing goes in
|
|
342
|
+
* place of the very nodes sent, in the cube shown and the undo snapshots
|
|
343
|
+
* that give the engine the same input; one the user changed meanwhile is
|
|
344
|
+
* left to type again. Each typing records the input as the engine was given
|
|
345
|
+
* it (`upstream`). A typing the engine couldn't give names the column it
|
|
346
|
+
* failed on; when the engine can't be reached, a typing still current for
|
|
347
|
+
* the input is kept, with a warning, as a source's saved columns are.
|
|
348
|
+
*/
|
|
349
|
+
*retypeExtends(nodes: readonly Extend[]): GeneratorFn<void> {
|
|
350
|
+
const { context, query } = this.document;
|
|
351
|
+
if (!context) {
|
|
352
|
+
return;
|
|
353
|
+
}
|
|
354
|
+
const { schemas } = this.analysis;
|
|
355
|
+
const emitter = new QueryEmitter(query, this.registry);
|
|
356
|
+
const requests = nodes.flatMap((node) => {
|
|
357
|
+
const [inputId] = query.getInputIds(node.id);
|
|
358
|
+
const input = inputId === undefined ? undefined : schemas.get(inputId);
|
|
359
|
+
if (
|
|
360
|
+
query.getNode(node.id) !== node ||
|
|
361
|
+
this.typingExtends.has(node) ||
|
|
362
|
+
!input ||
|
|
363
|
+
node.columns.some(({ lambda }) => lambda === undefined)
|
|
364
|
+
) {
|
|
365
|
+
return [];
|
|
366
|
+
}
|
|
367
|
+
const columns = node.columns.map(({ name, lambda }) => ({
|
|
368
|
+
name,
|
|
369
|
+
lambda: lambda as JsonObject,
|
|
370
|
+
}));
|
|
371
|
+
return [
|
|
372
|
+
{
|
|
373
|
+
node,
|
|
374
|
+
input,
|
|
375
|
+
columns,
|
|
376
|
+
upstream: getCubeExtendUpstream(emitter, node.id, context.model),
|
|
377
|
+
lambdas: buildCubeExtendTypingLambdas(
|
|
378
|
+
query,
|
|
379
|
+
node,
|
|
380
|
+
columns,
|
|
381
|
+
this.registry,
|
|
382
|
+
false,
|
|
383
|
+
),
|
|
384
|
+
},
|
|
385
|
+
];
|
|
386
|
+
});
|
|
387
|
+
if (!requests.length) {
|
|
388
|
+
return;
|
|
389
|
+
}
|
|
390
|
+
const sent = requests.map(({ node }) => node);
|
|
391
|
+
this.typingExtends = new Set([...this.typingExtends, ...sent]);
|
|
392
|
+
let answers: ReadonlyMap<NodeId, Schema | CubeEngineError>;
|
|
393
|
+
try {
|
|
394
|
+
answers = (yield this.host.engine.typeLambdas(
|
|
395
|
+
context.model,
|
|
396
|
+
new Map(requests.flatMap(({ lambdas }) => [...lambdas])),
|
|
397
|
+
)) as ReadonlyMap<NodeId, Schema | CubeEngineError>;
|
|
398
|
+
} catch (error) {
|
|
399
|
+
const failure =
|
|
400
|
+
error instanceof CubeEngineError
|
|
401
|
+
? error
|
|
402
|
+
: new CubeEngineError(
|
|
403
|
+
CubeEngineErrorKind.NETWORK,
|
|
404
|
+
error instanceof Error ? error.message : String(error),
|
|
405
|
+
);
|
|
406
|
+
answers = new Map(
|
|
407
|
+
requests.flatMap(({ lambdas }) =>
|
|
408
|
+
[...lambdas.keys()].map((key) => [key, failure] as const),
|
|
409
|
+
),
|
|
410
|
+
);
|
|
411
|
+
} finally {
|
|
412
|
+
this.typingExtends = new Set(
|
|
413
|
+
[...this.typingExtends].filter(
|
|
414
|
+
(node) => !sent.includes(node as Extend),
|
|
415
|
+
),
|
|
416
|
+
);
|
|
417
|
+
}
|
|
418
|
+
// a typing that comes back the same leaves its node, and the query, alone
|
|
419
|
+
const warnings = new Map(this.warnings);
|
|
420
|
+
const replacements = new Map<QueryNode, QueryNode>(
|
|
421
|
+
requests.flatMap(({ node, input, columns, upstream }) => {
|
|
422
|
+
const { typing, error } = readCubeExtendTyping(
|
|
423
|
+
answers,
|
|
424
|
+
node,
|
|
425
|
+
input,
|
|
426
|
+
columns,
|
|
427
|
+
upstream,
|
|
428
|
+
);
|
|
429
|
+
if (
|
|
430
|
+
error?.kind === CubeEngineErrorKind.NETWORK &&
|
|
431
|
+
isCubeExtendTypingCurrent(node, input, upstream)
|
|
432
|
+
) {
|
|
433
|
+
warnings.set(node.key, [getExtendRetypeWarning(error.firstLine)]);
|
|
434
|
+
return [];
|
|
435
|
+
}
|
|
436
|
+
warnings.delete(node.key);
|
|
437
|
+
return isSameCubeExtendTyping(typing, node.typing)
|
|
438
|
+
? []
|
|
439
|
+
: [[node, node.withTyping(typing)] as const];
|
|
440
|
+
}),
|
|
441
|
+
);
|
|
442
|
+
this.warnings = warnings;
|
|
443
|
+
// an undo snapshot whose input differs keeps the typing it had
|
|
444
|
+
const emitters = new Map<Query, QueryEmitter>([[query, emitter]]);
|
|
445
|
+
this.replaceOutsideHistory(replacements, (snapshot, resolved) => {
|
|
446
|
+
const upstream = getCubeExtendTypingUpstream((resolved as Extend).typing);
|
|
447
|
+
if (upstream === undefined) {
|
|
448
|
+
return true;
|
|
449
|
+
}
|
|
450
|
+
let snapshotEmitter = emitters.get(snapshot);
|
|
451
|
+
if (!snapshotEmitter) {
|
|
452
|
+
snapshotEmitter = new QueryEmitter(snapshot, this.registry);
|
|
453
|
+
emitters.set(snapshot, snapshotEmitter);
|
|
454
|
+
}
|
|
455
|
+
return (
|
|
456
|
+
getCubeExtendUpstream(snapshotEmitter, resolved.id, context.model) ===
|
|
457
|
+
upstream
|
|
458
|
+
);
|
|
459
|
+
});
|
|
460
|
+
}
|
|
461
|
+
|
|
218
462
|
/**
|
|
219
463
|
* Warnings worked out from the query, by node id: a Sort whose order is
|
|
220
464
|
* lost before it is used (PLAN §11.4). Never stored and never errors, so
|
|
@@ -329,7 +573,8 @@ export class CubeEditorState implements CommandRegistrar {
|
|
|
329
573
|
return;
|
|
330
574
|
}
|
|
331
575
|
try {
|
|
332
|
-
const outline = (yield
|
|
576
|
+
const outline = (yield loadCubeModelOutline(
|
|
577
|
+
this.host,
|
|
333
578
|
model,
|
|
334
579
|
)) as CubeModelOutline;
|
|
335
580
|
this.modelOutlines = new Map([...this.modelOutlines, [model, outline]]);
|
|
@@ -342,6 +587,7 @@ export class CubeEditorState implements CommandRegistrar {
|
|
|
342
587
|
get isDialogOpen(): boolean {
|
|
343
588
|
return (
|
|
344
589
|
this.sourcePicker.isOpen ||
|
|
590
|
+
this.examples.isOpen ||
|
|
345
591
|
this.specTransfer.mode !== undefined ||
|
|
346
592
|
this.showPure.isOpen
|
|
347
593
|
);
|
|
@@ -351,27 +597,93 @@ export class CubeEditorState implements CommandRegistrar {
|
|
|
351
597
|
* The page's keyboard shortcuts, while it is open (spec §17.12). Each does
|
|
352
598
|
* nothing when its button can't be used, and nothing while a Cube dialog
|
|
353
599
|
* is open, since a dialog doesn't stop the app's shortcuts (user's choice,
|
|
354
|
-
* 2026-10-07)
|
|
600
|
+
* 2026-10-07), or while something opened from the node editor holds it
|
|
601
|
+
* open. Like their buttons, they finish the node editor first (PLAN §11.8):
|
|
602
|
+
* F9 runs the edited query, and Ctrl+Z undoes what finishing applied. Undo
|
|
603
|
+
* leaves Ctrl+Z to a text field that has the focus.
|
|
355
604
|
*/
|
|
356
605
|
registerCommands(): void {
|
|
357
|
-
const { commandService
|
|
606
|
+
const { commandService } = this.host.applicationStore;
|
|
358
607
|
commandService.registerCommand({
|
|
359
608
|
key: LEGEND_CUBE_COMMAND_KEY.EXECUTE,
|
|
360
609
|
trigger: () =>
|
|
361
610
|
!this.isDialogOpen &&
|
|
362
|
-
this.
|
|
363
|
-
!this.execution.isRunning
|
|
611
|
+
!this.nodeEditor.isHeld &&
|
|
612
|
+
!this.execution.isRunning &&
|
|
613
|
+
(this.execution.canExecute || this.hasEditsToApply),
|
|
614
|
+
action: () =>
|
|
615
|
+
this.nodeEditor.runFromKeyboard(
|
|
616
|
+
() => this.executeEdited(),
|
|
617
|
+
isFocusInNodeEditor(),
|
|
618
|
+
),
|
|
619
|
+
});
|
|
620
|
+
// F10 in the Extend editor (PLAN §11.7)
|
|
621
|
+
commandService.registerCommand({
|
|
622
|
+
key: LEGEND_CUBE_COMMAND_KEY.VALIDATE_EXPRESSIONS,
|
|
623
|
+
trigger: () => {
|
|
624
|
+
const { draft } = this.nodeEditor;
|
|
625
|
+
return (
|
|
626
|
+
!this.isDialogOpen &&
|
|
627
|
+
!this.readOnly &&
|
|
628
|
+
draft instanceof CubeExtendDraft &&
|
|
629
|
+
!draft.validating
|
|
630
|
+
);
|
|
631
|
+
},
|
|
364
632
|
action: () => {
|
|
365
|
-
|
|
633
|
+
const { draft } = this.nodeEditor;
|
|
634
|
+
if (draft instanceof CubeExtendDraft) {
|
|
635
|
+
flowResult(draft.validate()).catch(
|
|
636
|
+
this.host.applicationStore.alertUnhandledError,
|
|
637
|
+
);
|
|
638
|
+
}
|
|
366
639
|
},
|
|
367
640
|
});
|
|
368
641
|
commandService.registerCommand({
|
|
369
642
|
key: LEGEND_CUBE_COMMAND_KEY.UNDO,
|
|
370
|
-
trigger: () =>
|
|
371
|
-
|
|
643
|
+
trigger: () =>
|
|
644
|
+
!this.isDialogOpen &&
|
|
645
|
+
!this.nodeEditor.isHeld &&
|
|
646
|
+
(this.canUndo || this.hasEditsToApply) &&
|
|
647
|
+
!isTypingText(),
|
|
648
|
+
action: () =>
|
|
649
|
+
this.nodeEditor.runFromKeyboard(
|
|
650
|
+
() => this.undoEdited(),
|
|
651
|
+
isFocusInNodeEditor(),
|
|
652
|
+
),
|
|
372
653
|
});
|
|
373
654
|
}
|
|
374
655
|
|
|
656
|
+
/** The node editor has edits that closing it would apply */
|
|
657
|
+
get hasEditsToApply(): boolean {
|
|
658
|
+
return this.nodeEditor.hasChanges && !this.readOnly;
|
|
659
|
+
}
|
|
660
|
+
|
|
661
|
+
/**
|
|
662
|
+
* Execute, as its button and F9 do (spec §17.5): finishes the node editor
|
|
663
|
+
* first, so the edits run, then runs the query if it can; runs nothing
|
|
664
|
+
* when the edits had to be dropped, since the run would not be what the
|
|
665
|
+
* user edited
|
|
666
|
+
*/
|
|
667
|
+
executeEdited(): void {
|
|
668
|
+
if (!this.nodeEditor.finishApplied() || !this.execution.canExecute) {
|
|
669
|
+
return;
|
|
670
|
+
}
|
|
671
|
+
flowResult(this.execution.execute()).catch(
|
|
672
|
+
this.host.applicationStore.alertUnhandledError,
|
|
673
|
+
);
|
|
674
|
+
}
|
|
675
|
+
|
|
676
|
+
/**
|
|
677
|
+
* Undo, as its button and Ctrl+Z do: finishes the node editor first, then
|
|
678
|
+
* undoes the last change, which drops the edits it just applied; when the
|
|
679
|
+
* edits had to be dropped instead, that was the undo
|
|
680
|
+
*/
|
|
681
|
+
undoEdited(): void {
|
|
682
|
+
if (this.nodeEditor.finishApplied()) {
|
|
683
|
+
this.undo();
|
|
684
|
+
}
|
|
685
|
+
}
|
|
686
|
+
|
|
375
687
|
deregisterCommands(): void {
|
|
376
688
|
Object.values(LEGEND_CUBE_COMMAND_KEY).forEach((key) =>
|
|
377
689
|
this.host.applicationStore.commandService.deregisterCommand(key),
|
|
@@ -411,11 +723,22 @@ export class CubeEditorState implements CommandRegistrar {
|
|
|
411
723
|
flowResult(this.reresolveSources()).catch(
|
|
412
724
|
this.host.applicationStore.alertUnhandledError,
|
|
413
725
|
);
|
|
726
|
+
// typed once on load too, as sources are checked again: the model may
|
|
727
|
+
// have changed the types of its functions (PLAN §11.7)
|
|
728
|
+
flowResult(
|
|
729
|
+
this.retypeExtends(
|
|
730
|
+
next.query.nodes.filter(
|
|
731
|
+
(node): node is Extend => node instanceof Extend,
|
|
732
|
+
),
|
|
733
|
+
),
|
|
734
|
+
).catch(this.host.applicationStore.alertUnhandledError);
|
|
414
735
|
}
|
|
415
736
|
|
|
416
737
|
/**
|
|
417
|
-
* Types the cube's
|
|
418
|
-
*
|
|
738
|
+
* Types the cube's sources again, outside the undo history (PLAN §10.3,
|
|
739
|
+
* Settled before M1.8): its tables in one engine call, a data product
|
|
740
|
+
* cube's access points through the catalog, from the deployed artifact at
|
|
741
|
+
* the cube's version (PLAN §6.8). Warnings name the kind of source:
|
|
419
742
|
* - a table whose columns are the saved ones is left as it is;
|
|
420
743
|
* - a table that changed takes its new columns, with a warning listing the
|
|
421
744
|
* changes;
|
|
@@ -430,60 +753,118 @@ export class CubeEditorState implements CommandRegistrar {
|
|
|
430
753
|
* left alone.
|
|
431
754
|
*
|
|
432
755
|
* `only` types just these sources of the cube shown, e.g. one Refresh. A
|
|
433
|
-
* table found unchanged loses any earlier warning.
|
|
756
|
+
* table found unchanged loses any earlier warning. `fresh` reads a data
|
|
757
|
+
* product's artifact again rather than what this page visit read.
|
|
434
758
|
*/
|
|
435
759
|
*reresolveSources(
|
|
436
|
-
only?: readonly
|
|
760
|
+
only?: readonly RecheckedSource[],
|
|
761
|
+
fresh = false,
|
|
437
762
|
): GeneratorFn<void> {
|
|
438
763
|
const { context, query } = this.document;
|
|
439
|
-
|
|
764
|
+
if (!context) {
|
|
765
|
+
return;
|
|
766
|
+
}
|
|
767
|
+
const kept = (only ?? query.nodes).filter(
|
|
768
|
+
(node) => query.getNode(node.id) === node,
|
|
769
|
+
);
|
|
770
|
+
const tables = kept.filter(
|
|
440
771
|
(node): node is RelationalTableSource =>
|
|
441
|
-
node instanceof RelationalTableSource
|
|
442
|
-
query.getNode(node.id) === node,
|
|
772
|
+
node instanceof RelationalTableSource,
|
|
443
773
|
);
|
|
444
|
-
|
|
774
|
+
// an access point on a cube of tables is the no-mix rule's to flag
|
|
775
|
+
const accessPoints = isCubeDataProductModel(context.model)
|
|
776
|
+
? kept.filter(
|
|
777
|
+
(node): node is DataProductAccessPointSource =>
|
|
778
|
+
node instanceof DataProductAccessPointSource,
|
|
779
|
+
)
|
|
780
|
+
: [];
|
|
781
|
+
const dataSets = isCubeIngestModel(context.model)
|
|
782
|
+
? kept.filter(
|
|
783
|
+
(node): node is IngestDatasetSource =>
|
|
784
|
+
node instanceof IngestDatasetSource,
|
|
785
|
+
)
|
|
786
|
+
: [];
|
|
787
|
+
const sources: readonly RecheckedSource[] = [
|
|
788
|
+
...tables,
|
|
789
|
+
...accessPoints,
|
|
790
|
+
...dataSets,
|
|
791
|
+
];
|
|
792
|
+
if (!sources.length) {
|
|
445
793
|
return;
|
|
446
794
|
}
|
|
447
795
|
this.pendingSources = new Set([...this.pendingSources, ...sources]);
|
|
448
796
|
let answers: ReadonlyMap<string, Schema | CubeEngineError>;
|
|
449
797
|
try {
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
|
|
798
|
+
const [tableAnswers, accessPointAnswers, dataSetAnswers] =
|
|
799
|
+
(yield Promise.all([
|
|
800
|
+
tables.length
|
|
801
|
+
? this.host.engine
|
|
802
|
+
.resolveSchemas(
|
|
803
|
+
context.model,
|
|
804
|
+
new Map(
|
|
805
|
+
tables.map((source) => [
|
|
806
|
+
source.id,
|
|
807
|
+
[source.database, source.schema, source.table],
|
|
808
|
+
]),
|
|
809
|
+
),
|
|
810
|
+
)
|
|
811
|
+
.catch((error: unknown) => {
|
|
812
|
+
const failure =
|
|
813
|
+
error instanceof CubeEngineError
|
|
814
|
+
? error
|
|
815
|
+
: new CubeEngineError(
|
|
816
|
+
CubeEngineErrorKind.NETWORK,
|
|
817
|
+
error instanceof Error
|
|
818
|
+
? error.message
|
|
819
|
+
: String(error),
|
|
820
|
+
);
|
|
821
|
+
return new Map(tables.map((source) => [source.id, failure]));
|
|
822
|
+
})
|
|
823
|
+
: new Map(),
|
|
824
|
+
accessPoints.length
|
|
825
|
+
? recheckCubeDataProductSources(
|
|
826
|
+
this.host.dataProductCatalog,
|
|
827
|
+
context.model,
|
|
828
|
+
accessPoints,
|
|
829
|
+
fresh,
|
|
830
|
+
)
|
|
831
|
+
: new Map(),
|
|
832
|
+
dataSets.length
|
|
833
|
+
? recheckCubeIngestSources(
|
|
834
|
+
this.host.ingestCatalog,
|
|
835
|
+
context.model,
|
|
836
|
+
dataSets,
|
|
837
|
+
fresh,
|
|
838
|
+
)
|
|
839
|
+
: new Map(),
|
|
840
|
+
])) as ReadonlyMap<string, Schema | CubeEngineError>[];
|
|
841
|
+
answers = new Map([
|
|
842
|
+
...(tableAnswers ?? []),
|
|
843
|
+
...(accessPointAnswers ?? []),
|
|
844
|
+
...(dataSetAnswers ?? []),
|
|
845
|
+
]);
|
|
468
846
|
} finally {
|
|
469
847
|
this.pendingSources = new Set(
|
|
470
848
|
[...this.pendingSources].filter(
|
|
471
|
-
(node) => !sources.includes(node as
|
|
849
|
+
(node) => !sources.includes(node as RecheckedSource),
|
|
472
850
|
),
|
|
473
851
|
);
|
|
474
852
|
}
|
|
475
853
|
const warnings = new Map(this.warnings);
|
|
476
854
|
/** Each typed source, by the object that was sent, and what replaces it */
|
|
477
|
-
const replacements = new Map<
|
|
478
|
-
RelationalTableSource,
|
|
479
|
-
RelationalTableSource
|
|
480
|
-
>();
|
|
855
|
+
const replacements = new Map<RecheckedSource, RecheckedSource>();
|
|
481
856
|
sources.forEach((source) => {
|
|
857
|
+
const isAccessPoint = source instanceof DataProductAccessPointSource;
|
|
858
|
+
const isDataSet = source instanceof IngestDatasetSource;
|
|
482
859
|
const answer =
|
|
483
860
|
answers.get(source.id) ??
|
|
484
861
|
new CubeEngineError(
|
|
485
862
|
CubeEngineErrorKind.COMPILE,
|
|
486
|
-
|
|
863
|
+
isAccessPoint
|
|
864
|
+
? CUBE_DATA_PRODUCT_RECHECK_MESSAGE.NO_ANSWER
|
|
865
|
+
: isDataSet
|
|
866
|
+
? CUBE_INGEST_RECHECK_MESSAGE.NO_ANSWER
|
|
867
|
+
: 'The engine gave no schema for this table',
|
|
487
868
|
source.id,
|
|
488
869
|
);
|
|
489
870
|
const saved =
|
|
@@ -492,7 +873,13 @@ export class CubeEditorState implements CommandRegistrar {
|
|
|
492
873
|
: undefined;
|
|
493
874
|
if (answer instanceof CubeEngineError) {
|
|
494
875
|
if (saved) {
|
|
495
|
-
warnings.set(source.key, [
|
|
876
|
+
warnings.set(source.key, [
|
|
877
|
+
isAccessPoint
|
|
878
|
+
? getAccessPointRecheckWarning(answer.firstLine)
|
|
879
|
+
: isDataSet
|
|
880
|
+
? getDataSetRecheckWarning(answer.firstLine)
|
|
881
|
+
: getSourceRecheckWarning(answer.firstLine),
|
|
882
|
+
]);
|
|
496
883
|
} else if (
|
|
497
884
|
source.resolution.kind !== 'failed' ||
|
|
498
885
|
source.resolution.message !== answer.detail
|
|
@@ -514,13 +901,32 @@ export class CubeEditorState implements CommandRegistrar {
|
|
|
514
901
|
schema: answer,
|
|
515
902
|
});
|
|
516
903
|
if (saved) {
|
|
904
|
+
const diff = diffSchemas(saved, answer);
|
|
517
905
|
warnings.set(resolved.key, [
|
|
518
|
-
|
|
906
|
+
isAccessPoint
|
|
907
|
+
? getAccessPointDriftWarning(diff)
|
|
908
|
+
: isDataSet
|
|
909
|
+
? getDataSetDriftWarning(diff)
|
|
910
|
+
: getSchemaDriftWarning(diff),
|
|
519
911
|
]);
|
|
520
912
|
}
|
|
521
913
|
replacements.set(source, resolved);
|
|
522
914
|
});
|
|
523
915
|
this.warnings = warnings;
|
|
916
|
+
this.replaceOutsideHistory(replacements);
|
|
917
|
+
}
|
|
918
|
+
|
|
919
|
+
/**
|
|
920
|
+
* Puts nodes the engine checked in place of the very objects that were
|
|
921
|
+
* sent, outside the undo history: in the cube shown and in the undo
|
|
922
|
+
* snapshots taken meanwhile, so undoing an edit made meanwhile keeps them.
|
|
923
|
+
* A node the user changed meanwhile is a new object, and is left alone.
|
|
924
|
+
* Filter values saved as invalid text are read again against the columns.
|
|
925
|
+
*/
|
|
926
|
+
private replaceOutsideHistory(
|
|
927
|
+
replacements: ReadonlyMap<QueryNode, QueryNode>,
|
|
928
|
+
accepts?: (query: Query, resolved: QueryNode) => boolean,
|
|
929
|
+
): void {
|
|
524
930
|
if (!replacements.size) {
|
|
525
931
|
return;
|
|
526
932
|
}
|
|
@@ -532,7 +938,10 @@ export class CubeEditorState implements CommandRegistrar {
|
|
|
532
938
|
if (checked === undefined) {
|
|
533
939
|
let replaced = document.query;
|
|
534
940
|
replacements.forEach((resolved, source) => {
|
|
535
|
-
if (
|
|
941
|
+
if (
|
|
942
|
+
replaced.getNode(source.id) === source &&
|
|
943
|
+
(accepts?.(document.query, resolved) ?? true)
|
|
944
|
+
) {
|
|
536
945
|
replaced = replaced.replace(resolved);
|
|
537
946
|
}
|
|
538
947
|
});
|
|
@@ -562,22 +971,30 @@ export class CubeEditorState implements CommandRegistrar {
|
|
|
562
971
|
}
|
|
563
972
|
|
|
564
973
|
/**
|
|
565
|
-
* Types a
|
|
566
|
-
*
|
|
567
|
-
*
|
|
974
|
+
* Types a source again, from its Source panel (spec §17.6), as a re-check
|
|
975
|
+
* after an import does: a table with the engine, an access point through
|
|
976
|
+
* the catalog. No undo step, nothing changes when its columns are the
|
|
977
|
+
* same, and a warning lists any change.
|
|
568
978
|
*/
|
|
569
979
|
*refreshSource(nodeId: string): GeneratorFn<void> {
|
|
570
980
|
const source = this.document.query.getNode(nodeId);
|
|
571
|
-
if (
|
|
572
|
-
|
|
981
|
+
if (
|
|
982
|
+
source instanceof RelationalTableSource ||
|
|
983
|
+
source instanceof DataProductAccessPointSource ||
|
|
984
|
+
source instanceof IngestDatasetSource
|
|
985
|
+
) {
|
|
986
|
+
// a Refresh reads the deployed artifact or definition again
|
|
987
|
+
yield flowResult(this.reresolveSources([source], true));
|
|
573
988
|
}
|
|
574
989
|
}
|
|
575
990
|
|
|
576
991
|
/**
|
|
577
992
|
* Restores the document before the last edit; does nothing when there is
|
|
578
993
|
* no history. A restored query is a new object (PLAN §4.3), so rows that
|
|
579
|
-
* ran before the edit show as stale. An edit that left the query
|
|
580
|
-
* such as a rename, keeps
|
|
994
|
+
* ran before the edit show as stale. An edit that left the query and the
|
|
995
|
+
* context alone, such as a rename, keeps them, with the rows and engine
|
|
996
|
+
* errors; undoing a warehouse edit brings back the context the rows ran
|
|
997
|
+
* with. Undoing an
|
|
581
998
|
* import closes the node editor and the picker, as the import did.
|
|
582
999
|
*/
|
|
583
1000
|
undo(): void {
|
|
@@ -607,9 +1024,16 @@ export class CubeEditorState implements CommandRegistrar {
|
|
|
607
1024
|
this.history = [...this.history, this.document].slice(-MAX_UNDO_STEPS);
|
|
608
1025
|
}
|
|
609
1026
|
|
|
610
|
-
/**
|
|
1027
|
+
/**
|
|
1028
|
+
* Engine errors belong to the query and the context they came from, so
|
|
1029
|
+
* they are dropped when either changes, e.g. a data product cube's
|
|
1030
|
+
* warehouse
|
|
1031
|
+
*/
|
|
611
1032
|
private replaceDocument(next: CubeDocument): void {
|
|
612
|
-
if (
|
|
1033
|
+
if (
|
|
1034
|
+
next.query !== this.document.query ||
|
|
1035
|
+
next.context !== this.document.context
|
|
1036
|
+
) {
|
|
613
1037
|
this.hostIssues = new Map();
|
|
614
1038
|
this.execution.clearError();
|
|
615
1039
|
}
|
|
@@ -638,10 +1062,27 @@ export class CubeEditorState implements CommandRegistrar {
|
|
|
638
1062
|
}
|
|
639
1063
|
}
|
|
640
1064
|
|
|
1065
|
+
/**
|
|
1066
|
+
* The kinds of source the host serves: data products and ingest data sets
|
|
1067
|
+
* only with their catalogs. The cube's kind may still disable one
|
|
1068
|
+
* (`canAddNode`)
|
|
1069
|
+
*/
|
|
1070
|
+
get offeredSources(): readonly SourceDefinition[] {
|
|
1071
|
+
return this.registry.sources.filter(
|
|
1072
|
+
(definition) =>
|
|
1073
|
+
(definition.type !== DataProductAccessPointSource.TYPE ||
|
|
1074
|
+
this.sourcePicker.dataProductTab.isAvailable) &&
|
|
1075
|
+
(definition.type !== IngestDatasetSource.TYPE ||
|
|
1076
|
+
this.sourcePicker.ingestTab.isAvailable),
|
|
1077
|
+
);
|
|
1078
|
+
}
|
|
1079
|
+
|
|
641
1080
|
/**
|
|
642
1081
|
* Whether a node of the type can be added: a transform, unconnected or
|
|
643
1082
|
* spliced in after `afterId`, when the query allows it; a source only
|
|
644
1083
|
* unconnected, through the source picker. Never while the cube is read-only.
|
|
1084
|
+
* The low-level rule: the palette, drops and menus place nodes through
|
|
1085
|
+
* `CubeAddPlacement` (PLAN §11.8).
|
|
645
1086
|
*/
|
|
646
1087
|
canAddNode(type: string, afterId?: string): boolean {
|
|
647
1088
|
const definition = this.registry.get(type);
|
|
@@ -649,15 +1090,21 @@ export class CubeEditorState implements CommandRegistrar {
|
|
|
649
1090
|
return false;
|
|
650
1091
|
}
|
|
651
1092
|
if (definition.kind === 'source') {
|
|
652
|
-
|
|
1093
|
+
// through its tab, which the cube's kind may disable (PLAN §6.8)
|
|
1094
|
+
const tab = this.sourcePicker.tabForSourceType(type);
|
|
1095
|
+
return (
|
|
1096
|
+
afterId === undefined &&
|
|
1097
|
+
tab !== undefined &&
|
|
1098
|
+
this.sourcePicker.isTabEnabled(tab)
|
|
1099
|
+
);
|
|
653
1100
|
}
|
|
654
1101
|
const { query } = this.document;
|
|
655
1102
|
return query.canAdd(definition.create(query.generateId(type)), afterId);
|
|
656
1103
|
}
|
|
657
1104
|
|
|
658
1105
|
/**
|
|
659
|
-
* Adds a node of the type
|
|
660
|
-
*
|
|
1106
|
+
* Adds a node of the type (spec §17.4), the low-level add that
|
|
1107
|
+
* `CubeAddPlacement` places for the palette, drops and menus: a transform with its default settings, unconnected or spliced in
|
|
661
1108
|
* after `afterId`; a source opens the source picker, which adds it once
|
|
662
1109
|
* the engine has typed it. Does nothing `canAddNode` refuses.
|
|
663
1110
|
*/
|
|
@@ -667,7 +1114,7 @@ export class CubeEditorState implements CommandRegistrar {
|
|
|
667
1114
|
return;
|
|
668
1115
|
}
|
|
669
1116
|
if (definition.kind === 'source') {
|
|
670
|
-
this.sourcePicker.open();
|
|
1117
|
+
this.sourcePicker.open(this.sourcePicker.tabForSourceType(type)?.key);
|
|
671
1118
|
return;
|
|
672
1119
|
}
|
|
673
1120
|
const { query } = this.document;
|
|
@@ -801,6 +1248,7 @@ export class CubeEditorState implements CommandRegistrar {
|
|
|
801
1248
|
|
|
802
1249
|
/** Stops any run; call when the page closes */
|
|
803
1250
|
dispose(): void {
|
|
1251
|
+
this.retyping();
|
|
804
1252
|
this.execution.stop();
|
|
805
1253
|
this.nodeEditor.dispose();
|
|
806
1254
|
}
|