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