@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
|
@@ -30,9 +30,19 @@ export const MAX_UNDO_STEPS = 100;
|
|
|
30
30
|
export enum LEGEND_CUBE_USER_DATA_KEY {
|
|
31
31
|
ROW_LIMIT = 'legend-cube.row-limit',
|
|
32
32
|
PALETTE_COLLAPSED = 'legend-cube.palette-collapsed',
|
|
33
|
+
/** The warehouse the viewer last picked for a data product cube (PLAN §6.8) */
|
|
34
|
+
DATA_PRODUCT_WAREHOUSE = 'legend-cube.data-product-warehouse',
|
|
33
35
|
}
|
|
34
36
|
|
|
35
37
|
export const UNSAVED_CUBE_NAME = 'Unsaved Query';
|
|
38
|
+
/** Why a source is disabled on a cube: it reads database tables or data products, never both (PLAN §6.8) */
|
|
39
|
+
export const OTHER_SOURCE_KIND_TITLE =
|
|
40
|
+
"This cube's sources are of another kind: a cube reads database tables or data products, never both";
|
|
41
|
+
|
|
42
|
+
/** Why no source can be added to a cube: the host doesn't serve the cube's kind of source (PLAN §6.8) */
|
|
43
|
+
export const UNSERVED_SOURCE_KIND_TITLE =
|
|
44
|
+
"This Legend deployment doesn't serve this cube's kind of source, so no source can be added to it";
|
|
45
|
+
|
|
36
46
|
/** Why a cube's edits are disabled: it was saved by a newer version (Settled before M1.8) */
|
|
37
47
|
export const READ_ONLY_CUBE_TITLE =
|
|
38
48
|
"This cube was saved by a newer version of Legend Cube, so it can't be changed or exported";
|
|
@@ -46,6 +56,7 @@ export enum CUBE_PENDING_LABEL {
|
|
|
46
56
|
EXECUTING_QUERY = 'executing query',
|
|
47
57
|
RENDERING_QUERY = 'rendering query',
|
|
48
58
|
REFRESHING_SOURCE = 'refreshing source',
|
|
59
|
+
TYPING_COLUMNS = 'typing new columns',
|
|
49
60
|
}
|
|
50
61
|
|
|
51
62
|
export const getRowLimitError = (text: string): string | undefined => {
|
|
@@ -87,8 +98,8 @@ const listColumns = (columns: readonly SchemaColumn[]): string =>
|
|
|
87
98
|
export const formatDisabledReasons = (reasons: readonly string[]): string =>
|
|
88
99
|
reasons.map((reason) => `• ${reason}`).join('\n');
|
|
89
100
|
|
|
90
|
-
/**
|
|
91
|
-
export const
|
|
101
|
+
/** A source's changes since the cube was saved, as its drift warning lists them */
|
|
102
|
+
export const getSchemaChangeList = (diff: SchemaDiff): string => {
|
|
92
103
|
const changes = [
|
|
93
104
|
...(diff.added.length ? [`added ${listColumns(diff.added)}`] : []),
|
|
94
105
|
...(diff.removed.length ? [`removed ${listColumns(diff.removed)}`] : []),
|
|
@@ -104,9 +115,13 @@ export const getSchemaDriftWarning = (diff: SchemaDiff): string => {
|
|
|
104
115
|
: []),
|
|
105
116
|
...(diff.reordered ? ['reordered its columns'] : []),
|
|
106
117
|
];
|
|
107
|
-
return
|
|
118
|
+
return changes.join('; ');
|
|
108
119
|
};
|
|
109
120
|
|
|
121
|
+
/** The warning on a source whose table changed since the cube was saved; the table's new columns are used */
|
|
122
|
+
export const getSchemaDriftWarning = (diff: SchemaDiff): string =>
|
|
123
|
+
`This table changed since the cube was saved: ${getSchemaChangeList(diff)}`;
|
|
124
|
+
|
|
110
125
|
/** Why the Sort editor's picker doesn't offer a column, after its type */
|
|
111
126
|
export const CUBE_SORT_COLUMN_DISABLED_REASON = {
|
|
112
127
|
NOT_SORTABLE: "can't be sorted",
|
|
@@ -118,9 +133,13 @@ export const CUBE_QUICK_ACTION_DISABLED_REASON = {
|
|
|
118
133
|
STALE_ROWS:
|
|
119
134
|
'Execute again: these rows are from an earlier version of the query.',
|
|
120
135
|
RUNNING: 'Wait for the run to finish.',
|
|
136
|
+
EDITING:
|
|
137
|
+
"Close the node editor first: these rows don't show the changes in it.",
|
|
121
138
|
UNREADABLE_VALUE: "This value can't be used in a filter.",
|
|
122
139
|
notSortable: (typeName: string): string =>
|
|
123
140
|
`Values of type ${typeName} can't be sorted.`,
|
|
141
|
+
notGroupable: (typeName: string): string =>
|
|
142
|
+
`Values of type ${typeName} can't be grouped.`,
|
|
124
143
|
notComparable: (typeName: string): string =>
|
|
125
144
|
`Values of type ${typeName} can't be compared.`,
|
|
126
145
|
};
|
|
@@ -129,6 +148,10 @@ export const CUBE_QUICK_ACTION_DISABLED_REASON = {
|
|
|
129
148
|
export const FILTER_FLOAT_COMPARISON_HINT =
|
|
130
149
|
'exact comparison on floating-point columns may not match';
|
|
131
150
|
|
|
151
|
+
/** The Filter and Join editors' warning on a column that can hold both dates and timestamps (PLAN §11.5) */
|
|
152
|
+
export const DATE_OR_TIMESTAMP_WARNING =
|
|
153
|
+
'this column can hold both dates and timestamps, as Convert types made it a Date: a date reads as midnight, so it matches a timestamp only at midnight';
|
|
154
|
+
|
|
132
155
|
/** The Filter editor's note on NULLs (D4): negated conditions keep them */
|
|
133
156
|
export const FILTER_NULL_NOTE =
|
|
134
157
|
'A negated condition (is not, does not contain, is not in list of, Not) also keeps the rows where its column is empty (NULL).';
|
|
@@ -138,6 +161,7 @@ export enum CUBE_EDITOR_CLOSED_REASON {
|
|
|
138
161
|
NODE_CHANGED = 'nodeChanged',
|
|
139
162
|
NODE_REMOVED = 'nodeRemoved',
|
|
140
163
|
CUBE_REPLACED = 'cubeReplaced',
|
|
164
|
+
CANNOT_APPLY = 'cannotApply',
|
|
141
165
|
}
|
|
142
166
|
|
|
143
167
|
/** The notice of a node editor that closed by itself, dropping its edits (M1.8b) */
|
|
@@ -150,7 +174,9 @@ export const getEditorClosedNotice = (
|
|
|
150
174
|
? `${nodeId} changed`
|
|
151
175
|
: reason === CUBE_EDITOR_CLOSED_REASON.NODE_REMOVED
|
|
152
176
|
? `${nodeId} was removed`
|
|
153
|
-
:
|
|
177
|
+
: reason === CUBE_EDITOR_CLOSED_REASON.CANNOT_APPLY
|
|
178
|
+
? `The query can't take the changes to ${nodeId}`
|
|
179
|
+
: 'Another cube was opened';
|
|
154
180
|
return `${cause}, so the editor of ${nodeId} closed without applying its changes.`;
|
|
155
181
|
};
|
|
156
182
|
|
|
@@ -166,6 +192,138 @@ export const SLICE_RANGE_HINT =
|
|
|
166
192
|
export const DISTINCT_EDITOR_TEXT =
|
|
167
193
|
'Keeps one row of each set of identical rows. There is nothing to set.';
|
|
168
194
|
|
|
195
|
+
/** The Concat editor's text: what Concat requires of its inputs (PLAN §11.5) */
|
|
196
|
+
export const CONCAT_EDITOR_TEXT =
|
|
197
|
+
'Gives the rows of both inputs, keeping duplicates, in no particular order. Both must have the same columns, matched by position: the same names, in the same order, with the same types.';
|
|
198
|
+
|
|
199
|
+
/** What the Concat editor's Convert types setting does (PLAN §11.5, Q5) */
|
|
200
|
+
export const CONCAT_CONVERT_TYPES_HINT =
|
|
201
|
+
'Converts types that differ within numbers, strings or dates to the type they share, e.g. Varchar(15) and Varchar(40) to String.';
|
|
202
|
+
|
|
203
|
+
/** What the Concat editor says when a fix would make its inputs match only with Convert types ticked (PLAN §11.5) */
|
|
204
|
+
export const CONCAT_FIX_NEEDS_CONVERT_TEXT =
|
|
205
|
+
'With Convert types ticked, Cube can rename or drop columns to make the inputs match.';
|
|
206
|
+
|
|
207
|
+
/** What the Concat editor says when Convert types would make its inputs match (PLAN §11.5, Q5) */
|
|
208
|
+
export const CONCAT_CONVERT_FIX_TEXT =
|
|
209
|
+
'The types differ, but converting them to the type they share makes the inputs match:';
|
|
210
|
+
export const CONCAT_CONVERT_FIX_TITLE = 'Tick Convert types; Apply stores it';
|
|
211
|
+
|
|
212
|
+
/** What the Concat editor's Rename autofix says it will do (PLAN §11.5, Q6) */
|
|
213
|
+
export const CONCAT_RENAME_FIX_TEXT =
|
|
214
|
+
"The second input's columns can take the first input's names:";
|
|
215
|
+
export const CONCAT_RENAME_FIX_TITLE =
|
|
216
|
+
"Add a Rename before the second input that gives these columns the first input's names, as one step to undo";
|
|
217
|
+
|
|
218
|
+
/** What the Concat editor's Restrict autofix says it will do, for the input it drops columns from (PLAN §11.5, Q6) */
|
|
219
|
+
export const getConcatRestrictFixText = (
|
|
220
|
+
input: string,
|
|
221
|
+
other: string,
|
|
222
|
+
): string =>
|
|
223
|
+
`The ${input} input has columns the ${other} doesn't, which can be dropped:`;
|
|
224
|
+
export const getConcatRestrictFixTitle = (
|
|
225
|
+
input: string,
|
|
226
|
+
other: string,
|
|
227
|
+
): string =>
|
|
228
|
+
`Add a Restrict before the ${input} input that keeps only the ${other} input's columns, as one step to undo`;
|
|
229
|
+
|
|
230
|
+
/** The Concat editor's warning on columns whose real type Cube doesn't know (PLAN §8.7) */
|
|
231
|
+
export const getConcatUntypedWarning = (columns: readonly string[]): string =>
|
|
232
|
+
`${CUBE_TABLE_FLAG_LABELS[CubeTableFlag.TYPE_UNKNOWN].label}: Cube doesn't know the real type of ${columns.join(', ')}, so the database may not combine the inputs' values`;
|
|
233
|
+
|
|
234
|
+
/** Why the Group editor can't take a column as a key (PLAN §11.5) */
|
|
235
|
+
export const CUBE_GROUP_COLUMN_DISABLED_REASON = "can't be grouped";
|
|
236
|
+
|
|
237
|
+
/** What the Group editor says about its aggregations (PLAN §11.5; Count counts non-empty values, D4) */
|
|
238
|
+
export const GROUP_EDITOR_NOTES = [
|
|
239
|
+
'Count counts the values that are not empty; Count Rows counts every row.',
|
|
240
|
+
'Distinct Value is the value when the group has exactly one distinct value that is not empty, and empty otherwise.',
|
|
241
|
+
'With no group column, the result is one row, even when there are no rows.',
|
|
242
|
+
];
|
|
243
|
+
|
|
244
|
+
/** Why the Partition editor won't tick a column that can't be compared (PLAN §11.6) */
|
|
245
|
+
export const CUBE_PARTITION_COLUMN_DISABLED_REASON = "can't be partitioned by";
|
|
246
|
+
|
|
247
|
+
/** What a Partition row shows in the column's place for a function that takes none (PLAN §11.6) */
|
|
248
|
+
export const getPartitionNoColumnText = (fn: string): string =>
|
|
249
|
+
fn === 'CountRows' ? 'Every row' : 'By the sort columns';
|
|
250
|
+
|
|
251
|
+
/** What the Partition editor says about its window functions (PLAN §11.6: D5's frames, Q2, Q3; §11.9) */
|
|
252
|
+
export const PARTITION_EDITOR_NOTES = [
|
|
253
|
+
'With sort columns, the aggregations (Count to Max, and Count Rows) run from the first row of the partition to the current row, and rows that tie on the sort columns count together: a Distinct Value is then the one value so far. Without sort columns, they cover the whole partition.',
|
|
254
|
+
"Rank, Dense Rank and Row Number need a sort column. Tied rows share a rank: Rank then skips numbers and Dense Rank doesn't. Row Number numbers every row, and rows tied on this node's sort columns get their numbers in no set order: add a sort column that tells them apart, such as an id, for a stable top N.",
|
|
255
|
+
'NTile, Percent Rank and Cumulative Distribution need a sort column too. NTile splits each partition into buckets of near-equal size, numbered from 1 in the sort order; Percent Rank and Cumulative Distribution give each row its place in its partition, from 0 to 1.',
|
|
256
|
+
"Lag and Lead read a column from the row so many rows before or after in the sort order, and are empty at the partition's edges. First and Last read it from the partition's first and last rows, the same on every row. They need a sort column, and rows tied on it may give any of them.",
|
|
257
|
+
"On ClickHouse, First and Last skip empty values, and Lag and Lead show a column's default, such as 0, at the partition's edges instead of empty, unless the column can be empty there.",
|
|
258
|
+
"Their sort columns also make this node's other functions run. For totals over the whole partition, add another Apply Window Functions without sort columns.",
|
|
259
|
+
'Empty sort values come last when ascending and first when descending on H2; other databases may differ.',
|
|
260
|
+
"A Sort before this node doesn't order the window: its sort columns do. The rows keep the order they came in.",
|
|
261
|
+
'Count counts the values that are not empty; Count Rows counts every row.',
|
|
262
|
+
'Some databases, such as Postgres, SQL Server, Databricks and Trino, refuse Distinct Count and Distinct Value in a window.',
|
|
263
|
+
];
|
|
264
|
+
|
|
265
|
+
/** Why a column of the Left input can't be a difference column (PLAN §11.7) */
|
|
266
|
+
export const CUBE_DIFFERENCE_COLUMN_REASONS = Object.freeze({
|
|
267
|
+
JOIN_COLUMN: 'a join column',
|
|
268
|
+
NOT_NUMERIC: 'not a number',
|
|
269
|
+
NOT_IN_RIGHT: 'not in the Right input',
|
|
270
|
+
TYPE_DIFFERS: (rightType: string): string =>
|
|
271
|
+
`${rightType} in the Right input`,
|
|
272
|
+
});
|
|
273
|
+
|
|
274
|
+
/** What the Difference editor says about its output (spec §7.12, PLAN §11.7) */
|
|
275
|
+
export const DIFFERENCE_EDITOR_NOTES = [
|
|
276
|
+
"For each difference column x, the output has x_1, the Left input's value, x_2, the Right input's value, and x_valueDifference, x_1 minus x_2.",
|
|
277
|
+
'Rows only one input has are kept, with empty values for the other input, and an empty value counts as 0 in the difference.',
|
|
278
|
+
'A difference column needs the same number type in both inputs; the difference of integers is an Integer, of floats a Float, and of decimals a Number.',
|
|
279
|
+
];
|
|
280
|
+
|
|
281
|
+
/** What the Extend editor says about its expressions (PLAN §11.7) */
|
|
282
|
+
export const EXTEND_EDITOR_NOTES = [
|
|
283
|
+
'Write each expression as a lambda of one row, such as x | $x.PRICE * $x.QTY: $x.PRICE reads the column PRICE. A column can use the new columns above it.',
|
|
284
|
+
'A column that can be empty needs ->toOne() before arithmetic, such as $x.QTY->toOne() * 2; an empty value still gives an empty result. Every new column can be empty.',
|
|
285
|
+
"Validate (F10) checks the expressions with the engine, types them, and plans them for this cube's database: some functions type, but not every database runs them.",
|
|
286
|
+
];
|
|
287
|
+
|
|
288
|
+
/** Why the Extend editor's Apply waits (PLAN §11.7) */
|
|
289
|
+
export const EXTEND_APPLY_DISABLED_REASON = Object.freeze({
|
|
290
|
+
NOT_VALIDATED: 'Validate the expressions first (F10)',
|
|
291
|
+
VALIDATING: 'Validating the expressions',
|
|
292
|
+
});
|
|
293
|
+
|
|
294
|
+
/** The warning on an Extend whose saved types the engine couldn't check again, e.g. offline (PLAN §11.7) */
|
|
295
|
+
export const getExtendRetypeWarning = (firstLine: string): string =>
|
|
296
|
+
`Could not check these columns' types again, so they keep their saved ones: ${firstLine}`;
|
|
297
|
+
|
|
298
|
+
/** The notice of a node editor kept open, since its changes can't be applied yet, e.g. an Extend's expressions not validated */
|
|
299
|
+
export const getEditorKeptOpenNotice = (
|
|
300
|
+
nodeId: string,
|
|
301
|
+
waiting: string,
|
|
302
|
+
): string =>
|
|
303
|
+
`The editor of ${nodeId} stays open, since its changes can't be applied yet: ${waiting}, or Cancel to drop them.`;
|
|
304
|
+
|
|
305
|
+
/** The hint after an engine error on a column that can be empty, in arithmetic (PLAN §11.7) */
|
|
306
|
+
export const EXTEND_TO_ONE_HINT =
|
|
307
|
+
'A column that can be empty needs ->toOne() first, such as $x.QTY->toOne() + 1.';
|
|
308
|
+
|
|
309
|
+
/** The problem a database refusing an Extend's plan gives (PLAN §11.7) */
|
|
310
|
+
export const getExtendPlanProblem = (
|
|
311
|
+
databaseType: string | undefined,
|
|
312
|
+
detail: string,
|
|
313
|
+
): string =>
|
|
314
|
+
`${databaseType ? `${databaseType} can't run it` : "The database can't run it"}: ${detail}`;
|
|
315
|
+
|
|
169
316
|
/** Under the Rename editor's rows: the rule for new column names (PLAN §11.4) */
|
|
170
317
|
export const COLUMN_NAME_RULES_HINT =
|
|
171
318
|
'Names can\'t start or end with a space, or contain " or \\ or control characters, and have at most 128 characters.';
|
|
319
|
+
|
|
320
|
+
/**
|
|
321
|
+
* A node type's label as the node editor's title shows it, each word
|
|
322
|
+
* capitalised (QUESTIONS.md U1(a)), e.g. 'Take First <x> Rows'; the registry
|
|
323
|
+
* keeps its own wording
|
|
324
|
+
*/
|
|
325
|
+
export const toEditorTitle = (label: string): string =>
|
|
326
|
+
label.replace(/(?<=^|\s)[a-z]/gu, (letter) => letter.toUpperCase());
|
|
327
|
+
|
|
328
|
+
/** The source dialog's body until a tab is chosen, opened from the empty canvas (spec §17.8, U4(b)) */
|
|
329
|
+
export const SELECT_SOURCE_TYPE_PROMPT = 'Select source type above';
|
|
@@ -0,0 +1,25 @@
|
|
|
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
|
+
// The words of Legend Cube's Project Database tab (PLAN §6.3)
|
|
18
|
+
|
|
19
|
+
export const CUBE_PROJECT_LABEL = Object.freeze({
|
|
20
|
+
LOADING_PROJECTS: "Listing the depot's projects…",
|
|
21
|
+
LOADING_VERSIONS: "Listing the project's versions…",
|
|
22
|
+
LATEST: '(latest)',
|
|
23
|
+
NO_RUNTIME:
|
|
24
|
+
"No runtime of this project connects to this Database, so its tables can't be read. Pick another Database.",
|
|
25
|
+
});
|
|
@@ -25,6 +25,7 @@ export enum LEGEND_CUBE_TEST_ID {
|
|
|
25
25
|
PALETTE_ITEM = 'legend-cube__palette-item',
|
|
26
26
|
NODE_EDITOR = 'legend-cube__node-editor',
|
|
27
27
|
EDITOR_NOTICE = 'legend-cube__editor-notice',
|
|
28
|
+
ENTRY_SOURCE_ERROR = 'legend-cube__entry-source-error',
|
|
28
29
|
FILTER_CONDITION = 'legend-cube__filter-condition',
|
|
29
30
|
RESULT_GRID = 'legend-cube__result-grid',
|
|
30
31
|
GRID_TOOLBAR = 'legend-cube__grid-toolbar',
|
|
@@ -50,4 +50,4 @@ export const TEST__getCanvasNodes = (): HTMLElement[] =>
|
|
|
50
50
|
|
|
51
51
|
/** The node's tooltip, one line an item: errors, warnings, description, id */
|
|
52
52
|
export const TEST__getCanvasNodeTooltip = (node: HTMLElement): string[] =>
|
|
53
|
-
(node.getAttribute('
|
|
53
|
+
(node.getAttribute('aria-description') ?? '').split('\n');
|
|
@@ -0,0 +1,45 @@
|
|
|
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 axios, { type AxiosResponse } from 'axios';
|
|
18
|
+
import {
|
|
19
|
+
ContentType,
|
|
20
|
+
HttpHeader,
|
|
21
|
+
type PlainObject,
|
|
22
|
+
} from '@finos/legend-shared';
|
|
23
|
+
import { ENGINE_TEST_SUPPORT_API_URL } from '@finos/legend-graph/test';
|
|
24
|
+
|
|
25
|
+
// Engine calls for the engine tests of direct connections (PLAN §6.8), as
|
|
26
|
+
// plain JSON: the connection must reach the engine exactly as it is saved,
|
|
27
|
+
// which legend-graph's connection serializers don't do (they drop a DuckDB
|
|
28
|
+
// connection's setup SQL)
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* Reads a database through a connection: the engine introspects it and
|
|
32
|
+
* returns a model holding one Database, `{_type: 'data', elements}`
|
|
33
|
+
*/
|
|
34
|
+
export const CUBE_ENGINE_TEST__schemaExploration = async (
|
|
35
|
+
input: object,
|
|
36
|
+
): Promise<PlainObject> =>
|
|
37
|
+
(
|
|
38
|
+
await axios.post<unknown, AxiosResponse<PlainObject>>(
|
|
39
|
+
`${ENGINE_TEST_SUPPORT_API_URL}/pure/v1/utilities/database/schemaExploration`,
|
|
40
|
+
input,
|
|
41
|
+
{
|
|
42
|
+
headers: { [HttpHeader.CONTENT_TYPE]: ContentType.APPLICATION_JSON },
|
|
43
|
+
},
|
|
44
|
+
)
|
|
45
|
+
).data;
|
|
@@ -0,0 +1,70 @@
|
|
|
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 { PlainObject } from '@finos/legend-shared';
|
|
18
|
+
|
|
19
|
+
// Connections to small, self-contained test databases, as the protocol JSON a
|
|
20
|
+
// direct-connection cube saves (PLAN §6.8). Each setup first drops what it
|
|
21
|
+
// creates, because the engine keeps an H2 server and a DuckDB connection
|
|
22
|
+
// between calls, and uses its own schema, so tests can share an engine
|
|
23
|
+
|
|
24
|
+
export const DIRECT_H2_SCHEMA = 'CUBE_DIRECT';
|
|
25
|
+
export const DIRECT_DUCKDB_SCHEMA = 'cube_direct';
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* An H2 database the engine creates in its own H2 server, in the schema given:
|
|
29
|
+
* each test file uses its own, as files run at once against one engine
|
|
30
|
+
*/
|
|
31
|
+
export const directH2Connection = (schema: string): PlainObject => ({
|
|
32
|
+
_type: 'RelationalDatabaseConnection',
|
|
33
|
+
type: 'H2',
|
|
34
|
+
databaseType: 'H2',
|
|
35
|
+
datasourceSpecification: {
|
|
36
|
+
_type: 'h2Local',
|
|
37
|
+
testDataSetupSqls: [
|
|
38
|
+
`drop schema if exists ${schema} cascade`,
|
|
39
|
+
`create schema ${schema}`,
|
|
40
|
+
`create table ${schema}.ORDERS (ORDER_ID INT PRIMARY KEY, CUSTOMER_ID VARCHAR(5) NOT NULL, AMOUNT DECIMAL(10,2))`,
|
|
41
|
+
`insert into ${schema}.ORDERS values (1, 'ALFKI', 12.34), (2, 'ANATR', 5.00)`,
|
|
42
|
+
],
|
|
43
|
+
},
|
|
44
|
+
authenticationStrategy: { _type: 'h2Default' },
|
|
45
|
+
});
|
|
46
|
+
|
|
47
|
+
/**
|
|
48
|
+
* An in-memory DuckDB database (an empty path), so no file is read or
|
|
49
|
+
* written, in the schema given
|
|
50
|
+
*/
|
|
51
|
+
export const directDuckDBConnection = (schema: string): PlainObject => ({
|
|
52
|
+
_type: 'RelationalDatabaseConnection',
|
|
53
|
+
type: 'DuckDB',
|
|
54
|
+
databaseType: 'DuckDB',
|
|
55
|
+
datasourceSpecification: {
|
|
56
|
+
_type: 'duckDB',
|
|
57
|
+
path: '',
|
|
58
|
+
testDataSetupSqls: [
|
|
59
|
+
`drop schema if exists ${schema} cascade`,
|
|
60
|
+
`create schema ${schema}`,
|
|
61
|
+
`create table ${schema}.orders (order_id INTEGER PRIMARY KEY, customer_id VARCHAR(5) NOT NULL, amount DECIMAL(10,2))`,
|
|
62
|
+
`insert into ${schema}.orders values (1, 'ALFKI', 12.34), (2, 'ANATR', 5.00)`,
|
|
63
|
+
],
|
|
64
|
+
},
|
|
65
|
+
authenticationStrategy: { _type: 'test' },
|
|
66
|
+
});
|
|
67
|
+
|
|
68
|
+
export const DIRECT_H2_CONNECTION = directH2Connection(DIRECT_H2_SCHEMA);
|
|
69
|
+
export const DIRECT_DUCKDB_CONNECTION =
|
|
70
|
+
directDuckDBConnection(DIRECT_DUCKDB_SCHEMA);
|
|
@@ -170,3 +170,41 @@ export const CUBE_ENGINE_TEST__generatePlanSql = async (
|
|
|
170
170
|
visit(parseLosslessJSON(data));
|
|
171
171
|
return sql;
|
|
172
172
|
};
|
|
173
|
+
/**
|
|
174
|
+
* The protocol JSON of a value specification's text, parsed with its source
|
|
175
|
+
* information under the source id, given as the client's unread response
|
|
176
|
+
* (an Extend column's expression, PLAN §11.7), so it is read losslessly
|
|
177
|
+
*/
|
|
178
|
+
export const CUBE_ENGINE_TEST__grammarToJson_valueSpecification = async (
|
|
179
|
+
code: string,
|
|
180
|
+
sourceId: string,
|
|
181
|
+
): Promise<{ ok: boolean; status: number; text: () => Promise<string> }> => {
|
|
182
|
+
const response = await axios.post<unknown, AxiosResponse<string>>(
|
|
183
|
+
`${PURE_API}/grammar/grammarToJson/valueSpecification`,
|
|
184
|
+
code,
|
|
185
|
+
{
|
|
186
|
+
headers: { [HttpHeader.CONTENT_TYPE]: ContentType.TEXT_PLAIN },
|
|
187
|
+
params: { sourceId, returnSourceInformation: true },
|
|
188
|
+
responseType: 'text',
|
|
189
|
+
transformResponse: (data: string) => data,
|
|
190
|
+
validateStatus: () => true,
|
|
191
|
+
},
|
|
192
|
+
);
|
|
193
|
+
return {
|
|
194
|
+
ok: response.status >= 200 && response.status < 300,
|
|
195
|
+
status: response.status,
|
|
196
|
+
text: async () => response.data,
|
|
197
|
+
};
|
|
198
|
+
};
|
|
199
|
+
|
|
200
|
+
/** Generates the execution plan of a query, never running it; a body given as text is sent as it is */
|
|
201
|
+
export const CUBE_ENGINE_TEST__generatePlan = async (
|
|
202
|
+
input: object | string,
|
|
203
|
+
): Promise<PlainObject> =>
|
|
204
|
+
(
|
|
205
|
+
await axios.post<unknown, AxiosResponse<PlainObject>>(
|
|
206
|
+
`${PURE_API}/execution/generatePlan`,
|
|
207
|
+
input,
|
|
208
|
+
{ headers: JSON_HEADERS },
|
|
209
|
+
)
|
|
210
|
+
).data;
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) 2026-present, Goldman Sachs
|
|
3
|
+
*
|
|
4
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
* you may not use this file except in compliance with the License.
|
|
6
|
+
* You may obtain a copy of the License at
|
|
7
|
+
*
|
|
8
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
*
|
|
10
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
* See the License for the specific language governing permissions and
|
|
14
|
+
* limitations under the License.
|
|
15
|
+
*/
|
|
16
|
+
|
|
17
|
+
import {
|
|
18
|
+
buildSchemasAndValidity,
|
|
19
|
+
Extend,
|
|
20
|
+
getExtendSignature,
|
|
21
|
+
type JsonObject,
|
|
22
|
+
PrimitiveType,
|
|
23
|
+
type Query,
|
|
24
|
+
} from '@finos/legend-cube';
|
|
25
|
+
|
|
26
|
+
// Extend columns for tests (PLAN §11.7), written as the engine's JSON, as a
|
|
27
|
+
// column stores it: number literals as their digits
|
|
28
|
+
|
|
29
|
+
/** `x | <body>` and the pieces of a body */
|
|
30
|
+
export const TEST__expression = {
|
|
31
|
+
lambda: (body: JsonObject): JsonObject => ({
|
|
32
|
+
_type: 'lambda',
|
|
33
|
+
parameters: [{ _type: 'var', name: 'x' }],
|
|
34
|
+
body: [body],
|
|
35
|
+
}),
|
|
36
|
+
/** `$x.<name>` */
|
|
37
|
+
column: (name: string): JsonObject => ({
|
|
38
|
+
_type: 'property',
|
|
39
|
+
property: name,
|
|
40
|
+
parameters: [{ _type: 'var', name: 'x' }],
|
|
41
|
+
}),
|
|
42
|
+
call: (name: string, ...parameters: JsonObject[]): JsonObject => ({
|
|
43
|
+
_type: 'func',
|
|
44
|
+
function: name,
|
|
45
|
+
parameters,
|
|
46
|
+
}),
|
|
47
|
+
/** The two operands of `+`, `*`, … */
|
|
48
|
+
pair: (first: JsonObject, second: JsonObject): JsonObject => ({
|
|
49
|
+
_type: 'collection',
|
|
50
|
+
multiplicity: { lowerBound: 2, upperBound: 2 },
|
|
51
|
+
values: [first, second],
|
|
52
|
+
}),
|
|
53
|
+
integer: (value: number): JsonObject => ({
|
|
54
|
+
_type: 'integer',
|
|
55
|
+
value: String(value),
|
|
56
|
+
}),
|
|
57
|
+
};
|
|
58
|
+
|
|
59
|
+
/** A new column: its name, its lambda, and the type the engine gives it */
|
|
60
|
+
export type TEST__ExtendColumn = readonly [string, JsonObject, string];
|
|
61
|
+
|
|
62
|
+
/**
|
|
63
|
+
* An Extend of these columns, typed as given for the input Cube infers for
|
|
64
|
+
* `input`'s selected node, so it is valid without the engine; the engine
|
|
65
|
+
* tests check the types are the engine's. With an invalid input, untyped.
|
|
66
|
+
*/
|
|
67
|
+
export const TEST__typedExtend = (
|
|
68
|
+
id: string,
|
|
69
|
+
input: Query,
|
|
70
|
+
columns: readonly TEST__ExtendColumn[],
|
|
71
|
+
): Extend => {
|
|
72
|
+
const schema = buildSchemasAndValidity(input).schemas.get(
|
|
73
|
+
input.selected ?? '',
|
|
74
|
+
);
|
|
75
|
+
const extendColumns = columns.map(([name, lambda]) => ({
|
|
76
|
+
name,
|
|
77
|
+
code: name,
|
|
78
|
+
lambda,
|
|
79
|
+
}));
|
|
80
|
+
// an invalid input, e.g. a table not resolved yet: nothing to type it for
|
|
81
|
+
if (!schema) {
|
|
82
|
+
return new Extend(id, extendColumns);
|
|
83
|
+
}
|
|
84
|
+
return new Extend(id, extendColumns, {
|
|
85
|
+
kind: 'typed',
|
|
86
|
+
signature: getExtendSignature(schema, extendColumns),
|
|
87
|
+
types: columns.map(([, , type]) => PrimitiveType.get(type)),
|
|
88
|
+
});
|
|
89
|
+
};
|
|
90
|
+
|
|
91
|
+
/** `a: x | $x.ORDER_ID + 1` and `b: x | $x.a * 2`, the second using the first, both Integer */
|
|
92
|
+
export const TEST__ORDER_ID_EXTEND_COLUMNS: readonly TEST__ExtendColumn[] = [
|
|
93
|
+
[
|
|
94
|
+
'a',
|
|
95
|
+
TEST__expression.lambda(
|
|
96
|
+
TEST__expression.call(
|
|
97
|
+
'plus',
|
|
98
|
+
TEST__expression.pair(
|
|
99
|
+
TEST__expression.column('ORDER_ID'),
|
|
100
|
+
TEST__expression.integer(1),
|
|
101
|
+
),
|
|
102
|
+
),
|
|
103
|
+
),
|
|
104
|
+
'Integer',
|
|
105
|
+
],
|
|
106
|
+
[
|
|
107
|
+
'b',
|
|
108
|
+
TEST__expression.lambda(
|
|
109
|
+
TEST__expression.call(
|
|
110
|
+
'times',
|
|
111
|
+
TEST__expression.pair(
|
|
112
|
+
TEST__expression.column('a'),
|
|
113
|
+
TEST__expression.integer(2),
|
|
114
|
+
),
|
|
115
|
+
),
|
|
116
|
+
),
|
|
117
|
+
'Integer',
|
|
118
|
+
],
|
|
119
|
+
];
|