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