@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
|
@@ -0,0 +1,839 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) 2026-present, Goldman Sachs
|
|
3
|
+
*
|
|
4
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
* you may not use this file except in compliance with the License.
|
|
6
|
+
* You may obtain a copy of the License at
|
|
7
|
+
*
|
|
8
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
*
|
|
10
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
* See the License for the specific language governing permissions and
|
|
14
|
+
* limitations under the License.
|
|
15
|
+
*/
|
|
16
|
+
|
|
17
|
+
import {
|
|
18
|
+
type CubeContext,
|
|
19
|
+
DATA_PRODUCT_ACCESS_POINT_SOURCE_DEFINITION,
|
|
20
|
+
DataProductAccessPointSource,
|
|
21
|
+
} from '@finos/legend-cube';
|
|
22
|
+
import {
|
|
23
|
+
assertErrorThrown,
|
|
24
|
+
debounce,
|
|
25
|
+
type GeneratorFn,
|
|
26
|
+
} from '@finos/legend-shared';
|
|
27
|
+
import {
|
|
28
|
+
action,
|
|
29
|
+
computed,
|
|
30
|
+
flow,
|
|
31
|
+
flowResult,
|
|
32
|
+
makeObservable,
|
|
33
|
+
observable,
|
|
34
|
+
} from 'mobx';
|
|
35
|
+
import {
|
|
36
|
+
createCubeDataProductModel,
|
|
37
|
+
getEffectiveCubeWarehouse,
|
|
38
|
+
isCubeSnapshotVersion,
|
|
39
|
+
CUBE_DATA_PRODUCT_RUNTIME_PATH,
|
|
40
|
+
CUBE_DEFAULT_CONSUMER_WAREHOUSE,
|
|
41
|
+
type CubeDataProductProject,
|
|
42
|
+
CubeDataProductEnvironmentType,
|
|
43
|
+
getCubeDataProductProject,
|
|
44
|
+
isCubeDataProductModel,
|
|
45
|
+
} from '../../graph-manager/CubeDataProduct.js';
|
|
46
|
+
import {
|
|
47
|
+
type CubeAccessPoint,
|
|
48
|
+
type CubeAccessPointGroupAccess,
|
|
49
|
+
CubeDataProductCandidate,
|
|
50
|
+
type CubeDataProductCatalog,
|
|
51
|
+
type CubeDataProductDescription,
|
|
52
|
+
} from '../../graph-manager/CubeDataProductCatalog.js';
|
|
53
|
+
import { CubeEngineError } from '../../graph-manager/CubeEngine.js';
|
|
54
|
+
import type { CubeEditorState } from '../CubeEditorState.js';
|
|
55
|
+
import {
|
|
56
|
+
type CubeSourcePickerTab,
|
|
57
|
+
CubeSourcePickerTabKey,
|
|
58
|
+
} from './CubeSourcePickerTab.js';
|
|
59
|
+
|
|
60
|
+
/** An error as the tab shows it: its first line, with the rest on demand */
|
|
61
|
+
export interface CubeDataProductTabError {
|
|
62
|
+
readonly message: string;
|
|
63
|
+
readonly detail?: string | undefined;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
const toError = (error: unknown): CubeDataProductTabError => {
|
|
67
|
+
assertErrorThrown(error);
|
|
68
|
+
return error instanceof CubeEngineError
|
|
69
|
+
? {
|
|
70
|
+
message: error.firstLine,
|
|
71
|
+
detail: error.detail !== error.firstLine ? error.detail : undefined,
|
|
72
|
+
}
|
|
73
|
+
: { message: error.message };
|
|
74
|
+
};
|
|
75
|
+
|
|
76
|
+
export const CUBE_DATA_PRODUCT_TAB_MESSAGE = {
|
|
77
|
+
CUBE_CHANGED:
|
|
78
|
+
'The cube changed while the access point was being added; pick it again.',
|
|
79
|
+
TRUNCATED: 'Too many matching items; list truncated.',
|
|
80
|
+
OTHER_PROJECT: (groupId: string, artifactId: string) =>
|
|
81
|
+
`Belongs to project ${groupId}:${artifactId}`,
|
|
82
|
+
OTHER_VERSION: (versionId: string) => `Deployed from version ${versionId}`,
|
|
83
|
+
OTHER_ENVIRONMENT: 'Deployed to another environment',
|
|
84
|
+
NONE_IN_PROJECT:
|
|
85
|
+
"No data product of the cube's project matches; Search all shows the others.",
|
|
86
|
+
} as const;
|
|
87
|
+
|
|
88
|
+
/** How long typing pauses before the text is searched on a server */
|
|
89
|
+
const SEARCH_DELAY_MS = 300;
|
|
90
|
+
|
|
91
|
+
/** Whether a product is deployed from the project and version given, in its class */
|
|
92
|
+
const isFromProject = (
|
|
93
|
+
candidate: CubeDataProductCandidate,
|
|
94
|
+
project: CubeDataProductProject,
|
|
95
|
+
): boolean =>
|
|
96
|
+
candidate.groupId === project.groupId &&
|
|
97
|
+
candidate.artifactId === project.artifactId &&
|
|
98
|
+
candidate.versionId === project.versionId &&
|
|
99
|
+
candidate.environmentType === project.environmentType;
|
|
100
|
+
|
|
101
|
+
/** Whether two candidates are the same deployed product, at the same version and class */
|
|
102
|
+
const isSameProduct = (
|
|
103
|
+
candidate: CubeDataProductCandidate,
|
|
104
|
+
other: CubeDataProductCandidate,
|
|
105
|
+
): boolean =>
|
|
106
|
+
candidate.id === other.id &&
|
|
107
|
+
candidate.deploymentId === other.deploymentId &&
|
|
108
|
+
candidate.dataProductPath === other.dataProductPath &&
|
|
109
|
+
candidate.groupId === other.groupId &&
|
|
110
|
+
candidate.artifactId === other.artifactId &&
|
|
111
|
+
candidate.versionId === other.versionId &&
|
|
112
|
+
candidate.environmentType === other.environmentType;
|
|
113
|
+
|
|
114
|
+
/**
|
|
115
|
+
* The source dialog's Data product tab (PLAN §6.8), as Data Cube's selection
|
|
116
|
+
* goes: a deployment class, then a deployed data product, then one of its
|
|
117
|
+
* access points, then the warehouse, filled in with the default. The access
|
|
118
|
+
* point's columns come from the product's deployed artifact, so Add calls no
|
|
119
|
+
* engine. The first access point saves the product's project, its version,
|
|
120
|
+
* the class and the warehouse as the cube's model; after that the tab offers
|
|
121
|
+
* only that project's products, at that version, and reopens on the cube's
|
|
122
|
+
* data product, already expanded. A catalog that searches on a server is
|
|
123
|
+
* searched as the viewer types, and a cube with no search shows its own
|
|
124
|
+
* products, which a page of the server's matches may miss.
|
|
125
|
+
*/
|
|
126
|
+
export class CubeDataProductTabState implements CubeSourcePickerTab {
|
|
127
|
+
readonly key = CubeSourcePickerTabKey.DATA_PRODUCT;
|
|
128
|
+
readonly label = 'Data Product';
|
|
129
|
+
readonly editorState: CubeEditorState;
|
|
130
|
+
|
|
131
|
+
environmentType = CubeDataProductEnvironmentType.PRODUCTION;
|
|
132
|
+
search = '';
|
|
133
|
+
/** On a cube with a project, whether the list shows other projects' products too, greyed */
|
|
134
|
+
showAllProjects = false;
|
|
135
|
+
/** The class's deployed products; none until listed */
|
|
136
|
+
candidates: readonly CubeDataProductCandidate[] | undefined;
|
|
137
|
+
/** The class the products were listed for */
|
|
138
|
+
private listedEnvironmentType: CubeDataProductEnvironmentType | undefined;
|
|
139
|
+
/** The text the products were searched for on a server; '' for a whole list */
|
|
140
|
+
private listedText: string | undefined;
|
|
141
|
+
/** What the cube's own products listed were built from; none for a catalog's list */
|
|
142
|
+
private listedOwnKey: string | undefined;
|
|
143
|
+
/** Whether the server's matches listed leave out some */
|
|
144
|
+
private listedCutShort = false;
|
|
145
|
+
candidate: CubeDataProductCandidate | undefined;
|
|
146
|
+
description: CubeDataProductDescription | undefined;
|
|
147
|
+
/** The viewer's access to each group of the picked product; none until read, or when it can't be */
|
|
148
|
+
access: ReadonlyMap<string, CubeAccessPointGroupAccess> | undefined;
|
|
149
|
+
/** The picked access point, by group and id */
|
|
150
|
+
accessPointKey: { readonly group: string; readonly id: string } | undefined;
|
|
151
|
+
warehouse = CUBE_DEFAULT_CONSUMER_WAREHOUSE;
|
|
152
|
+
isListing = false;
|
|
153
|
+
isDescribing = false;
|
|
154
|
+
isAdding = false;
|
|
155
|
+
/** Why the products couldn't be listed, with its own retry */
|
|
156
|
+
listError: CubeDataProductTabError | undefined;
|
|
157
|
+
/** Why a product couldn't be read or its access point added */
|
|
158
|
+
error: CubeDataProductTabError | undefined;
|
|
159
|
+
|
|
160
|
+
/** The warehouse field shows a cube's own, not one the viewer typed */
|
|
161
|
+
private warehouseFromProject = false;
|
|
162
|
+
/** Stops the listing under way: a new listing or closing the dialog drops it */
|
|
163
|
+
private listAbort: AbortController | undefined;
|
|
164
|
+
/** Each counts its calls: a new call or closing the dialog drops a late answer */
|
|
165
|
+
private listRequest = 0;
|
|
166
|
+
private describeRequest = 0;
|
|
167
|
+
private accessRequest = 0;
|
|
168
|
+
private confirmRequest = 0;
|
|
169
|
+
/** Searches the typed text on the server once typing pauses */
|
|
170
|
+
private readonly searchSoon = debounce((): void => {
|
|
171
|
+
flowResult(this.listCandidates()).catch(
|
|
172
|
+
this.editorState.host.applicationStore.alertUnhandledError,
|
|
173
|
+
);
|
|
174
|
+
}, SEARCH_DELAY_MS);
|
|
175
|
+
|
|
176
|
+
constructor(editorState: CubeEditorState) {
|
|
177
|
+
makeObservable<
|
|
178
|
+
CubeDataProductTabState,
|
|
179
|
+
'listedEnvironmentType' | 'listedText' | 'listedOwnKey' | 'listedCutShort'
|
|
180
|
+
>(this, {
|
|
181
|
+
environmentType: observable,
|
|
182
|
+
search: observable,
|
|
183
|
+
showAllProjects: observable,
|
|
184
|
+
shownCandidates: computed,
|
|
185
|
+
setShowAllProjects: action,
|
|
186
|
+
candidates: observable.ref,
|
|
187
|
+
listedEnvironmentType: observable,
|
|
188
|
+
listedText: observable,
|
|
189
|
+
listedOwnKey: observable,
|
|
190
|
+
listedCutShort: observable,
|
|
191
|
+
candidate: observable.ref,
|
|
192
|
+
description: observable.ref,
|
|
193
|
+
access: observable.ref,
|
|
194
|
+
accessPointKey: observable.ref,
|
|
195
|
+
warehouse: observable,
|
|
196
|
+
isListing: observable,
|
|
197
|
+
isDescribing: observable,
|
|
198
|
+
isAdding: observable,
|
|
199
|
+
listError: observable.ref,
|
|
200
|
+
error: observable.ref,
|
|
201
|
+
isAvailable: computed,
|
|
202
|
+
searchesOnServer: computed,
|
|
203
|
+
fixedProject: computed,
|
|
204
|
+
isSnapshot: computed,
|
|
205
|
+
marketplaceLink: computed,
|
|
206
|
+
visibleCandidates: computed,
|
|
207
|
+
isTruncated: computed,
|
|
208
|
+
accessPoint: computed,
|
|
209
|
+
isBusy: computed,
|
|
210
|
+
canConfirm: computed,
|
|
211
|
+
setEnvironmentType: action,
|
|
212
|
+
setSearch: action,
|
|
213
|
+
selectCandidate: action,
|
|
214
|
+
selectAccessPoint: action,
|
|
215
|
+
setWarehouse: action,
|
|
216
|
+
open: action,
|
|
217
|
+
close: action,
|
|
218
|
+
retryListing: action,
|
|
219
|
+
listCandidates: flow,
|
|
220
|
+
describeCandidate: flow,
|
|
221
|
+
readAccess: flow,
|
|
222
|
+
confirm: flow,
|
|
223
|
+
});
|
|
224
|
+
this.editorState = editorState;
|
|
225
|
+
}
|
|
226
|
+
|
|
227
|
+
get catalog(): CubeDataProductCatalog | undefined {
|
|
228
|
+
return this.editorState.host.dataProductCatalog;
|
|
229
|
+
}
|
|
230
|
+
|
|
231
|
+
/** Hosts without a data product catalog have no data products */
|
|
232
|
+
get isAvailable(): boolean {
|
|
233
|
+
return this.catalog !== undefined;
|
|
234
|
+
}
|
|
235
|
+
|
|
236
|
+
/** Whether the catalog searches the text on a server, rather than the tab filtering its list */
|
|
237
|
+
get searchesOnServer(): boolean {
|
|
238
|
+
return this.catalog?.searchesOnServer === true;
|
|
239
|
+
}
|
|
240
|
+
|
|
241
|
+
ownsContext(context: CubeContext): boolean {
|
|
242
|
+
return isCubeDataProductModel(context.model);
|
|
243
|
+
}
|
|
244
|
+
|
|
245
|
+
/** The cube's project, once its first access point is added: every other comes from it */
|
|
246
|
+
get fixedProject(): CubeDataProductProject | undefined {
|
|
247
|
+
const model = this.editorState.document.context?.model;
|
|
248
|
+
return model ? getCubeDataProductProject(model) : undefined;
|
|
249
|
+
}
|
|
250
|
+
|
|
251
|
+
/** Whether the cube's project, or else the picked product, is at a moving SNAPSHOT version */
|
|
252
|
+
get isSnapshot(): boolean {
|
|
253
|
+
const project = this.fixedProject;
|
|
254
|
+
return project
|
|
255
|
+
? isCubeSnapshotVersion(project.versionId)
|
|
256
|
+
: this.candidate?.isSnapshot === true;
|
|
257
|
+
}
|
|
258
|
+
|
|
259
|
+
/**
|
|
260
|
+
* The picked product's page in the host's marketplace, on the picked
|
|
261
|
+
* access point's group once there is one; built from the listed product,
|
|
262
|
+
* whose id and deployment the marketplace knows
|
|
263
|
+
*/
|
|
264
|
+
get marketplaceLink(): string | undefined {
|
|
265
|
+
const { candidate } = this;
|
|
266
|
+
return candidate
|
|
267
|
+
? this.catalog?.getMarketplaceLink({
|
|
268
|
+
dataProductId: candidate.id,
|
|
269
|
+
deploymentId: candidate.deploymentId,
|
|
270
|
+
environmentType: candidate.environmentType,
|
|
271
|
+
accessPointGroup: this.accessPointKey?.group,
|
|
272
|
+
})
|
|
273
|
+
: undefined;
|
|
274
|
+
}
|
|
275
|
+
|
|
276
|
+
/** The cube's first data product, which the tab reopens on */
|
|
277
|
+
get fixedDataProductPath(): string | undefined {
|
|
278
|
+
return this.editorState.document.query.nodes.find(
|
|
279
|
+
(node): node is DataProductAccessPointSource =>
|
|
280
|
+
node instanceof DataProductAccessPointSource,
|
|
281
|
+
)?.dataProduct;
|
|
282
|
+
}
|
|
283
|
+
|
|
284
|
+
/**
|
|
285
|
+
* The listed products matching the search, from the cube's project once it
|
|
286
|
+
* has one; a server's matches as it gave them
|
|
287
|
+
*/
|
|
288
|
+
get visibleCandidates(): readonly CubeDataProductCandidate[] {
|
|
289
|
+
const search = this.search.trim().toLowerCase();
|
|
290
|
+
const project = this.fixedProject;
|
|
291
|
+
const { searchesOnServer } = this;
|
|
292
|
+
return (this.candidates ?? []).filter(
|
|
293
|
+
(candidate) =>
|
|
294
|
+
(!project || isFromProject(candidate, project)) &&
|
|
295
|
+
(searchesOnServer ||
|
|
296
|
+
[candidate.title, candidate.id, candidate.description ?? '']
|
|
297
|
+
.join('\n')
|
|
298
|
+
.toLowerCase()
|
|
299
|
+
.includes(search)),
|
|
300
|
+
);
|
|
301
|
+
}
|
|
302
|
+
|
|
303
|
+
/**
|
|
304
|
+
* The products the list shows: on a cube with a project, its project's
|
|
305
|
+
* only, unless Search all shows every listed product of the class, those
|
|
306
|
+
* of other projects or versions greyed
|
|
307
|
+
*/
|
|
308
|
+
get shownCandidates(): readonly CubeDataProductCandidate[] {
|
|
309
|
+
if (!this.fixedProject || !this.showAllProjects) {
|
|
310
|
+
return this.visibleCandidates;
|
|
311
|
+
}
|
|
312
|
+
const search = this.search.trim().toLowerCase();
|
|
313
|
+
const { searchesOnServer } = this;
|
|
314
|
+
return (this.candidates ?? []).filter(
|
|
315
|
+
(candidate) =>
|
|
316
|
+
candidate.environmentType === this.environmentType &&
|
|
317
|
+
(searchesOnServer ||
|
|
318
|
+
[candidate.title, candidate.id, candidate.description ?? '']
|
|
319
|
+
.join('\n')
|
|
320
|
+
.toLowerCase()
|
|
321
|
+
.includes(search)),
|
|
322
|
+
);
|
|
323
|
+
}
|
|
324
|
+
|
|
325
|
+
/** Why a listed product can't be picked on this cube: it isn't of the cube's project, version or class */
|
|
326
|
+
getCandidateDisabledReason(
|
|
327
|
+
candidate: CubeDataProductCandidate,
|
|
328
|
+
): string | undefined {
|
|
329
|
+
const project = this.fixedProject;
|
|
330
|
+
if (!project || isFromProject(candidate, project)) {
|
|
331
|
+
return undefined;
|
|
332
|
+
}
|
|
333
|
+
if (
|
|
334
|
+
candidate.groupId !== project.groupId ||
|
|
335
|
+
candidate.artifactId !== project.artifactId
|
|
336
|
+
) {
|
|
337
|
+
return CUBE_DATA_PRODUCT_TAB_MESSAGE.OTHER_PROJECT(
|
|
338
|
+
candidate.groupId,
|
|
339
|
+
candidate.artifactId,
|
|
340
|
+
);
|
|
341
|
+
}
|
|
342
|
+
return candidate.versionId !== project.versionId
|
|
343
|
+
? CUBE_DATA_PRODUCT_TAB_MESSAGE.OTHER_VERSION(candidate.versionId)
|
|
344
|
+
: CUBE_DATA_PRODUCT_TAB_MESSAGE.OTHER_ENVIRONMENT;
|
|
345
|
+
}
|
|
346
|
+
|
|
347
|
+
setShowAllProjects(showAllProjects: boolean): void {
|
|
348
|
+
this.showAllProjects = showAllProjects;
|
|
349
|
+
// searching on a server, Search all with no text lists the server's
|
|
350
|
+
// matches, and leaving it lists the cube's own products again
|
|
351
|
+
if (
|
|
352
|
+
this.searchesOnServer &&
|
|
353
|
+
this.candidates !== undefined &&
|
|
354
|
+
this.listedOwnKey !== this.getOwnProductsKey()
|
|
355
|
+
) {
|
|
356
|
+
flowResult(this.listCandidates()).catch(
|
|
357
|
+
this.editorState.host.applicationStore.alertUnhandledError,
|
|
358
|
+
);
|
|
359
|
+
}
|
|
360
|
+
}
|
|
361
|
+
|
|
362
|
+
/** Whether a server's matches listed may be cut short */
|
|
363
|
+
get isTruncated(): boolean {
|
|
364
|
+
return this.listedCutShort;
|
|
365
|
+
}
|
|
366
|
+
|
|
367
|
+
get accessPoint(): CubeAccessPoint | undefined {
|
|
368
|
+
const key = this.accessPointKey;
|
|
369
|
+
return key
|
|
370
|
+
? this.description?.groups
|
|
371
|
+
.find((group) => group.id === key.group)
|
|
372
|
+
?.accessPoints.find((point) => point.id === key.id)
|
|
373
|
+
: undefined;
|
|
374
|
+
}
|
|
375
|
+
|
|
376
|
+
get isBusy(): boolean {
|
|
377
|
+
return this.isListing || this.isDescribing || this.isAdding;
|
|
378
|
+
}
|
|
379
|
+
|
|
380
|
+
get canConfirm(): boolean {
|
|
381
|
+
const { context } = this.editorState.document;
|
|
382
|
+
return (
|
|
383
|
+
this.isAvailable &&
|
|
384
|
+
!this.editorState.readOnly &&
|
|
385
|
+
// a search under way doesn't change the access point picked
|
|
386
|
+
!this.isDescribing &&
|
|
387
|
+
!this.isAdding &&
|
|
388
|
+
(context === undefined || this.fixedProject !== undefined) &&
|
|
389
|
+
this.candidate !== undefined &&
|
|
390
|
+
this.accessPoint?.isPickable === true &&
|
|
391
|
+
this.warehouse.trim().length > 0
|
|
392
|
+
);
|
|
393
|
+
}
|
|
394
|
+
|
|
395
|
+
setEnvironmentType(environmentType: CubeDataProductEnvironmentType): void {
|
|
396
|
+
if (this.fixedProject || environmentType === this.environmentType) {
|
|
397
|
+
return;
|
|
398
|
+
}
|
|
399
|
+
this.environmentType = environmentType;
|
|
400
|
+
this.resetCandidate();
|
|
401
|
+
this.error = undefined;
|
|
402
|
+
this.candidates = undefined;
|
|
403
|
+
this.listedCutShort = false;
|
|
404
|
+
flowResult(this.listCandidates()).catch(
|
|
405
|
+
this.editorState.host.applicationStore.alertUnhandledError,
|
|
406
|
+
);
|
|
407
|
+
}
|
|
408
|
+
|
|
409
|
+
/** Filters the listed products; searching on a server, searches again once typing pauses */
|
|
410
|
+
setSearch(search: string): void {
|
|
411
|
+
this.search = search;
|
|
412
|
+
if (this.searchesOnServer) {
|
|
413
|
+
this.searchSoon();
|
|
414
|
+
}
|
|
415
|
+
}
|
|
416
|
+
|
|
417
|
+
/** Picks a product and reads its access points; picking it again reads them again after a failure */
|
|
418
|
+
selectCandidate(candidate: CubeDataProductCandidate | undefined): void {
|
|
419
|
+
if (candidate && this.getCandidateDisabledReason(candidate) !== undefined) {
|
|
420
|
+
return;
|
|
421
|
+
}
|
|
422
|
+
if (
|
|
423
|
+
candidate === this.candidate &&
|
|
424
|
+
(candidate === undefined || this.description || this.isDescribing)
|
|
425
|
+
) {
|
|
426
|
+
return;
|
|
427
|
+
}
|
|
428
|
+
this.resetCandidate();
|
|
429
|
+
this.candidate = candidate;
|
|
430
|
+
if (candidate) {
|
|
431
|
+
flowResult(this.describeCandidate(candidate)).catch(
|
|
432
|
+
this.editorState.host.applicationStore.alertUnhandledError,
|
|
433
|
+
);
|
|
434
|
+
}
|
|
435
|
+
}
|
|
436
|
+
|
|
437
|
+
selectAccessPoint(group: string, id: string): void {
|
|
438
|
+
this.accessPointKey = { group, id };
|
|
439
|
+
this.error = undefined;
|
|
440
|
+
}
|
|
441
|
+
|
|
442
|
+
/** The warehouse of a cube without one yet; a saved cube's is kept */
|
|
443
|
+
setWarehouse(warehouse: string): void {
|
|
444
|
+
if (!this.fixedProject) {
|
|
445
|
+
this.warehouse = warehouse;
|
|
446
|
+
}
|
|
447
|
+
}
|
|
448
|
+
|
|
449
|
+
/**
|
|
450
|
+
* When the dialog opens on the tab: on a cube with a project, on its class
|
|
451
|
+
* and warehouse, and then on its data product, expanded; otherwise on the
|
|
452
|
+
* warehouse the viewer last picked, else the default
|
|
453
|
+
*/
|
|
454
|
+
open(): void {
|
|
455
|
+
const project = this.fixedProject;
|
|
456
|
+
const runtime = this.editorState.dataProductRuntime;
|
|
457
|
+
this.error = undefined;
|
|
458
|
+
// a cube reopens on its own project's products
|
|
459
|
+
this.showAllProjects = false;
|
|
460
|
+
if (project) {
|
|
461
|
+
if (this.environmentType !== project.environmentType) {
|
|
462
|
+
this.environmentType = project.environmentType;
|
|
463
|
+
this.resetCandidate();
|
|
464
|
+
}
|
|
465
|
+
this.warehouse = getEffectiveCubeWarehouse(
|
|
466
|
+
project,
|
|
467
|
+
runtime.rememberedWarehouse,
|
|
468
|
+
);
|
|
469
|
+
this.warehouseFromProject = true;
|
|
470
|
+
if (this.candidate && !isFromProject(this.candidate, project)) {
|
|
471
|
+
this.resetCandidate();
|
|
472
|
+
}
|
|
473
|
+
} else if (this.warehouseFromProject || !this.candidate) {
|
|
474
|
+
// a new cube starts on the viewer's warehouse, not a previous cube's
|
|
475
|
+
this.warehouse =
|
|
476
|
+
runtime.rememberedWarehouse ?? CUBE_DEFAULT_CONSUMER_WAREHOUSE;
|
|
477
|
+
this.warehouseFromProject = false;
|
|
478
|
+
}
|
|
479
|
+
if (
|
|
480
|
+
this.candidates === undefined ||
|
|
481
|
+
this.listedEnvironmentType !== this.environmentType ||
|
|
482
|
+
(this.searchesOnServer &&
|
|
483
|
+
(this.listedText !== this.search.trim() ||
|
|
484
|
+
this.listedOwnKey !== this.getOwnProductsKey()))
|
|
485
|
+
) {
|
|
486
|
+
flowResult(this.listCandidates()).catch(
|
|
487
|
+
this.editorState.host.applicationStore.alertUnhandledError,
|
|
488
|
+
);
|
|
489
|
+
} else {
|
|
490
|
+
this.expandCubeDataProduct();
|
|
491
|
+
}
|
|
492
|
+
}
|
|
493
|
+
|
|
494
|
+
close(): void {
|
|
495
|
+
this.searchSoon.cancel();
|
|
496
|
+
this.listAbort?.abort();
|
|
497
|
+
this.listAbort = undefined;
|
|
498
|
+
this.listRequest++;
|
|
499
|
+
this.confirmRequest++;
|
|
500
|
+
this.isListing = false;
|
|
501
|
+
this.isAdding = false;
|
|
502
|
+
// a product whose access points haven't arrived would show none
|
|
503
|
+
if (this.candidate && !this.description) {
|
|
504
|
+
this.resetCandidate();
|
|
505
|
+
}
|
|
506
|
+
this.describeRequest++;
|
|
507
|
+
this.isDescribing = false;
|
|
508
|
+
}
|
|
509
|
+
|
|
510
|
+
/** Lists the products again after a failed listing */
|
|
511
|
+
retryListing(): void {
|
|
512
|
+
flowResult(this.listCandidates()).catch(
|
|
513
|
+
this.editorState.host.applicationStore.alertUnhandledError,
|
|
514
|
+
);
|
|
515
|
+
}
|
|
516
|
+
|
|
517
|
+
/**
|
|
518
|
+
* Lists the class's deployed products; searching on a server, the ones
|
|
519
|
+
* matching the search, or a cube's own when there is no search
|
|
520
|
+
*/
|
|
521
|
+
*listCandidates(): GeneratorFn<void> {
|
|
522
|
+
const { catalog } = this;
|
|
523
|
+
if (!catalog) {
|
|
524
|
+
return;
|
|
525
|
+
}
|
|
526
|
+
// this listing replaces one the typing would start
|
|
527
|
+
this.searchSoon.cancel();
|
|
528
|
+
const environmentType = this.environmentType;
|
|
529
|
+
const text = this.searchesOnServer ? this.search.trim() : '';
|
|
530
|
+
const request = ++this.listRequest;
|
|
531
|
+
this.listAbort?.abort();
|
|
532
|
+
this.listAbort = undefined;
|
|
533
|
+
this.listError = undefined;
|
|
534
|
+
const ownKey = this.getOwnProductsKey();
|
|
535
|
+
if (ownKey !== undefined) {
|
|
536
|
+
this.isListing = false;
|
|
537
|
+
this.candidates = this.getOwnProducts();
|
|
538
|
+
this.listedEnvironmentType = environmentType;
|
|
539
|
+
this.listedText = text;
|
|
540
|
+
this.listedOwnKey = ownKey;
|
|
541
|
+
this.listedCutShort = false;
|
|
542
|
+
this.expandCubeDataProduct();
|
|
543
|
+
return;
|
|
544
|
+
}
|
|
545
|
+
const abort = new AbortController();
|
|
546
|
+
this.listAbort = abort;
|
|
547
|
+
this.isListing = true;
|
|
548
|
+
try {
|
|
549
|
+
const candidates = (yield catalog.search(
|
|
550
|
+
{ text, environmentType },
|
|
551
|
+
abort.signal,
|
|
552
|
+
)) as readonly CubeDataProductCandidate[];
|
|
553
|
+
if (request !== this.listRequest) {
|
|
554
|
+
return;
|
|
555
|
+
}
|
|
556
|
+
// a server's answer is read anew each time: the picked product stays
|
|
557
|
+
// picked as the answer's row, with the title the server gives it
|
|
558
|
+
const picked = this.candidate;
|
|
559
|
+
const listedPicked = picked
|
|
560
|
+
? candidates.find((each) => isSameProduct(each, picked))
|
|
561
|
+
: undefined;
|
|
562
|
+
this.candidates = candidates;
|
|
563
|
+
if (listedPicked) {
|
|
564
|
+
this.candidate = listedPicked;
|
|
565
|
+
}
|
|
566
|
+
this.listedEnvironmentType = environmentType;
|
|
567
|
+
this.listedText = text;
|
|
568
|
+
this.listedOwnKey = undefined;
|
|
569
|
+
this.listedCutShort =
|
|
570
|
+
this.searchesOnServer && this.isCutShort(candidates);
|
|
571
|
+
this.expandCubeDataProduct();
|
|
572
|
+
} catch (error) {
|
|
573
|
+
if (request === this.listRequest) {
|
|
574
|
+
this.listError = toError(error);
|
|
575
|
+
// the rows of an earlier listing don't answer this one
|
|
576
|
+
this.candidates = undefined;
|
|
577
|
+
this.listedCutShort = false;
|
|
578
|
+
}
|
|
579
|
+
} finally {
|
|
580
|
+
if (request === this.listRequest) {
|
|
581
|
+
this.isListing = false;
|
|
582
|
+
this.listAbort = undefined;
|
|
583
|
+
}
|
|
584
|
+
}
|
|
585
|
+
}
|
|
586
|
+
|
|
587
|
+
/** Reads a product's access points */
|
|
588
|
+
*describeCandidate(candidate: CubeDataProductCandidate): GeneratorFn<void> {
|
|
589
|
+
const { catalog } = this;
|
|
590
|
+
if (!catalog) {
|
|
591
|
+
return;
|
|
592
|
+
}
|
|
593
|
+
const request = ++this.describeRequest;
|
|
594
|
+
this.isDescribing = true;
|
|
595
|
+
this.error = undefined;
|
|
596
|
+
try {
|
|
597
|
+
const description = (yield catalog.describe(
|
|
598
|
+
candidate,
|
|
599
|
+
)) as CubeDataProductDescription;
|
|
600
|
+
if (
|
|
601
|
+
request !== this.describeRequest ||
|
|
602
|
+
!this.candidate ||
|
|
603
|
+
!isSameProduct(candidate, this.candidate)
|
|
604
|
+
) {
|
|
605
|
+
return;
|
|
606
|
+
}
|
|
607
|
+
this.description = description;
|
|
608
|
+
flowResult(this.readAccess(candidate)).catch(
|
|
609
|
+
this.editorState.host.applicationStore.alertUnhandledError,
|
|
610
|
+
);
|
|
611
|
+
} catch (error) {
|
|
612
|
+
if (request === this.describeRequest) {
|
|
613
|
+
this.error = toError(error);
|
|
614
|
+
}
|
|
615
|
+
} finally {
|
|
616
|
+
if (request === this.describeRequest) {
|
|
617
|
+
this.isDescribing = false;
|
|
618
|
+
}
|
|
619
|
+
}
|
|
620
|
+
}
|
|
621
|
+
|
|
622
|
+
/**
|
|
623
|
+
* Reads the viewer's access to the picked product's groups, once its
|
|
624
|
+
* access points are shown. A failure shows no access and never stops an
|
|
625
|
+
* Add; an answer for a product no longer picked is dropped
|
|
626
|
+
*/
|
|
627
|
+
*readAccess(candidate: CubeDataProductCandidate): GeneratorFn<void> {
|
|
628
|
+
const { catalog } = this;
|
|
629
|
+
if (!catalog?.getAccess) {
|
|
630
|
+
return;
|
|
631
|
+
}
|
|
632
|
+
const request = ++this.accessRequest;
|
|
633
|
+
try {
|
|
634
|
+
const access = (yield catalog.getAccess(candidate)) as ReadonlyMap<
|
|
635
|
+
string,
|
|
636
|
+
CubeAccessPointGroupAccess
|
|
637
|
+
>;
|
|
638
|
+
if (
|
|
639
|
+
request === this.accessRequest &&
|
|
640
|
+
this.candidate &&
|
|
641
|
+
isSameProduct(candidate, this.candidate)
|
|
642
|
+
) {
|
|
643
|
+
this.access = access;
|
|
644
|
+
}
|
|
645
|
+
} catch {
|
|
646
|
+
// no access shown
|
|
647
|
+
}
|
|
648
|
+
}
|
|
649
|
+
|
|
650
|
+
/** A group of the picked product in the host's marketplace, where access is asked for */
|
|
651
|
+
getAccessPointGroupLink(groupId: string): string | undefined {
|
|
652
|
+
const { candidate } = this;
|
|
653
|
+
return candidate
|
|
654
|
+
? this.catalog?.getMarketplaceLink({
|
|
655
|
+
dataProductId: candidate.id,
|
|
656
|
+
deploymentId: candidate.deploymentId,
|
|
657
|
+
environmentType: candidate.environmentType,
|
|
658
|
+
accessPointGroup: groupId,
|
|
659
|
+
})
|
|
660
|
+
: undefined;
|
|
661
|
+
}
|
|
662
|
+
|
|
663
|
+
/**
|
|
664
|
+
* Adds the picked access point, typed by the product's deployed artifact.
|
|
665
|
+
* The first saves the product's project, version and class and the
|
|
666
|
+
* warehouse as the cube's model, in the same undo step, and remembers the
|
|
667
|
+
* warehouse for the viewer's next cubes. Gives whether it was added
|
|
668
|
+
*/
|
|
669
|
+
*confirm(): GeneratorFn<boolean> {
|
|
670
|
+
if (!this.canConfirm) {
|
|
671
|
+
return false;
|
|
672
|
+
}
|
|
673
|
+
const { editorState } = this;
|
|
674
|
+
const candidate = this.candidate as CubeDataProductCandidate;
|
|
675
|
+
const accessPoint = this.accessPoint as CubeAccessPoint;
|
|
676
|
+
const group = this.accessPointKey?.group as string;
|
|
677
|
+
const warehouse = this.warehouse.trim();
|
|
678
|
+
const request = ++this.confirmRequest;
|
|
679
|
+
this.isAdding = true;
|
|
680
|
+
this.error = undefined;
|
|
681
|
+
try {
|
|
682
|
+
// no engine call: yields once, so a dialog closed meanwhile adds nothing
|
|
683
|
+
yield Promise.resolve();
|
|
684
|
+
if (request !== this.confirmRequest) {
|
|
685
|
+
return false;
|
|
686
|
+
}
|
|
687
|
+
const { document } = editorState;
|
|
688
|
+
const id = document.query.generateId(DataProductAccessPointSource.TYPE);
|
|
689
|
+
const node = DATA_PRODUCT_ACCESS_POINT_SOURCE_DEFINITION.resolve(
|
|
690
|
+
DATA_PRODUCT_ACCESS_POINT_SOURCE_DEFINITION.fromCoordinates(id, {
|
|
691
|
+
dataProduct: candidate.dataProductPath,
|
|
692
|
+
accessPointGroup: group,
|
|
693
|
+
accessPoint: accessPoint.id,
|
|
694
|
+
dataProductId: candidate.id,
|
|
695
|
+
deploymentId: candidate.deploymentId,
|
|
696
|
+
}),
|
|
697
|
+
{
|
|
698
|
+
kind: 'resolved',
|
|
699
|
+
schema: accessPoint.schema as NonNullable<CubeAccessPoint['schema']>,
|
|
700
|
+
},
|
|
701
|
+
);
|
|
702
|
+
const project = this.fixedProject;
|
|
703
|
+
if (
|
|
704
|
+
(document.context !== undefined &&
|
|
705
|
+
(!project || !isFromProject(candidate, project))) ||
|
|
706
|
+
!document.query.canAdd(node)
|
|
707
|
+
) {
|
|
708
|
+
throw new Error(CUBE_DATA_PRODUCT_TAB_MESSAGE.CUBE_CHANGED);
|
|
709
|
+
}
|
|
710
|
+
const query = document.query.add(node);
|
|
711
|
+
editorState.applyDocument(
|
|
712
|
+
document.context
|
|
713
|
+
? document.withQuery(query)
|
|
714
|
+
: document
|
|
715
|
+
.withContext({
|
|
716
|
+
model: createCubeDataProductModel({
|
|
717
|
+
groupId: candidate.groupId,
|
|
718
|
+
artifactId: candidate.artifactId,
|
|
719
|
+
versionId: candidate.versionId,
|
|
720
|
+
environmentType: candidate.environmentType,
|
|
721
|
+
warehouse,
|
|
722
|
+
}),
|
|
723
|
+
runtime: CUBE_DATA_PRODUCT_RUNTIME_PATH,
|
|
724
|
+
})
|
|
725
|
+
.withQuery(query),
|
|
726
|
+
);
|
|
727
|
+
if (!project) {
|
|
728
|
+
editorState.dataProductRuntime.remember(warehouse);
|
|
729
|
+
}
|
|
730
|
+
// the product stays expanded, to add another of its access points
|
|
731
|
+
this.accessPointKey = undefined;
|
|
732
|
+
return true;
|
|
733
|
+
} catch (error) {
|
|
734
|
+
if (request === this.confirmRequest) {
|
|
735
|
+
this.error = toError(error);
|
|
736
|
+
}
|
|
737
|
+
return false;
|
|
738
|
+
} finally {
|
|
739
|
+
if (request === this.confirmRequest) {
|
|
740
|
+
this.isAdding = false;
|
|
741
|
+
}
|
|
742
|
+
}
|
|
743
|
+
}
|
|
744
|
+
|
|
745
|
+
/**
|
|
746
|
+
* The cube's own products, from its sources, at the cube's project; none
|
|
747
|
+
* on a cube without one. The picked product stays the one picked
|
|
748
|
+
*/
|
|
749
|
+
private getOwnProducts(): CubeDataProductCandidate[] {
|
|
750
|
+
const project = this.fixedProject;
|
|
751
|
+
if (!project) {
|
|
752
|
+
return [];
|
|
753
|
+
}
|
|
754
|
+
const picked = this.candidate;
|
|
755
|
+
const products = new Map<string, CubeDataProductCandidate>();
|
|
756
|
+
this.editorState.document.query.nodes.forEach((node) => {
|
|
757
|
+
if (
|
|
758
|
+
node instanceof DataProductAccessPointSource &&
|
|
759
|
+
!products.has(node.dataProduct)
|
|
760
|
+
) {
|
|
761
|
+
products.set(
|
|
762
|
+
node.dataProduct,
|
|
763
|
+
picked?.dataProductPath === node.dataProduct &&
|
|
764
|
+
isFromProject(picked, project)
|
|
765
|
+
? picked
|
|
766
|
+
: new CubeDataProductCandidate({
|
|
767
|
+
id: node.dataProductId,
|
|
768
|
+
deploymentId: node.deploymentId,
|
|
769
|
+
dataProductPath: node.dataProduct,
|
|
770
|
+
title: node.dataProductId,
|
|
771
|
+
groupId: project.groupId,
|
|
772
|
+
artifactId: project.artifactId,
|
|
773
|
+
versionId: project.versionId,
|
|
774
|
+
environmentType: project.environmentType,
|
|
775
|
+
}),
|
|
776
|
+
);
|
|
777
|
+
}
|
|
778
|
+
});
|
|
779
|
+
return [...products.values()];
|
|
780
|
+
}
|
|
781
|
+
|
|
782
|
+
/**
|
|
783
|
+
* What the tab lists the cube's own products from, when it does: searching
|
|
784
|
+
* on a server, on a cube with sources and no search. None otherwise
|
|
785
|
+
*/
|
|
786
|
+
private getOwnProductsKey(): string | undefined {
|
|
787
|
+
// Search all lists the server's matches, not just the cube's own
|
|
788
|
+
if (!this.searchesOnServer || this.search.trim() || this.showAllProjects) {
|
|
789
|
+
return undefined;
|
|
790
|
+
}
|
|
791
|
+
const products = this.getOwnProducts();
|
|
792
|
+
return products.length
|
|
793
|
+
? JSON.stringify(
|
|
794
|
+
products.map((product) => [
|
|
795
|
+
product.groupId,
|
|
796
|
+
product.artifactId,
|
|
797
|
+
product.versionId,
|
|
798
|
+
product.environmentType,
|
|
799
|
+
product.dataProductPath,
|
|
800
|
+
]),
|
|
801
|
+
)
|
|
802
|
+
: undefined;
|
|
803
|
+
}
|
|
804
|
+
|
|
805
|
+
/** Whether the catalog's answer leaves out matches, as it says, else as long as one search gives */
|
|
806
|
+
private isCutShort(answer: readonly CubeDataProductCandidate[]): boolean {
|
|
807
|
+
const { catalog } = this;
|
|
808
|
+
if (catalog?.isCutShort) {
|
|
809
|
+
return catalog.isCutShort(answer);
|
|
810
|
+
}
|
|
811
|
+
const limit = catalog?.searchLimit;
|
|
812
|
+
return limit !== undefined && answer.length >= limit;
|
|
813
|
+
}
|
|
814
|
+
|
|
815
|
+
/** On a cube with a data product, picks that product from the list, expanded */
|
|
816
|
+
private expandCubeDataProduct(): void {
|
|
817
|
+
const project = this.fixedProject;
|
|
818
|
+
const path = this.fixedDataProductPath;
|
|
819
|
+
if (!project || !path || this.candidate) {
|
|
820
|
+
return;
|
|
821
|
+
}
|
|
822
|
+
const candidate = this.visibleCandidates.find(
|
|
823
|
+
(each) => each.dataProductPath === path,
|
|
824
|
+
);
|
|
825
|
+
if (candidate) {
|
|
826
|
+
this.selectCandidate(candidate);
|
|
827
|
+
}
|
|
828
|
+
}
|
|
829
|
+
|
|
830
|
+
private resetCandidate(): void {
|
|
831
|
+
this.describeRequest++;
|
|
832
|
+
this.accessRequest++;
|
|
833
|
+
this.isDescribing = false;
|
|
834
|
+
this.candidate = undefined;
|
|
835
|
+
this.description = undefined;
|
|
836
|
+
this.access = undefined;
|
|
837
|
+
this.accessPointKey = undefined;
|
|
838
|
+
}
|
|
839
|
+
}
|