@finos/legend-cube-builder 0.0.2 → 0.0.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +93 -1
- package/docs/adding-an-operation.md +181 -0
- package/docs/hosting.md +157 -0
- package/docs/testing.md +188 -0
- package/lib/__lib__/LegendCubeCommand.d.ts +2 -1
- package/lib/__lib__/LegendCubeCommand.d.ts.map +1 -1
- package/lib/__lib__/LegendCubeCommand.js +5 -0
- package/lib/__lib__/LegendCubeCommand.js.map +1 -1
- package/lib/__lib__/LegendCubeDataProductLabels.d.ts +45 -0
- package/lib/__lib__/LegendCubeDataProductLabels.d.ts.map +1 -0
- package/lib/__lib__/LegendCubeDataProductLabels.js +60 -0
- package/lib/__lib__/LegendCubeDataProductLabels.js.map +1 -0
- package/lib/__lib__/LegendCubeDirectConnectionLabels.d.ts +56 -0
- package/lib/__lib__/LegendCubeDirectConnectionLabels.d.ts.map +1 -0
- package/lib/__lib__/LegendCubeDirectConnectionLabels.js +76 -0
- package/lib/__lib__/LegendCubeDirectConnectionLabels.js.map +1 -0
- package/lib/__lib__/LegendCubeHelpText.d.ts.map +1 -1
- package/lib/__lib__/LegendCubeHelpText.js +21 -3
- package/lib/__lib__/LegendCubeHelpText.js.map +1 -1
- package/lib/__lib__/LegendCubeIngestLabels.d.ts +25 -0
- package/lib/__lib__/LegendCubeIngestLabels.d.ts.map +1 -0
- package/lib/__lib__/LegendCubeIngestLabels.js +29 -0
- package/lib/__lib__/LegendCubeIngestLabels.js.map +1 -0
- package/lib/__lib__/LegendCubeLabels.d.ts +95 -3
- package/lib/__lib__/LegendCubeLabels.d.ts.map +1 -1
- package/lib/__lib__/LegendCubeLabels.js +121 -4
- package/lib/__lib__/LegendCubeLabels.js.map +1 -1
- package/lib/__lib__/LegendCubeProjectLabels.d.ts +22 -0
- package/lib/__lib__/LegendCubeProjectLabels.d.ts.map +1 -0
- package/lib/__lib__/LegendCubeProjectLabels.js +23 -0
- package/lib/__lib__/LegendCubeProjectLabels.js.map +1 -0
- package/lib/__lib__/LegendCubeTesting.d.ts +1 -0
- package/lib/__lib__/LegendCubeTesting.d.ts.map +1 -1
- package/lib/__lib__/LegendCubeTesting.js +1 -0
- package/lib/__lib__/LegendCubeTesting.js.map +1 -1
- package/lib/__test-utils__/CubeCanvasTestUtils.d.ts.map +1 -1
- package/lib/__test-utils__/CubeCanvasTestUtils.js +1 -1
- package/lib/__test-utils__/CubeCanvasTestUtils.js.map +1 -1
- package/lib/__test-utils__/CubeConnectionTestSupport.d.ts +22 -0
- package/lib/__test-utils__/CubeConnectionTestSupport.d.ts.map +1 -0
- package/lib/__test-utils__/CubeConnectionTestSupport.js +30 -0
- package/lib/__test-utils__/CubeConnectionTestSupport.js.map +1 -0
- package/lib/__test-utils__/CubeDirectConnectionFixtures.d.ts +31 -0
- package/lib/__test-utils__/CubeDirectConnectionFixtures.d.ts.map +1 -0
- package/lib/__test-utils__/CubeDirectConnectionFixtures.js +63 -0
- package/lib/__test-utils__/CubeDirectConnectionFixtures.js.map +1 -0
- package/lib/__test-utils__/CubeEngineTestSupport.d.ts +18 -0
- package/lib/__test-utils__/CubeEngineTestSupport.d.ts.map +1 -1
- package/lib/__test-utils__/CubeEngineTestSupport.js +51 -0
- package/lib/__test-utils__/CubeEngineTestSupport.js.map +1 -1
- package/lib/__test-utils__/CubeExpressionTestUtils.d.ts +37 -0
- package/lib/__test-utils__/CubeExpressionTestUtils.d.ts.map +1 -0
- package/lib/__test-utils__/CubeExpressionTestUtils.js +83 -0
- package/lib/__test-utils__/CubeExpressionTestUtils.js.map +1 -0
- package/lib/__test-utils__/CubeOperationsTestUtils.d.ts +67 -0
- package/lib/__test-utils__/CubeOperationsTestUtils.d.ts.map +1 -0
- package/lib/__test-utils__/CubeOperationsTestUtils.js +138 -0
- package/lib/__test-utils__/CubeOperationsTestUtils.js.map +1 -0
- package/lib/__test-utils__/CubePageTestUtils.d.ts +12 -0
- package/lib/__test-utils__/CubePageTestUtils.d.ts.map +1 -1
- package/lib/__test-utils__/CubePageTestUtils.js +25 -1
- package/lib/__test-utils__/CubePageTestUtils.js.map +1 -1
- package/lib/__test-utils__/CubeTestApplication.d.ts +5 -1
- package/lib/__test-utils__/CubeTestApplication.d.ts.map +1 -1
- package/lib/__test-utils__/CubeTestApplication.js +9 -1
- package/lib/__test-utils__/CubeTestApplication.js.map +1 -1
- package/lib/__test-utils__/FakeCubeConnectionExplorer.d.ts +33 -0
- package/lib/__test-utils__/FakeCubeConnectionExplorer.d.ts.map +1 -0
- package/lib/__test-utils__/FakeCubeConnectionExplorer.js +67 -0
- package/lib/__test-utils__/FakeCubeConnectionExplorer.js.map +1 -0
- package/lib/__test-utils__/FakeCubeDataProductCatalog.d.ts +45 -0
- package/lib/__test-utils__/FakeCubeDataProductCatalog.d.ts.map +1 -0
- package/lib/__test-utils__/FakeCubeDataProductCatalog.js +137 -0
- package/lib/__test-utils__/FakeCubeDataProductCatalog.js.map +1 -0
- package/lib/__test-utils__/FakeCubeEngine.d.ts +2 -0
- package/lib/__test-utils__/FakeCubeEngine.d.ts.map +1 -1
- package/lib/__test-utils__/FakeCubeEngine.js +21 -2
- package/lib/__test-utils__/FakeCubeEngine.js.map +1 -1
- package/lib/__test-utils__/FakeCubeIngestCatalog.d.ts +35 -0
- package/lib/__test-utils__/FakeCubeIngestCatalog.d.ts.map +1 -0
- package/lib/__test-utils__/FakeCubeIngestCatalog.js +107 -0
- package/lib/__test-utils__/FakeCubeIngestCatalog.js.map +1 -0
- package/lib/__test-utils__/FakeCubeProjectCatalog.d.ts +30 -0
- package/lib/__test-utils__/FakeCubeProjectCatalog.d.ts.map +1 -0
- package/lib/__test-utils__/FakeCubeProjectCatalog.js +64 -0
- package/lib/__test-utils__/FakeCubeProjectCatalog.js.map +1 -0
- package/lib/components/CubeAddItems.d.ts +35 -0
- package/lib/components/CubeAddItems.d.ts.map +1 -0
- package/lib/components/CubeAddItems.js +82 -0
- package/lib/components/CubeAddItems.js.map +1 -0
- package/lib/components/CubeEditor.d.ts +5 -1
- package/lib/components/CubeEditor.d.ts.map +1 -1
- package/lib/components/CubeEditor.js +33 -13
- package/lib/components/CubeEditor.js.map +1 -1
- package/lib/components/CubeEntrySourceBanner.d.ts +23 -0
- package/lib/components/CubeEntrySourceBanner.d.ts.map +1 -0
- package/lib/components/CubeEntrySourceBanner.js +32 -0
- package/lib/components/CubeEntrySourceBanner.js.map +1 -0
- package/lib/components/CubeNodeIcon.d.ts.map +1 -1
- package/lib/components/CubeNodeIcon.js +19 -2
- package/lib/components/CubeNodeIcon.js.map +1 -1
- package/lib/components/CubeSchemaColumnsTable.d.ts +21 -0
- package/lib/components/CubeSchemaColumnsTable.d.ts.map +1 -0
- package/lib/components/CubeSchemaColumnsTable.js +6 -0
- package/lib/components/CubeSchemaColumnsTable.js.map +1 -0
- package/lib/components/canvas/CubeCanvas.d.ts +4 -3
- package/lib/components/canvas/CubeCanvas.d.ts.map +1 -1
- package/lib/components/canvas/CubeCanvas.js +33 -12
- package/lib/components/canvas/CubeCanvas.js.map +1 -1
- package/lib/components/canvas/CubeCanvasContextMenu.d.ts +8 -4
- package/lib/components/canvas/CubeCanvasContextMenu.d.ts.map +1 -1
- package/lib/components/canvas/CubeCanvasContextMenu.js +19 -9
- package/lib/components/canvas/CubeCanvasContextMenu.js.map +1 -1
- package/lib/components/canvas/CubeCanvasDnd.d.ts +7 -5
- package/lib/components/canvas/CubeCanvasDnd.d.ts.map +1 -1
- package/lib/components/canvas/CubeCanvasDnd.js +14 -9
- package/lib/components/canvas/CubeCanvasDnd.js.map +1 -1
- package/lib/components/canvas/CubeCanvasElements.d.ts +2 -0
- package/lib/components/canvas/CubeCanvasElements.d.ts.map +1 -1
- package/lib/components/canvas/CubeCanvasElements.js +8 -4
- package/lib/components/canvas/CubeCanvasElements.js.map +1 -1
- package/lib/components/canvas/CubeCanvasNode.d.ts.map +1 -1
- package/lib/components/canvas/CubeCanvasNode.js +30 -17
- package/lib/components/canvas/CubeCanvasNode.js.map +1 -1
- package/lib/components/canvas/CubeCanvasNodeFocus.d.ts +22 -0
- package/lib/components/canvas/CubeCanvasNodeFocus.d.ts.map +1 -0
- package/lib/components/canvas/CubeCanvasNodeFocus.js +31 -0
- package/lib/components/canvas/CubeCanvasNodeFocus.js.map +1 -0
- package/lib/components/canvas/CubeNodeEditorAnchor.d.ts +44 -0
- package/lib/components/canvas/CubeNodeEditorAnchor.d.ts.map +1 -0
- package/lib/components/canvas/CubeNodeEditorAnchor.js +51 -0
- package/lib/components/canvas/CubeNodeEditorAnchor.js.map +1 -0
- package/lib/components/editors/CubeAggregationRowEditor.d.ts +48 -0
- package/lib/components/editors/CubeAggregationRowEditor.d.ts.map +1 -0
- package/lib/components/editors/CubeAggregationRowEditor.js +72 -0
- package/lib/components/editors/CubeAggregationRowEditor.js.map +1 -0
- package/lib/components/editors/CubeColumnChecklist.d.ts +42 -0
- package/lib/components/editors/CubeColumnChecklist.d.ts.map +1 -0
- package/lib/components/editors/CubeColumnChecklist.js +41 -0
- package/lib/components/editors/CubeColumnChecklist.js.map +1 -0
- package/lib/components/editors/CubeColumnPicker.d.ts +9 -2
- package/lib/components/editors/CubeColumnPicker.d.ts.map +1 -1
- package/lib/components/editors/CubeColumnPicker.js +9 -4
- package/lib/components/editors/CubeColumnPicker.js.map +1 -1
- package/lib/components/editors/CubeConcatEditor.d.ts +33 -0
- package/lib/components/editors/CubeConcatEditor.d.ts.map +1 -0
- package/lib/components/editors/CubeConcatEditor.js +147 -0
- package/lib/components/editors/CubeConcatEditor.js.map +1 -0
- package/lib/components/editors/CubeDataProductSourceEditor.d.ts +25 -0
- package/lib/components/editors/CubeDataProductSourceEditor.d.ts.map +1 -0
- package/lib/components/editors/CubeDataProductSourceEditor.js +53 -0
- package/lib/components/editors/CubeDataProductSourceEditor.js.map +1 -0
- package/lib/components/editors/CubeDifferenceEditor.d.ts +25 -0
- package/lib/components/editors/CubeDifferenceEditor.d.ts.map +1 -0
- package/lib/components/editors/CubeDifferenceEditor.js +29 -0
- package/lib/components/editors/CubeDifferenceEditor.js.map +1 -0
- package/lib/components/editors/CubeDistinctEditor.d.ts +23 -0
- package/lib/components/editors/CubeDistinctEditor.d.ts.map +1 -0
- package/lib/components/editors/CubeDistinctEditor.js +24 -0
- package/lib/components/editors/CubeDistinctEditor.js.map +1 -0
- package/lib/components/editors/CubeExtendEditor.d.ts +25 -0
- package/lib/components/editors/CubeExtendEditor.d.ts.map +1 -0
- package/lib/components/editors/CubeExtendEditor.js +86 -0
- package/lib/components/editors/CubeExtendEditor.js.map +1 -0
- package/lib/components/editors/CubeFilterEditor.d.ts.map +1 -1
- package/lib/components/editors/CubeFilterEditor.js +3 -3
- package/lib/components/editors/CubeFilterEditor.js.map +1 -1
- package/lib/components/editors/CubeGroupEditor.d.ts +28 -0
- package/lib/components/editors/CubeGroupEditor.d.ts.map +1 -0
- package/lib/components/editors/CubeGroupEditor.js +70 -0
- package/lib/components/editors/CubeGroupEditor.js.map +1 -0
- package/lib/components/editors/CubeIngestSourceEditor.d.ts +26 -0
- package/lib/components/editors/CubeIngestSourceEditor.d.ts.map +1 -0
- package/lib/components/editors/CubeIngestSourceEditor.js +47 -0
- package/lib/components/editors/CubeIngestSourceEditor.js.map +1 -0
- package/lib/components/editors/CubeIntegerField.d.ts +29 -0
- package/lib/components/editors/CubeIntegerField.d.ts.map +1 -0
- package/lib/components/editors/CubeIntegerField.js +30 -0
- package/lib/components/editors/CubeIntegerField.js.map +1 -0
- package/lib/components/editors/CubeJoinEditor.d.ts +2 -4
- package/lib/components/editors/CubeJoinEditor.d.ts.map +1 -1
- package/lib/components/editors/CubeJoinEditor.js +15 -37
- package/lib/components/editors/CubeJoinEditor.js.map +1 -1
- package/lib/components/editors/CubeJoinKeyRows.d.ts +34 -0
- package/lib/components/editors/CubeJoinKeyRows.d.ts.map +1 -0
- package/lib/components/editors/CubeJoinKeyRows.js +65 -0
- package/lib/components/editors/CubeJoinKeyRows.js.map +1 -0
- package/lib/components/editors/CubeNodeEditorPanel.d.ts +7 -5
- package/lib/components/editors/CubeNodeEditorPanel.d.ts.map +1 -1
- package/lib/components/editors/CubeNodeEditorPanel.js +53 -14
- package/lib/components/editors/CubeNodeEditorPanel.js.map +1 -1
- package/lib/components/editors/CubeNodeEditorPopper.d.ts +40 -0
- package/lib/components/editors/CubeNodeEditorPopper.d.ts.map +1 -0
- package/lib/components/editors/CubeNodeEditorPopper.js +125 -0
- package/lib/components/editors/CubeNodeEditorPopper.js.map +1 -0
- package/lib/components/editors/CubeNodeEditorRegistry.d.ts.map +1 -1
- package/lib/components/editors/CubeNodeEditorRegistry.js +28 -1
- package/lib/components/editors/CubeNodeEditorRegistry.js.map +1 -1
- package/lib/components/editors/CubePartitionEditor.d.ts +30 -0
- package/lib/components/editors/CubePartitionEditor.d.ts.map +1 -0
- package/lib/components/editors/CubePartitionEditor.js +93 -0
- package/lib/components/editors/CubePartitionEditor.js.map +1 -0
- package/lib/components/editors/CubeRenameEditor.d.ts +26 -0
- package/lib/components/editors/CubeRenameEditor.d.ts.map +1 -0
- package/lib/components/editors/CubeRenameEditor.js +60 -0
- package/lib/components/editors/CubeRenameEditor.js.map +1 -0
- package/lib/components/editors/CubeRestrictEditor.d.ts +26 -0
- package/lib/components/editors/CubeRestrictEditor.d.ts.map +1 -0
- package/lib/components/editors/CubeRestrictEditor.js +23 -0
- package/lib/components/editors/CubeRestrictEditor.js.map +1 -0
- package/lib/components/editors/CubeRowCountEditor.d.ts +25 -0
- package/lib/components/editors/CubeRowCountEditor.d.ts.map +1 -0
- package/lib/components/editors/CubeRowCountEditor.js +38 -0
- package/lib/components/editors/CubeRowCountEditor.js.map +1 -0
- package/lib/components/editors/CubeSliceEditor.d.ts +25 -0
- package/lib/components/editors/CubeSliceEditor.d.ts.map +1 -0
- package/lib/components/editors/CubeSliceEditor.js +40 -0
- package/lib/components/editors/CubeSliceEditor.js.map +1 -0
- package/lib/components/editors/CubeSortEditor.d.ts +27 -0
- package/lib/components/editors/CubeSortEditor.d.ts.map +1 -0
- package/lib/components/editors/CubeSortEditor.js +45 -0
- package/lib/components/editors/CubeSortEditor.js.map +1 -0
- package/lib/components/editors/CubeSortRowEditor.d.ts +47 -0
- package/lib/components/editors/CubeSortRowEditor.d.ts.map +1 -0
- package/lib/components/editors/CubeSortRowEditor.js +62 -0
- package/lib/components/editors/CubeSortRowEditor.js.map +1 -0
- package/lib/components/editors/CubeSourceEditor.d.ts.map +1 -1
- package/lib/components/editors/CubeSourceEditor.js +18 -6
- package/lib/components/editors/CubeSourceEditor.js.map +1 -1
- package/lib/components/editors/CubeValueEditor.d.ts.map +1 -1
- package/lib/components/editors/CubeValueEditor.js +2 -1
- package/lib/components/editors/CubeValueEditor.js.map +1 -1
- package/lib/components/editors/CubeWarehouseControl.d.ts +30 -0
- package/lib/components/editors/CubeWarehouseControl.d.ts.map +1 -0
- package/lib/components/editors/CubeWarehouseControl.js +44 -0
- package/lib/components/editors/CubeWarehouseControl.js.map +1 -0
- package/lib/components/editors/useCubeNodeEditorDismiss.d.ts +31 -0
- package/lib/components/editors/useCubeNodeEditorDismiss.d.ts.map +1 -0
- package/lib/components/editors/useCubeNodeEditorDismiss.js +83 -0
- package/lib/components/editors/useCubeNodeEditorDismiss.js.map +1 -0
- package/lib/components/examples/CubeExamplesDialog.d.ts +26 -0
- package/lib/components/examples/CubeExamplesDialog.d.ts.map +1 -0
- package/lib/components/examples/CubeExamplesDialog.js +68 -0
- package/lib/components/examples/CubeExamplesDialog.js.map +1 -0
- package/lib/components/grid/CubeGridRegion.d.ts.map +1 -1
- package/lib/components/grid/CubeGridRegion.js +20 -9
- package/lib/components/grid/CubeGridRegion.js.map +1 -1
- package/lib/components/grid/CubeGridValues.d.ts +16 -0
- package/lib/components/grid/CubeGridValues.d.ts.map +1 -1
- package/lib/components/grid/CubeGridValues.js +44 -0
- package/lib/components/grid/CubeGridValues.js.map +1 -1
- package/lib/components/grid/CubeResultGrid.d.ts +14 -1
- package/lib/components/grid/CubeResultGrid.d.ts.map +1 -1
- package/lib/components/grid/CubeResultGrid.js +55 -7
- package/lib/components/grid/CubeResultGrid.js.map +1 -1
- package/lib/components/palette/CubePalette.d.ts.map +1 -1
- package/lib/components/palette/CubePalette.js +23 -12
- package/lib/components/palette/CubePalette.js.map +1 -1
- package/lib/components/source-picker/CubeDataProductTab.d.ts +27 -0
- package/lib/components/source-picker/CubeDataProductTab.d.ts.map +1 -0
- package/lib/components/source-picker/CubeDataProductTab.js +102 -0
- package/lib/components/source-picker/CubeDataProductTab.js.map +1 -0
- package/lib/components/source-picker/CubeDirectConnectionTab.d.ts +27 -0
- package/lib/components/source-picker/CubeDirectConnectionTab.d.ts.map +1 -0
- package/lib/components/source-picker/CubeDirectConnectionTab.js +87 -0
- package/lib/components/source-picker/CubeDirectConnectionTab.js.map +1 -0
- package/lib/components/source-picker/CubeIngestTab.d.ts +28 -0
- package/lib/components/source-picker/CubeIngestTab.d.ts.map +1 -0
- package/lib/components/source-picker/CubeIngestTab.js +66 -0
- package/lib/components/source-picker/CubeIngestTab.js.map +1 -0
- package/lib/components/source-picker/CubeInlineModelTab.d.ts +37 -0
- package/lib/components/source-picker/CubeInlineModelTab.d.ts.map +1 -0
- package/lib/components/source-picker/CubeInlineModelTab.js +71 -0
- package/lib/components/source-picker/CubeInlineModelTab.js.map +1 -0
- package/lib/components/source-picker/CubePickerStep.d.ts +27 -0
- package/lib/components/source-picker/CubePickerStep.d.ts.map +1 -0
- package/lib/components/source-picker/CubePickerStep.js +23 -0
- package/lib/components/source-picker/CubePickerStep.js.map +1 -0
- package/lib/components/source-picker/CubeProjectTab.d.ts +27 -0
- package/lib/components/source-picker/CubeProjectTab.d.ts.map +1 -0
- package/lib/components/source-picker/CubeProjectTab.js +50 -0
- package/lib/components/source-picker/CubeProjectTab.js.map +1 -0
- package/lib/components/source-picker/CubeSourcePicker.d.ts +6 -0
- package/lib/components/source-picker/CubeSourcePicker.d.ts.map +1 -1
- package/lib/components/source-picker/CubeSourcePicker.js +20 -58
- package/lib/components/source-picker/CubeSourcePicker.js.map +1 -1
- package/lib/components/spec-transfer/CubeSpecTransferDialog.js +1 -1
- package/lib/components/spec-transfer/CubeSpecTransferDialog.js.map +1 -1
- package/lib/graph-manager/CubeConnectionExplorer.d.ts +90 -0
- package/lib/graph-manager/CubeConnectionExplorer.d.ts.map +1 -0
- package/lib/graph-manager/CubeConnectionExplorer.js +34 -0
- package/lib/graph-manager/CubeConnectionExplorer.js.map +1 -0
- package/lib/graph-manager/CubeDataProduct.d.ts +66 -0
- package/lib/graph-manager/CubeDataProduct.d.ts.map +1 -0
- package/lib/graph-manager/CubeDataProduct.js +102 -0
- package/lib/graph-manager/CubeDataProduct.js.map +1 -0
- package/lib/graph-manager/CubeDataProductCatalog.d.ts +167 -0
- package/lib/graph-manager/CubeDataProductCatalog.d.ts.map +1 -0
- package/lib/graph-manager/CubeDataProductCatalog.js +116 -0
- package/lib/graph-manager/CubeDataProductCatalog.js.map +1 -0
- package/lib/graph-manager/CubeDirectConnection.d.ts +38 -0
- package/lib/graph-manager/CubeDirectConnection.d.ts.map +1 -0
- package/lib/graph-manager/CubeDirectConnection.js +48 -0
- package/lib/graph-manager/CubeDirectConnection.js.map +1 -0
- package/lib/graph-manager/CubeEngine.d.ts +50 -2
- package/lib/graph-manager/CubeEngine.d.ts.map +1 -1
- package/lib/graph-manager/CubeEngine.js +4 -1
- package/lib/graph-manager/CubeEngine.js.map +1 -1
- package/lib/graph-manager/CubeIngest.d.ts +50 -0
- package/lib/graph-manager/CubeIngest.d.ts.map +1 -0
- package/lib/graph-manager/CubeIngest.js +88 -0
- package/lib/graph-manager/CubeIngest.js.map +1 -0
- package/lib/graph-manager/CubeIngestCatalog.d.ts +116 -0
- package/lib/graph-manager/CubeIngestCatalog.d.ts.map +1 -0
- package/lib/graph-manager/CubeIngestCatalog.js +80 -0
- package/lib/graph-manager/CubeIngestCatalog.js.map +1 -0
- package/lib/graph-manager/CubeLakehouseEnvironment.d.ts +26 -0
- package/lib/graph-manager/CubeLakehouseEnvironment.d.ts.map +1 -0
- package/lib/graph-manager/CubeLakehouseEnvironment.js +17 -0
- package/lib/graph-manager/CubeLakehouseEnvironment.js.map +1 -0
- package/lib/graph-manager/CubeModelOutlineHelper.d.ts +8 -0
- package/lib/graph-manager/CubeModelOutlineHelper.d.ts.map +1 -1
- package/lib/graph-manager/CubeModelOutlineHelper.js +21 -0
- package/lib/graph-manager/CubeModelOutlineHelper.js.map +1 -1
- package/lib/graph-manager/CubeProject.d.ts +41 -0
- package/lib/graph-manager/CubeProject.d.ts.map +1 -0
- package/lib/graph-manager/CubeProject.js +84 -0
- package/lib/graph-manager/CubeProject.js.map +1 -0
- package/lib/graph-manager/CubeProjectCatalog.d.ts +35 -0
- package/lib/graph-manager/CubeProjectCatalog.d.ts.map +1 -0
- package/lib/graph-manager/CubeProjectCatalog.js +17 -0
- package/lib/graph-manager/CubeProjectCatalog.js.map +1 -0
- package/lib/graph-manager/protocol/pure/CubeEngineBuilder.d.ts +63 -1
- package/lib/graph-manager/protocol/pure/CubeEngineBuilder.d.ts.map +1 -1
- package/lib/graph-manager/protocol/pure/CubeEngineBuilder.js +50 -1
- package/lib/graph-manager/protocol/pure/CubeEngineBuilder.js.map +1 -1
- package/lib/graph-manager/protocol/pure/v1/V1_CubeDataProductArtifact.d.ts +44 -0
- package/lib/graph-manager/protocol/pure/v1/V1_CubeDataProductArtifact.d.ts.map +1 -0
- package/lib/graph-manager/protocol/pure/v1/V1_CubeDataProductArtifact.js +192 -0
- package/lib/graph-manager/protocol/pure/v1/V1_CubeDataProductArtifact.js.map +1 -0
- package/lib/graph-manager/protocol/pure/v1/V1_CubeDataProductModel.d.ts +29 -0
- package/lib/graph-manager/protocol/pure/v1/V1_CubeDataProductModel.d.ts.map +1 -0
- package/lib/graph-manager/protocol/pure/v1/V1_CubeDataProductModel.js +84 -0
- package/lib/graph-manager/protocol/pure/v1/V1_CubeDataProductModel.js.map +1 -0
- package/lib/graph-manager/protocol/pure/v1/V1_CubeDirectConnection.d.ts +41 -0
- package/lib/graph-manager/protocol/pure/v1/V1_CubeDirectConnection.d.ts.map +1 -0
- package/lib/graph-manager/protocol/pure/v1/V1_CubeDirectConnection.js +246 -0
- package/lib/graph-manager/protocol/pure/v1/V1_CubeDirectConnection.js.map +1 -0
- package/lib/graph-manager/protocol/pure/v1/V1_CubeDirectModel.d.ts +43 -0
- package/lib/graph-manager/protocol/pure/v1/V1_CubeDirectModel.d.ts.map +1 -0
- package/lib/graph-manager/protocol/pure/v1/V1_CubeDirectModel.js +112 -0
- package/lib/graph-manager/protocol/pure/v1/V1_CubeDirectModel.js.map +1 -0
- package/lib/graph-manager/protocol/pure/v1/V1_CubeEngineErrors.d.ts.map +1 -1
- package/lib/graph-manager/protocol/pure/v1/V1_CubeEngineErrors.js +30 -4
- package/lib/graph-manager/protocol/pure/v1/V1_CubeEngineErrors.js.map +1 -1
- package/lib/graph-manager/protocol/pure/v1/V1_CubeExpression.d.ts +23 -0
- package/lib/graph-manager/protocol/pure/v1/V1_CubeExpression.d.ts.map +1 -0
- package/lib/graph-manager/protocol/pure/v1/V1_CubeExpression.js +68 -0
- package/lib/graph-manager/protocol/pure/v1/V1_CubeExpression.js.map +1 -0
- package/lib/graph-manager/protocol/pure/v1/V1_CubeIngestDefinition.d.ts +30 -0
- package/lib/graph-manager/protocol/pure/v1/V1_CubeIngestDefinition.d.ts.map +1 -0
- package/lib/graph-manager/protocol/pure/v1/V1_CubeIngestDefinition.js +140 -0
- package/lib/graph-manager/protocol/pure/v1/V1_CubeIngestDefinition.js.map +1 -0
- package/lib/graph-manager/protocol/pure/v1/V1_CubeIngestModel.d.ts +62 -0
- package/lib/graph-manager/protocol/pure/v1/V1_CubeIngestModel.d.ts.map +1 -0
- package/lib/graph-manager/protocol/pure/v1/V1_CubeIngestModel.js +119 -0
- package/lib/graph-manager/protocol/pure/v1/V1_CubeIngestModel.js.map +1 -0
- package/lib/graph-manager/protocol/pure/v1/V1_CubeLakehouseEnvironmentResolver.d.ts +33 -0
- package/lib/graph-manager/protocol/pure/v1/V1_CubeLakehouseEnvironmentResolver.d.ts.map +1 -0
- package/lib/graph-manager/protocol/pure/v1/V1_CubeLakehouseEnvironmentResolver.js +94 -0
- package/lib/graph-manager/protocol/pure/v1/V1_CubeLakehouseEnvironmentResolver.js.map +1 -0
- package/lib/graph-manager/protocol/pure/v1/V1_CubeLambdaSerializer.d.ts.map +1 -1
- package/lib/graph-manager/protocol/pure/v1/V1_CubeLambdaSerializer.js +63 -4
- package/lib/graph-manager/protocol/pure/v1/V1_CubeLambdaSerializer.js.map +1 -1
- package/lib/graph-manager/protocol/pure/v1/V1_CubeModelOutlineBuilder.d.ts.map +1 -1
- package/lib/graph-manager/protocol/pure/v1/V1_CubeModelOutlineBuilder.js +56 -3
- package/lib/graph-manager/protocol/pure/v1/V1_CubeModelOutlineBuilder.js.map +1 -1
- package/lib/graph-manager/protocol/pure/v1/V1_CubeSchemaExploration.d.ts +67 -0
- package/lib/graph-manager/protocol/pure/v1/V1_CubeSchemaExploration.d.ts.map +1 -0
- package/lib/graph-manager/protocol/pure/v1/V1_CubeSchemaExploration.js +238 -0
- package/lib/graph-manager/protocol/pure/v1/V1_CubeSchemaExploration.js.map +1 -0
- package/lib/graph-manager/protocol/pure/v1/V1_LegendCubeConnectionExplorer.d.ts +34 -0
- package/lib/graph-manager/protocol/pure/v1/V1_LegendCubeConnectionExplorer.d.ts.map +1 -0
- package/lib/graph-manager/protocol/pure/v1/V1_LegendCubeConnectionExplorer.js +64 -0
- package/lib/graph-manager/protocol/pure/v1/V1_LegendCubeConnectionExplorer.js.map +1 -0
- package/lib/graph-manager/protocol/pure/v1/V1_LegendCubeDataProductCatalog.d.ts +104 -0
- package/lib/graph-manager/protocol/pure/v1/V1_LegendCubeDataProductCatalog.d.ts.map +1 -0
- package/lib/graph-manager/protocol/pure/v1/V1_LegendCubeDataProductCatalog.js +484 -0
- package/lib/graph-manager/protocol/pure/v1/V1_LegendCubeDataProductCatalog.js.map +1 -0
- package/lib/graph-manager/protocol/pure/v1/V1_LegendCubeEngine.d.ts +97 -3
- package/lib/graph-manager/protocol/pure/v1/V1_LegendCubeEngine.d.ts.map +1 -1
- package/lib/graph-manager/protocol/pure/v1/V1_LegendCubeEngine.js +585 -20
- package/lib/graph-manager/protocol/pure/v1/V1_LegendCubeEngine.js.map +1 -1
- package/lib/graph-manager/protocol/pure/v1/V1_LegendCubeIngestCatalog.d.ts +69 -0
- package/lib/graph-manager/protocol/pure/v1/V1_LegendCubeIngestCatalog.d.ts.map +1 -0
- package/lib/graph-manager/protocol/pure/v1/V1_LegendCubeIngestCatalog.js +270 -0
- package/lib/graph-manager/protocol/pure/v1/V1_LegendCubeIngestCatalog.js.map +1 -0
- package/lib/graph-manager/protocol/pure/v1/V1_LegendCubeProjectCatalog.d.ts +35 -0
- package/lib/graph-manager/protocol/pure/v1/V1_LegendCubeProjectCatalog.d.ts.map +1 -0
- package/lib/graph-manager/protocol/pure/v1/V1_LegendCubeProjectCatalog.js +91 -0
- package/lib/graph-manager/protocol/pure/v1/V1_LegendCubeProjectCatalog.js.map +1 -0
- package/lib/graph-manager/protocol/pure/v1/__test-utils__/V1_CubeConnectionExplorerTestUtils.d.ts +25 -0
- package/lib/graph-manager/protocol/pure/v1/__test-utils__/V1_CubeConnectionExplorerTestUtils.d.ts.map +1 -0
- package/lib/graph-manager/protocol/pure/v1/__test-utils__/V1_CubeConnectionExplorerTestUtils.js +47 -0
- package/lib/graph-manager/protocol/pure/v1/__test-utils__/V1_CubeConnectionExplorerTestUtils.js.map +1 -0
- package/lib/graph-manager/protocol/pure/v1/__test-utils__/V1_CubeDataProductFixtures.d.ts +28 -0
- package/lib/graph-manager/protocol/pure/v1/__test-utils__/V1_CubeDataProductFixtures.d.ts.map +1 -0
- package/lib/graph-manager/protocol/pure/v1/__test-utils__/V1_CubeDataProductFixtures.js +310 -0
- package/lib/graph-manager/protocol/pure/v1/__test-utils__/V1_CubeDataProductFixtures.js.map +1 -0
- package/lib/graph-manager/protocol/pure/v1/__test-utils__/V1_CubeDataProductSearchFixtures.d.ts +33 -0
- package/lib/graph-manager/protocol/pure/v1/__test-utils__/V1_CubeDataProductSearchFixtures.d.ts.map +1 -0
- package/lib/graph-manager/protocol/pure/v1/__test-utils__/V1_CubeDataProductSearchFixtures.js +188 -0
- package/lib/graph-manager/protocol/pure/v1/__test-utils__/V1_CubeDataProductSearchFixtures.js.map +1 -0
- package/lib/graph-manager/protocol/pure/v1/__test-utils__/V1_CubeEngineTestUtils.d.ts +1 -1
- package/lib/graph-manager/protocol/pure/v1/__test-utils__/V1_CubeEngineTestUtils.d.ts.map +1 -1
- package/lib/graph-manager/protocol/pure/v1/__test-utils__/V1_CubeEngineTestUtils.js +30 -4
- package/lib/graph-manager/protocol/pure/v1/__test-utils__/V1_CubeEngineTestUtils.js.map +1 -1
- package/lib/index.css +2 -2
- package/lib/index.css.map +1 -1
- package/lib/index.d.ts +11 -1
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +10 -1
- package/lib/index.js.map +1 -1
- package/lib/stores/CubeAddPlacement.d.ts +32 -0
- package/lib/stores/CubeAddPlacement.d.ts.map +1 -0
- package/lib/stores/CubeAddPlacement.js +40 -0
- package/lib/stores/CubeAddPlacement.js.map +1 -0
- package/lib/stores/CubeDataProductRecheck.d.ts +27 -0
- package/lib/stores/CubeDataProductRecheck.d.ts.map +1 -0
- package/lib/stores/CubeDataProductRecheck.js +54 -0
- package/lib/stores/CubeDataProductRecheck.js.map +1 -0
- package/lib/stores/CubeDataProductRuntimeState.d.ts +88 -0
- package/lib/stores/CubeDataProductRuntimeState.d.ts.map +1 -0
- package/lib/stores/CubeDataProductRuntimeState.js +190 -0
- package/lib/stores/CubeDataProductRuntimeState.js.map +1 -0
- package/lib/stores/CubeDataProductWarehouse.d.ts +19 -0
- package/lib/stores/CubeDataProductWarehouse.d.ts.map +1 -0
- package/lib/stores/CubeDataProductWarehouse.js +25 -0
- package/lib/stores/CubeDataProductWarehouse.js.map +1 -0
- package/lib/stores/CubeEditorState.d.ts +133 -19
- package/lib/stores/CubeEditorState.d.ts.map +1 -1
- package/lib/stores/CubeEditorState.js +433 -52
- package/lib/stores/CubeEditorState.js.map +1 -1
- package/lib/stores/CubeEntrySource.d.ts +78 -0
- package/lib/stores/CubeEntrySource.d.ts.map +1 -0
- package/lib/stores/CubeEntrySource.js +200 -0
- package/lib/stores/CubeEntrySource.js.map +1 -0
- package/lib/stores/CubeExamples.d.ts +43 -0
- package/lib/stores/CubeExamples.d.ts.map +1 -0
- package/lib/stores/CubeExamples.js +296 -0
- package/lib/stores/CubeExamples.js.map +1 -0
- package/lib/stores/CubeExamplesState.d.ts +45 -0
- package/lib/stores/CubeExamplesState.d.ts.map +1 -0
- package/lib/stores/CubeExamplesState.js +81 -0
- package/lib/stores/CubeExamplesState.js.map +1 -0
- package/lib/stores/CubeExecutionState.d.ts +6 -2
- package/lib/stores/CubeExecutionState.d.ts.map +1 -1
- package/lib/stores/CubeExecutionState.js +34 -8
- package/lib/stores/CubeExecutionState.js.map +1 -1
- package/lib/stores/CubeExtendTyping.d.ts +72 -0
- package/lib/stores/CubeExtendTyping.d.ts.map +1 -0
- package/lib/stores/CubeExtendTyping.js +176 -0
- package/lib/stores/CubeExtendTyping.js.map +1 -0
- package/lib/stores/CubeGridQuickActions.d.ts +48 -0
- package/lib/stores/CubeGridQuickActions.d.ts.map +1 -0
- package/lib/stores/CubeGridQuickActions.js +124 -0
- package/lib/stores/CubeGridQuickActions.js.map +1 -0
- package/lib/stores/CubeHost.d.ts +32 -1
- package/lib/stores/CubeHost.d.ts.map +1 -1
- package/lib/stores/CubeHost.js +21 -1
- package/lib/stores/CubeHost.js.map +1 -1
- package/lib/stores/CubeIngestRecheck.d.ts +26 -0
- package/lib/stores/CubeIngestRecheck.d.ts.map +1 -0
- package/lib/stores/CubeIngestRecheck.js +53 -0
- package/lib/stores/CubeIngestRecheck.js.map +1 -0
- package/lib/stores/CubeNodeEditorState.d.ts +120 -6
- package/lib/stores/CubeNodeEditorState.d.ts.map +1 -1
- package/lib/stores/CubeNodeEditorState.js +275 -9
- package/lib/stores/CubeNodeEditorState.js.map +1 -1
- package/lib/stores/CubeShowPureState.d.ts +9 -3
- package/lib/stores/CubeShowPureState.d.ts.map +1 -1
- package/lib/stores/CubeShowPureState.js +28 -8
- package/lib/stores/CubeShowPureState.js.map +1 -1
- package/lib/stores/CubeSourcePickerState.d.ts +54 -65
- package/lib/stores/CubeSourcePickerState.d.ts.map +1 -1
- package/lib/stores/CubeSourcePickerState.js +155 -276
- package/lib/stores/CubeSourcePickerState.js.map +1 -1
- package/lib/stores/CubeSpecTransferState.d.ts +2 -2
- package/lib/stores/CubeSpecTransferState.js +2 -2
- package/lib/stores/LocalModelCatalog.d.ts +2 -0
- package/lib/stores/LocalModelCatalog.d.ts.map +1 -1
- package/lib/stores/LocalModelCatalog.js +17 -3
- package/lib/stores/LocalModelCatalog.js.map +1 -1
- package/lib/stores/editors/CubeAggregationRows.d.ts +80 -0
- package/lib/stores/editors/CubeAggregationRows.d.ts.map +1 -0
- package/lib/stores/editors/CubeAggregationRows.js +164 -0
- package/lib/stores/editors/CubeAggregationRows.js.map +1 -0
- package/lib/stores/editors/CubeConcatDraft.d.ts +30 -0
- package/lib/stores/editors/CubeConcatDraft.d.ts.map +1 -0
- package/lib/stores/editors/CubeConcatDraft.js +44 -0
- package/lib/stores/editors/CubeConcatDraft.js.map +1 -0
- package/lib/stores/editors/CubeDifferenceDraft.d.ts +49 -0
- package/lib/stores/editors/CubeDifferenceDraft.d.ts.map +1 -0
- package/lib/stores/editors/CubeDifferenceDraft.js +111 -0
- package/lib/stores/editors/CubeDifferenceDraft.js.map +1 -0
- package/lib/stores/editors/CubeExtendDraft.d.ts +110 -0
- package/lib/stores/editors/CubeExtendDraft.d.ts.map +1 -0
- package/lib/stores/editors/CubeExtendDraft.js +359 -0
- package/lib/stores/editors/CubeExtendDraft.js.map +1 -0
- package/lib/stores/editors/CubeGroupDraft.d.ts +61 -0
- package/lib/stores/editors/CubeGroupDraft.d.ts.map +1 -0
- package/lib/stores/editors/CubeGroupDraft.js +106 -0
- package/lib/stores/editors/CubeGroupDraft.js.map +1 -0
- package/lib/stores/editors/CubeIntegerText.d.ts +24 -0
- package/lib/stores/editors/CubeIntegerText.d.ts.map +1 -0
- package/lib/stores/editors/CubeIntegerText.js +33 -0
- package/lib/stores/editors/CubeIntegerText.js.map +1 -0
- package/lib/stores/editors/CubeJoinDraft.d.ts +20 -13
- package/lib/stores/editors/CubeJoinDraft.d.ts.map +1 -1
- package/lib/stores/editors/CubeJoinDraft.js +109 -29
- package/lib/stores/editors/CubeJoinDraft.js.map +1 -1
- package/lib/stores/editors/CubeJoinKeyPairs.d.ts +38 -0
- package/lib/stores/editors/CubeJoinKeyPairs.d.ts.map +1 -0
- package/lib/stores/editors/CubeJoinKeyPairs.js +33 -0
- package/lib/stores/editors/CubeJoinKeyPairs.js.map +1 -0
- package/lib/stores/editors/CubeNodeDraft.d.ts +20 -6
- package/lib/stores/editors/CubeNodeDraft.d.ts.map +1 -1
- package/lib/stores/editors/CubeNodeDraft.js +23 -5
- package/lib/stores/editors/CubeNodeDraft.js.map +1 -1
- package/lib/stores/editors/CubeNodeDraftRegistry.d.ts +6 -0
- package/lib/stores/editors/CubeNodeDraftRegistry.d.ts.map +1 -1
- package/lib/stores/editors/CubeNodeDraftRegistry.js +42 -1
- package/lib/stores/editors/CubeNodeDraftRegistry.js.map +1 -1
- package/lib/stores/editors/CubePartitionDraft.d.ts +70 -0
- package/lib/stores/editors/CubePartitionDraft.d.ts.map +1 -0
- package/lib/stores/editors/CubePartitionDraft.js +154 -0
- package/lib/stores/editors/CubePartitionDraft.js.map +1 -0
- package/lib/stores/editors/CubeRenameDraft.d.ts +44 -0
- package/lib/stores/editors/CubeRenameDraft.d.ts.map +1 -0
- package/lib/stores/editors/CubeRenameDraft.js +79 -0
- package/lib/stores/editors/CubeRenameDraft.js.map +1 -0
- package/lib/stores/editors/CubeRestrictDraft.d.ts +37 -0
- package/lib/stores/editors/CubeRestrictDraft.d.ts.map +1 -0
- package/lib/stores/editors/CubeRestrictDraft.js +73 -0
- package/lib/stores/editors/CubeRestrictDraft.js.map +1 -0
- package/lib/stores/editors/CubeRowCountDraft.d.ts +42 -0
- package/lib/stores/editors/CubeRowCountDraft.d.ts.map +1 -0
- package/lib/stores/editors/CubeRowCountDraft.js +55 -0
- package/lib/stores/editors/CubeRowCountDraft.js.map +1 -0
- package/lib/stores/editors/CubeSliceDraft.d.ts +42 -0
- package/lib/stores/editors/CubeSliceDraft.d.ts.map +1 -0
- package/lib/stores/editors/CubeSliceDraft.js +72 -0
- package/lib/stores/editors/CubeSliceDraft.js.map +1 -0
- package/lib/stores/editors/CubeSortDraft.d.ts +41 -0
- package/lib/stores/editors/CubeSortDraft.d.ts.map +1 -0
- package/lib/stores/editors/CubeSortDraft.js +73 -0
- package/lib/stores/editors/CubeSortDraft.js.map +1 -0
- package/lib/stores/editors/CubeSortRows.d.ts +34 -0
- package/lib/stores/editors/CubeSortRows.d.ts.map +1 -0
- package/lib/stores/editors/CubeSortRows.js +50 -0
- package/lib/stores/editors/CubeSortRows.js.map +1 -0
- package/lib/stores/fixtures/CubeNorthwindModel.d.ts +7 -0
- package/lib/stores/fixtures/CubeNorthwindModel.d.ts.map +1 -1
- package/lib/stores/fixtures/CubeNorthwindModel.js +99 -87
- package/lib/stores/fixtures/CubeNorthwindModel.js.map +1 -1
- package/lib/stores/fixtures/CubeSampleSql.d.ts +34 -0
- package/lib/stores/fixtures/CubeSampleSql.d.ts.map +1 -0
- package/lib/stores/fixtures/CubeSampleSql.js +64 -0
- package/lib/stores/fixtures/CubeSampleSql.js.map +1 -0
- package/lib/stores/fixtures/CubeSportsModel.d.ts +27 -0
- package/lib/stores/fixtures/CubeSportsModel.d.ts.map +1 -0
- package/lib/stores/fixtures/CubeSportsModel.js +158 -0
- package/lib/stores/fixtures/CubeSportsModel.js.map +1 -0
- package/lib/stores/fixtures/CubeTradesModel.d.ts +29 -0
- package/lib/stores/fixtures/CubeTradesModel.d.ts.map +1 -0
- package/lib/stores/fixtures/CubeTradesModel.js +197 -0
- package/lib/stores/fixtures/CubeTradesModel.js.map +1 -0
- package/lib/stores/source-picker/CubeCsvSetupSql.d.ts +71 -0
- package/lib/stores/source-picker/CubeCsvSetupSql.d.ts.map +1 -0
- package/lib/stores/source-picker/CubeCsvSetupSql.js +392 -0
- package/lib/stores/source-picker/CubeCsvSetupSql.js.map +1 -0
- package/lib/stores/source-picker/CubeDataProductTabState.d.ts +186 -0
- package/lib/stores/source-picker/CubeDataProductTabState.d.ts.map +1 -0
- package/lib/stores/source-picker/CubeDataProductTabState.js +681 -0
- package/lib/stores/source-picker/CubeDataProductTabState.js.map +1 -0
- package/lib/stores/source-picker/CubeDirectConnectionTabState.d.ts +140 -0
- package/lib/stores/source-picker/CubeDirectConnectionTabState.d.ts.map +1 -0
- package/lib/stores/source-picker/CubeDirectConnectionTabState.js +516 -0
- package/lib/stores/source-picker/CubeDirectConnectionTabState.js.map +1 -0
- package/lib/stores/source-picker/CubeIngestTabState.d.ts +114 -0
- package/lib/stores/source-picker/CubeIngestTabState.d.ts.map +1 -0
- package/lib/stores/source-picker/CubeIngestTabState.js +455 -0
- package/lib/stores/source-picker/CubeIngestTabState.js.map +1 -0
- package/lib/stores/source-picker/CubeInlineModelTabState.d.ts +107 -0
- package/lib/stores/source-picker/CubeInlineModelTabState.d.ts.map +1 -0
- package/lib/stores/source-picker/CubeInlineModelTabState.js +347 -0
- package/lib/stores/source-picker/CubeInlineModelTabState.js.map +1 -0
- package/lib/stores/source-picker/CubeProjectTabState.d.ts +62 -0
- package/lib/stores/source-picker/CubeProjectTabState.d.ts.map +1 -0
- package/lib/stores/source-picker/CubeProjectTabState.js +181 -0
- package/lib/stores/source-picker/CubeProjectTabState.js.map +1 -0
- package/lib/stores/source-picker/CubeSourcePickerTab.d.ts +48 -0
- package/lib/stores/source-picker/CubeSourcePickerTab.d.ts.map +1 -0
- package/lib/stores/source-picker/CubeSourcePickerTab.js +24 -0
- package/lib/stores/source-picker/CubeSourcePickerTab.js.map +1 -0
- package/package.json +12 -8
- package/src/__lib__/LegendCubeCommand.ts +5 -0
- package/src/__lib__/LegendCubeDataProductLabels.ts +91 -0
- package/src/__lib__/LegendCubeDirectConnectionLabels.ts +111 -0
- package/src/__lib__/LegendCubeHelpText.ts +46 -2
- package/src/__lib__/LegendCubeIngestLabels.ts +40 -0
- package/src/__lib__/LegendCubeLabels.ts +192 -4
- package/src/__lib__/LegendCubeProjectLabels.ts +25 -0
- package/src/__lib__/LegendCubeTesting.ts +1 -0
- package/src/__test-utils__/CubeCanvasTestUtils.ts +1 -1
- package/src/__test-utils__/CubeConnectionTestSupport.ts +45 -0
- package/src/__test-utils__/CubeDirectConnectionFixtures.ts +70 -0
- package/src/__test-utils__/CubeEngineTestSupport.ts +73 -0
- package/src/__test-utils__/CubeExpressionTestUtils.ts +119 -0
- package/src/__test-utils__/CubeOperationsTestUtils.ts +252 -0
- package/src/__test-utils__/CubePageTestUtils.tsx +35 -0
- package/src/__test-utils__/CubeTestApplication.ts +21 -2
- package/src/__test-utils__/FakeCubeConnectionExplorer.ts +111 -0
- package/src/__test-utils__/FakeCubeDataProductCatalog.ts +227 -0
- package/src/__test-utils__/FakeCubeEngine.ts +32 -2
- package/src/__test-utils__/FakeCubeIngestCatalog.ts +180 -0
- package/src/__test-utils__/FakeCubeProjectCatalog.ts +89 -0
- package/src/components/CubeAddItems.tsx +179 -0
- package/src/components/CubeEditor.tsx +73 -44
- package/src/components/CubeEntrySourceBanner.tsx +64 -0
- package/src/components/CubeNodeIcon.tsx +31 -1
- package/src/components/CubeSchemaColumnsTable.tsx +49 -0
- package/src/components/canvas/CubeCanvas.tsx +51 -14
- package/src/components/canvas/CubeCanvasContextMenu.tsx +31 -30
- package/src/components/canvas/CubeCanvasDnd.ts +16 -9
- package/src/components/canvas/CubeCanvasElements.ts +12 -3
- package/src/components/canvas/CubeCanvasNode.tsx +62 -36
- package/src/components/canvas/CubeCanvasNodeFocus.ts +37 -0
- package/src/components/canvas/CubeNodeEditorAnchor.ts +82 -0
- package/src/components/editors/CubeAggregationRowEditor.tsx +224 -0
- package/src/components/editors/CubeColumnChecklist.tsx +130 -0
- package/src/components/editors/CubeColumnPicker.tsx +36 -12
- package/src/components/editors/CubeConcatEditor.tsx +374 -0
- package/src/components/editors/CubeDataProductSourceEditor.tsx +134 -0
- package/src/components/editors/CubeDifferenceEditor.tsx +87 -0
- package/src/components/editors/CubeDistinctEditor.tsx +28 -0
- package/src/components/editors/CubeExtendEditor.tsx +271 -0
- package/src/components/editors/CubeFilterEditor.tsx +7 -0
- package/src/components/editors/CubeGroupEditor.tsx +135 -0
- package/src/components/editors/CubeIngestSourceEditor.tsx +104 -0
- package/src/components/editors/CubeIntegerField.tsx +51 -0
- package/src/components/editors/CubeJoinEditor.tsx +34 -131
- package/src/components/editors/CubeJoinKeyRows.tsx +183 -0
- package/src/components/editors/CubeNodeEditorPanel.tsx +103 -29
- package/src/components/editors/CubeNodeEditorPopper.tsx +183 -0
- package/src/components/editors/CubeNodeEditorRegistry.ts +41 -0
- package/src/components/editors/CubePartitionEditor.tsx +208 -0
- package/src/components/editors/CubeRenameEditor.tsx +148 -0
- package/src/components/editors/CubeRestrictEditor.tsx +103 -0
- package/src/components/editors/CubeRowCountEditor.tsx +53 -0
- package/src/components/editors/CubeSliceEditor.tsx +69 -0
- package/src/components/editors/CubeSortEditor.tsx +84 -0
- package/src/components/editors/CubeSortRowEditor.tsx +176 -0
- package/src/components/editors/CubeSourceEditor.tsx +42 -40
- package/src/components/editors/CubeValueEditor.tsx +2 -1
- package/src/components/editors/CubeWarehouseControl.tsx +113 -0
- package/src/components/editors/useCubeNodeEditorDismiss.ts +103 -0
- package/src/components/examples/CubeExamplesDialog.tsx +199 -0
- package/src/components/grid/CubeGridRegion.tsx +49 -10
- package/src/components/grid/CubeGridValues.ts +55 -0
- package/src/components/grid/CubeResultGrid.tsx +83 -13
- package/src/components/palette/CubePalette.tsx +33 -15
- package/src/components/source-picker/CubeDataProductTab.tsx +392 -0
- package/src/components/source-picker/CubeDirectConnectionTab.tsx +340 -0
- package/src/components/source-picker/CubeIngestTab.tsx +232 -0
- package/src/components/source-picker/CubeInlineModelTab.tsx +191 -0
- package/src/components/source-picker/CubePickerStep.tsx +49 -0
- package/src/components/source-picker/CubeProjectTab.tsx +114 -0
- package/src/components/source-picker/CubeSourcePicker.tsx +62 -227
- package/src/components/spec-transfer/CubeSpecTransferDialog.tsx +1 -1
- package/src/graph-manager/CubeConnectionExplorer.ts +106 -0
- package/src/graph-manager/CubeDataProduct.ts +150 -0
- package/src/graph-manager/CubeDataProductCatalog.ts +245 -0
- package/src/graph-manager/CubeDirectConnection.ts +67 -0
- package/src/graph-manager/CubeEngine.ts +57 -1
- package/src/graph-manager/CubeIngest.ts +144 -0
- package/src/graph-manager/CubeIngestCatalog.ts +169 -0
- package/src/graph-manager/CubeLakehouseEnvironment.ts +27 -0
- package/src/graph-manager/CubeModelOutlineHelper.ts +26 -0
- package/src/graph-manager/CubeProject.ts +117 -0
- package/src/graph-manager/CubeProjectCatalog.ts +40 -0
- package/src/graph-manager/protocol/pure/CubeEngineBuilder.ts +145 -1
- package/src/graph-manager/protocol/pure/v1/V1_CubeDataProductArtifact.ts +251 -0
- package/src/graph-manager/protocol/pure/v1/V1_CubeDataProductModel.ts +101 -0
- package/src/graph-manager/protocol/pure/v1/V1_CubeDirectConnection.ts +339 -0
- package/src/graph-manager/protocol/pure/v1/V1_CubeDirectModel.ts +151 -0
- package/src/graph-manager/protocol/pure/v1/V1_CubeEngineErrors.ts +45 -4
- package/src/graph-manager/protocol/pure/v1/V1_CubeExpression.ts +89 -0
- package/src/graph-manager/protocol/pure/v1/V1_CubeIngestDefinition.ts +201 -0
- package/src/graph-manager/protocol/pure/v1/V1_CubeIngestModel.ts +183 -0
- package/src/graph-manager/protocol/pure/v1/V1_CubeLakehouseEnvironmentResolver.ts +141 -0
- package/src/graph-manager/protocol/pure/v1/V1_CubeLambdaSerializer.ts +84 -4
- package/src/graph-manager/protocol/pure/v1/V1_CubeModelOutlineBuilder.ts +89 -3
- package/src/graph-manager/protocol/pure/v1/V1_CubeSchemaExploration.ts +361 -0
- package/src/graph-manager/protocol/pure/v1/V1_LegendCubeConnectionExplorer.ts +116 -0
- package/src/graph-manager/protocol/pure/v1/V1_LegendCubeDataProductCatalog.ts +744 -0
- package/src/graph-manager/protocol/pure/v1/V1_LegendCubeEngine.ts +967 -24
- package/src/graph-manager/protocol/pure/v1/V1_LegendCubeIngestCatalog.ts +459 -0
- package/src/graph-manager/protocol/pure/v1/V1_LegendCubeProjectCatalog.ts +147 -0
- package/src/graph-manager/protocol/pure/v1/__test-utils__/V1_CubeConnectionExplorerTestUtils.ts +61 -0
- package/src/graph-manager/protocol/pure/v1/__test-utils__/V1_CubeDataProductFixtures.ts +337 -0
- package/src/graph-manager/protocol/pure/v1/__test-utils__/V1_CubeDataProductSearchFixtures.ts +206 -0
- package/src/graph-manager/protocol/pure/v1/__test-utils__/V1_CubeEngineTestUtils.ts +48 -4
- package/src/index.ts +20 -0
- package/src/stores/CubeAddPlacement.ts +67 -0
- package/src/stores/CubeDataProductRecheck.ts +93 -0
- package/src/stores/CubeDataProductRuntimeState.ts +256 -0
- package/src/stores/CubeDataProductWarehouse.ts +40 -0
- package/src/stores/CubeEditorState.ts +621 -68
- package/src/stores/CubeEntrySource.ts +278 -0
- package/src/stores/CubeExamples.ts +457 -0
- package/src/stores/CubeExamplesState.ts +108 -0
- package/src/stores/CubeExecutionState.ts +60 -8
- package/src/stores/CubeExtendTyping.ts +291 -0
- package/src/stores/CubeGridQuickActions.ts +184 -0
- package/src/stores/CubeHost.ts +71 -1
- package/src/stores/CubeIngestRecheck.ts +92 -0
- package/src/stores/CubeNodeEditorState.ts +348 -10
- package/src/stores/CubeShowPureState.ts +33 -8
- package/src/stores/CubeSourcePickerState.ts +160 -330
- package/src/stores/CubeSpecTransferState.ts +2 -2
- package/src/stores/LocalModelCatalog.ts +22 -3
- package/src/stores/editors/CubeAggregationRows.ts +299 -0
- package/src/stores/editors/CubeConcatDraft.ts +49 -0
- package/src/stores/editors/CubeDifferenceDraft.ts +147 -0
- package/src/stores/editors/CubeExtendDraft.ts +532 -0
- package/src/stores/editors/CubeGroupDraft.ts +145 -0
- package/src/stores/editors/CubeIntegerText.ts +34 -0
- package/src/stores/editors/CubeJoinDraft.ts +170 -54
- package/src/stores/editors/CubeJoinKeyPairs.ts +68 -0
- package/src/stores/editors/CubeNodeDraft.ts +26 -6
- package/src/stores/editors/CubeNodeDraftRegistry.ts +60 -1
- package/src/stores/editors/CubePartitionDraft.ts +214 -0
- package/src/stores/editors/CubeRenameDraft.ts +110 -0
- package/src/stores/editors/CubeRestrictDraft.ts +83 -0
- package/src/stores/editors/CubeRowCountDraft.ts +69 -0
- package/src/stores/editors/CubeSliceDraft.ts +87 -0
- package/src/stores/editors/CubeSortDraft.ts +98 -0
- package/src/stores/editors/CubeSortRows.ts +84 -0
- package/src/stores/fixtures/CubeNorthwindModel.ts +103 -88
- package/src/stores/fixtures/CubeSampleSql.ts +85 -0
- package/src/stores/fixtures/CubeSportsModel.ts +182 -0
- package/src/stores/fixtures/CubeTradesModel.ts +241 -0
- package/src/stores/source-picker/CubeCsvSetupSql.ts +444 -0
- package/src/stores/source-picker/CubeDataProductTabState.ts +839 -0
- package/src/stores/source-picker/CubeDirectConnectionTabState.ts +647 -0
- package/src/stores/source-picker/CubeIngestTabState.ts +551 -0
- package/src/stores/source-picker/CubeInlineModelTabState.ts +448 -0
- package/src/stores/source-picker/CubeProjectTabState.ts +218 -0
- package/src/stores/source-picker/CubeSourcePickerTab.ts +50 -0
- package/tsconfig.json +104 -0
|
@@ -0,0 +1,744 @@
|
|
|
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 type { Schema } from '@finos/legend-cube';
|
|
18
|
+
import {
|
|
19
|
+
type V1_EntitlementsDataProductLite,
|
|
20
|
+
type V1_EntitlementsLakehouseEnvironmentType,
|
|
21
|
+
type V1_LiteDataContractWithUserStatus,
|
|
22
|
+
V1_EnrichedUserApprovalStatus,
|
|
23
|
+
V1_EntitlementsDataProductLiteModelSchema,
|
|
24
|
+
V1_liteDataContractWithUserStatusModelSchema,
|
|
25
|
+
V1_ResourceType,
|
|
26
|
+
V1_SdlcDeploymentDataProductOrigin,
|
|
27
|
+
} from '@finos/legend-graph';
|
|
28
|
+
import {
|
|
29
|
+
type DepotServerClient,
|
|
30
|
+
StoreProjectData,
|
|
31
|
+
} from '@finos/legend-server-depot';
|
|
32
|
+
import type { LakehouseContractServerClient } from '@finos/legend-server-lakehouse';
|
|
33
|
+
import {
|
|
34
|
+
type MarketplaceServerClient,
|
|
35
|
+
DataProductSearchResult,
|
|
36
|
+
LakehouseDataProductSearchResultDetails,
|
|
37
|
+
LakehouseSDLCDataProductSearchResultOrigin,
|
|
38
|
+
SearchType,
|
|
39
|
+
} from '@finos/legend-server-marketplace';
|
|
40
|
+
import { isNonNullable, type PlainObject } from '@finos/legend-shared';
|
|
41
|
+
import { StoredFileGeneration } from '@finos/legend-storage';
|
|
42
|
+
import { deserialize } from 'serializr';
|
|
43
|
+
import {
|
|
44
|
+
type CubeDataProductProject,
|
|
45
|
+
CubeDataProductEnvironmentType,
|
|
46
|
+
} from '../../../CubeDataProduct.js';
|
|
47
|
+
import {
|
|
48
|
+
CubeAccessPointGroupAccess,
|
|
49
|
+
type CubeAccessPointLocation,
|
|
50
|
+
type CubeDataProductCatalog,
|
|
51
|
+
type CubeMarketplaceLinkTarget,
|
|
52
|
+
CubeDataProductCandidate,
|
|
53
|
+
type CubeDataProductDescription,
|
|
54
|
+
} from '../../../CubeDataProductCatalog.js';
|
|
55
|
+
import {
|
|
56
|
+
CubeEngineError,
|
|
57
|
+
CubeEngineErrorKind,
|
|
58
|
+
type NodeId,
|
|
59
|
+
} from '../../../CubeEngine.js';
|
|
60
|
+
import {
|
|
61
|
+
type V1_CubeEnterpriseStereotype,
|
|
62
|
+
V1_findCubeAccessPointSchema,
|
|
63
|
+
V1_readCubeDataProductDescription,
|
|
64
|
+
} from './V1_CubeDataProductArtifact.js';
|
|
65
|
+
|
|
66
|
+
// The deployed data products, as Legend Query lists and reads them: the
|
|
67
|
+
// lakehouse's lite list per class (DataProductSelectorState), then a
|
|
68
|
+
// product's deployed artifact (getGenerationFilesByType) and its definition
|
|
69
|
+
// at the deployed version, from the depot. Cube pages the lite list itself
|
|
70
|
+
// (PLAN §6.8): the client's own loop never ends on a page that says more
|
|
71
|
+
// follow without saying where, or on a repeated cursor, and can't be stopped.
|
|
72
|
+
// Given the marketplace's search API, a search runs there instead, as the
|
|
73
|
+
// marketplace's Lakehouse Access search does, and the list is never read
|
|
74
|
+
|
|
75
|
+
/** The generation type of a data product's artifact */
|
|
76
|
+
const DATA_PRODUCT_GENERATION_TYPE = 'dataProduct';
|
|
77
|
+
|
|
78
|
+
/** The classes Cube lists, Production first, as Data Cube's selection offers */
|
|
79
|
+
const ENVIRONMENT_TYPES = [
|
|
80
|
+
CubeDataProductEnvironmentType.PRODUCTION,
|
|
81
|
+
CubeDataProductEnvironmentType.PRODUCTION_PARALLEL,
|
|
82
|
+
];
|
|
83
|
+
|
|
84
|
+
/** The lite list's page size, as the lakehouse client's own loop uses */
|
|
85
|
+
const LITE_PAGE_SIZE = 1000;
|
|
86
|
+
/** Past this many pages a list is taken to be stuck */
|
|
87
|
+
const LITE_PAGE_CAP = 50;
|
|
88
|
+
/** The products one marketplace search gives: its first page, of this size */
|
|
89
|
+
const SEARCH_PAGE_SIZE = 100;
|
|
90
|
+
|
|
91
|
+
export const V1_CUBE_DATA_PRODUCT_LIST_ERROR = {
|
|
92
|
+
UNREADABLE_PAGE: "The lakehouse's answer isn't a page of data products",
|
|
93
|
+
NO_CURSOR:
|
|
94
|
+
'The lakehouse said more data products follow, but not where the next page starts',
|
|
95
|
+
REPEATED_CURSOR: 'The lakehouse sent the same page of data products twice',
|
|
96
|
+
TOO_MANY_PAGES: `The lakehouse's data product list runs past ${LITE_PAGE_CAP} pages`,
|
|
97
|
+
} as const;
|
|
98
|
+
|
|
99
|
+
export const V1_CUBE_DATA_PRODUCT_SEARCH_ERROR = {
|
|
100
|
+
UNREADABLE_PAGE: "The marketplace's answer isn't a page of search results",
|
|
101
|
+
} as const;
|
|
102
|
+
|
|
103
|
+
const toMessage = (error: unknown): string =>
|
|
104
|
+
error instanceof Error ? error.message : String(error);
|
|
105
|
+
|
|
106
|
+
const isPlainObject = (value: unknown): value is PlainObject =>
|
|
107
|
+
typeof value === 'object' && value !== null && !Array.isArray(value);
|
|
108
|
+
|
|
109
|
+
/** Stops a list between pages once its search is dropped */
|
|
110
|
+
const throwIfAborted = (signal: AbortSignal | undefined): void => {
|
|
111
|
+
if (signal?.aborted) {
|
|
112
|
+
throw signal.reason instanceof Error
|
|
113
|
+
? signal.reason
|
|
114
|
+
: new Error('The data product list was stopped');
|
|
115
|
+
}
|
|
116
|
+
};
|
|
117
|
+
|
|
118
|
+
/** A lite row as Cube lists it; none for an ad hoc or incomplete one */
|
|
119
|
+
const toCandidate = (
|
|
120
|
+
row: V1_EntitlementsDataProductLite,
|
|
121
|
+
environmentType: CubeDataProductEnvironmentType,
|
|
122
|
+
): CubeDataProductCandidate | undefined => {
|
|
123
|
+
const { origin } = row;
|
|
124
|
+
if (
|
|
125
|
+
!(origin instanceof V1_SdlcDeploymentDataProductOrigin) ||
|
|
126
|
+
!origin.group ||
|
|
127
|
+
!origin.artifact ||
|
|
128
|
+
!origin.version ||
|
|
129
|
+
!row.fullPath ||
|
|
130
|
+
row.lakehouseEnvironment?.type.toUpperCase() !== environmentType
|
|
131
|
+
) {
|
|
132
|
+
return undefined;
|
|
133
|
+
}
|
|
134
|
+
return new CubeDataProductCandidate({
|
|
135
|
+
id: row.id,
|
|
136
|
+
deploymentId: String(row.deploymentId),
|
|
137
|
+
dataProductPath: row.fullPath,
|
|
138
|
+
title: row.title ?? row.id,
|
|
139
|
+
// a wire null is no description
|
|
140
|
+
description: row.description ?? undefined,
|
|
141
|
+
groupId: origin.group,
|
|
142
|
+
artifactId: origin.artifact,
|
|
143
|
+
versionId: origin.version,
|
|
144
|
+
environmentType,
|
|
145
|
+
producerEnvironmentName: row.lakehouseEnvironment.producerEnvironmentName,
|
|
146
|
+
});
|
|
147
|
+
};
|
|
148
|
+
|
|
149
|
+
/** A lite row read on its own: one that can't be read is dropped, never failing the list */
|
|
150
|
+
const toLiteCandidate = (
|
|
151
|
+
row: PlainObject,
|
|
152
|
+
environmentType: CubeDataProductEnvironmentType,
|
|
153
|
+
): CubeDataProductCandidate | undefined => {
|
|
154
|
+
try {
|
|
155
|
+
return toCandidate(
|
|
156
|
+
deserialize(V1_EntitlementsDataProductLiteModelSchema, row),
|
|
157
|
+
environmentType,
|
|
158
|
+
);
|
|
159
|
+
} catch {
|
|
160
|
+
return undefined;
|
|
161
|
+
}
|
|
162
|
+
};
|
|
163
|
+
|
|
164
|
+
/**
|
|
165
|
+
* A search row as Cube lists it, the same candidate as its lite row's: none
|
|
166
|
+
* for a DataSpace, an error, an ad hoc or incomplete one, or another class's
|
|
167
|
+
*/
|
|
168
|
+
const toSearchCandidate = (
|
|
169
|
+
result: DataProductSearchResult,
|
|
170
|
+
environmentType: CubeDataProductEnvironmentType,
|
|
171
|
+
): CubeDataProductCandidate | undefined => {
|
|
172
|
+
const details = result.dataProductDetails;
|
|
173
|
+
if (!(details instanceof LakehouseDataProductSearchResultDetails)) {
|
|
174
|
+
return undefined;
|
|
175
|
+
}
|
|
176
|
+
const { origin } = details;
|
|
177
|
+
const deploymentId: unknown = details.deploymentId;
|
|
178
|
+
if (
|
|
179
|
+
!(origin instanceof LakehouseSDLCDataProductSearchResultOrigin) ||
|
|
180
|
+
!origin.groupId ||
|
|
181
|
+
!origin.artifactId ||
|
|
182
|
+
!origin.versionId ||
|
|
183
|
+
!origin.path ||
|
|
184
|
+
!details.dataProductId ||
|
|
185
|
+
deploymentId === undefined ||
|
|
186
|
+
deploymentId === null ||
|
|
187
|
+
details.producerEnvironmentType?.toUpperCase() !== environmentType
|
|
188
|
+
) {
|
|
189
|
+
return undefined;
|
|
190
|
+
}
|
|
191
|
+
return new CubeDataProductCandidate({
|
|
192
|
+
id: details.dataProductId,
|
|
193
|
+
deploymentId: String(deploymentId),
|
|
194
|
+
dataProductPath: origin.path,
|
|
195
|
+
title: result.dataProductTitle ?? details.dataProductId,
|
|
196
|
+
description: result.dataProductDescription ?? undefined,
|
|
197
|
+
groupId: origin.groupId,
|
|
198
|
+
artifactId: origin.artifactId,
|
|
199
|
+
versionId: origin.versionId,
|
|
200
|
+
environmentType,
|
|
201
|
+
producerEnvironmentName: details.producerEnvironmentName,
|
|
202
|
+
});
|
|
203
|
+
};
|
|
204
|
+
|
|
205
|
+
/** A search row read on its own: one that can't be read, e.g. of an unknown type, is dropped, never failing the page */
|
|
206
|
+
const toSearchRowCandidate = (
|
|
207
|
+
row: PlainObject,
|
|
208
|
+
environmentType: CubeDataProductEnvironmentType,
|
|
209
|
+
): CubeDataProductCandidate | undefined => {
|
|
210
|
+
try {
|
|
211
|
+
return toSearchCandidate(
|
|
212
|
+
DataProductSearchResult.serialization.fromJson(row),
|
|
213
|
+
environmentType,
|
|
214
|
+
);
|
|
215
|
+
} catch {
|
|
216
|
+
return undefined;
|
|
217
|
+
}
|
|
218
|
+
};
|
|
219
|
+
|
|
220
|
+
/** The cursor's deployment, a number or a string of digits; none for anything else, null and '' included */
|
|
221
|
+
const toCursorDeploymentId = (value: unknown): number | undefined => {
|
|
222
|
+
if (typeof value === 'number') {
|
|
223
|
+
return Number.isFinite(value) ? value : undefined;
|
|
224
|
+
}
|
|
225
|
+
return typeof value === 'string' && /^\d+$/u.test(value)
|
|
226
|
+
? Number(value)
|
|
227
|
+
: undefined;
|
|
228
|
+
};
|
|
229
|
+
|
|
230
|
+
/**
|
|
231
|
+
* How far along approval a contract is, as the marketplace ranks a viewer's
|
|
232
|
+
* contracts for one group, so a granted one is never hidden behind a
|
|
233
|
+
* pending duplicate
|
|
234
|
+
*/
|
|
235
|
+
const APPROVAL_STAGE: Partial<Record<V1_EnrichedUserApprovalStatus, number>> = {
|
|
236
|
+
[V1_EnrichedUserApprovalStatus.SUBMITTED_FOR_APPROVALS]: 1,
|
|
237
|
+
[V1_EnrichedUserApprovalStatus.PENDING_CONSUMER_PRIVILEGE_MANAGER_APPROVAL]: 2,
|
|
238
|
+
[V1_EnrichedUserApprovalStatus.PENDING_DATA_OWNER_APPROVAL]: 3,
|
|
239
|
+
[V1_EnrichedUserApprovalStatus.APPROVED]: 4,
|
|
240
|
+
};
|
|
241
|
+
|
|
242
|
+
/** A contract's status as the access the marketplace shows for it */
|
|
243
|
+
const toGroupAccess = (
|
|
244
|
+
status: V1_EnrichedUserApprovalStatus,
|
|
245
|
+
): CubeAccessPointGroupAccess => {
|
|
246
|
+
switch (status) {
|
|
247
|
+
case V1_EnrichedUserApprovalStatus.APPROVED:
|
|
248
|
+
return CubeAccessPointGroupAccess.APPROVED;
|
|
249
|
+
case V1_EnrichedUserApprovalStatus.SUBMITTED_FOR_APPROVALS:
|
|
250
|
+
return CubeAccessPointGroupAccess.SUBMITTED_FOR_APPROVALS;
|
|
251
|
+
case V1_EnrichedUserApprovalStatus.PENDING_CONSUMER_PRIVILEGE_MANAGER_APPROVAL:
|
|
252
|
+
return CubeAccessPointGroupAccess.PENDING_MANAGER_APPROVAL;
|
|
253
|
+
case V1_EnrichedUserApprovalStatus.PENDING_DATA_OWNER_APPROVAL:
|
|
254
|
+
return CubeAccessPointGroupAccess.PENDING_DATA_OWNER_APPROVAL;
|
|
255
|
+
case V1_EnrichedUserApprovalStatus.DENIED:
|
|
256
|
+
return CubeAccessPointGroupAccess.DENIED;
|
|
257
|
+
default:
|
|
258
|
+
return CubeAccessPointGroupAccess.NO_ACCESS;
|
|
259
|
+
}
|
|
260
|
+
};
|
|
261
|
+
|
|
262
|
+
/** A product's description, by its project, version and path, read once per visit */
|
|
263
|
+
const descriptionKey = (
|
|
264
|
+
groupId: string,
|
|
265
|
+
artifactId: string,
|
|
266
|
+
versionId: string,
|
|
267
|
+
dataProductPath: string,
|
|
268
|
+
): string => JSON.stringify([groupId, artifactId, versionId, dataProductPath]);
|
|
269
|
+
|
|
270
|
+
/** What a host can add to the catalog: each part turns on what it serves */
|
|
271
|
+
export interface V1_CubeDataProductCatalogOptions {
|
|
272
|
+
/** The marketplace's search API; with it, searches run there */
|
|
273
|
+
readonly marketplaceServerClient?: MarketplaceServerClient | undefined;
|
|
274
|
+
/** Builds a product's marketplace page, as the host's marketplace names it */
|
|
275
|
+
readonly marketplaceLink?:
|
|
276
|
+
| ((target: CubeMarketplaceLinkTarget) => string | undefined)
|
|
277
|
+
| undefined;
|
|
278
|
+
/** The viewer, whose contracts give their access to each group */
|
|
279
|
+
readonly getCurrentUser?: (() => string) | undefined;
|
|
280
|
+
/** The stereotype the host's marketplace marks groups open to everyone with */
|
|
281
|
+
readonly enterpriseStereotype?: V1_CubeEnterpriseStereotype | undefined;
|
|
282
|
+
}
|
|
283
|
+
|
|
284
|
+
export class V1_LegendCubeDataProductCatalog implements CubeDataProductCatalog {
|
|
285
|
+
readonly environmentTypes = ENVIRONMENT_TYPES;
|
|
286
|
+
private readonly contractServerClient: LakehouseContractServerClient;
|
|
287
|
+
private readonly depotServerClient: DepotServerClient;
|
|
288
|
+
private readonly getAccessToken: () => string | undefined;
|
|
289
|
+
private readonly options: V1_CubeDataProductCatalogOptions;
|
|
290
|
+
/** Each class's list, read once per page visit */
|
|
291
|
+
private readonly lists = new Map<
|
|
292
|
+
CubeDataProductEnvironmentType,
|
|
293
|
+
Promise<readonly CubeDataProductCandidate[]>
|
|
294
|
+
>();
|
|
295
|
+
/** Each product's description, by its project, version and path */
|
|
296
|
+
private readonly descriptions = new Map<
|
|
297
|
+
string,
|
|
298
|
+
Promise<CubeDataProductDescription>
|
|
299
|
+
>();
|
|
300
|
+
/** The search answers whose page leaves out matches */
|
|
301
|
+
private readonly cutShortAnswers = new WeakSet<
|
|
302
|
+
readonly CubeDataProductCandidate[]
|
|
303
|
+
>();
|
|
304
|
+
|
|
305
|
+
constructor(
|
|
306
|
+
contractServerClient: LakehouseContractServerClient,
|
|
307
|
+
depotServerClient: DepotServerClient,
|
|
308
|
+
getAccessToken: () => string | undefined,
|
|
309
|
+
options: V1_CubeDataProductCatalogOptions = {},
|
|
310
|
+
) {
|
|
311
|
+
this.contractServerClient = contractServerClient;
|
|
312
|
+
this.depotServerClient = depotServerClient;
|
|
313
|
+
this.getAccessToken = getAccessToken;
|
|
314
|
+
this.options = options;
|
|
315
|
+
}
|
|
316
|
+
|
|
317
|
+
get searchesOnServer(): boolean {
|
|
318
|
+
return this.options.marketplaceServerClient !== undefined;
|
|
319
|
+
}
|
|
320
|
+
|
|
321
|
+
get searchLimit(): number | undefined {
|
|
322
|
+
return this.searchesOnServer ? SEARCH_PAGE_SIZE : undefined;
|
|
323
|
+
}
|
|
324
|
+
|
|
325
|
+
isCutShort(answer: readonly CubeDataProductCandidate[]): boolean {
|
|
326
|
+
return this.cutShortAnswers.has(answer);
|
|
327
|
+
}
|
|
328
|
+
|
|
329
|
+
/**
|
|
330
|
+
* The class's lite rows, page by page along the lakehouse's cursor. Stops
|
|
331
|
+
* with an error on a page that isn't one, on a missing or repeated cursor,
|
|
332
|
+
* or past the page cap, and between pages once the search is dropped.
|
|
333
|
+
*/
|
|
334
|
+
private async readLiteRows(
|
|
335
|
+
environmentType: CubeDataProductEnvironmentType,
|
|
336
|
+
signal: AbortSignal | undefined,
|
|
337
|
+
): Promise<PlainObject[]> {
|
|
338
|
+
const rows: PlainObject[] = [];
|
|
339
|
+
let cursor: { id: string; deploymentId: number } | undefined;
|
|
340
|
+
for (let page = 1; page <= LITE_PAGE_CAP; page++) {
|
|
341
|
+
throwIfAborted(signal);
|
|
342
|
+
const response: unknown =
|
|
343
|
+
await this.contractServerClient.getDataProductsLitePaginated(
|
|
344
|
+
LITE_PAGE_SIZE,
|
|
345
|
+
environmentType as unknown as V1_EntitlementsLakehouseEnvironmentType,
|
|
346
|
+
cursor?.id,
|
|
347
|
+
cursor?.deploymentId,
|
|
348
|
+
this.getAccessToken(),
|
|
349
|
+
);
|
|
350
|
+
// a 200 carrying an error is no page; a page may leave out an empty
|
|
351
|
+
// list, as the lakehouse client and its model allow
|
|
352
|
+
const list = isPlainObject(response)
|
|
353
|
+
? response.liteDataProductsResponse
|
|
354
|
+
: undefined;
|
|
355
|
+
const products = isPlainObject(list)
|
|
356
|
+
? (list.dataProducts ?? [])
|
|
357
|
+
: undefined;
|
|
358
|
+
if (!Array.isArray(products)) {
|
|
359
|
+
throw new Error(V1_CUBE_DATA_PRODUCT_LIST_ERROR.UNREADABLE_PAGE);
|
|
360
|
+
}
|
|
361
|
+
rows.push(...products.filter(isPlainObject));
|
|
362
|
+
const metadata = (response as PlainObject).paginationMetadataRecord;
|
|
363
|
+
if (!isPlainObject(metadata) || metadata.hasNextPage !== true) {
|
|
364
|
+
return rows;
|
|
365
|
+
}
|
|
366
|
+
const last = metadata.lastValuesMap;
|
|
367
|
+
const id = isPlainObject(last) ? last.id : undefined;
|
|
368
|
+
const deploymentId = toCursorDeploymentId(
|
|
369
|
+
isPlainObject(last) ? last.deployment_id : undefined,
|
|
370
|
+
);
|
|
371
|
+
if (typeof id !== 'string' || !id || deploymentId === undefined) {
|
|
372
|
+
throw new Error(V1_CUBE_DATA_PRODUCT_LIST_ERROR.NO_CURSOR);
|
|
373
|
+
}
|
|
374
|
+
if (cursor?.id === id && cursor.deploymentId === deploymentId) {
|
|
375
|
+
throw new Error(V1_CUBE_DATA_PRODUCT_LIST_ERROR.REPEATED_CURSOR);
|
|
376
|
+
}
|
|
377
|
+
cursor = { id, deploymentId };
|
|
378
|
+
}
|
|
379
|
+
throw new Error(V1_CUBE_DATA_PRODUCT_LIST_ERROR.TOO_MANY_PAGES);
|
|
380
|
+
}
|
|
381
|
+
|
|
382
|
+
/**
|
|
383
|
+
* The class's list, read once per page visit. A list whose search is
|
|
384
|
+
* dropped while it pages is forgotten at once, so the next search reads it
|
|
385
|
+
* again rather than waiting on the stopped one.
|
|
386
|
+
*/
|
|
387
|
+
private listOf(
|
|
388
|
+
environmentType: CubeDataProductEnvironmentType,
|
|
389
|
+
signal: AbortSignal | undefined,
|
|
390
|
+
): Promise<readonly CubeDataProductCandidate[]> {
|
|
391
|
+
const cached = this.lists.get(environmentType);
|
|
392
|
+
if (cached) {
|
|
393
|
+
return cached;
|
|
394
|
+
}
|
|
395
|
+
const list = this.readList(environmentType, signal);
|
|
396
|
+
const forget = (): void => {
|
|
397
|
+
if (this.lists.get(environmentType) === list) {
|
|
398
|
+
this.lists.delete(environmentType);
|
|
399
|
+
}
|
|
400
|
+
};
|
|
401
|
+
const stopWatching = (): void =>
|
|
402
|
+
signal?.removeEventListener('abort', forget);
|
|
403
|
+
signal?.addEventListener('abort', forget, { once: true });
|
|
404
|
+
// a failed list is read again on the next search: forgotten before its failure is seen
|
|
405
|
+
list.then(stopWatching, () => {
|
|
406
|
+
forget();
|
|
407
|
+
stopWatching();
|
|
408
|
+
});
|
|
409
|
+
this.lists.set(environmentType, list);
|
|
410
|
+
return list;
|
|
411
|
+
}
|
|
412
|
+
|
|
413
|
+
/** The class's list, along its pages; a stopped one fails with why it was stopped */
|
|
414
|
+
private async readList(
|
|
415
|
+
environmentType: CubeDataProductEnvironmentType,
|
|
416
|
+
signal: AbortSignal | undefined,
|
|
417
|
+
): Promise<readonly CubeDataProductCandidate[]> {
|
|
418
|
+
try {
|
|
419
|
+
return (await this.readLiteRows(environmentType, signal))
|
|
420
|
+
.map((row) => toLiteCandidate(row, environmentType))
|
|
421
|
+
.filter(isNonNullable);
|
|
422
|
+
} catch (error) {
|
|
423
|
+
if (signal?.aborted) {
|
|
424
|
+
throw error;
|
|
425
|
+
}
|
|
426
|
+
throw new CubeEngineError(
|
|
427
|
+
CubeEngineErrorKind.NETWORK,
|
|
428
|
+
`Cube couldn't list the data products\n${toMessage(error)}`,
|
|
429
|
+
);
|
|
430
|
+
}
|
|
431
|
+
}
|
|
432
|
+
|
|
433
|
+
/**
|
|
434
|
+
* The products the marketplace matches, in its order: the first page of a
|
|
435
|
+
* full text search in the class. A failed search fails; it never falls
|
|
436
|
+
* back to the lakehouse's list
|
|
437
|
+
*/
|
|
438
|
+
private async searchMarketplace(
|
|
439
|
+
marketplaceServerClient: MarketplaceServerClient,
|
|
440
|
+
search: {
|
|
441
|
+
text: string;
|
|
442
|
+
environmentType: CubeDataProductEnvironmentType;
|
|
443
|
+
},
|
|
444
|
+
signal: AbortSignal | undefined,
|
|
445
|
+
): Promise<readonly CubeDataProductCandidate[]> {
|
|
446
|
+
const { environmentType } = search;
|
|
447
|
+
try {
|
|
448
|
+
const response: unknown =
|
|
449
|
+
await marketplaceServerClient.lakehouseAccessSearch(
|
|
450
|
+
search.text.trim(),
|
|
451
|
+
environmentType as unknown as V1_EntitlementsLakehouseEnvironmentType,
|
|
452
|
+
{
|
|
453
|
+
searchType: SearchType.FULL_TEXT,
|
|
454
|
+
pageSize: SEARCH_PAGE_SIZE,
|
|
455
|
+
pageNumber: 1,
|
|
456
|
+
// every deployment, as the lite list gives, none hidden as a duplicate
|
|
457
|
+
showAll: true,
|
|
458
|
+
...(signal ? { signal } : {}),
|
|
459
|
+
},
|
|
460
|
+
);
|
|
461
|
+
// a 200 carrying an error is no page
|
|
462
|
+
const results = isPlainObject(response) ? response.results : undefined;
|
|
463
|
+
if (!Array.isArray(results)) {
|
|
464
|
+
throw new Error(V1_CUBE_DATA_PRODUCT_SEARCH_ERROR.UNREADABLE_PAGE);
|
|
465
|
+
}
|
|
466
|
+
const answer = results
|
|
467
|
+
.filter(isPlainObject)
|
|
468
|
+
.map((row) => toSearchRowCandidate(row, environmentType))
|
|
469
|
+
.filter(isNonNullable);
|
|
470
|
+
// counted before any row is dropped: a full page, or fewer rows than the matches
|
|
471
|
+
const metadata = (response as PlainObject).metadata;
|
|
472
|
+
const totalCount = isPlainObject(metadata)
|
|
473
|
+
? metadata.total_count
|
|
474
|
+
: undefined;
|
|
475
|
+
if (
|
|
476
|
+
results.length >= SEARCH_PAGE_SIZE ||
|
|
477
|
+
(typeof totalCount === 'number' && totalCount > results.length)
|
|
478
|
+
) {
|
|
479
|
+
this.cutShortAnswers.add(answer);
|
|
480
|
+
}
|
|
481
|
+
return answer;
|
|
482
|
+
} catch (error) {
|
|
483
|
+
if (signal?.aborted) {
|
|
484
|
+
throw error;
|
|
485
|
+
}
|
|
486
|
+
throw new CubeEngineError(
|
|
487
|
+
CubeEngineErrorKind.NETWORK,
|
|
488
|
+
`Cube couldn't search the data products\n${toMessage(error)}`,
|
|
489
|
+
);
|
|
490
|
+
}
|
|
491
|
+
}
|
|
492
|
+
|
|
493
|
+
async search(
|
|
494
|
+
search: {
|
|
495
|
+
text: string;
|
|
496
|
+
environmentType: CubeDataProductEnvironmentType;
|
|
497
|
+
},
|
|
498
|
+
signal?: AbortSignal,
|
|
499
|
+
): Promise<readonly CubeDataProductCandidate[]> {
|
|
500
|
+
if (this.options.marketplaceServerClient) {
|
|
501
|
+
return this.searchMarketplace(
|
|
502
|
+
this.options.marketplaceServerClient,
|
|
503
|
+
search,
|
|
504
|
+
signal,
|
|
505
|
+
);
|
|
506
|
+
}
|
|
507
|
+
const text = search.text.trim().toLowerCase();
|
|
508
|
+
return (await this.listOf(search.environmentType, signal)).filter(
|
|
509
|
+
(candidate) =>
|
|
510
|
+
[candidate.title, candidate.id, candidate.description ?? '']
|
|
511
|
+
.join('\n')
|
|
512
|
+
.toLowerCase()
|
|
513
|
+
.includes(text),
|
|
514
|
+
);
|
|
515
|
+
}
|
|
516
|
+
|
|
517
|
+
/** The product's deployed artifact: the generation file at its path */
|
|
518
|
+
private async readArtifact(
|
|
519
|
+
candidate: CubeDataProductCandidate,
|
|
520
|
+
): Promise<unknown> {
|
|
521
|
+
const project = new StoreProjectData();
|
|
522
|
+
project.groupId = candidate.groupId;
|
|
523
|
+
project.artifactId = candidate.artifactId;
|
|
524
|
+
const files = (
|
|
525
|
+
await this.depotServerClient.getGenerationFilesByType(
|
|
526
|
+
project,
|
|
527
|
+
candidate.versionId,
|
|
528
|
+
DATA_PRODUCT_GENERATION_TYPE,
|
|
529
|
+
candidate.dataProductPath,
|
|
530
|
+
)
|
|
531
|
+
).map((file) => StoredFileGeneration.serialization.fromJson(file));
|
|
532
|
+
const content = files.find(
|
|
533
|
+
(file) => file.path === candidate.dataProductPath,
|
|
534
|
+
)?.file.content;
|
|
535
|
+
if (content === undefined) {
|
|
536
|
+
throw new Error(
|
|
537
|
+
`The data product ${candidate.dataProductPath} has no deployed artifact at ${candidate.groupId}:${candidate.artifactId}:${candidate.versionId}`,
|
|
538
|
+
);
|
|
539
|
+
}
|
|
540
|
+
return JSON.parse(content) as unknown;
|
|
541
|
+
}
|
|
542
|
+
|
|
543
|
+
/** The product's definition at the deployed version */
|
|
544
|
+
private async readDefinition(
|
|
545
|
+
candidate: CubeDataProductCandidate,
|
|
546
|
+
): Promise<unknown> {
|
|
547
|
+
const entity = await this.depotServerClient.getVersionEntity(
|
|
548
|
+
candidate.groupId,
|
|
549
|
+
candidate.artifactId,
|
|
550
|
+
candidate.versionId,
|
|
551
|
+
candidate.dataProductPath,
|
|
552
|
+
);
|
|
553
|
+
return entity.content;
|
|
554
|
+
}
|
|
555
|
+
|
|
556
|
+
describe(
|
|
557
|
+
candidate: CubeDataProductCandidate,
|
|
558
|
+
): Promise<CubeDataProductDescription> {
|
|
559
|
+
const key = descriptionKey(
|
|
560
|
+
candidate.groupId,
|
|
561
|
+
candidate.artifactId,
|
|
562
|
+
candidate.versionId,
|
|
563
|
+
candidate.dataProductPath,
|
|
564
|
+
);
|
|
565
|
+
let description = this.descriptions.get(key);
|
|
566
|
+
if (!description) {
|
|
567
|
+
description = Promise.all([
|
|
568
|
+
this.readArtifact(candidate),
|
|
569
|
+
this.readDefinition(candidate),
|
|
570
|
+
])
|
|
571
|
+
.then(([artifact, definition]) =>
|
|
572
|
+
V1_readCubeDataProductDescription(
|
|
573
|
+
candidate,
|
|
574
|
+
artifact,
|
|
575
|
+
definition,
|
|
576
|
+
this.options.enterpriseStereotype,
|
|
577
|
+
),
|
|
578
|
+
)
|
|
579
|
+
.catch((error: unknown) => {
|
|
580
|
+
this.descriptions.delete(key);
|
|
581
|
+
throw new CubeEngineError(
|
|
582
|
+
CubeEngineErrorKind.NETWORK,
|
|
583
|
+
`Cube couldn't read the data product ${candidate.dataProductPath}\n${toMessage(error)}`,
|
|
584
|
+
);
|
|
585
|
+
});
|
|
586
|
+
this.descriptions.set(key, description);
|
|
587
|
+
}
|
|
588
|
+
return description;
|
|
589
|
+
}
|
|
590
|
+
|
|
591
|
+
async resolveSchemas(
|
|
592
|
+
project: CubeDataProductProject,
|
|
593
|
+
sources: ReadonlyMap<NodeId, CubeAccessPointLocation>,
|
|
594
|
+
options?: { readonly fresh?: boolean | undefined },
|
|
595
|
+
): Promise<Map<NodeId, Schema | CubeEngineError>> {
|
|
596
|
+
if (options?.fresh) {
|
|
597
|
+
// read the products again, not what this visit read
|
|
598
|
+
sources.forEach(({ dataProduct }) =>
|
|
599
|
+
this.descriptions.delete(
|
|
600
|
+
descriptionKey(
|
|
601
|
+
project.groupId,
|
|
602
|
+
project.artifactId,
|
|
603
|
+
project.versionId,
|
|
604
|
+
dataProduct,
|
|
605
|
+
),
|
|
606
|
+
),
|
|
607
|
+
);
|
|
608
|
+
}
|
|
609
|
+
const resolved = new Map<NodeId, Schema | CubeEngineError>();
|
|
610
|
+
await Promise.all(
|
|
611
|
+
[...sources].map(async ([nodeId, location]) => {
|
|
612
|
+
try {
|
|
613
|
+
const description = await this.describe(
|
|
614
|
+
new CubeDataProductCandidate({
|
|
615
|
+
id: location.dataProduct,
|
|
616
|
+
deploymentId: '',
|
|
617
|
+
dataProductPath: location.dataProduct,
|
|
618
|
+
title: location.dataProduct,
|
|
619
|
+
groupId: project.groupId,
|
|
620
|
+
artifactId: project.artifactId,
|
|
621
|
+
versionId: project.versionId,
|
|
622
|
+
environmentType: project.environmentType,
|
|
623
|
+
}),
|
|
624
|
+
);
|
|
625
|
+
const schema = V1_findCubeAccessPointSchema(description, location);
|
|
626
|
+
resolved.set(
|
|
627
|
+
nodeId,
|
|
628
|
+
typeof schema === 'string'
|
|
629
|
+
? new CubeEngineError(CubeEngineErrorKind.COMPILE, schema, nodeId)
|
|
630
|
+
: schema,
|
|
631
|
+
);
|
|
632
|
+
} catch (error) {
|
|
633
|
+
resolved.set(
|
|
634
|
+
nodeId,
|
|
635
|
+
error instanceof CubeEngineError
|
|
636
|
+
? new CubeEngineError(error.kind, error.detail, nodeId)
|
|
637
|
+
: new CubeEngineError(
|
|
638
|
+
CubeEngineErrorKind.NETWORK,
|
|
639
|
+
toMessage(error),
|
|
640
|
+
nodeId,
|
|
641
|
+
),
|
|
642
|
+
);
|
|
643
|
+
}
|
|
644
|
+
}),
|
|
645
|
+
);
|
|
646
|
+
return new Map(
|
|
647
|
+
[...sources.keys()].map((nodeId) => [
|
|
648
|
+
nodeId,
|
|
649
|
+
resolved.get(nodeId) as Schema | CubeEngineError,
|
|
650
|
+
]),
|
|
651
|
+
);
|
|
652
|
+
}
|
|
653
|
+
|
|
654
|
+
/** The product's page in the host's marketplace, as the host builds it; none without one */
|
|
655
|
+
getMarketplaceLink(target: CubeMarketplaceLinkTarget): string | undefined {
|
|
656
|
+
return this.options.marketplaceLink?.(target);
|
|
657
|
+
}
|
|
658
|
+
|
|
659
|
+
/**
|
|
660
|
+
* The viewer's access to each of the product's groups, as the marketplace
|
|
661
|
+
* shows it, from the viewer's contracts, read afresh each time: a group
|
|
662
|
+
* marked open to everyone needs none; otherwise the contract for that
|
|
663
|
+
* group of this deployment furthest along approval. A group with no
|
|
664
|
+
* contract has no access only when the host marks open groups, since it
|
|
665
|
+
* might be one otherwise
|
|
666
|
+
*/
|
|
667
|
+
async getAccess(
|
|
668
|
+
candidate: CubeDataProductCandidate,
|
|
669
|
+
signal?: AbortSignal,
|
|
670
|
+
): Promise<ReadonlyMap<string, CubeAccessPointGroupAccess>> {
|
|
671
|
+
const { getCurrentUser, enterpriseStereotype } = this.options;
|
|
672
|
+
if (!getCurrentUser || !/^\d+$/u.test(candidate.deploymentId)) {
|
|
673
|
+
return new Map();
|
|
674
|
+
}
|
|
675
|
+
const deploymentId = Number(candidate.deploymentId);
|
|
676
|
+
const description = await this.describe(candidate);
|
|
677
|
+
throwIfAborted(signal);
|
|
678
|
+
let rows: unknown;
|
|
679
|
+
try {
|
|
680
|
+
rows = await this.contractServerClient.getContractsForUser(
|
|
681
|
+
getCurrentUser(),
|
|
682
|
+
this.getAccessToken(),
|
|
683
|
+
);
|
|
684
|
+
} catch (error) {
|
|
685
|
+
throw new CubeEngineError(
|
|
686
|
+
CubeEngineErrorKind.NETWORK,
|
|
687
|
+
`Cube couldn't read your data contracts\n${toMessage(error)}`,
|
|
688
|
+
);
|
|
689
|
+
}
|
|
690
|
+
throwIfAborted(signal);
|
|
691
|
+
if (!Array.isArray(rows)) {
|
|
692
|
+
throw new CubeEngineError(
|
|
693
|
+
CubeEngineErrorKind.NETWORK,
|
|
694
|
+
"Cube couldn't read your data contracts\nThe lakehouse's answer isn't a list of contracts",
|
|
695
|
+
);
|
|
696
|
+
}
|
|
697
|
+
// a contract Cube can't read is left out, never failing the others
|
|
698
|
+
const contracts = rows.flatMap(
|
|
699
|
+
(row): V1_LiteDataContractWithUserStatus[] => {
|
|
700
|
+
if (!isPlainObject(row) || !isPlainObject(row.contractResultLite)) {
|
|
701
|
+
return [];
|
|
702
|
+
}
|
|
703
|
+
try {
|
|
704
|
+
return [
|
|
705
|
+
deserialize(V1_liteDataContractWithUserStatusModelSchema([]), row),
|
|
706
|
+
];
|
|
707
|
+
} catch {
|
|
708
|
+
return [];
|
|
709
|
+
}
|
|
710
|
+
},
|
|
711
|
+
);
|
|
712
|
+
const access = new Map<string, CubeAccessPointGroupAccess>();
|
|
713
|
+
description.groups.forEach((group) => {
|
|
714
|
+
if (group.isEnterprise) {
|
|
715
|
+
access.set(group.id, CubeAccessPointGroupAccess.ENTERPRISE);
|
|
716
|
+
return;
|
|
717
|
+
}
|
|
718
|
+
const best = contracts
|
|
719
|
+
.filter(({ contractResultLite: contract }) => {
|
|
720
|
+
return (
|
|
721
|
+
contract.resourceType === V1_ResourceType.ACCESS_POINT_GROUP &&
|
|
722
|
+
contract.accessPointGroup === group.id &&
|
|
723
|
+
contract.resourceId === candidate.id &&
|
|
724
|
+
contract.deploymentId === deploymentId
|
|
725
|
+
);
|
|
726
|
+
})
|
|
727
|
+
.reduce<V1_LiteDataContractWithUserStatus | undefined>(
|
|
728
|
+
(found, contract) =>
|
|
729
|
+
!found ||
|
|
730
|
+
(APPROVAL_STAGE[contract.status] ?? 0) >
|
|
731
|
+
(APPROVAL_STAGE[found.status] ?? 0)
|
|
732
|
+
? contract
|
|
733
|
+
: found,
|
|
734
|
+
undefined,
|
|
735
|
+
);
|
|
736
|
+
if (best) {
|
|
737
|
+
access.set(group.id, toGroupAccess(best.status));
|
|
738
|
+
} else if (enterpriseStereotype) {
|
|
739
|
+
access.set(group.id, CubeAccessPointGroupAccess.NO_ACCESS);
|
|
740
|
+
}
|
|
741
|
+
});
|
|
742
|
+
return access;
|
|
743
|
+
}
|
|
744
|
+
}
|