@finos/legend-cube-builder 0.0.3 → 0.0.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +52 -19
- package/docs/adding-an-operation.md +102 -13
- package/docs/hosting.md +82 -4
- package/docs/testing.md +114 -9
- package/lib/__lib__/LegendCubeCommand.d.ts +2 -1
- package/lib/__lib__/LegendCubeCommand.d.ts.map +1 -1
- package/lib/__lib__/LegendCubeCommand.js +5 -0
- package/lib/__lib__/LegendCubeCommand.js.map +1 -1
- package/lib/__lib__/LegendCubeDataProductLabels.d.ts +45 -0
- package/lib/__lib__/LegendCubeDataProductLabels.d.ts.map +1 -0
- package/lib/__lib__/LegendCubeDataProductLabels.js +60 -0
- package/lib/__lib__/LegendCubeDataProductLabels.js.map +1 -0
- package/lib/__lib__/LegendCubeDirectConnectionLabels.d.ts +56 -0
- package/lib/__lib__/LegendCubeDirectConnectionLabels.d.ts.map +1 -0
- package/lib/__lib__/LegendCubeDirectConnectionLabels.js +76 -0
- package/lib/__lib__/LegendCubeDirectConnectionLabels.js.map +1 -0
- package/lib/__lib__/LegendCubeHelpText.d.ts.map +1 -1
- package/lib/__lib__/LegendCubeHelpText.js +12 -2
- package/lib/__lib__/LegendCubeHelpText.js.map +1 -1
- package/lib/__lib__/LegendCubeIngestLabels.d.ts +25 -0
- package/lib/__lib__/LegendCubeIngestLabels.d.ts.map +1 -0
- package/lib/__lib__/LegendCubeIngestLabels.js +29 -0
- package/lib/__lib__/LegendCubeIngestLabels.js.map +1 -0
- package/lib/__lib__/LegendCubeLabels.d.ts +76 -3
- package/lib/__lib__/LegendCubeLabels.d.ts.map +1 -1
- package/lib/__lib__/LegendCubeLabels.js +102 -4
- package/lib/__lib__/LegendCubeLabels.js.map +1 -1
- package/lib/__lib__/LegendCubeProjectLabels.d.ts +22 -0
- package/lib/__lib__/LegendCubeProjectLabels.d.ts.map +1 -0
- package/lib/__lib__/LegendCubeProjectLabels.js +23 -0
- package/lib/__lib__/LegendCubeProjectLabels.js.map +1 -0
- package/lib/__lib__/LegendCubeTesting.d.ts +1 -0
- package/lib/__lib__/LegendCubeTesting.d.ts.map +1 -1
- package/lib/__lib__/LegendCubeTesting.js +1 -0
- package/lib/__lib__/LegendCubeTesting.js.map +1 -1
- package/lib/__test-utils__/CubeCanvasTestUtils.d.ts.map +1 -1
- package/lib/__test-utils__/CubeCanvasTestUtils.js +1 -1
- package/lib/__test-utils__/CubeCanvasTestUtils.js.map +1 -1
- package/lib/__test-utils__/CubeConnectionTestSupport.d.ts +22 -0
- package/lib/__test-utils__/CubeConnectionTestSupport.d.ts.map +1 -0
- package/lib/__test-utils__/CubeConnectionTestSupport.js +30 -0
- package/lib/__test-utils__/CubeConnectionTestSupport.js.map +1 -0
- package/lib/__test-utils__/CubeDirectConnectionFixtures.d.ts +31 -0
- package/lib/__test-utils__/CubeDirectConnectionFixtures.d.ts.map +1 -0
- package/lib/__test-utils__/CubeDirectConnectionFixtures.js +63 -0
- package/lib/__test-utils__/CubeDirectConnectionFixtures.js.map +1 -0
- package/lib/__test-utils__/CubeEngineTestSupport.d.ts +12 -0
- package/lib/__test-utils__/CubeEngineTestSupport.d.ts.map +1 -1
- package/lib/__test-utils__/CubeEngineTestSupport.js +21 -0
- package/lib/__test-utils__/CubeEngineTestSupport.js.map +1 -1
- package/lib/__test-utils__/CubeExpressionTestUtils.d.ts +37 -0
- package/lib/__test-utils__/CubeExpressionTestUtils.d.ts.map +1 -0
- package/lib/__test-utils__/CubeExpressionTestUtils.js +83 -0
- package/lib/__test-utils__/CubeExpressionTestUtils.js.map +1 -0
- package/lib/__test-utils__/CubeOperationsTestUtils.d.ts +25 -0
- package/lib/__test-utils__/CubeOperationsTestUtils.d.ts.map +1 -1
- package/lib/__test-utils__/CubeOperationsTestUtils.js +56 -10
- package/lib/__test-utils__/CubeOperationsTestUtils.js.map +1 -1
- package/lib/__test-utils__/CubePageTestUtils.d.ts +12 -0
- package/lib/__test-utils__/CubePageTestUtils.d.ts.map +1 -1
- package/lib/__test-utils__/CubePageTestUtils.js +25 -1
- package/lib/__test-utils__/CubePageTestUtils.js.map +1 -1
- package/lib/__test-utils__/CubeTestApplication.d.ts +5 -1
- package/lib/__test-utils__/CubeTestApplication.d.ts.map +1 -1
- package/lib/__test-utils__/CubeTestApplication.js +9 -1
- package/lib/__test-utils__/CubeTestApplication.js.map +1 -1
- package/lib/__test-utils__/FakeCubeConnectionExplorer.d.ts +33 -0
- package/lib/__test-utils__/FakeCubeConnectionExplorer.d.ts.map +1 -0
- package/lib/__test-utils__/FakeCubeConnectionExplorer.js +67 -0
- package/lib/__test-utils__/FakeCubeConnectionExplorer.js.map +1 -0
- package/lib/__test-utils__/FakeCubeDataProductCatalog.d.ts +45 -0
- package/lib/__test-utils__/FakeCubeDataProductCatalog.d.ts.map +1 -0
- package/lib/__test-utils__/FakeCubeDataProductCatalog.js +137 -0
- package/lib/__test-utils__/FakeCubeDataProductCatalog.js.map +1 -0
- package/lib/__test-utils__/FakeCubeEngine.d.ts +2 -0
- package/lib/__test-utils__/FakeCubeEngine.d.ts.map +1 -1
- package/lib/__test-utils__/FakeCubeEngine.js +14 -1
- package/lib/__test-utils__/FakeCubeEngine.js.map +1 -1
- package/lib/__test-utils__/FakeCubeIngestCatalog.d.ts +35 -0
- package/lib/__test-utils__/FakeCubeIngestCatalog.d.ts.map +1 -0
- package/lib/__test-utils__/FakeCubeIngestCatalog.js +107 -0
- package/lib/__test-utils__/FakeCubeIngestCatalog.js.map +1 -0
- package/lib/__test-utils__/FakeCubeProjectCatalog.d.ts +30 -0
- package/lib/__test-utils__/FakeCubeProjectCatalog.d.ts.map +1 -0
- package/lib/__test-utils__/FakeCubeProjectCatalog.js +64 -0
- package/lib/__test-utils__/FakeCubeProjectCatalog.js.map +1 -0
- package/lib/components/CubeAddItems.d.ts +35 -0
- package/lib/components/CubeAddItems.d.ts.map +1 -0
- package/lib/components/CubeAddItems.js +82 -0
- package/lib/components/CubeAddItems.js.map +1 -0
- package/lib/components/CubeEditor.d.ts +5 -1
- package/lib/components/CubeEditor.d.ts.map +1 -1
- package/lib/components/CubeEditor.js +33 -13
- package/lib/components/CubeEditor.js.map +1 -1
- package/lib/components/CubeEntrySourceBanner.d.ts +23 -0
- package/lib/components/CubeEntrySourceBanner.d.ts.map +1 -0
- package/lib/components/CubeEntrySourceBanner.js +32 -0
- package/lib/components/CubeEntrySourceBanner.js.map +1 -0
- package/lib/components/CubeNodeIcon.d.ts.map +1 -1
- package/lib/components/CubeNodeIcon.js +8 -1
- package/lib/components/CubeNodeIcon.js.map +1 -1
- package/lib/components/CubeSchemaColumnsTable.d.ts +21 -0
- package/lib/components/CubeSchemaColumnsTable.d.ts.map +1 -0
- package/lib/components/CubeSchemaColumnsTable.js +6 -0
- package/lib/components/CubeSchemaColumnsTable.js.map +1 -0
- package/lib/components/canvas/CubeCanvas.d.ts +4 -3
- package/lib/components/canvas/CubeCanvas.d.ts.map +1 -1
- package/lib/components/canvas/CubeCanvas.js +31 -12
- package/lib/components/canvas/CubeCanvas.js.map +1 -1
- package/lib/components/canvas/CubeCanvasContextMenu.d.ts +8 -4
- package/lib/components/canvas/CubeCanvasContextMenu.d.ts.map +1 -1
- package/lib/components/canvas/CubeCanvasContextMenu.js +19 -9
- package/lib/components/canvas/CubeCanvasContextMenu.js.map +1 -1
- package/lib/components/canvas/CubeCanvasDnd.d.ts +7 -5
- package/lib/components/canvas/CubeCanvasDnd.d.ts.map +1 -1
- package/lib/components/canvas/CubeCanvasDnd.js +14 -9
- package/lib/components/canvas/CubeCanvasDnd.js.map +1 -1
- package/lib/components/canvas/CubeCanvasElements.d.ts.map +1 -1
- package/lib/components/canvas/CubeCanvasElements.js +6 -3
- package/lib/components/canvas/CubeCanvasElements.js.map +1 -1
- package/lib/components/canvas/CubeCanvasNode.d.ts.map +1 -1
- package/lib/components/canvas/CubeCanvasNode.js +30 -20
- package/lib/components/canvas/CubeCanvasNode.js.map +1 -1
- package/lib/components/canvas/CubeCanvasNodeFocus.d.ts +22 -0
- package/lib/components/canvas/CubeCanvasNodeFocus.d.ts.map +1 -0
- package/lib/components/canvas/CubeCanvasNodeFocus.js +31 -0
- package/lib/components/canvas/CubeCanvasNodeFocus.js.map +1 -0
- package/lib/components/canvas/CubeNodeEditorAnchor.d.ts +44 -0
- package/lib/components/canvas/CubeNodeEditorAnchor.d.ts.map +1 -0
- package/lib/components/canvas/CubeNodeEditorAnchor.js +51 -0
- package/lib/components/canvas/CubeNodeEditorAnchor.js.map +1 -0
- package/lib/components/editors/CubeAggregationRowEditor.d.ts +48 -0
- package/lib/components/editors/CubeAggregationRowEditor.d.ts.map +1 -0
- package/lib/components/editors/CubeAggregationRowEditor.js +72 -0
- package/lib/components/editors/CubeAggregationRowEditor.js.map +1 -0
- package/lib/components/editors/CubeColumnChecklist.d.ts +42 -0
- package/lib/components/editors/CubeColumnChecklist.d.ts.map +1 -0
- package/lib/components/editors/CubeColumnChecklist.js +41 -0
- package/lib/components/editors/CubeColumnChecklist.js.map +1 -0
- package/lib/components/editors/CubeConcatEditor.d.ts +33 -0
- package/lib/components/editors/CubeConcatEditor.d.ts.map +1 -0
- package/lib/components/editors/CubeConcatEditor.js +147 -0
- package/lib/components/editors/CubeConcatEditor.js.map +1 -0
- package/lib/components/editors/CubeDataProductSourceEditor.d.ts +25 -0
- package/lib/components/editors/CubeDataProductSourceEditor.d.ts.map +1 -0
- package/lib/components/editors/CubeDataProductSourceEditor.js +53 -0
- package/lib/components/editors/CubeDataProductSourceEditor.js.map +1 -0
- package/lib/components/editors/CubeDifferenceEditor.d.ts +25 -0
- package/lib/components/editors/CubeDifferenceEditor.d.ts.map +1 -0
- package/lib/components/editors/CubeDifferenceEditor.js +29 -0
- package/lib/components/editors/CubeDifferenceEditor.js.map +1 -0
- package/lib/components/editors/CubeExtendEditor.d.ts +25 -0
- package/lib/components/editors/CubeExtendEditor.d.ts.map +1 -0
- package/lib/components/editors/CubeExtendEditor.js +86 -0
- package/lib/components/editors/CubeExtendEditor.js.map +1 -0
- package/lib/components/editors/CubeFilterEditor.d.ts.map +1 -1
- package/lib/components/editors/CubeFilterEditor.js +3 -3
- package/lib/components/editors/CubeFilterEditor.js.map +1 -1
- package/lib/components/editors/CubeGroupEditor.d.ts +28 -0
- package/lib/components/editors/CubeGroupEditor.d.ts.map +1 -0
- package/lib/components/editors/CubeGroupEditor.js +70 -0
- package/lib/components/editors/CubeGroupEditor.js.map +1 -0
- package/lib/components/editors/CubeIngestSourceEditor.d.ts +26 -0
- package/lib/components/editors/CubeIngestSourceEditor.d.ts.map +1 -0
- package/lib/components/editors/CubeIngestSourceEditor.js +47 -0
- package/lib/components/editors/CubeIngestSourceEditor.js.map +1 -0
- package/lib/components/editors/CubeJoinEditor.d.ts +2 -4
- package/lib/components/editors/CubeJoinEditor.d.ts.map +1 -1
- package/lib/components/editors/CubeJoinEditor.js +7 -37
- package/lib/components/editors/CubeJoinEditor.js.map +1 -1
- package/lib/components/editors/CubeJoinKeyRows.d.ts +34 -0
- package/lib/components/editors/CubeJoinKeyRows.d.ts.map +1 -0
- package/lib/components/editors/CubeJoinKeyRows.js +65 -0
- package/lib/components/editors/CubeJoinKeyRows.js.map +1 -0
- package/lib/components/editors/CubeNodeEditorPanel.d.ts +7 -5
- package/lib/components/editors/CubeNodeEditorPanel.d.ts.map +1 -1
- package/lib/components/editors/CubeNodeEditorPanel.js +51 -13
- package/lib/components/editors/CubeNodeEditorPanel.js.map +1 -1
- package/lib/components/editors/CubeNodeEditorPopper.d.ts +40 -0
- package/lib/components/editors/CubeNodeEditorPopper.d.ts.map +1 -0
- package/lib/components/editors/CubeNodeEditorPopper.js +125 -0
- package/lib/components/editors/CubeNodeEditorPopper.js.map +1 -0
- package/lib/components/editors/CubeNodeEditorRegistry.d.ts.map +1 -1
- package/lib/components/editors/CubeNodeEditorRegistry.js +15 -1
- package/lib/components/editors/CubeNodeEditorRegistry.js.map +1 -1
- package/lib/components/editors/CubePartitionEditor.d.ts +30 -0
- package/lib/components/editors/CubePartitionEditor.d.ts.map +1 -0
- package/lib/components/editors/CubePartitionEditor.js +93 -0
- package/lib/components/editors/CubePartitionEditor.js.map +1 -0
- package/lib/components/editors/CubeRenameEditor.d.ts.map +1 -1
- package/lib/components/editors/CubeRenameEditor.js +6 -4
- package/lib/components/editors/CubeRenameEditor.js.map +1 -1
- package/lib/components/editors/CubeRestrictEditor.js +1 -1
- package/lib/components/editors/CubeRestrictEditor.js.map +1 -1
- package/lib/components/editors/CubeSortEditor.d.ts.map +1 -1
- package/lib/components/editors/CubeSortEditor.js +10 -37
- package/lib/components/editors/CubeSortEditor.js.map +1 -1
- package/lib/components/editors/CubeSortRowEditor.d.ts +47 -0
- package/lib/components/editors/CubeSortRowEditor.d.ts.map +1 -0
- package/lib/components/editors/CubeSortRowEditor.js +62 -0
- package/lib/components/editors/CubeSortRowEditor.js.map +1 -0
- package/lib/components/editors/CubeSourceEditor.d.ts.map +1 -1
- package/lib/components/editors/CubeSourceEditor.js +18 -5
- package/lib/components/editors/CubeSourceEditor.js.map +1 -1
- package/lib/components/editors/CubeWarehouseControl.d.ts +30 -0
- package/lib/components/editors/CubeWarehouseControl.d.ts.map +1 -0
- package/lib/components/editors/CubeWarehouseControl.js +44 -0
- package/lib/components/editors/CubeWarehouseControl.js.map +1 -0
- package/lib/components/editors/useCubeNodeEditorDismiss.d.ts +31 -0
- package/lib/components/editors/useCubeNodeEditorDismiss.d.ts.map +1 -0
- package/lib/components/editors/useCubeNodeEditorDismiss.js +83 -0
- package/lib/components/editors/useCubeNodeEditorDismiss.js.map +1 -0
- package/lib/components/examples/CubeExamplesDialog.d.ts +26 -0
- package/lib/components/examples/CubeExamplesDialog.d.ts.map +1 -0
- package/lib/components/examples/CubeExamplesDialog.js +68 -0
- package/lib/components/examples/CubeExamplesDialog.js.map +1 -0
- package/lib/components/grid/CubeGridRegion.d.ts.map +1 -1
- package/lib/components/grid/CubeGridRegion.js +19 -8
- package/lib/components/grid/CubeGridRegion.js.map +1 -1
- package/lib/components/grid/CubeGridValues.d.ts +16 -0
- package/lib/components/grid/CubeGridValues.d.ts.map +1 -1
- package/lib/components/grid/CubeGridValues.js +44 -0
- package/lib/components/grid/CubeGridValues.js.map +1 -1
- package/lib/components/grid/CubeResultGrid.d.ts.map +1 -1
- package/lib/components/grid/CubeResultGrid.js +14 -2
- package/lib/components/grid/CubeResultGrid.js.map +1 -1
- package/lib/components/palette/CubePalette.d.ts.map +1 -1
- package/lib/components/palette/CubePalette.js +23 -12
- package/lib/components/palette/CubePalette.js.map +1 -1
- package/lib/components/source-picker/CubeDataProductTab.d.ts +27 -0
- package/lib/components/source-picker/CubeDataProductTab.d.ts.map +1 -0
- package/lib/components/source-picker/CubeDataProductTab.js +102 -0
- package/lib/components/source-picker/CubeDataProductTab.js.map +1 -0
- package/lib/components/source-picker/CubeDirectConnectionTab.d.ts +27 -0
- package/lib/components/source-picker/CubeDirectConnectionTab.d.ts.map +1 -0
- package/lib/components/source-picker/CubeDirectConnectionTab.js +87 -0
- package/lib/components/source-picker/CubeDirectConnectionTab.js.map +1 -0
- package/lib/components/source-picker/CubeIngestTab.d.ts +28 -0
- package/lib/components/source-picker/CubeIngestTab.d.ts.map +1 -0
- package/lib/components/source-picker/CubeIngestTab.js +66 -0
- package/lib/components/source-picker/CubeIngestTab.js.map +1 -0
- package/lib/components/source-picker/CubeInlineModelTab.d.ts +37 -0
- package/lib/components/source-picker/CubeInlineModelTab.d.ts.map +1 -0
- package/lib/components/source-picker/CubeInlineModelTab.js +71 -0
- package/lib/components/source-picker/CubeInlineModelTab.js.map +1 -0
- package/lib/components/source-picker/CubePickerStep.d.ts +27 -0
- package/lib/components/source-picker/CubePickerStep.d.ts.map +1 -0
- package/lib/components/source-picker/CubePickerStep.js +23 -0
- package/lib/components/source-picker/CubePickerStep.js.map +1 -0
- package/lib/components/source-picker/CubeProjectTab.d.ts +27 -0
- package/lib/components/source-picker/CubeProjectTab.d.ts.map +1 -0
- package/lib/components/source-picker/CubeProjectTab.js +50 -0
- package/lib/components/source-picker/CubeProjectTab.js.map +1 -0
- package/lib/components/source-picker/CubeSourcePicker.d.ts +6 -0
- package/lib/components/source-picker/CubeSourcePicker.d.ts.map +1 -1
- package/lib/components/source-picker/CubeSourcePicker.js +20 -58
- package/lib/components/source-picker/CubeSourcePicker.js.map +1 -1
- package/lib/components/spec-transfer/CubeSpecTransferDialog.js +1 -1
- package/lib/components/spec-transfer/CubeSpecTransferDialog.js.map +1 -1
- package/lib/graph-manager/CubeConnectionExplorer.d.ts +90 -0
- package/lib/graph-manager/CubeConnectionExplorer.d.ts.map +1 -0
- package/lib/graph-manager/CubeConnectionExplorer.js +34 -0
- package/lib/graph-manager/CubeConnectionExplorer.js.map +1 -0
- package/lib/graph-manager/CubeDataProduct.d.ts +66 -0
- package/lib/graph-manager/CubeDataProduct.d.ts.map +1 -0
- package/lib/graph-manager/CubeDataProduct.js +102 -0
- package/lib/graph-manager/CubeDataProduct.js.map +1 -0
- package/lib/graph-manager/CubeDataProductCatalog.d.ts +167 -0
- package/lib/graph-manager/CubeDataProductCatalog.d.ts.map +1 -0
- package/lib/graph-manager/CubeDataProductCatalog.js +116 -0
- package/lib/graph-manager/CubeDataProductCatalog.js.map +1 -0
- package/lib/graph-manager/CubeDirectConnection.d.ts +38 -0
- package/lib/graph-manager/CubeDirectConnection.d.ts.map +1 -0
- package/lib/graph-manager/CubeDirectConnection.js +48 -0
- package/lib/graph-manager/CubeDirectConnection.js.map +1 -0
- package/lib/graph-manager/CubeEngine.d.ts +37 -2
- package/lib/graph-manager/CubeEngine.d.ts.map +1 -1
- package/lib/graph-manager/CubeEngine.js +4 -1
- package/lib/graph-manager/CubeEngine.js.map +1 -1
- package/lib/graph-manager/CubeIngest.d.ts +50 -0
- package/lib/graph-manager/CubeIngest.d.ts.map +1 -0
- package/lib/graph-manager/CubeIngest.js +88 -0
- package/lib/graph-manager/CubeIngest.js.map +1 -0
- package/lib/graph-manager/CubeIngestCatalog.d.ts +116 -0
- package/lib/graph-manager/CubeIngestCatalog.d.ts.map +1 -0
- package/lib/graph-manager/CubeIngestCatalog.js +80 -0
- package/lib/graph-manager/CubeIngestCatalog.js.map +1 -0
- package/lib/graph-manager/CubeLakehouseEnvironment.d.ts +26 -0
- package/lib/graph-manager/CubeLakehouseEnvironment.d.ts.map +1 -0
- package/lib/graph-manager/CubeLakehouseEnvironment.js +17 -0
- package/lib/graph-manager/CubeLakehouseEnvironment.js.map +1 -0
- package/lib/graph-manager/CubeProject.d.ts +41 -0
- package/lib/graph-manager/CubeProject.d.ts.map +1 -0
- package/lib/graph-manager/CubeProject.js +84 -0
- package/lib/graph-manager/CubeProject.js.map +1 -0
- package/lib/graph-manager/CubeProjectCatalog.d.ts +35 -0
- package/lib/graph-manager/CubeProjectCatalog.d.ts.map +1 -0
- package/lib/graph-manager/CubeProjectCatalog.js +17 -0
- package/lib/graph-manager/CubeProjectCatalog.js.map +1 -0
- package/lib/graph-manager/protocol/pure/CubeEngineBuilder.d.ts +63 -1
- package/lib/graph-manager/protocol/pure/CubeEngineBuilder.d.ts.map +1 -1
- package/lib/graph-manager/protocol/pure/CubeEngineBuilder.js +50 -1
- package/lib/graph-manager/protocol/pure/CubeEngineBuilder.js.map +1 -1
- package/lib/graph-manager/protocol/pure/v1/V1_CubeDataProductArtifact.d.ts +44 -0
- package/lib/graph-manager/protocol/pure/v1/V1_CubeDataProductArtifact.d.ts.map +1 -0
- package/lib/graph-manager/protocol/pure/v1/V1_CubeDataProductArtifact.js +192 -0
- package/lib/graph-manager/protocol/pure/v1/V1_CubeDataProductArtifact.js.map +1 -0
- package/lib/graph-manager/protocol/pure/v1/V1_CubeDataProductModel.d.ts +29 -0
- package/lib/graph-manager/protocol/pure/v1/V1_CubeDataProductModel.d.ts.map +1 -0
- package/lib/graph-manager/protocol/pure/v1/V1_CubeDataProductModel.js +84 -0
- package/lib/graph-manager/protocol/pure/v1/V1_CubeDataProductModel.js.map +1 -0
- package/lib/graph-manager/protocol/pure/v1/V1_CubeDirectConnection.d.ts +41 -0
- package/lib/graph-manager/protocol/pure/v1/V1_CubeDirectConnection.d.ts.map +1 -0
- package/lib/graph-manager/protocol/pure/v1/V1_CubeDirectConnection.js +246 -0
- package/lib/graph-manager/protocol/pure/v1/V1_CubeDirectConnection.js.map +1 -0
- package/lib/graph-manager/protocol/pure/v1/V1_CubeDirectModel.d.ts +43 -0
- package/lib/graph-manager/protocol/pure/v1/V1_CubeDirectModel.d.ts.map +1 -0
- package/lib/graph-manager/protocol/pure/v1/V1_CubeDirectModel.js +112 -0
- package/lib/graph-manager/protocol/pure/v1/V1_CubeDirectModel.js.map +1 -0
- package/lib/graph-manager/protocol/pure/v1/V1_CubeEngineErrors.d.ts.map +1 -1
- package/lib/graph-manager/protocol/pure/v1/V1_CubeEngineErrors.js +30 -4
- package/lib/graph-manager/protocol/pure/v1/V1_CubeEngineErrors.js.map +1 -1
- package/lib/graph-manager/protocol/pure/v1/V1_CubeExpression.d.ts +23 -0
- package/lib/graph-manager/protocol/pure/v1/V1_CubeExpression.d.ts.map +1 -0
- package/lib/graph-manager/protocol/pure/v1/V1_CubeExpression.js +68 -0
- package/lib/graph-manager/protocol/pure/v1/V1_CubeExpression.js.map +1 -0
- package/lib/graph-manager/protocol/pure/v1/V1_CubeIngestDefinition.d.ts +30 -0
- package/lib/graph-manager/protocol/pure/v1/V1_CubeIngestDefinition.d.ts.map +1 -0
- package/lib/graph-manager/protocol/pure/v1/V1_CubeIngestDefinition.js +140 -0
- package/lib/graph-manager/protocol/pure/v1/V1_CubeIngestDefinition.js.map +1 -0
- package/lib/graph-manager/protocol/pure/v1/V1_CubeIngestModel.d.ts +62 -0
- package/lib/graph-manager/protocol/pure/v1/V1_CubeIngestModel.d.ts.map +1 -0
- package/lib/graph-manager/protocol/pure/v1/V1_CubeIngestModel.js +119 -0
- package/lib/graph-manager/protocol/pure/v1/V1_CubeIngestModel.js.map +1 -0
- package/lib/graph-manager/protocol/pure/v1/V1_CubeLakehouseEnvironmentResolver.d.ts +33 -0
- package/lib/graph-manager/protocol/pure/v1/V1_CubeLakehouseEnvironmentResolver.d.ts.map +1 -0
- package/lib/graph-manager/protocol/pure/v1/V1_CubeLakehouseEnvironmentResolver.js +94 -0
- package/lib/graph-manager/protocol/pure/v1/V1_CubeLakehouseEnvironmentResolver.js.map +1 -0
- package/lib/graph-manager/protocol/pure/v1/V1_CubeLambdaSerializer.d.ts.map +1 -1
- package/lib/graph-manager/protocol/pure/v1/V1_CubeLambdaSerializer.js +63 -4
- package/lib/graph-manager/protocol/pure/v1/V1_CubeLambdaSerializer.js.map +1 -1
- package/lib/graph-manager/protocol/pure/v1/V1_CubeSchemaExploration.d.ts +67 -0
- package/lib/graph-manager/protocol/pure/v1/V1_CubeSchemaExploration.d.ts.map +1 -0
- package/lib/graph-manager/protocol/pure/v1/V1_CubeSchemaExploration.js +238 -0
- package/lib/graph-manager/protocol/pure/v1/V1_CubeSchemaExploration.js.map +1 -0
- package/lib/graph-manager/protocol/pure/v1/V1_LegendCubeConnectionExplorer.d.ts +34 -0
- package/lib/graph-manager/protocol/pure/v1/V1_LegendCubeConnectionExplorer.d.ts.map +1 -0
- package/lib/graph-manager/protocol/pure/v1/V1_LegendCubeConnectionExplorer.js +64 -0
- package/lib/graph-manager/protocol/pure/v1/V1_LegendCubeConnectionExplorer.js.map +1 -0
- package/lib/graph-manager/protocol/pure/v1/V1_LegendCubeDataProductCatalog.d.ts +104 -0
- package/lib/graph-manager/protocol/pure/v1/V1_LegendCubeDataProductCatalog.d.ts.map +1 -0
- package/lib/graph-manager/protocol/pure/v1/V1_LegendCubeDataProductCatalog.js +484 -0
- package/lib/graph-manager/protocol/pure/v1/V1_LegendCubeDataProductCatalog.js.map +1 -0
- package/lib/graph-manager/protocol/pure/v1/V1_LegendCubeEngine.d.ts +97 -3
- package/lib/graph-manager/protocol/pure/v1/V1_LegendCubeEngine.d.ts.map +1 -1
- package/lib/graph-manager/protocol/pure/v1/V1_LegendCubeEngine.js +585 -20
- package/lib/graph-manager/protocol/pure/v1/V1_LegendCubeEngine.js.map +1 -1
- package/lib/graph-manager/protocol/pure/v1/V1_LegendCubeIngestCatalog.d.ts +69 -0
- package/lib/graph-manager/protocol/pure/v1/V1_LegendCubeIngestCatalog.d.ts.map +1 -0
- package/lib/graph-manager/protocol/pure/v1/V1_LegendCubeIngestCatalog.js +270 -0
- package/lib/graph-manager/protocol/pure/v1/V1_LegendCubeIngestCatalog.js.map +1 -0
- package/lib/graph-manager/protocol/pure/v1/V1_LegendCubeProjectCatalog.d.ts +35 -0
- package/lib/graph-manager/protocol/pure/v1/V1_LegendCubeProjectCatalog.d.ts.map +1 -0
- package/lib/graph-manager/protocol/pure/v1/V1_LegendCubeProjectCatalog.js +91 -0
- package/lib/graph-manager/protocol/pure/v1/V1_LegendCubeProjectCatalog.js.map +1 -0
- package/lib/graph-manager/protocol/pure/v1/__test-utils__/V1_CubeConnectionExplorerTestUtils.d.ts +25 -0
- package/lib/graph-manager/protocol/pure/v1/__test-utils__/V1_CubeConnectionExplorerTestUtils.d.ts.map +1 -0
- package/lib/graph-manager/protocol/pure/v1/__test-utils__/V1_CubeConnectionExplorerTestUtils.js +47 -0
- package/lib/graph-manager/protocol/pure/v1/__test-utils__/V1_CubeConnectionExplorerTestUtils.js.map +1 -0
- package/lib/graph-manager/protocol/pure/v1/__test-utils__/V1_CubeDataProductFixtures.d.ts +28 -0
- package/lib/graph-manager/protocol/pure/v1/__test-utils__/V1_CubeDataProductFixtures.d.ts.map +1 -0
- package/lib/graph-manager/protocol/pure/v1/__test-utils__/V1_CubeDataProductFixtures.js +310 -0
- package/lib/graph-manager/protocol/pure/v1/__test-utils__/V1_CubeDataProductFixtures.js.map +1 -0
- package/lib/graph-manager/protocol/pure/v1/__test-utils__/V1_CubeDataProductSearchFixtures.d.ts +33 -0
- package/lib/graph-manager/protocol/pure/v1/__test-utils__/V1_CubeDataProductSearchFixtures.d.ts.map +1 -0
- package/lib/graph-manager/protocol/pure/v1/__test-utils__/V1_CubeDataProductSearchFixtures.js +188 -0
- package/lib/graph-manager/protocol/pure/v1/__test-utils__/V1_CubeDataProductSearchFixtures.js.map +1 -0
- package/lib/graph-manager/protocol/pure/v1/__test-utils__/V1_CubeEngineTestUtils.d.ts +1 -1
- package/lib/graph-manager/protocol/pure/v1/__test-utils__/V1_CubeEngineTestUtils.d.ts.map +1 -1
- package/lib/graph-manager/protocol/pure/v1/__test-utils__/V1_CubeEngineTestUtils.js +27 -1
- package/lib/graph-manager/protocol/pure/v1/__test-utils__/V1_CubeEngineTestUtils.js.map +1 -1
- package/lib/index.css +2 -2
- package/lib/index.css.map +1 -1
- package/lib/index.d.ts +11 -1
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +10 -1
- package/lib/index.js.map +1 -1
- package/lib/stores/CubeAddPlacement.d.ts +32 -0
- package/lib/stores/CubeAddPlacement.d.ts.map +1 -0
- package/lib/stores/CubeAddPlacement.js +40 -0
- package/lib/stores/CubeAddPlacement.js.map +1 -0
- package/lib/stores/CubeDataProductRecheck.d.ts +27 -0
- package/lib/stores/CubeDataProductRecheck.d.ts.map +1 -0
- package/lib/stores/CubeDataProductRecheck.js +54 -0
- package/lib/stores/CubeDataProductRecheck.js.map +1 -0
- package/lib/stores/CubeDataProductRuntimeState.d.ts +88 -0
- package/lib/stores/CubeDataProductRuntimeState.d.ts.map +1 -0
- package/lib/stores/CubeDataProductRuntimeState.js +190 -0
- package/lib/stores/CubeDataProductRuntimeState.js.map +1 -0
- package/lib/stores/CubeDataProductWarehouse.d.ts +19 -0
- package/lib/stores/CubeDataProductWarehouse.d.ts.map +1 -0
- package/lib/stores/CubeDataProductWarehouse.js +25 -0
- package/lib/stores/CubeDataProductWarehouse.js.map +1 -0
- package/lib/stores/CubeEditorState.d.ts +100 -16
- package/lib/stores/CubeEditorState.d.ts.map +1 -1
- package/lib/stores/CubeEditorState.js +347 -47
- package/lib/stores/CubeEditorState.js.map +1 -1
- package/lib/stores/CubeEntrySource.d.ts +78 -0
- package/lib/stores/CubeEntrySource.d.ts.map +1 -0
- package/lib/stores/CubeEntrySource.js +200 -0
- package/lib/stores/CubeEntrySource.js.map +1 -0
- package/lib/stores/CubeExamples.d.ts +43 -0
- package/lib/stores/CubeExamples.d.ts.map +1 -0
- package/lib/stores/CubeExamples.js +296 -0
- package/lib/stores/CubeExamples.js.map +1 -0
- package/lib/stores/CubeExamplesState.d.ts +45 -0
- package/lib/stores/CubeExamplesState.d.ts.map +1 -0
- package/lib/stores/CubeExamplesState.js +81 -0
- package/lib/stores/CubeExamplesState.js.map +1 -0
- package/lib/stores/CubeExecutionState.d.ts +6 -2
- package/lib/stores/CubeExecutionState.d.ts.map +1 -1
- package/lib/stores/CubeExecutionState.js +15 -5
- package/lib/stores/CubeExecutionState.js.map +1 -1
- package/lib/stores/CubeExtendTyping.d.ts +72 -0
- package/lib/stores/CubeExtendTyping.d.ts.map +1 -0
- package/lib/stores/CubeExtendTyping.js +176 -0
- package/lib/stores/CubeExtendTyping.js.map +1 -0
- package/lib/stores/CubeGridQuickActions.d.ts +14 -6
- package/lib/stores/CubeGridQuickActions.d.ts.map +1 -1
- package/lib/stores/CubeGridQuickActions.js +53 -15
- package/lib/stores/CubeGridQuickActions.js.map +1 -1
- package/lib/stores/CubeHost.d.ts +32 -1
- package/lib/stores/CubeHost.d.ts.map +1 -1
- package/lib/stores/CubeHost.js +21 -1
- package/lib/stores/CubeHost.js.map +1 -1
- package/lib/stores/CubeIngestRecheck.d.ts +26 -0
- package/lib/stores/CubeIngestRecheck.d.ts.map +1 -0
- package/lib/stores/CubeIngestRecheck.js +53 -0
- package/lib/stores/CubeIngestRecheck.js.map +1 -0
- package/lib/stores/CubeNodeEditorState.d.ts +101 -5
- package/lib/stores/CubeNodeEditorState.d.ts.map +1 -1
- package/lib/stores/CubeNodeEditorState.js +221 -10
- package/lib/stores/CubeNodeEditorState.js.map +1 -1
- package/lib/stores/CubeShowPureState.d.ts +5 -2
- package/lib/stores/CubeShowPureState.d.ts.map +1 -1
- package/lib/stores/CubeShowPureState.js +7 -4
- package/lib/stores/CubeShowPureState.js.map +1 -1
- package/lib/stores/CubeSourcePickerState.d.ts +54 -65
- package/lib/stores/CubeSourcePickerState.d.ts.map +1 -1
- package/lib/stores/CubeSourcePickerState.js +155 -276
- package/lib/stores/CubeSourcePickerState.js.map +1 -1
- package/lib/stores/CubeSpecTransferState.d.ts +2 -2
- package/lib/stores/CubeSpecTransferState.js +2 -2
- package/lib/stores/LocalModelCatalog.d.ts +2 -0
- package/lib/stores/LocalModelCatalog.d.ts.map +1 -1
- package/lib/stores/LocalModelCatalog.js +17 -3
- package/lib/stores/LocalModelCatalog.js.map +1 -1
- package/lib/stores/editors/CubeAggregationRows.d.ts +80 -0
- package/lib/stores/editors/CubeAggregationRows.d.ts.map +1 -0
- package/lib/stores/editors/CubeAggregationRows.js +164 -0
- package/lib/stores/editors/CubeAggregationRows.js.map +1 -0
- package/lib/stores/editors/CubeConcatDraft.d.ts +30 -0
- package/lib/stores/editors/CubeConcatDraft.d.ts.map +1 -0
- package/lib/stores/editors/CubeConcatDraft.js +44 -0
- package/lib/stores/editors/CubeConcatDraft.js.map +1 -0
- package/lib/stores/editors/CubeDifferenceDraft.d.ts +49 -0
- package/lib/stores/editors/CubeDifferenceDraft.d.ts.map +1 -0
- package/lib/stores/editors/CubeDifferenceDraft.js +111 -0
- package/lib/stores/editors/CubeDifferenceDraft.js.map +1 -0
- package/lib/stores/editors/CubeExtendDraft.d.ts +110 -0
- package/lib/stores/editors/CubeExtendDraft.d.ts.map +1 -0
- package/lib/stores/editors/CubeExtendDraft.js +359 -0
- package/lib/stores/editors/CubeExtendDraft.js.map +1 -0
- package/lib/stores/editors/CubeGroupDraft.d.ts +61 -0
- package/lib/stores/editors/CubeGroupDraft.d.ts.map +1 -0
- package/lib/stores/editors/CubeGroupDraft.js +106 -0
- package/lib/stores/editors/CubeGroupDraft.js.map +1 -0
- package/lib/stores/editors/CubeJoinDraft.d.ts +9 -10
- package/lib/stores/editors/CubeJoinDraft.d.ts.map +1 -1
- package/lib/stores/editors/CubeJoinDraft.js +92 -21
- package/lib/stores/editors/CubeJoinDraft.js.map +1 -1
- package/lib/stores/editors/CubeJoinKeyPairs.d.ts +38 -0
- package/lib/stores/editors/CubeJoinKeyPairs.d.ts.map +1 -0
- package/lib/stores/editors/CubeJoinKeyPairs.js +33 -0
- package/lib/stores/editors/CubeJoinKeyPairs.js.map +1 -0
- package/lib/stores/editors/CubeNodeDraft.d.ts +20 -6
- package/lib/stores/editors/CubeNodeDraft.d.ts.map +1 -1
- package/lib/stores/editors/CubeNodeDraft.js +23 -5
- package/lib/stores/editors/CubeNodeDraft.js.map +1 -1
- package/lib/stores/editors/CubeNodeDraftRegistry.d.ts.map +1 -1
- package/lib/stores/editors/CubeNodeDraftRegistry.js +20 -1
- package/lib/stores/editors/CubeNodeDraftRegistry.js.map +1 -1
- package/lib/stores/editors/CubePartitionDraft.d.ts +70 -0
- package/lib/stores/editors/CubePartitionDraft.d.ts.map +1 -0
- package/lib/stores/editors/CubePartitionDraft.js +154 -0
- package/lib/stores/editors/CubePartitionDraft.js.map +1 -0
- package/lib/stores/editors/CubeSortDraft.d.ts +2 -10
- package/lib/stores/editors/CubeSortDraft.d.ts.map +1 -1
- package/lib/stores/editors/CubeSortDraft.js +9 -35
- package/lib/stores/editors/CubeSortDraft.js.map +1 -1
- package/lib/stores/editors/CubeSortRows.d.ts +34 -0
- package/lib/stores/editors/CubeSortRows.d.ts.map +1 -0
- package/lib/stores/editors/CubeSortRows.js +50 -0
- package/lib/stores/editors/CubeSortRows.js.map +1 -0
- package/lib/stores/fixtures/CubeNorthwindModel.d.ts +7 -0
- package/lib/stores/fixtures/CubeNorthwindModel.d.ts.map +1 -1
- package/lib/stores/fixtures/CubeNorthwindModel.js +99 -87
- package/lib/stores/fixtures/CubeNorthwindModel.js.map +1 -1
- package/lib/stores/fixtures/CubeSampleSql.d.ts +34 -0
- package/lib/stores/fixtures/CubeSampleSql.d.ts.map +1 -0
- package/lib/stores/fixtures/CubeSampleSql.js +64 -0
- package/lib/stores/fixtures/CubeSampleSql.js.map +1 -0
- package/lib/stores/fixtures/CubeSportsModel.d.ts +27 -0
- package/lib/stores/fixtures/CubeSportsModel.d.ts.map +1 -0
- package/lib/stores/fixtures/CubeSportsModel.js +158 -0
- package/lib/stores/fixtures/CubeSportsModel.js.map +1 -0
- package/lib/stores/fixtures/CubeTradesModel.d.ts +29 -0
- package/lib/stores/fixtures/CubeTradesModel.d.ts.map +1 -0
- package/lib/stores/fixtures/CubeTradesModel.js +197 -0
- package/lib/stores/fixtures/CubeTradesModel.js.map +1 -0
- package/lib/stores/source-picker/CubeCsvSetupSql.d.ts +71 -0
- package/lib/stores/source-picker/CubeCsvSetupSql.d.ts.map +1 -0
- package/lib/stores/source-picker/CubeCsvSetupSql.js +392 -0
- package/lib/stores/source-picker/CubeCsvSetupSql.js.map +1 -0
- package/lib/stores/source-picker/CubeDataProductTabState.d.ts +186 -0
- package/lib/stores/source-picker/CubeDataProductTabState.d.ts.map +1 -0
- package/lib/stores/source-picker/CubeDataProductTabState.js +681 -0
- package/lib/stores/source-picker/CubeDataProductTabState.js.map +1 -0
- package/lib/stores/source-picker/CubeDirectConnectionTabState.d.ts +140 -0
- package/lib/stores/source-picker/CubeDirectConnectionTabState.d.ts.map +1 -0
- package/lib/stores/source-picker/CubeDirectConnectionTabState.js +516 -0
- package/lib/stores/source-picker/CubeDirectConnectionTabState.js.map +1 -0
- package/lib/stores/source-picker/CubeIngestTabState.d.ts +114 -0
- package/lib/stores/source-picker/CubeIngestTabState.d.ts.map +1 -0
- package/lib/stores/source-picker/CubeIngestTabState.js +455 -0
- package/lib/stores/source-picker/CubeIngestTabState.js.map +1 -0
- package/lib/stores/source-picker/CubeInlineModelTabState.d.ts +107 -0
- package/lib/stores/source-picker/CubeInlineModelTabState.d.ts.map +1 -0
- package/lib/stores/source-picker/CubeInlineModelTabState.js +347 -0
- package/lib/stores/source-picker/CubeInlineModelTabState.js.map +1 -0
- package/lib/stores/source-picker/CubeProjectTabState.d.ts +62 -0
- package/lib/stores/source-picker/CubeProjectTabState.d.ts.map +1 -0
- package/lib/stores/source-picker/CubeProjectTabState.js +181 -0
- package/lib/stores/source-picker/CubeProjectTabState.js.map +1 -0
- package/lib/stores/source-picker/CubeSourcePickerTab.d.ts +48 -0
- package/lib/stores/source-picker/CubeSourcePickerTab.d.ts.map +1 -0
- package/lib/stores/source-picker/CubeSourcePickerTab.js +24 -0
- package/lib/stores/source-picker/CubeSourcePickerTab.js.map +1 -0
- package/package.json +10 -6
- package/src/__lib__/LegendCubeCommand.ts +5 -0
- package/src/__lib__/LegendCubeDataProductLabels.ts +91 -0
- package/src/__lib__/LegendCubeDirectConnectionLabels.ts +111 -0
- package/src/__lib__/LegendCubeHelpText.ts +25 -1
- package/src/__lib__/LegendCubeIngestLabels.ts +40 -0
- package/src/__lib__/LegendCubeLabels.ts +162 -4
- package/src/__lib__/LegendCubeProjectLabels.ts +25 -0
- package/src/__lib__/LegendCubeTesting.ts +1 -0
- package/src/__test-utils__/CubeCanvasTestUtils.ts +1 -1
- package/src/__test-utils__/CubeConnectionTestSupport.ts +45 -0
- package/src/__test-utils__/CubeDirectConnectionFixtures.ts +70 -0
- package/src/__test-utils__/CubeEngineTestSupport.ts +38 -0
- package/src/__test-utils__/CubeExpressionTestUtils.ts +119 -0
- package/src/__test-utils__/CubeOperationsTestUtils.ts +93 -18
- package/src/__test-utils__/CubePageTestUtils.tsx +35 -0
- package/src/__test-utils__/CubeTestApplication.ts +21 -2
- package/src/__test-utils__/FakeCubeConnectionExplorer.ts +111 -0
- package/src/__test-utils__/FakeCubeDataProductCatalog.ts +227 -0
- package/src/__test-utils__/FakeCubeEngine.ts +25 -1
- package/src/__test-utils__/FakeCubeIngestCatalog.ts +180 -0
- package/src/__test-utils__/FakeCubeProjectCatalog.ts +89 -0
- package/src/components/CubeAddItems.tsx +179 -0
- package/src/components/CubeEditor.tsx +73 -44
- package/src/components/CubeEntrySourceBanner.tsx +64 -0
- package/src/components/CubeNodeIcon.tsx +13 -0
- package/src/components/CubeSchemaColumnsTable.tsx +49 -0
- package/src/components/canvas/CubeCanvas.tsx +49 -14
- package/src/components/canvas/CubeCanvasContextMenu.tsx +31 -30
- package/src/components/canvas/CubeCanvasDnd.ts +16 -9
- package/src/components/canvas/CubeCanvasElements.ts +8 -2
- package/src/components/canvas/CubeCanvasNode.tsx +61 -43
- package/src/components/canvas/CubeCanvasNodeFocus.ts +37 -0
- package/src/components/canvas/CubeNodeEditorAnchor.ts +82 -0
- package/src/components/editors/CubeAggregationRowEditor.tsx +224 -0
- package/src/components/editors/CubeColumnChecklist.tsx +130 -0
- package/src/components/editors/CubeConcatEditor.tsx +374 -0
- package/src/components/editors/CubeDataProductSourceEditor.tsx +134 -0
- package/src/components/editors/CubeDifferenceEditor.tsx +87 -0
- package/src/components/editors/CubeExtendEditor.tsx +271 -0
- package/src/components/editors/CubeFilterEditor.tsx +7 -0
- package/src/components/editors/CubeGroupEditor.tsx +135 -0
- package/src/components/editors/CubeIngestSourceEditor.tsx +104 -0
- package/src/components/editors/CubeJoinEditor.tsx +12 -132
- package/src/components/editors/CubeJoinKeyRows.tsx +183 -0
- package/src/components/editors/CubeNodeEditorPanel.tsx +91 -28
- package/src/components/editors/CubeNodeEditorPopper.tsx +183 -0
- package/src/components/editors/CubeNodeEditorRegistry.ts +21 -0
- package/src/components/editors/CubePartitionEditor.tsx +208 -0
- package/src/components/editors/CubeRenameEditor.tsx +10 -5
- package/src/components/editors/CubeRestrictEditor.tsx +1 -1
- package/src/components/editors/CubeSortEditor.tsx +20 -142
- package/src/components/editors/CubeSortRowEditor.tsx +176 -0
- package/src/components/editors/CubeSourceEditor.tsx +42 -30
- package/src/components/editors/CubeWarehouseControl.tsx +113 -0
- package/src/components/editors/useCubeNodeEditorDismiss.ts +103 -0
- package/src/components/examples/CubeExamplesDialog.tsx +199 -0
- package/src/components/grid/CubeGridRegion.tsx +48 -10
- package/src/components/grid/CubeGridValues.ts +55 -0
- package/src/components/grid/CubeResultGrid.tsx +24 -8
- package/src/components/palette/CubePalette.tsx +33 -15
- package/src/components/source-picker/CubeDataProductTab.tsx +392 -0
- package/src/components/source-picker/CubeDirectConnectionTab.tsx +340 -0
- package/src/components/source-picker/CubeIngestTab.tsx +232 -0
- package/src/components/source-picker/CubeInlineModelTab.tsx +191 -0
- package/src/components/source-picker/CubePickerStep.tsx +49 -0
- package/src/components/source-picker/CubeProjectTab.tsx +114 -0
- package/src/components/source-picker/CubeSourcePicker.tsx +62 -227
- package/src/components/spec-transfer/CubeSpecTransferDialog.tsx +1 -1
- package/src/graph-manager/CubeConnectionExplorer.ts +106 -0
- package/src/graph-manager/CubeDataProduct.ts +150 -0
- package/src/graph-manager/CubeDataProductCatalog.ts +245 -0
- package/src/graph-manager/CubeDirectConnection.ts +67 -0
- package/src/graph-manager/CubeEngine.ts +43 -1
- package/src/graph-manager/CubeIngest.ts +144 -0
- package/src/graph-manager/CubeIngestCatalog.ts +169 -0
- package/src/graph-manager/CubeLakehouseEnvironment.ts +27 -0
- package/src/graph-manager/CubeProject.ts +117 -0
- package/src/graph-manager/CubeProjectCatalog.ts +40 -0
- package/src/graph-manager/protocol/pure/CubeEngineBuilder.ts +145 -1
- package/src/graph-manager/protocol/pure/v1/V1_CubeDataProductArtifact.ts +251 -0
- package/src/graph-manager/protocol/pure/v1/V1_CubeDataProductModel.ts +101 -0
- package/src/graph-manager/protocol/pure/v1/V1_CubeDirectConnection.ts +339 -0
- package/src/graph-manager/protocol/pure/v1/V1_CubeDirectModel.ts +151 -0
- package/src/graph-manager/protocol/pure/v1/V1_CubeEngineErrors.ts +45 -4
- package/src/graph-manager/protocol/pure/v1/V1_CubeExpression.ts +89 -0
- package/src/graph-manager/protocol/pure/v1/V1_CubeIngestDefinition.ts +201 -0
- package/src/graph-manager/protocol/pure/v1/V1_CubeIngestModel.ts +183 -0
- package/src/graph-manager/protocol/pure/v1/V1_CubeLakehouseEnvironmentResolver.ts +141 -0
- package/src/graph-manager/protocol/pure/v1/V1_CubeLambdaSerializer.ts +84 -4
- package/src/graph-manager/protocol/pure/v1/V1_CubeSchemaExploration.ts +361 -0
- package/src/graph-manager/protocol/pure/v1/V1_LegendCubeConnectionExplorer.ts +116 -0
- package/src/graph-manager/protocol/pure/v1/V1_LegendCubeDataProductCatalog.ts +744 -0
- package/src/graph-manager/protocol/pure/v1/V1_LegendCubeEngine.ts +967 -24
- package/src/graph-manager/protocol/pure/v1/V1_LegendCubeIngestCatalog.ts +459 -0
- package/src/graph-manager/protocol/pure/v1/V1_LegendCubeProjectCatalog.ts +147 -0
- package/src/graph-manager/protocol/pure/v1/__test-utils__/V1_CubeConnectionExplorerTestUtils.ts +61 -0
- package/src/graph-manager/protocol/pure/v1/__test-utils__/V1_CubeDataProductFixtures.ts +337 -0
- package/src/graph-manager/protocol/pure/v1/__test-utils__/V1_CubeDataProductSearchFixtures.ts +206 -0
- package/src/graph-manager/protocol/pure/v1/__test-utils__/V1_CubeEngineTestUtils.ts +42 -1
- package/src/index.ts +20 -0
- package/src/stores/CubeAddPlacement.ts +67 -0
- package/src/stores/CubeDataProductRecheck.ts +93 -0
- package/src/stores/CubeDataProductRuntimeState.ts +256 -0
- package/src/stores/CubeDataProductWarehouse.ts +40 -0
- package/src/stores/CubeEditorState.ts +511 -63
- package/src/stores/CubeEntrySource.ts +278 -0
- package/src/stores/CubeExamples.ts +457 -0
- package/src/stores/CubeExamplesState.ts +108 -0
- package/src/stores/CubeExecutionState.ts +24 -5
- package/src/stores/CubeExtendTyping.ts +291 -0
- package/src/stores/CubeGridQuickActions.ts +69 -14
- package/src/stores/CubeHost.ts +71 -1
- package/src/stores/CubeIngestRecheck.ts +92 -0
- package/src/stores/CubeNodeEditorState.ts +278 -9
- package/src/stores/CubeShowPureState.ts +7 -4
- package/src/stores/CubeSourcePickerState.ts +160 -330
- package/src/stores/CubeSpecTransferState.ts +2 -2
- package/src/stores/LocalModelCatalog.ts +22 -3
- package/src/stores/editors/CubeAggregationRows.ts +299 -0
- package/src/stores/editors/CubeConcatDraft.ts +49 -0
- package/src/stores/editors/CubeDifferenceDraft.ts +147 -0
- package/src/stores/editors/CubeExtendDraft.ts +532 -0
- package/src/stores/editors/CubeGroupDraft.ts +145 -0
- package/src/stores/editors/CubeJoinDraft.ts +130 -41
- package/src/stores/editors/CubeJoinKeyPairs.ts +68 -0
- package/src/stores/editors/CubeNodeDraft.ts +26 -6
- package/src/stores/editors/CubeNodeDraftRegistry.ts +25 -0
- package/src/stores/editors/CubePartitionDraft.ts +214 -0
- package/src/stores/editors/CubeSortDraft.ts +17 -54
- package/src/stores/editors/CubeSortRows.ts +84 -0
- package/src/stores/fixtures/CubeNorthwindModel.ts +103 -88
- package/src/stores/fixtures/CubeSampleSql.ts +85 -0
- package/src/stores/fixtures/CubeSportsModel.ts +182 -0
- package/src/stores/fixtures/CubeTradesModel.ts +241 -0
- package/src/stores/source-picker/CubeCsvSetupSql.ts +444 -0
- package/src/stores/source-picker/CubeDataProductTabState.ts +839 -0
- package/src/stores/source-picker/CubeDirectConnectionTabState.ts +647 -0
- package/src/stores/source-picker/CubeIngestTabState.ts +551 -0
- package/src/stores/source-picker/CubeInlineModelTabState.ts +448 -0
- package/src/stores/source-picker/CubeProjectTabState.ts +218 -0
- package/src/stores/source-picker/CubeSourcePickerTab.ts +50 -0
- package/tsconfig.json +89 -0
|
@@ -15,9 +15,15 @@
|
|
|
15
15
|
*/
|
|
16
16
|
|
|
17
17
|
import {
|
|
18
|
+
AggregationFunction,
|
|
19
|
+
Difference,
|
|
20
|
+
DifferenceSuffix,
|
|
18
21
|
getSameNamedJoinKeys,
|
|
22
|
+
Group,
|
|
23
|
+
isWindowRowFunction,
|
|
19
24
|
Join,
|
|
20
25
|
JoinType,
|
|
26
|
+
Partition,
|
|
21
27
|
type Query,
|
|
22
28
|
RelationalTableSource,
|
|
23
29
|
Rename,
|
|
@@ -25,35 +31,25 @@ import {
|
|
|
25
31
|
} from '@finos/legend-cube';
|
|
26
32
|
import { action, makeObservable, observable } from 'mobx';
|
|
27
33
|
import type { CubeModelOutline } from '../../graph-manager/CubeEngine.js';
|
|
34
|
+
import { isSameList } from './CubeAggregationRows.js';
|
|
35
|
+
import {
|
|
36
|
+
blankJoinKeyPair,
|
|
37
|
+
type CubeJoinKeyPair,
|
|
38
|
+
type CubeJoinKeysDraft,
|
|
39
|
+
joinKeyListsOf,
|
|
40
|
+
joinKeyPairsOf,
|
|
41
|
+
} from './CubeJoinKeyPairs.js';
|
|
28
42
|
import { CubeNodeDraft } from './CubeNodeDraft.js';
|
|
29
43
|
|
|
30
|
-
/** One pair of key columns, matched by position; `''` until a column is picked */
|
|
31
|
-
export interface CubeJoinKeyPair {
|
|
32
|
-
/** Identifies the row in the editor */
|
|
33
|
-
readonly key: number;
|
|
34
|
-
readonly left: string;
|
|
35
|
-
readonly right: string;
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
let nextPairKey = 1;
|
|
39
|
-
|
|
40
|
-
const isSameList = (a: readonly string[], b: readonly string[]): boolean =>
|
|
41
|
-
a.length === b.length && a.every((name, index) => name === b[index]);
|
|
42
|
-
|
|
43
|
-
/** The key lists pairs build: a pair with no column picked is left out */
|
|
44
|
-
const toKeyLists = (
|
|
45
|
-
pairs: readonly CubeJoinKeyPair[],
|
|
46
|
-
): [string[], string[]] => {
|
|
47
|
-
const kept = pairs.filter((pair) => pair.left || pair.right);
|
|
48
|
-
return [kept.map((pair) => pair.left), kept.map((pair) => pair.right)];
|
|
49
|
-
};
|
|
50
|
-
|
|
51
44
|
/**
|
|
52
45
|
* The Join editor's draft (spec §17.6): the join type and the key column
|
|
53
46
|
* pairs. A pair with no column picked on either side is left out when built,
|
|
54
47
|
* as a Filter's blank rows are (user's choice, 2026-10-07).
|
|
55
48
|
*/
|
|
56
|
-
export class CubeJoinDraft
|
|
49
|
+
export class CubeJoinDraft
|
|
50
|
+
extends CubeNodeDraft<Join>
|
|
51
|
+
implements CubeJoinKeysDraft
|
|
52
|
+
{
|
|
57
53
|
joinType: JoinType;
|
|
58
54
|
pairs: CubeJoinKeyPair[];
|
|
59
55
|
/** Anything was changed; until then, `build()` gives the original back */
|
|
@@ -77,20 +73,8 @@ export class CubeJoinDraft extends CubeNodeDraft<Join> {
|
|
|
77
73
|
setRightColumn: action,
|
|
78
74
|
});
|
|
79
75
|
this.joinType = original.joinType;
|
|
80
|
-
this.pairs =
|
|
81
|
-
|
|
82
|
-
length: Math.max(
|
|
83
|
-
original.leftColumns.length,
|
|
84
|
-
original.rightColumns.length,
|
|
85
|
-
),
|
|
86
|
-
},
|
|
87
|
-
(_, index) => ({
|
|
88
|
-
key: nextPairKey++,
|
|
89
|
-
left: original.leftColumns[index] ?? '',
|
|
90
|
-
right: original.rightColumns[index] ?? '',
|
|
91
|
-
}),
|
|
92
|
-
);
|
|
93
|
-
this.initialKeyLists = toKeyLists(this.pairs);
|
|
76
|
+
this.pairs = joinKeyPairsOf(original.leftColumns, original.rightColumns);
|
|
77
|
+
this.initialKeyLists = joinKeyListsOf(this.pairs);
|
|
94
78
|
}
|
|
95
79
|
|
|
96
80
|
setJoinType(joinType: JoinType): void {
|
|
@@ -99,7 +83,7 @@ export class CubeJoinDraft extends CubeNodeDraft<Join> {
|
|
|
99
83
|
}
|
|
100
84
|
|
|
101
85
|
addPair(): void {
|
|
102
|
-
this.pairs = [...this.pairs,
|
|
86
|
+
this.pairs = [...this.pairs, blankJoinKeyPair()];
|
|
103
87
|
this.touched = true;
|
|
104
88
|
}
|
|
105
89
|
|
|
@@ -123,7 +107,7 @@ export class CubeJoinDraft extends CubeNodeDraft<Join> {
|
|
|
123
107
|
}
|
|
124
108
|
|
|
125
109
|
build(): Join {
|
|
126
|
-
const [leftColumns, rightColumns] =
|
|
110
|
+
const [leftColumns, rightColumns] = joinKeyListsOf(this.pairs);
|
|
127
111
|
const [initialLeft, initialRight] = this.initialKeyLists;
|
|
128
112
|
const { original } = this;
|
|
129
113
|
return !this.touched ||
|
|
@@ -139,6 +123,82 @@ export class CubeJoinDraft extends CubeNodeDraft<Join> {
|
|
|
139
123
|
}
|
|
140
124
|
}
|
|
141
125
|
|
|
126
|
+
/** The aggregations whose output is one of their column's values, so typed as it (PLAN §11.5) */
|
|
127
|
+
const VALUE_AGGREGATIONS: readonly string[] = [
|
|
128
|
+
AggregationFunction.DISTINCT_VALUE,
|
|
129
|
+
AggregationFunction.MIN,
|
|
130
|
+
AggregationFunction.MAX,
|
|
131
|
+
];
|
|
132
|
+
|
|
133
|
+
/**
|
|
134
|
+
* The input column a Group's output column comes from: a key by its name, a
|
|
135
|
+
* Distinct Value, Min or Max by its aggregated column; a count, a sum or an
|
|
136
|
+
* average is no column's value, so it comes from none
|
|
137
|
+
*/
|
|
138
|
+
const groupInputName = (
|
|
139
|
+
group: Group,
|
|
140
|
+
columnName: string,
|
|
141
|
+
): string | undefined => {
|
|
142
|
+
if (group.columns.includes(columnName)) {
|
|
143
|
+
return columnName;
|
|
144
|
+
}
|
|
145
|
+
const aggregation = group.aggregations.find(
|
|
146
|
+
({ name }) => name === columnName,
|
|
147
|
+
);
|
|
148
|
+
return aggregation && VALUE_AGGREGATIONS.includes(aggregation.function)
|
|
149
|
+
? aggregation.column
|
|
150
|
+
: undefined;
|
|
151
|
+
};
|
|
152
|
+
|
|
153
|
+
/**
|
|
154
|
+
* The input column a Partition's output column comes from: an input column by
|
|
155
|
+
* its name, a Distinct Value, Min or Max, or a Lag, Lead, First or Last (PLAN
|
|
156
|
+
* §11.9), by its column, whose values it holds; a count, a sum, an average or
|
|
157
|
+
* a rank is no column's value, so it comes from none
|
|
158
|
+
*/
|
|
159
|
+
const partitionInputName = (
|
|
160
|
+
partition: Partition,
|
|
161
|
+
columnName: string,
|
|
162
|
+
): string | undefined => {
|
|
163
|
+
const aggregation = partition.aggregations.find(
|
|
164
|
+
({ name }) => name === columnName,
|
|
165
|
+
);
|
|
166
|
+
if (!aggregation) {
|
|
167
|
+
return columnName;
|
|
168
|
+
}
|
|
169
|
+
return VALUE_AGGREGATIONS.includes(aggregation.function) ||
|
|
170
|
+
isWindowRowFunction(aggregation.function)
|
|
171
|
+
? aggregation.column
|
|
172
|
+
: undefined;
|
|
173
|
+
};
|
|
174
|
+
|
|
175
|
+
/**
|
|
176
|
+
* Where a Difference's output column comes from: `x_1` from the Left input's
|
|
177
|
+
* `x`, `x_2` from the Right input's, a key or another column from the inputs
|
|
178
|
+
* that have it (both for a key of the same name, which the full outer join
|
|
179
|
+
* merges); `x_valueDifference` is no column's value, so it comes from none
|
|
180
|
+
*/
|
|
181
|
+
const differenceInputOf = (
|
|
182
|
+
difference: Difference,
|
|
183
|
+
columnName: string,
|
|
184
|
+
): { name: string; side?: 'left' | 'right' } | undefined => {
|
|
185
|
+
const of = (suffix: DifferenceSuffix): string | undefined =>
|
|
186
|
+
difference.differenceColumns.find(
|
|
187
|
+
(name) => `${name}${suffix}` === columnName,
|
|
188
|
+
);
|
|
189
|
+
const left = of(DifferenceSuffix.LEFT);
|
|
190
|
+
if (left !== undefined) {
|
|
191
|
+
return { name: left, side: 'left' };
|
|
192
|
+
}
|
|
193
|
+
const right = of(DifferenceSuffix.RIGHT);
|
|
194
|
+
if (right !== undefined) {
|
|
195
|
+
return { name: right, side: 'right' };
|
|
196
|
+
}
|
|
197
|
+
return of(DifferenceSuffix.DIFFERENCE) === undefined
|
|
198
|
+
? { name: columnName }
|
|
199
|
+
: undefined;
|
|
200
|
+
};
|
|
201
|
+
|
|
142
202
|
/** Where a column of a node's output comes from: a table, and the column's name in it */
|
|
143
203
|
export interface CubeColumnOrigin {
|
|
144
204
|
readonly source: RelationalTableSource;
|
|
@@ -150,8 +210,13 @@ export interface CubeColumnOrigin {
|
|
|
150
210
|
* through the inputs whose output has it, and through a Rename to its old
|
|
151
211
|
* name. A join key of the same name on both sides comes from the side the
|
|
152
212
|
* join keeps (the left for INNER and LEFT OUTER, the right for RIGHT OUTER),
|
|
153
|
-
* and from both for FULL OUTER, which merges them. A
|
|
154
|
-
*
|
|
213
|
+
* and from both for FULL OUTER, which merges them. A Group's key comes from
|
|
214
|
+
* its column, and a Distinct Value, Min or Max from the column it aggregates,
|
|
215
|
+
* as a Partition's do; a Partition's input columns come from its input. A
|
|
216
|
+
* Difference's `x_1` and `x_2` come from `x` on their side. A column the node's
|
|
217
|
+
* output doesn't have, e.g. one a Restrict dropped, or a Group's or
|
|
218
|
+
* Partition's count, sum, average or rank, or a Difference's difference,
|
|
219
|
+
* comes from nowhere.
|
|
155
220
|
*/
|
|
156
221
|
export const findColumnOrigins = (
|
|
157
222
|
query: Query,
|
|
@@ -171,10 +236,34 @@ export const findColumnOrigins = (
|
|
|
171
236
|
}
|
|
172
237
|
const inputIds = query.getInputIds(nodeId);
|
|
173
238
|
const [leftId, rightId] = inputIds;
|
|
239
|
+
if (node instanceof Difference) {
|
|
240
|
+
const input = differenceInputOf(node, columnName);
|
|
241
|
+
if (!input) {
|
|
242
|
+
return [];
|
|
243
|
+
}
|
|
244
|
+
const sides =
|
|
245
|
+
input.side === 'left'
|
|
246
|
+
? [leftId]
|
|
247
|
+
: input.side === 'right'
|
|
248
|
+
? [rightId]
|
|
249
|
+
: inputIds;
|
|
250
|
+
return sides.flatMap((inputId) =>
|
|
251
|
+
inputId !== undefined && analysis.schemas.get(inputId)?.lookup(input.name)
|
|
252
|
+
? findColumnOrigins(query, analysis, inputId, input.name)
|
|
253
|
+
: [],
|
|
254
|
+
);
|
|
255
|
+
}
|
|
174
256
|
const inputName =
|
|
175
257
|
node instanceof Rename
|
|
176
258
|
? (node.mappings.find(({ to }) => to === columnName)?.from ?? columnName)
|
|
177
|
-
:
|
|
259
|
+
: node instanceof Group
|
|
260
|
+
? groupInputName(node, columnName)
|
|
261
|
+
: node instanceof Partition
|
|
262
|
+
? partitionInputName(node, columnName)
|
|
263
|
+
: columnName;
|
|
264
|
+
if (inputName === undefined) {
|
|
265
|
+
return [];
|
|
266
|
+
}
|
|
178
267
|
const followed =
|
|
179
268
|
node instanceof Join &&
|
|
180
269
|
node.joinType !== JoinType.FULL_OUTER &&
|
|
@@ -0,0 +1,68 @@
|
|
|
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 { QueryNode } from '@finos/legend-cube';
|
|
18
|
+
|
|
19
|
+
// The key column pairs of the editors that join two inputs (Join, spec §17.6;
|
|
20
|
+
// Difference, PLAN §11.7)
|
|
21
|
+
|
|
22
|
+
/** One pair of key columns, matched by position; `''` until a column is picked */
|
|
23
|
+
export interface CubeJoinKeyPair {
|
|
24
|
+
/** Identifies the row in the editor */
|
|
25
|
+
readonly key: number;
|
|
26
|
+
readonly left: string;
|
|
27
|
+
readonly right: string;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
let nextPairKey = 1;
|
|
31
|
+
|
|
32
|
+
export const blankJoinKeyPair = (): CubeJoinKeyPair => ({
|
|
33
|
+
key: nextPairKey++,
|
|
34
|
+
left: '',
|
|
35
|
+
right: '',
|
|
36
|
+
});
|
|
37
|
+
|
|
38
|
+
/** The pairs of saved key lists, by position; a list longer than the other pairs its extra columns with `''` */
|
|
39
|
+
export const joinKeyPairsOf = (
|
|
40
|
+
leftColumns: readonly string[],
|
|
41
|
+
rightColumns: readonly string[],
|
|
42
|
+
): CubeJoinKeyPair[] =>
|
|
43
|
+
Array.from(
|
|
44
|
+
{ length: Math.max(leftColumns.length, rightColumns.length) },
|
|
45
|
+
(_, index) => ({
|
|
46
|
+
key: nextPairKey++,
|
|
47
|
+
left: leftColumns[index] ?? '',
|
|
48
|
+
right: rightColumns[index] ?? '',
|
|
49
|
+
}),
|
|
50
|
+
);
|
|
51
|
+
|
|
52
|
+
/** The key lists pairs build: a pair with no column picked is left out */
|
|
53
|
+
export const joinKeyListsOf = (
|
|
54
|
+
pairs: readonly CubeJoinKeyPair[],
|
|
55
|
+
): [string[], string[]] => {
|
|
56
|
+
const kept = pairs.filter((pair) => pair.left || pair.right);
|
|
57
|
+
return [kept.map((pair) => pair.left), kept.map((pair) => pair.right)];
|
|
58
|
+
};
|
|
59
|
+
|
|
60
|
+
/** A draft whose node joins its inputs on pairs of key columns: a Join's or a Difference's */
|
|
61
|
+
export interface CubeJoinKeysDraft {
|
|
62
|
+
readonly original: QueryNode;
|
|
63
|
+
readonly pairs: readonly CubeJoinKeyPair[];
|
|
64
|
+
addPair(): void;
|
|
65
|
+
removePair(key: number): void;
|
|
66
|
+
setLeftColumn(key: number, left: string): void;
|
|
67
|
+
setRightColumn(key: number, right: string): void;
|
|
68
|
+
}
|
|
@@ -17,14 +17,15 @@
|
|
|
17
17
|
import type { QueryNode } from '@finos/legend-cube';
|
|
18
18
|
|
|
19
19
|
/**
|
|
20
|
-
* The edits of one node in the
|
|
21
|
-
* spec §17.5). A node type's editor edits its draft,
|
|
22
|
-
*
|
|
23
|
-
*
|
|
20
|
+
* The edits of one node in the node editor, kept until Apply or closing it
|
|
21
|
+
* (PLAN §7.4, §11.8, spec §17.5). A node type's editor edits its draft,
|
|
22
|
+
* never the document: only Apply, or closing the editor any way but Cancel,
|
|
23
|
+
* stores `build()`, as one undo step. A draft is made once each time the
|
|
24
|
+
* editor opens on a node, and again after an Apply.
|
|
24
25
|
*/
|
|
25
26
|
export abstract class CubeNodeDraft<N extends QueryNode = QueryNode> {
|
|
26
|
-
/** The node the draft was made from */
|
|
27
|
-
|
|
27
|
+
/** The node the draft was made from; `follow` may move it on */
|
|
28
|
+
original: N;
|
|
28
29
|
|
|
29
30
|
constructor(original: N) {
|
|
30
31
|
this.original = original;
|
|
@@ -36,6 +37,25 @@ export abstract class CubeNodeDraft<N extends QueryNode = QueryNode> {
|
|
|
36
37
|
* as no change.
|
|
37
38
|
*/
|
|
38
39
|
abstract build(): N;
|
|
40
|
+
|
|
41
|
+
/**
|
|
42
|
+
* Why Apply waits, if it does: the panel disables it with this reason and
|
|
43
|
+
* shows it in place of the problems, e.g. an Extend whose expressions
|
|
44
|
+
* aren't validated yet (PLAN §11.7)
|
|
45
|
+
*/
|
|
46
|
+
get applyDisabledReason(): string | undefined {
|
|
47
|
+
return undefined;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
/**
|
|
51
|
+
* Whether the draft goes on, made from this node, when the node it was
|
|
52
|
+
* made from is replaced underneath it by one that differs in nothing the
|
|
53
|
+
* draft edits, e.g. an Extend the engine typed in the background; else
|
|
54
|
+
* the panel drops the edits (PLAN §7.4)
|
|
55
|
+
*/
|
|
56
|
+
follow(node: QueryNode): boolean {
|
|
57
|
+
return false;
|
|
58
|
+
}
|
|
39
59
|
}
|
|
40
60
|
|
|
41
61
|
/** A node with nothing to edit in the panel, such as a source or an Unknown node */
|
|
@@ -15,11 +15,16 @@
|
|
|
15
15
|
*/
|
|
16
16
|
|
|
17
17
|
import {
|
|
18
|
+
Concat,
|
|
19
|
+
Difference,
|
|
18
20
|
Distinct,
|
|
19
21
|
Drop,
|
|
22
|
+
Extend,
|
|
20
23
|
Filter,
|
|
24
|
+
Group,
|
|
21
25
|
Join,
|
|
22
26
|
Limit,
|
|
27
|
+
Partition,
|
|
23
28
|
type QueryNode,
|
|
24
29
|
Rename,
|
|
25
30
|
Restrict,
|
|
@@ -28,9 +33,14 @@ import {
|
|
|
28
33
|
} from '@finos/legend-cube';
|
|
29
34
|
import { guaranteeType } from '@finos/legend-shared';
|
|
30
35
|
import type { CubeEditorState } from '../CubeEditorState.js';
|
|
36
|
+
import { CubeConcatDraft } from './CubeConcatDraft.js';
|
|
37
|
+
import { CubeDifferenceDraft } from './CubeDifferenceDraft.js';
|
|
38
|
+
import { CubeExtendDraft } from './CubeExtendDraft.js';
|
|
31
39
|
import { CubeFilterDraft } from './CubeFilterDraft.js';
|
|
40
|
+
import { CubeGroupDraft } from './CubeGroupDraft.js';
|
|
32
41
|
import { CubeJoinDraft } from './CubeJoinDraft.js';
|
|
33
42
|
import { type CubeNodeDraft, CubeReadOnlyNodeDraft } from './CubeNodeDraft.js';
|
|
43
|
+
import { CubePartitionDraft } from './CubePartitionDraft.js';
|
|
34
44
|
import { CubeRenameDraft } from './CubeRenameDraft.js';
|
|
35
45
|
import { CubeRestrictDraft } from './CubeRestrictDraft.js';
|
|
36
46
|
import { CubeRowCountDraft } from './CubeRowCountDraft.js';
|
|
@@ -53,6 +63,7 @@ export const CUBE_NODE_DRAFT_FACTORIES: ReadonlyMap<
|
|
|
53
63
|
CubeNodeDraftFactory
|
|
54
64
|
> = new Map<string, CubeNodeDraftFactory>([
|
|
55
65
|
[Sort.TYPE, (node) => new CubeSortDraft(guaranteeType(node, Sort))],
|
|
66
|
+
[Group.TYPE, (node) => new CubeGroupDraft(guaranteeType(node, Group))],
|
|
56
67
|
[Filter.TYPE, (node) => new CubeFilterDraft(guaranteeType(node, Filter))],
|
|
57
68
|
[
|
|
58
69
|
Restrict.TYPE,
|
|
@@ -63,6 +74,20 @@ export const CUBE_NODE_DRAFT_FACTORIES: ReadonlyMap<
|
|
|
63
74
|
[Drop.TYPE, (node) => new CubeRowCountDraft(guaranteeType(node, Drop))],
|
|
64
75
|
[Limit.TYPE, (node) => new CubeRowCountDraft(guaranteeType(node, Limit))],
|
|
65
76
|
[Slice.TYPE, (node) => new CubeSliceDraft(guaranteeType(node, Slice))],
|
|
77
|
+
[Concat.TYPE, (node) => new CubeConcatDraft(guaranteeType(node, Concat))],
|
|
78
|
+
[
|
|
79
|
+
Difference.TYPE,
|
|
80
|
+
(node) => new CubeDifferenceDraft(guaranteeType(node, Difference)),
|
|
81
|
+
],
|
|
82
|
+
[
|
|
83
|
+
Partition.TYPE,
|
|
84
|
+
(node) => new CubePartitionDraft(guaranteeType(node, Partition)),
|
|
85
|
+
],
|
|
86
|
+
[
|
|
87
|
+
Extend.TYPE,
|
|
88
|
+
(node, editorState) =>
|
|
89
|
+
new CubeExtendDraft(guaranteeType(node, Extend), editorState),
|
|
90
|
+
],
|
|
66
91
|
]);
|
|
67
92
|
|
|
68
93
|
/**
|
|
@@ -0,0 +1,214 @@
|
|
|
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 {
|
|
18
|
+
AggregationSetting,
|
|
19
|
+
AggregationUse,
|
|
20
|
+
ColumnAggregation,
|
|
21
|
+
ColumnDirection,
|
|
22
|
+
Partition,
|
|
23
|
+
Schema,
|
|
24
|
+
SortDirection,
|
|
25
|
+
} from '@finos/legend-cube';
|
|
26
|
+
import { action, computed, makeObservable, observable } from 'mobx';
|
|
27
|
+
import {
|
|
28
|
+
aggregationRowsOf,
|
|
29
|
+
aggregationsOfRows,
|
|
30
|
+
blankAggregationRow,
|
|
31
|
+
type CubeAggregationRow,
|
|
32
|
+
isBuiltAggregationRow,
|
|
33
|
+
isSameAggregations,
|
|
34
|
+
isSameList,
|
|
35
|
+
toggledColumns,
|
|
36
|
+
withRowColumn,
|
|
37
|
+
withRowFunction,
|
|
38
|
+
withRowName,
|
|
39
|
+
withRowSetting,
|
|
40
|
+
} from './CubeAggregationRows.js';
|
|
41
|
+
import { CubeNodeDraft } from './CubeNodeDraft.js';
|
|
42
|
+
import {
|
|
43
|
+
blankSortRow,
|
|
44
|
+
type CubeSortRow,
|
|
45
|
+
isSameSorts,
|
|
46
|
+
movedSortRows,
|
|
47
|
+
sortRowsOf,
|
|
48
|
+
sortsOfRows,
|
|
49
|
+
} from './CubeSortRows.js';
|
|
50
|
+
|
|
51
|
+
/**
|
|
52
|
+
* The Partition editor's draft (spec §17.6, PLAN §11.6): rows of window
|
|
53
|
+
* function column, function and output name, as a Group's (one blank row to
|
|
54
|
+
* start), the partition columns, stored in the input's order but kept in a
|
|
55
|
+
* saved order until the picks change (M4's Q2), and sort rows, as a Sort's
|
|
56
|
+
* (none to start). A row's name follows its column and function until typed.
|
|
57
|
+
* Picking a column first sets Count; Count rows and the rank functions clear
|
|
58
|
+
* the column, which they can't hold. Lag and Lead take an offset, NTile a
|
|
59
|
+
* bucket count, typed as text and given their defaults when picked (PLAN
|
|
60
|
+
* §11.9). Until something changes, `build()`
|
|
61
|
+
* gives the original back, a saved sort key without a column included.
|
|
62
|
+
*/
|
|
63
|
+
export class CubePartitionDraft extends CubeNodeDraft<Partition> {
|
|
64
|
+
columns: readonly string[];
|
|
65
|
+
sortRows: readonly CubeSortRow[];
|
|
66
|
+
rows: readonly CubeAggregationRow[];
|
|
67
|
+
/** Anything was changed; until then, `build()` gives the original back */
|
|
68
|
+
private touched = false;
|
|
69
|
+
|
|
70
|
+
constructor(original: Partition) {
|
|
71
|
+
super(original);
|
|
72
|
+
makeObservable<CubePartitionDraft, 'touched'>(this, {
|
|
73
|
+
columns: observable.ref,
|
|
74
|
+
sortRows: observable.ref,
|
|
75
|
+
rows: observable.ref,
|
|
76
|
+
touched: observable,
|
|
77
|
+
sorts: computed,
|
|
78
|
+
aggregationUse: computed,
|
|
79
|
+
aggregations: computed,
|
|
80
|
+
toggleColumn: action,
|
|
81
|
+
clearColumns: action,
|
|
82
|
+
addSortRow: action,
|
|
83
|
+
removeSortRow: action,
|
|
84
|
+
moveSortRow: action,
|
|
85
|
+
setSortColumn: action,
|
|
86
|
+
setSortDirection: action,
|
|
87
|
+
addRow: action,
|
|
88
|
+
removeRow: action,
|
|
89
|
+
setColumn: action,
|
|
90
|
+
setFunction: action,
|
|
91
|
+
setSetting: action,
|
|
92
|
+
setName: action,
|
|
93
|
+
});
|
|
94
|
+
this.columns = original.columns;
|
|
95
|
+
this.sortRows = sortRowsOf(original.sorts);
|
|
96
|
+
this.rows = aggregationRowsOf(
|
|
97
|
+
original.aggregations,
|
|
98
|
+
original.aggregationUse,
|
|
99
|
+
);
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
/** The sort keys the rows build, in order: a row without a column is left out */
|
|
103
|
+
get sorts(): ColumnDirection[] {
|
|
104
|
+
return sortsOfRows(this.sortRows);
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
/** Where the rows' functions are: a window, sorted when a sort row has a column */
|
|
108
|
+
get aggregationUse(): AggregationUse {
|
|
109
|
+
return { kind: 'window', sorted: this.sorts.length > 0 };
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
/** The window functions the rows build, in order (`isBuiltAggregationRow`) */
|
|
113
|
+
get aggregations(): ColumnAggregation[] {
|
|
114
|
+
return aggregationsOfRows(this.rows, this.aggregationUse);
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
/** Whether a row builds a window function */
|
|
118
|
+
isBuiltRow(row: CubeAggregationRow): boolean {
|
|
119
|
+
return isBuiltAggregationRow(row, this.aggregationUse);
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
/** Ticks or unticks a partition column; the columns then follow the input's order */
|
|
123
|
+
toggleColumn(name: string, schema: Schema): void {
|
|
124
|
+
this.columns = toggledColumns(this.columns, name, schema);
|
|
125
|
+
this.touched = true;
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
/** Unticks every partition column: one window over all the rows */
|
|
129
|
+
clearColumns(): void {
|
|
130
|
+
this.columns = [];
|
|
131
|
+
this.touched = true;
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
addSortRow(): void {
|
|
135
|
+
this.sortRows = [...this.sortRows, blankSortRow()];
|
|
136
|
+
this.touched = true;
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
removeSortRow(key: number): void {
|
|
140
|
+
this.sortRows = this.sortRows.filter((row) => row.key !== key);
|
|
141
|
+
this.touched = true;
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
/** Moves a sort row one place up (`-1`) or down (`1`), if it can go there */
|
|
145
|
+
moveSortRow(key: number, offset: -1 | 1): void {
|
|
146
|
+
this.sortRows = movedSortRows(this.sortRows, key, offset);
|
|
147
|
+
this.touched = true;
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
setSortColumn(key: number, column: string): void {
|
|
151
|
+
this.sortRows = this.sortRows.map((row) =>
|
|
152
|
+
row.key === key ? { ...row, column } : row,
|
|
153
|
+
);
|
|
154
|
+
this.touched = true;
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
setSortDirection(key: number, direction: SortDirection): void {
|
|
158
|
+
this.sortRows = this.sortRows.map((row) =>
|
|
159
|
+
row.key === key ? { ...row, direction } : row,
|
|
160
|
+
);
|
|
161
|
+
this.touched = true;
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
addRow(): void {
|
|
165
|
+
this.rows = [...this.rows, blankAggregationRow()];
|
|
166
|
+
this.touched = true;
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
removeRow(key: number): void {
|
|
170
|
+
this.rows = this.rows.filter((row) => row.key !== key);
|
|
171
|
+
this.touched = true;
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
private update(
|
|
175
|
+
key: number,
|
|
176
|
+
change: (row: CubeAggregationRow) => CubeAggregationRow,
|
|
177
|
+
): void {
|
|
178
|
+
this.rows = this.rows.map((row) => (row.key === key ? change(row) : row));
|
|
179
|
+
this.touched = true;
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
/** Picks the row's column; with no function yet, Count */
|
|
183
|
+
setColumn(key: number, column: string): void {
|
|
184
|
+
this.update(key, (row) => withRowColumn(row, column, this.aggregationUse));
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
/** Picks the row's function: Count rows and the rank functions take no column, the others one */
|
|
188
|
+
setFunction(key: number, fn: string): void {
|
|
189
|
+
this.update(key, (row) => withRowFunction(row, fn, this.aggregationUse));
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
/** Types the row's setting, Lag's and Lead's offset or NTile's bucket count, kept as text (PLAN §11.9) */
|
|
193
|
+
setSetting(key: number, setting: AggregationSetting, text: string): void {
|
|
194
|
+
this.update(key, (row) => withRowSetting(row, setting, text));
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
/** Types the row's name, kept exactly; the auto-name itself follows again */
|
|
198
|
+
setName(key: number, name: string): void {
|
|
199
|
+
this.update(key, (row) => withRowName(row, name, this.aggregationUse));
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
build(): Partition {
|
|
203
|
+
const { original, columns, sorts, aggregations } = this;
|
|
204
|
+
return !this.touched ||
|
|
205
|
+
(isSameList(columns, original.columns) &&
|
|
206
|
+
isSameSorts(sorts, original.sorts) &&
|
|
207
|
+
isSameAggregations(aggregations, original.aggregations))
|
|
208
|
+
? original
|
|
209
|
+
: original
|
|
210
|
+
.withColumns(columns)
|
|
211
|
+
.withSorts(sorts)
|
|
212
|
+
.withAggregations(aggregations);
|
|
213
|
+
}
|
|
214
|
+
}
|