@finos/legend-cube-builder 0.0.4 → 0.0.5
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 +9 -3
- package/docs/adding-an-operation.md +22 -12
- package/docs/demo/DEMO-FAST-NOTES.md +67 -0
- package/docs/demo/README.md +102 -0
- package/docs/demo/specs/duckdb-sales-pivot.cube.json +110 -0
- package/docs/demo/specs/trades-desks-1-joined.cube.json +123 -0
- package/docs/demo/specs/trades-desks-2-grouped.cube.json +140 -0
- package/docs/demo/specs/trades-desks-3-ranked.cube.json +158 -0
- package/docs/demo/specs/trades-desks-4-extended.cube.json +208 -0
- package/docs/demo/specs/trades-desks-5-final.cube.json +248 -0
- package/docs/hosting.md +50 -3
- package/docs/testing.md +32 -0
- package/lib/__lib__/LegendCubeCommand.d.ts +2 -0
- package/lib/__lib__/LegendCubeCommand.d.ts.map +1 -1
- package/lib/__lib__/LegendCubeCommand.js +7 -0
- package/lib/__lib__/LegendCubeCommand.js.map +1 -1
- package/lib/__lib__/LegendCubeFunctionLabels.d.ts +29 -0
- package/lib/__lib__/LegendCubeFunctionLabels.d.ts.map +1 -0
- package/lib/__lib__/LegendCubeFunctionLabels.js +31 -0
- package/lib/__lib__/LegendCubeFunctionLabels.js.map +1 -0
- package/lib/__lib__/LegendCubeHelpText.d.ts +5 -1
- package/lib/__lib__/LegendCubeHelpText.d.ts.map +1 -1
- package/lib/__lib__/LegendCubeHelpText.js +14 -2
- package/lib/__lib__/LegendCubeHelpText.js.map +1 -1
- package/lib/__lib__/LegendCubeLabels.d.ts +100 -8
- package/lib/__lib__/LegendCubeLabels.d.ts.map +1 -1
- package/lib/__lib__/LegendCubeLabels.js +129 -14
- package/lib/__lib__/LegendCubeLabels.js.map +1 -1
- package/lib/__lib__/LegendCubeProjectSourceLabels.d.ts +26 -0
- package/lib/__lib__/LegendCubeProjectSourceLabels.d.ts.map +1 -0
- package/lib/__lib__/LegendCubeProjectSourceLabels.js +26 -0
- package/lib/__lib__/LegendCubeProjectSourceLabels.js.map +1 -0
- package/lib/__lib__/LegendCubeServiceLabels.d.ts +27 -0
- package/lib/__lib__/LegendCubeServiceLabels.d.ts.map +1 -0
- package/lib/__lib__/LegendCubeServiceLabels.js +32 -0
- package/lib/__lib__/LegendCubeServiceLabels.js.map +1 -0
- package/lib/__lib__/LegendCubeTesting.d.ts +7 -0
- package/lib/__lib__/LegendCubeTesting.d.ts.map +1 -1
- package/lib/__lib__/LegendCubeTesting.js +7 -0
- package/lib/__lib__/LegendCubeTesting.js.map +1 -1
- package/lib/__test-utils__/CubeEngineTestSupport.d.ts +1 -1
- package/lib/__test-utils__/CubeEngineTestSupport.d.ts.map +1 -1
- package/lib/__test-utils__/CubeEngineTestSupport.js +2 -2
- package/lib/__test-utils__/CubeEngineTestSupport.js.map +1 -1
- package/lib/__test-utils__/CubeExpressionTestUtils.d.ts +8 -1
- package/lib/__test-utils__/CubeExpressionTestUtils.d.ts.map +1 -1
- package/lib/__test-utils__/CubeExpressionTestUtils.js +20 -3
- package/lib/__test-utils__/CubeExpressionTestUtils.js.map +1 -1
- package/lib/__test-utils__/CubeFunctionTestOutline.d.ts +26 -0
- package/lib/__test-utils__/CubeFunctionTestOutline.d.ts.map +1 -0
- package/lib/__test-utils__/CubeFunctionTestOutline.js +56 -0
- package/lib/__test-utils__/CubeFunctionTestOutline.js.map +1 -0
- package/lib/__test-utils__/CubeLambdaCorpus.d.ts +36 -0
- package/lib/__test-utils__/CubeLambdaCorpus.d.ts.map +1 -0
- package/lib/__test-utils__/CubeLambdaCorpus.js +83 -0
- package/lib/__test-utils__/CubeLambdaCorpus.js.map +1 -0
- package/lib/__test-utils__/CubePageTestUtils.d.ts +6 -0
- package/lib/__test-utils__/CubePageTestUtils.d.ts.map +1 -1
- package/lib/__test-utils__/CubePageTestUtils.js +21 -0
- package/lib/__test-utils__/CubePageTestUtils.js.map +1 -1
- package/lib/__test-utils__/CubeTestApplication.d.ts +9 -0
- package/lib/__test-utils__/CubeTestApplication.d.ts.map +1 -1
- package/lib/__test-utils__/CubeTestApplication.js +16 -0
- package/lib/__test-utils__/CubeTestApplication.js.map +1 -1
- package/lib/__test-utils__/FakeCubeEngine.d.ts +5 -0
- package/lib/__test-utils__/FakeCubeEngine.d.ts.map +1 -1
- package/lib/__test-utils__/FakeCubeEngine.js +17 -0
- package/lib/__test-utils__/FakeCubeEngine.js.map +1 -1
- package/lib/__test-utils__/FakeCubeIngestCatalog.d.ts +7 -1
- package/lib/__test-utils__/FakeCubeIngestCatalog.d.ts.map +1 -1
- package/lib/__test-utils__/FakeCubeIngestCatalog.js +16 -0
- package/lib/__test-utils__/FakeCubeIngestCatalog.js.map +1 -1
- package/lib/__test-utils__/FakeCubeServiceCatalog.d.ts +26 -0
- package/lib/__test-utils__/FakeCubeServiceCatalog.d.ts.map +1 -0
- package/lib/__test-utils__/FakeCubeServiceCatalog.js +40 -0
- package/lib/__test-utils__/FakeCubeServiceCatalog.js.map +1 -0
- package/lib/components/CubeAddItems.d.ts.map +1 -1
- package/lib/components/CubeAddItems.js +9 -6
- package/lib/components/CubeAddItems.js.map +1 -1
- package/lib/components/CubeDialogTheme.d.ts +25 -0
- package/lib/components/CubeDialogTheme.d.ts.map +1 -0
- package/lib/components/CubeDialogTheme.js +25 -0
- package/lib/components/CubeDialogTheme.js.map +1 -0
- package/lib/components/CubeEditor.d.ts +12 -1
- package/lib/components/CubeEditor.d.ts.map +1 -1
- package/lib/components/CubeEditor.js +16 -14
- package/lib/components/CubeEditor.js.map +1 -1
- package/lib/components/CubeFileMenu.d.ts +28 -0
- package/lib/components/CubeFileMenu.d.ts.map +1 -0
- package/lib/components/CubeFileMenu.js +77 -0
- package/lib/components/CubeFileMenu.js.map +1 -0
- package/lib/components/CubeLambdaImportBanner.d.ts +26 -0
- package/lib/components/CubeLambdaImportBanner.d.ts.map +1 -0
- package/lib/components/CubeLambdaImportBanner.js +47 -0
- package/lib/components/CubeLambdaImportBanner.js.map +1 -0
- package/lib/components/CubeNodeIcon.d.ts.map +1 -1
- package/lib/components/CubeNodeIcon.js +5 -1
- package/lib/components/CubeNodeIcon.js.map +1 -1
- package/lib/components/CubeSchemaColumnsTable.d.ts.map +1 -1
- package/lib/components/CubeSchemaColumnsTable.js +2 -2
- package/lib/components/CubeSchemaColumnsTable.js.map +1 -1
- package/lib/components/canvas/CubeCanvas.d.ts.map +1 -1
- package/lib/components/canvas/CubeCanvas.js +38 -5
- package/lib/components/canvas/CubeCanvas.js.map +1 -1
- package/lib/components/canvas/CubeCanvasContextMenu.d.ts.map +1 -1
- package/lib/components/canvas/CubeCanvasContextMenu.js +2 -1
- package/lib/components/canvas/CubeCanvasContextMenu.js.map +1 -1
- package/lib/components/canvas/CubeCanvasElements.d.ts +18 -1
- package/lib/components/canvas/CubeCanvasElements.d.ts.map +1 -1
- package/lib/components/canvas/CubeCanvasElements.js +58 -3
- package/lib/components/canvas/CubeCanvasElements.js.map +1 -1
- package/lib/components/canvas/CubeCanvasLayout.js +1 -1
- package/lib/components/canvas/CubeCanvasNode.d.ts.map +1 -1
- package/lib/components/canvas/CubeCanvasNode.js +8 -4
- package/lib/components/canvas/CubeCanvasNode.js.map +1 -1
- package/lib/components/dev-settings/CubeDevSettings.d.ts +35 -0
- package/lib/components/dev-settings/CubeDevSettings.d.ts.map +1 -0
- package/lib/components/dev-settings/CubeDevSettings.js +50 -0
- package/lib/components/dev-settings/CubeDevSettings.js.map +1 -0
- package/lib/components/editors/CubeColumnChecklist.d.ts.map +1 -1
- package/lib/components/editors/CubeColumnChecklist.js +2 -2
- package/lib/components/editors/CubeColumnChecklist.js.map +1 -1
- package/lib/components/editors/CubeColumnPicker.d.ts.map +1 -1
- package/lib/components/editors/CubeColumnPicker.js +3 -3
- package/lib/components/editors/CubeColumnPicker.js.map +1 -1
- package/lib/components/editors/CubeConcatEditor.js +2 -2
- package/lib/components/editors/CubeConcatEditor.js.map +1 -1
- package/lib/components/editors/CubeExpressionFilterEditor.d.ts +25 -0
- package/lib/components/editors/CubeExpressionFilterEditor.d.ts.map +1 -0
- package/lib/components/editors/CubeExpressionFilterEditor.js +83 -0
- package/lib/components/editors/CubeExpressionFilterEditor.js.map +1 -0
- package/lib/components/editors/CubeExtendEditor.d.ts +2 -0
- package/lib/components/editors/CubeExtendEditor.d.ts.map +1 -1
- package/lib/components/editors/CubeExtendEditor.js +3 -3
- package/lib/components/editors/CubeExtendEditor.js.map +1 -1
- package/lib/components/editors/CubeFilterEditor.d.ts.map +1 -1
- package/lib/components/editors/CubeFilterEditor.js +13 -2
- package/lib/components/editors/CubeFilterEditor.js.map +1 -1
- package/lib/components/editors/CubeFunctionSourceEditor.d.ts +25 -0
- package/lib/components/editors/CubeFunctionSourceEditor.d.ts.map +1 -0
- package/lib/components/editors/CubeFunctionSourceEditor.js +55 -0
- package/lib/components/editors/CubeFunctionSourceEditor.js.map +1 -0
- package/lib/components/editors/CubeJoinEditor.d.ts.map +1 -1
- package/lib/components/editors/CubeJoinEditor.js +16 -4
- package/lib/components/editors/CubeJoinEditor.js.map +1 -1
- package/lib/components/editors/CubeNodeEditorPanel.d.ts.map +1 -1
- package/lib/components/editors/CubeNodeEditorPanel.js +18 -8
- package/lib/components/editors/CubeNodeEditorPanel.js.map +1 -1
- package/lib/components/editors/CubeNodeEditorPopper.d.ts +5 -1
- package/lib/components/editors/CubeNodeEditorPopper.d.ts.map +1 -1
- package/lib/components/editors/CubeNodeEditorPopper.js +10 -2
- package/lib/components/editors/CubeNodeEditorPopper.js.map +1 -1
- package/lib/components/editors/CubeNodeEditorRegistry.d.ts.map +1 -1
- package/lib/components/editors/CubeNodeEditorRegistry.js +9 -1
- package/lib/components/editors/CubeNodeEditorRegistry.js.map +1 -1
- package/lib/components/editors/CubePivotEditor.d.ts +26 -0
- package/lib/components/editors/CubePivotEditor.d.ts.map +1 -0
- package/lib/components/editors/CubePivotEditor.js +93 -0
- package/lib/components/editors/CubePivotEditor.js.map +1 -0
- package/lib/components/editors/CubeRestrictEditor.d.ts.map +1 -1
- package/lib/components/editors/CubeRestrictEditor.js +2 -2
- package/lib/components/editors/CubeRestrictEditor.js.map +1 -1
- package/lib/components/editors/CubeServiceSourceEditor.d.ts +25 -0
- package/lib/components/editors/CubeServiceSourceEditor.d.ts.map +1 -0
- package/lib/components/editors/CubeServiceSourceEditor.js +41 -0
- package/lib/components/editors/CubeServiceSourceEditor.js.map +1 -0
- package/lib/components/grid/CubeColumnFormatDialog.d.ts +28 -0
- package/lib/components/grid/CubeColumnFormatDialog.d.ts.map +1 -0
- package/lib/components/grid/CubeColumnFormatDialog.js +94 -0
- package/lib/components/grid/CubeColumnFormatDialog.js.map +1 -0
- package/lib/components/grid/CubeDrilldownBar.d.ts +37 -0
- package/lib/components/grid/CubeDrilldownBar.d.ts.map +1 -0
- package/lib/components/grid/CubeDrilldownBar.js +77 -0
- package/lib/components/grid/CubeDrilldownBar.js.map +1 -0
- package/lib/components/grid/CubeGridRegion.d.ts.map +1 -1
- package/lib/components/grid/CubeGridRegion.js +40 -26
- package/lib/components/grid/CubeGridRegion.js.map +1 -1
- package/lib/components/grid/CubeGridValues.d.ts +31 -1
- package/lib/components/grid/CubeGridValues.d.ts.map +1 -1
- package/lib/components/grid/CubeGridValues.js +108 -1
- package/lib/components/grid/CubeGridValues.js.map +1 -1
- package/lib/components/grid/CubeResultGrid.d.ts +68 -5
- package/lib/components/grid/CubeResultGrid.d.ts.map +1 -1
- package/lib/components/grid/CubeResultGrid.js +308 -35
- package/lib/components/grid/CubeResultGrid.js.map +1 -1
- package/lib/components/grid/CubeRunStatsPanel.d.ts +28 -0
- package/lib/components/grid/CubeRunStatsPanel.d.ts.map +1 -0
- package/lib/components/grid/CubeRunStatsPanel.js +61 -0
- package/lib/components/grid/CubeRunStatsPanel.js.map +1 -0
- package/lib/components/grid/CubeServerSideGrid.d.ts +36 -0
- package/lib/components/grid/CubeServerSideGrid.d.ts.map +1 -0
- package/lib/components/grid/CubeServerSideGrid.js +114 -0
- package/lib/components/grid/CubeServerSideGrid.js.map +1 -0
- package/lib/components/grid/CubeSqlDialog.d.ts +24 -0
- package/lib/components/grid/CubeSqlDialog.d.ts.map +1 -0
- package/lib/components/grid/CubeSqlDialog.js +39 -0
- package/lib/components/grid/CubeSqlDialog.js.map +1 -0
- package/lib/components/grid/CubeSqlFormat.d.ts +20 -0
- package/lib/components/grid/CubeSqlFormat.d.ts.map +1 -0
- package/lib/components/grid/CubeSqlFormat.js +32 -0
- package/lib/components/grid/CubeSqlFormat.js.map +1 -0
- package/lib/components/palette/CubePalette.d.ts.map +1 -1
- package/lib/components/palette/CubePalette.js +32 -13
- package/lib/components/palette/CubePalette.js.map +1 -1
- package/lib/components/show-pure/CubeShowPureDialog.d.ts +4 -1
- package/lib/components/show-pure/CubeShowPureDialog.d.ts.map +1 -1
- package/lib/components/show-pure/CubeShowPureDialog.js +8 -4
- package/lib/components/show-pure/CubeShowPureDialog.js.map +1 -1
- package/lib/components/source-picker/CubeDataProductTab.d.ts.map +1 -1
- package/lib/components/source-picker/CubeDataProductTab.js +37 -16
- package/lib/components/source-picker/CubeDataProductTab.js.map +1 -1
- package/lib/components/source-picker/CubeDirectConnectionTab.d.ts.map +1 -1
- package/lib/components/source-picker/CubeDirectConnectionTab.js +6 -4
- package/lib/components/source-picker/CubeDirectConnectionTab.js.map +1 -1
- package/lib/components/source-picker/CubeFunctionSteps.d.ts +36 -0
- package/lib/components/source-picker/CubeFunctionSteps.d.ts.map +1 -0
- package/lib/components/source-picker/CubeFunctionSteps.js +76 -0
- package/lib/components/source-picker/CubeFunctionSteps.js.map +1 -0
- package/lib/components/source-picker/CubeIngestTab.d.ts.map +1 -1
- package/lib/components/source-picker/CubeIngestTab.js +39 -16
- package/lib/components/source-picker/CubeIngestTab.js.map +1 -1
- package/lib/components/source-picker/CubeInlineModelTab.d.ts +3 -2
- package/lib/components/source-picker/CubeInlineModelTab.d.ts.map +1 -1
- package/lib/components/source-picker/CubeInlineModelTab.js +23 -13
- package/lib/components/source-picker/CubeInlineModelTab.js.map +1 -1
- package/lib/components/source-picker/CubePickerListItem.d.ts +47 -0
- package/lib/components/source-picker/CubePickerListItem.d.ts.map +1 -0
- package/lib/components/source-picker/CubePickerListItem.js +62 -0
- package/lib/components/source-picker/CubePickerListItem.js.map +1 -0
- package/lib/components/source-picker/CubeProjectTab.d.ts +4 -3
- package/lib/components/source-picker/CubeProjectTab.d.ts.map +1 -1
- package/lib/components/source-picker/CubeProjectTab.js +7 -4
- package/lib/components/source-picker/CubeProjectTab.js.map +1 -1
- package/lib/components/source-picker/CubeServiceTab.d.ts +27 -0
- package/lib/components/source-picker/CubeServiceTab.d.ts.map +1 -0
- package/lib/components/source-picker/CubeServiceTab.js +36 -0
- package/lib/components/source-picker/CubeServiceTab.js.map +1 -0
- package/lib/components/source-picker/CubeSourcePicker.d.ts.map +1 -1
- package/lib/components/source-picker/CubeSourcePicker.js +16 -3
- package/lib/components/source-picker/CubeSourcePicker.js.map +1 -1
- package/lib/components/source-picker/CubeTablePreview.d.ts +29 -0
- package/lib/components/source-picker/CubeTablePreview.d.ts.map +1 -0
- package/lib/components/source-picker/CubeTablePreview.js +10 -0
- package/lib/components/source-picker/CubeTablePreview.js.map +1 -0
- package/lib/components/spec-transfer/CubeImportPureDialog.d.ts +27 -0
- package/lib/components/spec-transfer/CubeImportPureDialog.d.ts.map +1 -0
- package/lib/components/spec-transfer/CubeImportPureDialog.js +38 -0
- package/lib/components/spec-transfer/CubeImportPureDialog.js.map +1 -0
- package/lib/components/spec-transfer/CubeSpecTransferDialog.d.ts.map +1 -1
- package/lib/components/spec-transfer/CubeSpecTransferDialog.js +9 -3
- package/lib/components/spec-transfer/CubeSpecTransferDialog.js.map +1 -1
- package/lib/graph-manager/CubeDataProductCatalog.d.ts +10 -0
- package/lib/graph-manager/CubeDataProductCatalog.d.ts.map +1 -1
- package/lib/graph-manager/CubeDataProductCatalog.js.map +1 -1
- package/lib/graph-manager/CubeEngine.d.ts +46 -1
- package/lib/graph-manager/CubeEngine.d.ts.map +1 -1
- package/lib/graph-manager/CubeEngine.js.map +1 -1
- package/lib/graph-manager/CubeEngineClientSettings.d.ts +43 -0
- package/lib/graph-manager/CubeEngineClientSettings.d.ts.map +1 -0
- package/lib/graph-manager/CubeEngineClientSettings.js +51 -0
- package/lib/graph-manager/CubeEngineClientSettings.js.map +1 -0
- package/lib/graph-manager/CubeIngest.d.ts +5 -0
- package/lib/graph-manager/CubeIngest.d.ts.map +1 -1
- package/lib/graph-manager/CubeIngest.js +10 -0
- package/lib/graph-manager/CubeIngest.js.map +1 -1
- package/lib/graph-manager/CubeIngestCatalog.d.ts +26 -0
- package/lib/graph-manager/CubeIngestCatalog.d.ts.map +1 -1
- package/lib/graph-manager/CubeIngestCatalog.js +6 -0
- package/lib/graph-manager/CubeIngestCatalog.js.map +1 -1
- package/lib/graph-manager/CubeLakehouseRuntime.d.ts +29 -0
- package/lib/graph-manager/CubeLakehouseRuntime.d.ts.map +1 -0
- package/lib/graph-manager/CubeLakehouseRuntime.js +40 -0
- package/lib/graph-manager/CubeLakehouseRuntime.js.map +1 -0
- package/lib/graph-manager/CubeProjectCatalog.d.ts +3 -3
- package/lib/graph-manager/CubeService.d.ts +20 -0
- package/lib/graph-manager/CubeService.d.ts.map +1 -0
- package/lib/graph-manager/CubeService.js +22 -0
- package/lib/graph-manager/CubeService.js.map +1 -0
- package/lib/graph-manager/CubeServiceCatalog.d.ts +31 -0
- package/lib/graph-manager/CubeServiceCatalog.d.ts.map +1 -0
- package/lib/graph-manager/CubeServiceCatalog.js +17 -0
- package/lib/graph-manager/CubeServiceCatalog.js.map +1 -0
- package/lib/graph-manager/protocol/pure/CubeEngineBuilder.d.ts +52 -5
- package/lib/graph-manager/protocol/pure/CubeEngineBuilder.d.ts.map +1 -1
- package/lib/graph-manager/protocol/pure/CubeEngineBuilder.js +63 -5
- package/lib/graph-manager/protocol/pure/CubeEngineBuilder.js.map +1 -1
- package/lib/graph-manager/protocol/pure/v1/V1_CubeDataProductModel.d.ts +9 -6
- package/lib/graph-manager/protocol/pure/v1/V1_CubeDataProductModel.d.ts.map +1 -1
- package/lib/graph-manager/protocol/pure/v1/V1_CubeDataProductModel.js +12 -8
- package/lib/graph-manager/protocol/pure/v1/V1_CubeDataProductModel.js.map +1 -1
- package/lib/graph-manager/protocol/pure/v1/V1_CubeFunctionOutlineBuilder.d.ts +30 -0
- package/lib/graph-manager/protocol/pure/v1/V1_CubeFunctionOutlineBuilder.d.ts.map +1 -0
- package/lib/graph-manager/protocol/pure/v1/V1_CubeFunctionOutlineBuilder.js +229 -0
- package/lib/graph-manager/protocol/pure/v1/V1_CubeFunctionOutlineBuilder.js.map +1 -0
- package/lib/graph-manager/protocol/pure/v1/V1_CubeIngestDefinition.d.ts.map +1 -1
- package/lib/graph-manager/protocol/pure/v1/V1_CubeIngestDefinition.js +18 -9
- package/lib/graph-manager/protocol/pure/v1/V1_CubeIngestDefinition.js.map +1 -1
- package/lib/graph-manager/protocol/pure/v1/V1_CubeIngestModel.d.ts +4 -9
- package/lib/graph-manager/protocol/pure/v1/V1_CubeIngestModel.d.ts.map +1 -1
- package/lib/graph-manager/protocol/pure/v1/V1_CubeIngestModel.js +2 -1
- package/lib/graph-manager/protocol/pure/v1/V1_CubeIngestModel.js.map +1 -1
- package/lib/graph-manager/protocol/pure/v1/V1_CubeLambdaReader.d.ts +34 -0
- package/lib/graph-manager/protocol/pure/v1/V1_CubeLambdaReader.d.ts.map +1 -0
- package/lib/graph-manager/protocol/pure/v1/V1_CubeLambdaReader.js +332 -0
- package/lib/graph-manager/protocol/pure/v1/V1_CubeLambdaReader.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 +49 -10
- package/lib/graph-manager/protocol/pure/v1/V1_CubeLambdaSerializer.js.map +1 -1
- package/lib/graph-manager/protocol/pure/v1/V1_CubeModelOutlineBuilder.d.ts +1 -1
- package/lib/graph-manager/protocol/pure/v1/V1_CubeModelOutlineBuilder.d.ts.map +1 -1
- package/lib/graph-manager/protocol/pure/v1/V1_CubeModelOutlineBuilder.js +3 -1
- package/lib/graph-manager/protocol/pure/v1/V1_CubeModelOutlineBuilder.js.map +1 -1
- package/lib/graph-manager/protocol/pure/v1/V1_LegendCubeConnectionExplorer.d.ts +2 -1
- package/lib/graph-manager/protocol/pure/v1/V1_LegendCubeConnectionExplorer.d.ts.map +1 -1
- package/lib/graph-manager/protocol/pure/v1/V1_LegendCubeConnectionExplorer.js +2 -1
- package/lib/graph-manager/protocol/pure/v1/V1_LegendCubeConnectionExplorer.js.map +1 -1
- package/lib/graph-manager/protocol/pure/v1/V1_LegendCubeEngine.d.ts +18 -0
- package/lib/graph-manager/protocol/pure/v1/V1_LegendCubeEngine.d.ts.map +1 -1
- package/lib/graph-manager/protocol/pure/v1/V1_LegendCubeEngine.js +74 -6
- package/lib/graph-manager/protocol/pure/v1/V1_LegendCubeEngine.js.map +1 -1
- package/lib/graph-manager/protocol/pure/v1/V1_LegendCubeProjectCatalog.d.ts.map +1 -1
- package/lib/graph-manager/protocol/pure/v1/V1_LegendCubeProjectCatalog.js +7 -4
- package/lib/graph-manager/protocol/pure/v1/V1_LegendCubeProjectCatalog.js.map +1 -1
- package/lib/graph-manager/protocol/pure/v1/V1_LegendCubeServiceCatalog.d.ts +31 -0
- package/lib/graph-manager/protocol/pure/v1/V1_LegendCubeServiceCatalog.d.ts.map +1 -0
- package/lib/graph-manager/protocol/pure/v1/V1_LegendCubeServiceCatalog.js +69 -0
- package/lib/graph-manager/protocol/pure/v1/V1_LegendCubeServiceCatalog.js.map +1 -0
- 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 +6 -2
- 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 +12 -3
- 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 +10 -3
- package/lib/stores/CubeAddPlacement.d.ts.map +1 -1
- package/lib/stores/CubeAddPlacement.js +16 -5
- package/lib/stores/CubeAddPlacement.js.map +1 -1
- package/lib/stores/CubeDevSettingsState.d.ts +47 -0
- package/lib/stores/CubeDevSettingsState.d.ts.map +1 -0
- package/lib/stores/CubeDevSettingsState.js +99 -0
- package/lib/stores/CubeDevSettingsState.js.map +1 -0
- package/lib/stores/CubeEditorState.d.ts +173 -43
- package/lib/stores/CubeEditorState.d.ts.map +1 -1
- package/lib/stores/CubeEditorState.js +498 -113
- package/lib/stores/CubeEditorState.js.map +1 -1
- package/lib/stores/CubeEngineChecks.d.ts +59 -0
- package/lib/stores/CubeEngineChecks.d.ts.map +1 -0
- package/lib/stores/CubeEngineChecks.js +100 -0
- package/lib/stores/CubeEngineChecks.js.map +1 -0
- package/lib/stores/CubeExamples.d.ts.map +1 -1
- package/lib/stores/CubeExamples.js +39 -2
- package/lib/stores/CubeExamples.js.map +1 -1
- package/lib/stores/CubeExamplesState.d.ts +1 -1
- package/lib/stores/CubeExamplesState.d.ts.map +1 -1
- package/lib/stores/CubeExamplesState.js +2 -2
- package/lib/stores/CubeExamplesState.js.map +1 -1
- package/lib/stores/CubeExecutionState.d.ts.map +1 -1
- package/lib/stores/CubeExecutionState.js +24 -33
- package/lib/stores/CubeExecutionState.js.map +1 -1
- package/lib/stores/CubeExportState.d.ts +41 -0
- package/lib/stores/CubeExportState.d.ts.map +1 -0
- package/lib/stores/CubeExportState.js +134 -0
- package/lib/stores/CubeExportState.js.map +1 -0
- package/lib/stores/CubeExpressionFilterCheck.d.ts +51 -0
- package/lib/stores/CubeExpressionFilterCheck.d.ts.map +1 -0
- package/lib/stores/CubeExpressionFilterCheck.js +134 -0
- package/lib/stores/CubeExpressionFilterCheck.js.map +1 -0
- package/lib/stores/CubeExtendTyping.d.ts +6 -14
- package/lib/stores/CubeExtendTyping.d.ts.map +1 -1
- package/lib/stores/CubeExtendTyping.js +6 -33
- package/lib/stores/CubeExtendTyping.js.map +1 -1
- package/lib/stores/CubeFunctionRecheck.d.ts +30 -0
- package/lib/stores/CubeFunctionRecheck.d.ts.map +1 -0
- package/lib/stores/CubeFunctionRecheck.js +67 -0
- package/lib/stores/CubeFunctionRecheck.js.map +1 -0
- package/lib/stores/CubeGridFetcher.d.ts +75 -0
- package/lib/stores/CubeGridFetcher.d.ts.map +1 -0
- package/lib/stores/CubeGridFetcher.js +197 -0
- package/lib/stores/CubeGridFetcher.js.map +1 -0
- package/lib/stores/CubeGridQuickActions.d.ts +18 -6
- package/lib/stores/CubeGridQuickActions.d.ts.map +1 -1
- package/lib/stores/CubeGridQuickActions.js +32 -12
- package/lib/stores/CubeGridQuickActions.js.map +1 -1
- package/lib/stores/CubeGridState.d.ts +136 -0
- package/lib/stores/CubeGridState.d.ts.map +1 -0
- package/lib/stores/CubeGridState.js +317 -0
- package/lib/stores/CubeGridState.js.map +1 -0
- package/lib/stores/CubeHost.d.ts +42 -0
- package/lib/stores/CubeHost.d.ts.map +1 -1
- package/lib/stores/CubeHost.js +4 -0
- package/lib/stores/CubeHost.js.map +1 -1
- package/lib/stores/CubeLambdaImportState.d.ts +118 -0
- package/lib/stores/CubeLambdaImportState.d.ts.map +1 -0
- package/lib/stores/CubeLambdaImportState.js +302 -0
- package/lib/stores/CubeLambdaImportState.js.map +1 -0
- package/lib/stores/CubeLambdaSources.d.ts +45 -0
- package/lib/stores/CubeLambdaSources.d.ts.map +1 -0
- package/lib/stores/CubeLambdaSources.js +261 -0
- package/lib/stores/CubeLambdaSources.js.map +1 -0
- package/lib/stores/CubeQueryRun.d.ts +59 -0
- package/lib/stores/CubeQueryRun.d.ts.map +1 -0
- package/lib/stores/CubeQueryRun.js +101 -0
- package/lib/stores/CubeQueryRun.js.map +1 -0
- package/lib/stores/CubeRunStatsState.d.ts +61 -0
- package/lib/stores/CubeRunStatsState.d.ts.map +1 -0
- package/lib/stores/CubeRunStatsState.js +54 -0
- package/lib/stores/CubeRunStatsState.js.map +1 -0
- package/lib/stores/CubeRunningStepLambda.d.ts +25 -0
- package/lib/stores/CubeRunningStepLambda.d.ts.map +1 -0
- package/lib/stores/CubeRunningStepLambda.js +45 -0
- package/lib/stores/CubeRunningStepLambda.js.map +1 -0
- package/lib/stores/CubeServiceRecheck.d.ts +29 -0
- package/lib/stores/CubeServiceRecheck.d.ts.map +1 -0
- package/lib/stores/CubeServiceRecheck.js +33 -0
- package/lib/stores/CubeServiceRecheck.js.map +1 -0
- package/lib/stores/CubeShowPureState.d.ts +14 -1
- package/lib/stores/CubeShowPureState.d.ts.map +1 -1
- package/lib/stores/CubeShowPureState.js +41 -11
- package/lib/stores/CubeShowPureState.js.map +1 -1
- package/lib/stores/CubeSourcePickerState.d.ts +20 -4
- package/lib/stores/CubeSourcePickerState.d.ts.map +1 -1
- package/lib/stores/CubeSourcePickerState.js +75 -14
- package/lib/stores/CubeSourcePickerState.js.map +1 -1
- package/lib/stores/LocalModelCatalog.d.ts.map +1 -1
- package/lib/stores/LocalModelCatalog.js +3 -1
- package/lib/stores/LocalModelCatalog.js.map +1 -1
- package/lib/stores/editors/CubeExpressionFilterDraft.d.ts +91 -0
- package/lib/stores/editors/CubeExpressionFilterDraft.d.ts.map +1 -0
- package/lib/stores/editors/CubeExpressionFilterDraft.js +254 -0
- package/lib/stores/editors/CubeExpressionFilterDraft.js.map +1 -0
- package/lib/stores/editors/CubeFunctionDraft.d.ts +34 -0
- package/lib/stores/editors/CubeFunctionDraft.d.ts.map +1 -0
- package/lib/stores/editors/CubeFunctionDraft.js +69 -0
- package/lib/stores/editors/CubeFunctionDraft.js.map +1 -0
- package/lib/stores/editors/CubeNodeDraftRegistry.d.ts +4 -2
- package/lib/stores/editors/CubeNodeDraftRegistry.d.ts.map +1 -1
- package/lib/stores/editors/CubeNodeDraftRegistry.js +20 -3
- package/lib/stores/editors/CubeNodeDraftRegistry.js.map +1 -1
- package/lib/stores/editors/CubePivotDraft.d.ts +93 -0
- package/lib/stores/editors/CubePivotDraft.d.ts.map +1 -0
- package/lib/stores/editors/CubePivotDraft.js +267 -0
- package/lib/stores/editors/CubePivotDraft.js.map +1 -0
- package/lib/stores/fixtures/CubeSalesDuckDbModel.d.ts +26 -0
- package/lib/stores/fixtures/CubeSalesDuckDbModel.d.ts.map +1 -0
- package/lib/stores/fixtures/CubeSalesDuckDbModel.js +46 -0
- package/lib/stores/fixtures/CubeSalesDuckDbModel.js.map +1 -0
- package/lib/stores/fixtures/CubeTradesModel.d.ts +4 -0
- package/lib/stores/fixtures/CubeTradesModel.d.ts.map +1 -1
- package/lib/stores/fixtures/CubeTradesModel.js +31 -1
- package/lib/stores/fixtures/CubeTradesModel.js.map +1 -1
- package/lib/stores/source-picker/CubeDataProductTabState.d.ts +34 -5
- package/lib/stores/source-picker/CubeDataProductTabState.d.ts.map +1 -1
- package/lib/stores/source-picker/CubeDataProductTabState.js +111 -26
- package/lib/stores/source-picker/CubeDataProductTabState.js.map +1 -1
- package/lib/stores/source-picker/CubeDirectConnectionTabState.d.ts +25 -2
- package/lib/stores/source-picker/CubeDirectConnectionTabState.d.ts.map +1 -1
- package/lib/stores/source-picker/CubeDirectConnectionTabState.js +183 -31
- package/lib/stores/source-picker/CubeDirectConnectionTabState.js.map +1 -1
- package/lib/stores/source-picker/CubeIngestTabState.d.ts +22 -9
- package/lib/stores/source-picker/CubeIngestTabState.d.ts.map +1 -1
- package/lib/stores/source-picker/CubeIngestTabState.js +84 -29
- package/lib/stores/source-picker/CubeIngestTabState.js.map +1 -1
- package/lib/stores/source-picker/CubeInlineModelTabState.d.ts +100 -4
- package/lib/stores/source-picker/CubeInlineModelTabState.d.ts.map +1 -1
- package/lib/stores/source-picker/CubeInlineModelTabState.js +415 -28
- package/lib/stores/source-picker/CubeInlineModelTabState.js.map +1 -1
- package/lib/stores/source-picker/CubeProjectTabState.d.ts +18 -3
- package/lib/stores/source-picker/CubeProjectTabState.d.ts.map +1 -1
- package/lib/stores/source-picker/CubeProjectTabState.js +26 -1
- package/lib/stores/source-picker/CubeProjectTabState.js.map +1 -1
- package/lib/stores/source-picker/CubeServiceTabState.d.ts +74 -0
- package/lib/stores/source-picker/CubeServiceTabState.d.ts.map +1 -0
- package/lib/stores/source-picker/CubeServiceTabState.js +216 -0
- package/lib/stores/source-picker/CubeServiceTabState.js.map +1 -0
- package/lib/stores/source-picker/CubeSourcePickerTab.d.ts +15 -3
- package/lib/stores/source-picker/CubeSourcePickerTab.d.ts.map +1 -1
- package/lib/stores/source-picker/CubeSourcePickerTab.js +21 -0
- package/lib/stores/source-picker/CubeSourcePickerTab.js.map +1 -1
- package/package.json +10 -9
- package/src/__lib__/LegendCubeCommand.ts +7 -0
- package/src/__lib__/LegendCubeFunctionLabels.ts +41 -0
- package/src/__lib__/LegendCubeHelpText.ts +23 -1
- package/src/__lib__/LegendCubeLabels.ts +170 -13
- package/src/__lib__/LegendCubeProjectSourceLabels.ts +26 -0
- package/src/__lib__/LegendCubeServiceLabels.ts +41 -0
- package/src/__lib__/LegendCubeTesting.ts +7 -0
- package/src/__test-utils__/CubeEngineTestSupport.ts +2 -1
- package/src/__test-utils__/CubeExpressionTestUtils.ts +29 -2
- package/src/__test-utils__/CubeFunctionTestOutline.ts +78 -0
- package/src/__test-utils__/CubeLambdaCorpus.ts +137 -0
- package/src/__test-utils__/CubePageTestUtils.tsx +34 -0
- package/src/__test-utils__/CubeTestApplication.ts +25 -0
- package/src/__test-utils__/FakeCubeEngine.ts +27 -0
- package/src/__test-utils__/FakeCubeIngestCatalog.ts +18 -0
- package/src/__test-utils__/FakeCubeServiceCatalog.ts +57 -0
- package/src/components/CubeAddItems.tsx +13 -6
- package/src/components/CubeDialogTheme.ts +25 -0
- package/src/components/CubeEditor.tsx +155 -129
- package/src/components/CubeFileMenu.tsx +127 -0
- package/src/components/CubeLambdaImportBanner.tsx +97 -0
- package/src/components/CubeNodeIcon.tsx +7 -0
- package/src/components/CubeSchemaColumnsTable.tsx +7 -2
- package/src/components/canvas/CubeCanvas.tsx +52 -13
- package/src/components/canvas/CubeCanvasContextMenu.tsx +33 -2
- package/src/components/canvas/CubeCanvasElements.ts +76 -3
- package/src/components/canvas/CubeCanvasLayout.ts +1 -1
- package/src/components/canvas/CubeCanvasNode.tsx +30 -3
- package/src/components/dev-settings/CubeDevSettings.tsx +154 -0
- package/src/components/editors/CubeColumnChecklist.tsx +8 -2
- package/src/components/editors/CubeColumnPicker.tsx +6 -3
- package/src/components/editors/CubeConcatEditor.tsx +2 -2
- package/src/components/editors/CubeExpressionFilterEditor.tsx +193 -0
- package/src/components/editors/CubeExtendEditor.tsx +3 -3
- package/src/components/editors/CubeFilterEditor.tsx +13 -1
- package/src/components/editors/CubeFunctionSourceEditor.tsx +140 -0
- package/src/components/editors/CubeJoinEditor.tsx +23 -4
- package/src/components/editors/CubeNodeEditorPanel.tsx +22 -10
- package/src/components/editors/CubeNodeEditorPopper.tsx +9 -1
- package/src/components/editors/CubeNodeEditorRegistry.ts +12 -0
- package/src/components/editors/CubePivotEditor.tsx +277 -0
- package/src/components/editors/CubeRestrictEditor.tsx +8 -2
- package/src/components/editors/CubeServiceSourceEditor.tsx +77 -0
- package/src/components/grid/CubeColumnFormatDialog.tsx +289 -0
- package/src/components/grid/CubeDrilldownBar.tsx +219 -0
- package/src/components/grid/CubeGridRegion.tsx +170 -54
- package/src/components/grid/CubeGridValues.ts +146 -1
- package/src/components/grid/CubeResultGrid.tsx +443 -41
- package/src/components/grid/CubeRunStatsPanel.tsx +156 -0
- package/src/components/grid/CubeServerSideGrid.tsx +200 -0
- package/src/components/grid/CubeSqlDialog.tsx +90 -0
- package/src/components/grid/CubeSqlFormat.ts +37 -0
- package/src/components/palette/CubePalette.tsx +45 -12
- package/src/components/show-pure/CubeShowPureDialog.tsx +19 -5
- package/src/components/source-picker/CubeDataProductTab.tsx +169 -75
- package/src/components/source-picker/CubeDirectConnectionTab.tsx +42 -30
- package/src/components/source-picker/CubeFunctionSteps.tsx +244 -0
- package/src/components/source-picker/CubeIngestTab.tsx +159 -79
- package/src/components/source-picker/CubeInlineModelTab.tsx +110 -81
- package/src/components/source-picker/CubePickerListItem.tsx +118 -0
- package/src/components/source-picker/CubeProjectTab.tsx +6 -3
- package/src/components/source-picker/CubeServiceTab.tsx +151 -0
- package/src/components/source-picker/CubeSourcePicker.tsx +54 -18
- package/src/components/source-picker/CubeTablePreview.tsx +49 -0
- package/src/components/spec-transfer/CubeImportPureDialog.tsx +122 -0
- package/src/components/spec-transfer/CubeSpecTransferDialog.tsx +21 -8
- package/src/graph-manager/CubeDataProductCatalog.ts +11 -0
- package/src/graph-manager/CubeEngine.ts +51 -1
- package/src/graph-manager/CubeEngineClientSettings.ts +64 -0
- package/src/graph-manager/CubeIngest.ts +15 -0
- package/src/graph-manager/CubeIngestCatalog.ts +33 -0
- package/src/graph-manager/CubeLakehouseRuntime.ts +43 -0
- package/src/graph-manager/CubeProjectCatalog.ts +3 -3
- package/src/graph-manager/CubeService.ts +29 -0
- package/src/graph-manager/CubeServiceCatalog.ts +35 -0
- package/src/graph-manager/protocol/pure/CubeEngineBuilder.ts +115 -5
- package/src/graph-manager/protocol/pure/v1/V1_CubeDataProductModel.ts +13 -7
- package/src/graph-manager/protocol/pure/v1/V1_CubeFunctionOutlineBuilder.ts +312 -0
- package/src/graph-manager/protocol/pure/v1/V1_CubeIngestDefinition.ts +35 -9
- package/src/graph-manager/protocol/pure/v1/V1_CubeIngestModel.ts +6 -15
- package/src/graph-manager/protocol/pure/v1/V1_CubeLambdaReader.ts +471 -0
- package/src/graph-manager/protocol/pure/v1/V1_CubeLambdaSerializer.ts +70 -15
- package/src/graph-manager/protocol/pure/v1/V1_CubeModelOutlineBuilder.ts +3 -1
- package/src/graph-manager/protocol/pure/v1/V1_LegendCubeConnectionExplorer.ts +7 -1
- package/src/graph-manager/protocol/pure/v1/V1_LegendCubeEngine.ts +122 -7
- package/src/graph-manager/protocol/pure/v1/V1_LegendCubeProjectCatalog.ts +9 -4
- package/src/graph-manager/protocol/pure/v1/V1_LegendCubeServiceCatalog.ts +92 -0
- package/src/graph-manager/protocol/pure/v1/__test-utils__/V1_CubeEngineTestUtils.ts +6 -1
- package/src/index.ts +32 -2
- package/src/stores/CubeAddPlacement.ts +25 -5
- package/src/stores/CubeDevSettingsState.ts +117 -0
- package/src/stores/CubeEditorState.ts +687 -197
- package/src/stores/CubeEngineChecks.ts +240 -0
- package/src/stores/CubeExamples.ts +70 -1
- package/src/stores/CubeExamplesState.ts +4 -2
- package/src/stores/CubeExecutionState.ts +26 -57
- package/src/stores/CubeExportState.ts +196 -0
- package/src/stores/CubeExpressionFilterCheck.ts +218 -0
- package/src/stores/CubeExtendTyping.ts +6 -46
- package/src/stores/CubeFunctionRecheck.ts +97 -0
- package/src/stores/CubeGridFetcher.ts +302 -0
- package/src/stores/CubeGridQuickActions.ts +33 -11
- package/src/stores/CubeGridState.ts +450 -0
- package/src/stores/CubeHost.ts +48 -0
- package/src/stores/CubeLambdaImportState.ts +434 -0
- package/src/stores/CubeLambdaSources.ts +390 -0
- package/src/stores/CubeQueryRun.ts +169 -0
- package/src/stores/CubeRunStatsState.ts +91 -0
- package/src/stores/CubeRunningStepLambda.ts +62 -0
- package/src/stores/CubeServiceRecheck.ts +53 -0
- package/src/stores/CubeShowPureState.ts +51 -12
- package/src/stores/CubeSourcePickerState.ts +89 -13
- package/src/stores/LocalModelCatalog.ts +6 -1
- package/src/stores/editors/CubeExpressionFilterDraft.ts +385 -0
- package/src/stores/editors/CubeFunctionDraft.ts +92 -0
- package/src/stores/editors/CubeNodeDraftRegistry.ts +27 -2
- package/src/stores/editors/CubePivotDraft.ts +355 -0
- package/src/stores/fixtures/CubeSalesDuckDbModel.ts +54 -0
- package/src/stores/fixtures/CubeTradesModel.ts +36 -1
- package/src/stores/source-picker/CubeDataProductTabState.ts +162 -35
- package/src/stores/source-picker/CubeDirectConnectionTabState.ts +246 -47
- package/src/stores/source-picker/CubeIngestTabState.ts +112 -38
- package/src/stores/source-picker/CubeInlineModelTabState.ts +514 -34
- package/src/stores/source-picker/CubeProjectTabState.ts +35 -3
- package/src/stores/source-picker/CubeServiceTabState.ts +288 -0
- package/src/stores/source-picker/CubeSourcePickerTab.ts +31 -2
- package/tsconfig.json +50 -0
|
@@ -0,0 +1,151 @@
|
|
|
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 { observer } from 'mobx-react-lite';
|
|
18
|
+
import {
|
|
19
|
+
CUBE_SERVICE_MESSAGE,
|
|
20
|
+
getShownServicesLabel,
|
|
21
|
+
} from '../../__lib__/LegendCubeServiceLabels.js';
|
|
22
|
+
import { CUBE_PENDING_LABEL } from '../../__lib__/LegendCubeLabels.js';
|
|
23
|
+
import type { CubeServiceTabState } from '../../stores/source-picker/CubeServiceTabState.js';
|
|
24
|
+
import { CubeButton } from '../CubeButton.js';
|
|
25
|
+
import {
|
|
26
|
+
CUBE_PICKER_LIST_CLASS,
|
|
27
|
+
CubePickerListItem,
|
|
28
|
+
} from './CubePickerListItem.js';
|
|
29
|
+
|
|
30
|
+
const INPUT_CLASS =
|
|
31
|
+
'h-7 rounded-sm border border-[var(--color-border-default)] bg-[var(--color-bg-input)] px-1 text-base text-[var(--color-text-primary)]';
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
* The source dialog's Service tab (PLAN §6.4), in progress: the deployed
|
|
35
|
+
* services, searched by title, name and pattern, and the picked one's
|
|
36
|
+
* details. A service can be added, but Cube can't read it yet.
|
|
37
|
+
*/
|
|
38
|
+
export const CubeServiceTab = observer(
|
|
39
|
+
(props: { tab: CubeServiceTabState }) => {
|
|
40
|
+
const { tab } = props;
|
|
41
|
+
const picked = tab.service;
|
|
42
|
+
const shownLabel = getShownServicesLabel(
|
|
43
|
+
tab.shownServices.length,
|
|
44
|
+
tab.matchingServices.length,
|
|
45
|
+
);
|
|
46
|
+
return (
|
|
47
|
+
<div className="flex flex-col gap-2">
|
|
48
|
+
<span className="text-sm text-[var(--color-text-muted)]">
|
|
49
|
+
{CUBE_SERVICE_MESSAGE.IN_PROGRESS}
|
|
50
|
+
</span>
|
|
51
|
+
<input
|
|
52
|
+
className={INPUT_CLASS}
|
|
53
|
+
placeholder="Search services"
|
|
54
|
+
aria-label="Search services"
|
|
55
|
+
value={tab.search}
|
|
56
|
+
onChange={(event) => tab.setSearch(event.target.value)}
|
|
57
|
+
/>
|
|
58
|
+
{tab.isLoading && (
|
|
59
|
+
<div className="text-base text-[var(--color-text-secondary)]">
|
|
60
|
+
listing services
|
|
61
|
+
</div>
|
|
62
|
+
)}
|
|
63
|
+
{tab.services && (
|
|
64
|
+
<>
|
|
65
|
+
{tab.shownServices.length ? (
|
|
66
|
+
<ul
|
|
67
|
+
className={`h-56 overflow-auto ${CUBE_PICKER_LIST_CLASS}`}
|
|
68
|
+
aria-label="Services"
|
|
69
|
+
>
|
|
70
|
+
{tab.shownServices.map((service) => (
|
|
71
|
+
<CubePickerListItem
|
|
72
|
+
key={service.pattern}
|
|
73
|
+
picked={tab.pattern === service.pattern}
|
|
74
|
+
title={service.name}
|
|
75
|
+
adds={true}
|
|
76
|
+
onPick={() => tab.selectService(service.pattern)}
|
|
77
|
+
>
|
|
78
|
+
<span className="min-w-0 flex-1 truncate">
|
|
79
|
+
{service.title ?? service.name}
|
|
80
|
+
</span>
|
|
81
|
+
<span className="max-w-[50%] shrink-0 truncate text-sm text-[var(--color-text-muted)]">
|
|
82
|
+
{service.pattern}
|
|
83
|
+
</span>
|
|
84
|
+
</CubePickerListItem>
|
|
85
|
+
))}
|
|
86
|
+
</ul>
|
|
87
|
+
) : (
|
|
88
|
+
<div className="text-base text-[var(--color-text-secondary)]">
|
|
89
|
+
{tab.services.length
|
|
90
|
+
? CUBE_SERVICE_MESSAGE.NO_MATCH
|
|
91
|
+
: CUBE_SERVICE_MESSAGE.NONE}
|
|
92
|
+
</div>
|
|
93
|
+
)}
|
|
94
|
+
{shownLabel !== undefined && (
|
|
95
|
+
<span className="text-sm text-[var(--color-text-muted)]">
|
|
96
|
+
{shownLabel}
|
|
97
|
+
</span>
|
|
98
|
+
)}
|
|
99
|
+
</>
|
|
100
|
+
)}
|
|
101
|
+
{picked && (
|
|
102
|
+
<section
|
|
103
|
+
aria-label="Service details"
|
|
104
|
+
className="flex flex-col gap-1 text-base"
|
|
105
|
+
>
|
|
106
|
+
<span className="break-all font-medium">{picked.name}</span>
|
|
107
|
+
<span className="break-all text-[var(--color-text-secondary)]">
|
|
108
|
+
{picked.pattern}
|
|
109
|
+
</span>
|
|
110
|
+
{picked.owners.length > 0 && (
|
|
111
|
+
<span className="text-sm text-[var(--color-text-muted)]">
|
|
112
|
+
{`Owners: ${picked.owners.join(', ')}`}
|
|
113
|
+
</span>
|
|
114
|
+
)}
|
|
115
|
+
{picked.documentation.trim() !== '' && (
|
|
116
|
+
<p className="max-h-20 overflow-auto whitespace-pre-wrap text-sm text-[var(--color-text-secondary)]">
|
|
117
|
+
{picked.documentation}
|
|
118
|
+
</p>
|
|
119
|
+
)}
|
|
120
|
+
</section>
|
|
121
|
+
)}
|
|
122
|
+
{tab.isAdding && (
|
|
123
|
+
<div className="text-base text-[var(--color-text-secondary)]">
|
|
124
|
+
{CUBE_PENDING_LABEL.RESOLVING_SOURCE}
|
|
125
|
+
</div>
|
|
126
|
+
)}
|
|
127
|
+
{tab.error !== undefined && (
|
|
128
|
+
<div
|
|
129
|
+
className="flex flex-col gap-1 text-base text-[var(--color-status-error)]"
|
|
130
|
+
role="alert"
|
|
131
|
+
>
|
|
132
|
+
<span>{tab.error.message}</span>
|
|
133
|
+
{tab.error.detail !== undefined && (
|
|
134
|
+
<details className="text-sm">
|
|
135
|
+
<summary className="cursor-pointer">Details</summary>
|
|
136
|
+
<pre className="whitespace-pre-wrap break-words">
|
|
137
|
+
{tab.error.detail}
|
|
138
|
+
</pre>
|
|
139
|
+
</details>
|
|
140
|
+
)}
|
|
141
|
+
{tab.services === undefined && (
|
|
142
|
+
<div>
|
|
143
|
+
<CubeButton onClick={() => tab.retry()}>Retry</CubeButton>
|
|
144
|
+
</div>
|
|
145
|
+
)}
|
|
146
|
+
</div>
|
|
147
|
+
)}
|
|
148
|
+
</div>
|
|
149
|
+
);
|
|
150
|
+
},
|
|
151
|
+
);
|
|
@@ -26,14 +26,20 @@ import {
|
|
|
26
26
|
} from '@finos/legend-art';
|
|
27
27
|
import { flowResult } from 'mobx';
|
|
28
28
|
import { observer } from 'mobx-react-lite';
|
|
29
|
-
import {
|
|
29
|
+
import {
|
|
30
|
+
CUBE_PICK_TO_ADD_TITLE,
|
|
31
|
+
SELECT_SOURCE_TYPE_PROMPT,
|
|
32
|
+
} from '../../__lib__/LegendCubeLabels.js';
|
|
30
33
|
import type { CubeEditorState } from '../../stores/CubeEditorState.js';
|
|
31
34
|
import { CubeSourcePickerTabKey } from '../../stores/source-picker/CubeSourcePickerTab.js';
|
|
32
35
|
import { CubeDataProductTab } from './CubeDataProductTab.js';
|
|
33
36
|
import { CubeIngestTab } from './CubeIngestTab.js';
|
|
37
|
+
import { CubeServiceTab } from './CubeServiceTab.js';
|
|
34
38
|
import { CubeProjectTab } from './CubeProjectTab.js';
|
|
35
39
|
import { CubeDirectConnectionTab } from './CubeDirectConnectionTab.js';
|
|
36
40
|
import { CubeInlineModelTab } from './CubeInlineModelTab.js';
|
|
41
|
+
import { CubePickerConfirmContext } from './CubePickerListItem.js';
|
|
42
|
+
import { CUBE_PRIMARY_BUTTON_DARK_MODE } from '../CubeDialogTheme.js';
|
|
37
43
|
|
|
38
44
|
/**
|
|
39
45
|
* Adds a source to the cube (PLAN §6.1, §6.2.7, §6.8): a tab per way to find
|
|
@@ -63,6 +69,17 @@ export const CubeSourcePicker = observer(
|
|
|
63
69
|
isLoading={!picker.isChoosingTab && activeTab.isBusy}
|
|
64
70
|
/>
|
|
65
71
|
<ModalBody>
|
|
72
|
+
{picker.isFromExamples && (
|
|
73
|
+
// a link back, under the title, as the dialog came from Examples
|
|
74
|
+
<button
|
|
75
|
+
type="button"
|
|
76
|
+
className="mb-2 self-start text-base text-[var(--color-accent)] hover:underline"
|
|
77
|
+
title="Back to the examples, to open an example cube instead"
|
|
78
|
+
onClick={() => picker.backToExamples()}
|
|
79
|
+
>
|
|
80
|
+
← Back to Examples
|
|
81
|
+
</button>
|
|
82
|
+
)}
|
|
66
83
|
{tabs.length > 1 && (
|
|
67
84
|
<div
|
|
68
85
|
className="mb-2 flex gap-1 border-b border-[var(--color-border-subtle)]"
|
|
@@ -99,28 +116,47 @@ export const CubeSourcePicker = observer(
|
|
|
99
116
|
: undefined
|
|
100
117
|
}
|
|
101
118
|
>
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
119
|
+
<CubePickerConfirmContext.Provider value={confirm}>
|
|
120
|
+
{picker.isChoosingTab ? (
|
|
121
|
+
<div className="py-4 text-center text-base text-[var(--color-text-secondary)]">
|
|
122
|
+
{SELECT_SOURCE_TYPE_PROMPT}
|
|
123
|
+
</div>
|
|
124
|
+
) : activeTab.key ===
|
|
125
|
+
CubeSourcePickerTabKey.DIRECT_CONNECTION ? (
|
|
126
|
+
<CubeDirectConnectionTab tab={picker.directTab} />
|
|
127
|
+
) : activeTab.key === CubeSourcePickerTabKey.DATA_PRODUCT ? (
|
|
128
|
+
<CubeDataProductTab tab={picker.dataProductTab} />
|
|
129
|
+
) : activeTab.key === CubeSourcePickerTabKey.INGEST ? (
|
|
130
|
+
<CubeIngestTab tab={picker.ingestTab} />
|
|
131
|
+
) : activeTab.key === CubeSourcePickerTabKey.PROJECT ? (
|
|
132
|
+
<CubeProjectTab tab={picker.projectTab} />
|
|
133
|
+
) : activeTab.key ===
|
|
134
|
+
CubeSourcePickerTabKey.PROJECT_FUNCTION ? (
|
|
135
|
+
<CubeProjectTab tab={picker.projectFunctionTab} />
|
|
136
|
+
) : activeTab.key === CubeSourcePickerTabKey.SERVICE ? (
|
|
137
|
+
<CubeServiceTab tab={picker.serviceTab} />
|
|
138
|
+
) : (
|
|
139
|
+
<CubeInlineModelTab tab={picker.modelTab} />
|
|
140
|
+
)}
|
|
141
|
+
</CubePickerConfirmContext.Provider>
|
|
117
142
|
</div>
|
|
118
143
|
</ModalBody>
|
|
119
144
|
<ModalFooter>
|
|
120
145
|
<ModalFooterButton
|
|
121
|
-
darkMode={
|
|
146
|
+
darkMode={CUBE_PRIMARY_BUTTON_DARK_MODE}
|
|
122
147
|
formatText={false}
|
|
123
|
-
text=
|
|
148
|
+
text={
|
|
149
|
+
(picker.activeTab.pickedCount ?? 1) > 1
|
|
150
|
+
? `Add ${picker.activeTab.pickedCount}`
|
|
151
|
+
: 'Add'
|
|
152
|
+
}
|
|
153
|
+
// the legacy footer button looks the same disabled
|
|
154
|
+
className="disabled:cursor-not-allowed disabled:opacity-50"
|
|
155
|
+
title={
|
|
156
|
+
picker.canConfirm
|
|
157
|
+
? 'Add it to the cube'
|
|
158
|
+
: CUBE_PICK_TO_ADD_TITLE
|
|
159
|
+
}
|
|
124
160
|
disabled={!picker.canConfirm}
|
|
125
161
|
onClick={confirm}
|
|
126
162
|
/>
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) 2026-present, Goldman Sachs
|
|
3
|
+
*
|
|
4
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
* you may not use this file except in compliance with the License.
|
|
6
|
+
* You may obtain a copy of the License at
|
|
7
|
+
*
|
|
8
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
*
|
|
10
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
* See the License for the specific language governing permissions and
|
|
14
|
+
* limitations under the License.
|
|
15
|
+
*/
|
|
16
|
+
|
|
17
|
+
import type { Schema } from '@finos/legend-cube';
|
|
18
|
+
import { CubeSchemaColumnsTable } from '../CubeSchemaColumnsTable.js';
|
|
19
|
+
|
|
20
|
+
/**
|
|
21
|
+
* The columns of the table picked last, under the source dialog's list, as
|
|
22
|
+
* an access point's preview shows them (the review of the demo, 2026-10-13):
|
|
23
|
+
* loading, then the columns, or why they couldn't be read. A failure doesn't
|
|
24
|
+
* keep the table from being added: Add asks the engine again.
|
|
25
|
+
*/
|
|
26
|
+
export const CubeTablePreview: React.FC<{
|
|
27
|
+
/** The table's name, as the list shows it */
|
|
28
|
+
name: string;
|
|
29
|
+
/** Its columns, or why they couldn't be read; `undefined` while they load */
|
|
30
|
+
columns: Schema | string | undefined;
|
|
31
|
+
}> = ({ name, columns }) => (
|
|
32
|
+
<section
|
|
33
|
+
className="flex max-h-48 flex-col gap-1 overflow-auto rounded-sm border border-[var(--color-border-default)] p-2"
|
|
34
|
+
aria-label="Table preview"
|
|
35
|
+
>
|
|
36
|
+
<span className="font-medium">{`Columns of ${name}`}</span>
|
|
37
|
+
{columns === undefined ? (
|
|
38
|
+
<span className="text-base text-[var(--color-text-secondary)]">
|
|
39
|
+
loading columns
|
|
40
|
+
</span>
|
|
41
|
+
) : typeof columns === 'string' ? (
|
|
42
|
+
<span className="text-base text-[var(--color-status-error)]">
|
|
43
|
+
{columns}
|
|
44
|
+
</span>
|
|
45
|
+
) : (
|
|
46
|
+
<CubeSchemaColumnsTable schema={columns} />
|
|
47
|
+
)}
|
|
48
|
+
</section>
|
|
49
|
+
);
|
|
@@ -0,0 +1,122 @@
|
|
|
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
|
+
Dialog,
|
|
19
|
+
Modal,
|
|
20
|
+
ModalBody,
|
|
21
|
+
ModalFooter,
|
|
22
|
+
ModalFooterButton,
|
|
23
|
+
ModalHeader,
|
|
24
|
+
PanelLoadingIndicator,
|
|
25
|
+
} from '@finos/legend-art';
|
|
26
|
+
import { flowResult } from 'mobx';
|
|
27
|
+
import { observer } from 'mobx-react-lite';
|
|
28
|
+
import { LEGEND_CUBE_TEST_ID } from '../../__lib__/LegendCubeTesting.js';
|
|
29
|
+
import type { CubeEditorState } from '../../stores/CubeEditorState.js';
|
|
30
|
+
import { CUBE_PRIMARY_BUTTON_DARK_MODE } from '../CubeDialogTheme.js';
|
|
31
|
+
|
|
32
|
+
const TEXT_AREA_CLASS_NAME =
|
|
33
|
+
'h-80 w-full resize-none rounded-sm border border-[var(--color-border-default)] bg-[var(--color-bg-input)] p-1 font-mono text-sm text-[var(--color-text-primary)]';
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* Import Pure (PLAN §11.18): a lambda pasted as Pure, as Show Pure shows one,
|
|
37
|
+
* or as the engine's JSON, read into the steps Cube writes it with, in
|
|
38
|
+
* place of this cube
|
|
39
|
+
*/
|
|
40
|
+
export const CubeImportPureDialog = observer(
|
|
41
|
+
(props: { editorState: CubeEditorState }) => {
|
|
42
|
+
const { editorState } = props;
|
|
43
|
+
const { lambdaImport } = editorState;
|
|
44
|
+
const { applicationStore } = editorState.host;
|
|
45
|
+
const darkMode =
|
|
46
|
+
!applicationStore.layoutService.TEMPORARY__isLightColorThemeEnabled;
|
|
47
|
+
const importText = (): void => {
|
|
48
|
+
flowResult(lambdaImport.importText()).catch(
|
|
49
|
+
applicationStore.alertUnhandledError,
|
|
50
|
+
);
|
|
51
|
+
};
|
|
52
|
+
return (
|
|
53
|
+
<Dialog
|
|
54
|
+
open={lambdaImport.isDialogOpen}
|
|
55
|
+
onClose={() => lambdaImport.closeDialog()}
|
|
56
|
+
>
|
|
57
|
+
<Modal darkMode={darkMode} className="w-[720px] max-w-full">
|
|
58
|
+
<ModalHeader>
|
|
59
|
+
<div className="modal__title">Import Pure</div>
|
|
60
|
+
</ModalHeader>
|
|
61
|
+
<PanelLoadingIndicator isLoading={lambdaImport.isImporting} />
|
|
62
|
+
<ModalBody>
|
|
63
|
+
<div
|
|
64
|
+
className="flex flex-col gap-2"
|
|
65
|
+
data-testid={LEGEND_CUBE_TEST_ID.IMPORT_PURE}
|
|
66
|
+
>
|
|
67
|
+
<div className="text-base text-[var(--color-text-secondary)]">
|
|
68
|
+
Paste a query, as Show Pure shows one, e.g.{' '}
|
|
69
|
+
<code>
|
|
70
|
+
{'|#>{db::Store.SCHEMA.TABLE}#->filter(x | $x.ID > 1)'}
|
|
71
|
+
</code>
|
|
72
|
+
, or its JSON. Cube reads it into steps that replace this cube;
|
|
73
|
+
Undo brings it back. Its sources are read where the source
|
|
74
|
+
dialog reads them.
|
|
75
|
+
</div>
|
|
76
|
+
<textarea
|
|
77
|
+
className={TEXT_AREA_CLASS_NAME}
|
|
78
|
+
aria-label="Pure query"
|
|
79
|
+
placeholder="Pure query"
|
|
80
|
+
spellCheck={false}
|
|
81
|
+
value={lambdaImport.text}
|
|
82
|
+
onChange={(event) => lambdaImport.setText(event.target.value)}
|
|
83
|
+
/>
|
|
84
|
+
{lambdaImport.dialogError !== undefined && (
|
|
85
|
+
<div
|
|
86
|
+
className="break-words text-base text-[var(--color-status-error)]"
|
|
87
|
+
role="alert"
|
|
88
|
+
>
|
|
89
|
+
{lambdaImport.dialogError.message}
|
|
90
|
+
{lambdaImport.dialogError.detail !== undefined && (
|
|
91
|
+
<details>
|
|
92
|
+
<summary className="cursor-pointer">Details</summary>
|
|
93
|
+
<pre className="whitespace-pre-wrap text-sm">
|
|
94
|
+
{lambdaImport.dialogError.detail}
|
|
95
|
+
</pre>
|
|
96
|
+
</details>
|
|
97
|
+
)}
|
|
98
|
+
</div>
|
|
99
|
+
)}
|
|
100
|
+
</div>
|
|
101
|
+
</ModalBody>
|
|
102
|
+
<ModalFooter>
|
|
103
|
+
<ModalFooterButton
|
|
104
|
+
darkMode={CUBE_PRIMARY_BUTTON_DARK_MODE}
|
|
105
|
+
formatText={false}
|
|
106
|
+
text="Import"
|
|
107
|
+
disabled={!lambdaImport.text.trim() || lambdaImport.isImporting}
|
|
108
|
+
onClick={importText}
|
|
109
|
+
/>
|
|
110
|
+
<ModalFooterButton
|
|
111
|
+
darkMode={darkMode}
|
|
112
|
+
formatText={false}
|
|
113
|
+
type="secondary"
|
|
114
|
+
text="Cancel"
|
|
115
|
+
onClick={() => lambdaImport.closeDialog()}
|
|
116
|
+
/>
|
|
117
|
+
</ModalFooter>
|
|
118
|
+
</Modal>
|
|
119
|
+
</Dialog>
|
|
120
|
+
);
|
|
121
|
+
},
|
|
122
|
+
);
|
|
@@ -23,10 +23,15 @@ import {
|
|
|
23
23
|
ModalHeader,
|
|
24
24
|
PanelLoadingIndicator,
|
|
25
25
|
} from '@finos/legend-art';
|
|
26
|
+
import { CodeEditor } from '@finos/legend-lego/code-editor';
|
|
26
27
|
import { flowResult } from 'mobx';
|
|
27
28
|
import { observer } from 'mobx-react-lite';
|
|
28
29
|
import type { CubeEditorState } from '../../stores/CubeEditorState.js';
|
|
29
30
|
import { CUBE_SPEC_TRANSFER_MODE } from '../../stores/CubeSpecTransferState.js';
|
|
31
|
+
import { CUBE_PRIMARY_BUTTON_DARK_MODE } from '../CubeDialogTheme.js';
|
|
32
|
+
|
|
33
|
+
/** The code editor's language: legend-code-editor's `CODE_EDITOR_LANGUAGE.JSON` */
|
|
34
|
+
const JSON_LANGUAGE = 'json';
|
|
30
35
|
|
|
31
36
|
const TEXT_AREA_CLASS_NAME =
|
|
32
37
|
'h-80 w-full resize-none rounded-sm border border-[var(--color-border-default)] bg-[var(--color-bg-input)] p-1 font-mono text-sm text-[var(--color-text-primary)]';
|
|
@@ -60,12 +65,20 @@ export const CubeSpecTransferDialog = observer(
|
|
|
60
65
|
<div className="flex flex-col gap-2">
|
|
61
66
|
{isExport ? (
|
|
62
67
|
transfer.exportText !== undefined && (
|
|
63
|
-
|
|
64
|
-
|
|
68
|
+
// a code editor, so each object and list folds from the gutter
|
|
69
|
+
<div
|
|
70
|
+
className="h-80 w-full overflow-hidden rounded-sm border border-[var(--color-border-default)]"
|
|
65
71
|
aria-label="Cube spec"
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
72
|
+
>
|
|
73
|
+
<CodeEditor
|
|
74
|
+
inputValue={transfer.exportText}
|
|
75
|
+
language={JSON_LANGUAGE}
|
|
76
|
+
isReadOnly={true}
|
|
77
|
+
hideMinimap={true}
|
|
78
|
+
hideActionBar={true}
|
|
79
|
+
extraEditorOptions={{ scrollBeyondLastLine: false }}
|
|
80
|
+
/>
|
|
81
|
+
</div>
|
|
69
82
|
)
|
|
70
83
|
) : (
|
|
71
84
|
<>
|
|
@@ -115,7 +128,7 @@ export const CubeSpecTransferDialog = observer(
|
|
|
115
128
|
{isExport ? (
|
|
116
129
|
<>
|
|
117
130
|
<ModalFooterButton
|
|
118
|
-
darkMode={
|
|
131
|
+
darkMode={CUBE_PRIMARY_BUTTON_DARK_MODE}
|
|
119
132
|
formatText={false}
|
|
120
133
|
text="Copy"
|
|
121
134
|
disabled={transfer.exportText === undefined}
|
|
@@ -126,7 +139,7 @@ export const CubeSpecTransferDialog = observer(
|
|
|
126
139
|
}}
|
|
127
140
|
/>
|
|
128
141
|
<ModalFooterButton
|
|
129
|
-
darkMode={
|
|
142
|
+
darkMode={CUBE_PRIMARY_BUTTON_DARK_MODE}
|
|
130
143
|
formatText={false}
|
|
131
144
|
text="Download"
|
|
132
145
|
disabled={transfer.exportText === undefined}
|
|
@@ -135,7 +148,7 @@ export const CubeSpecTransferDialog = observer(
|
|
|
135
148
|
</>
|
|
136
149
|
) : (
|
|
137
150
|
<ModalFooterButton
|
|
138
|
-
darkMode={
|
|
151
|
+
darkMode={CUBE_PRIMARY_BUTTON_DARK_MODE}
|
|
139
152
|
formatText={false}
|
|
140
153
|
text="Import"
|
|
141
154
|
disabled={!transfer.importText.trim() || transfer.isReadingFile}
|
|
@@ -15,6 +15,7 @@
|
|
|
15
15
|
*/
|
|
16
16
|
|
|
17
17
|
import type { Schema } from '@finos/legend-cube';
|
|
18
|
+
import type { PlainObject } from '@finos/legend-shared';
|
|
18
19
|
import {
|
|
19
20
|
type CubeDataProductEnvironmentType,
|
|
20
21
|
type CubeDataProductProject,
|
|
@@ -243,3 +244,13 @@ export interface CubeDataProductCatalog {
|
|
|
243
244
|
signal?: AbortSignal,
|
|
244
245
|
): Promise<ReadonlyMap<string, CubeAccessPointGroupAccess>>;
|
|
245
246
|
}
|
|
247
|
+
|
|
248
|
+
/**
|
|
249
|
+
* Where a data product cube's engine reads the project its data products
|
|
250
|
+
* are in, as protocol JSON: by default the project at the version they were
|
|
251
|
+
* deployed from (a pointer); a host's own, e.g. Studio's workspace, whose
|
|
252
|
+
* data products aren't deployed. Fails with a `CubeEngineError`
|
|
253
|
+
*/
|
|
254
|
+
export interface CubeDataProductModelSource {
|
|
255
|
+
getProjectModel(project: CubeDataProductProject): Promise<PlainObject>;
|
|
256
|
+
}
|
|
@@ -84,10 +84,45 @@ export interface CubeOutlineRuntime {
|
|
|
84
84
|
readonly connections?: readonly CubeOutlineConnection[];
|
|
85
85
|
}
|
|
86
86
|
|
|
87
|
-
/**
|
|
87
|
+
/** A parameter of a function, as its signature declares it */
|
|
88
|
+
export interface CubeOutlineFunctionParameter {
|
|
89
|
+
readonly name: string;
|
|
90
|
+
/** Its type's path, as written, e.g. `Float` */
|
|
91
|
+
readonly type: string;
|
|
92
|
+
/** Its multiplicity, as written, e.g. `[1]`, `[0..1]` or `[*]` */
|
|
93
|
+
readonly multiplicity: string;
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
/** A column a function declares it returns, e.g. `ID:Integer` */
|
|
97
|
+
export interface CubeOutlineFunctionColumn {
|
|
98
|
+
readonly name: string;
|
|
99
|
+
readonly type: string;
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
/** A function of a model that returns a relation (PLAN §6.5), as plain data */
|
|
103
|
+
export interface CubeOutlineFunction {
|
|
104
|
+
/** The path the lambda calls it by, e.g. `sales::ordersAbove` */
|
|
105
|
+
readonly path: string;
|
|
106
|
+
/** The engine's full name, e.g. `sales::ordersAbove_Float_1__Relation_1_` */
|
|
107
|
+
readonly signature: string;
|
|
108
|
+
readonly parameters: readonly CubeOutlineFunctionParameter[];
|
|
109
|
+
readonly columns: readonly CubeOutlineFunctionColumn[];
|
|
110
|
+
/**
|
|
111
|
+
* The runtime it reads through, as its body's `from()` names it, directly
|
|
112
|
+
* or through a function it calls; none when it leaves the runtime to its
|
|
113
|
+
* caller
|
|
114
|
+
*/
|
|
115
|
+
readonly runtime?: string | undefined;
|
|
116
|
+
/** Why it can't be added, e.g. a parameter Cube can't take a value for */
|
|
117
|
+
readonly problem?: string | undefined;
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
/** What a model offers the source picker: its databases, runtimes and functions, as plain data */
|
|
88
121
|
export interface CubeModelOutline {
|
|
89
122
|
readonly databases: readonly CubeOutlineDatabase[];
|
|
90
123
|
readonly runtimes: readonly CubeOutlineRuntime[];
|
|
124
|
+
/** Its functions that return a relation; optional, as an outline from before them has none */
|
|
125
|
+
readonly functions?: readonly CubeOutlineFunction[] | undefined;
|
|
91
126
|
}
|
|
92
127
|
|
|
93
128
|
export enum CubeEngineErrorKind {
|
|
@@ -192,8 +227,23 @@ export interface CubeEngine {
|
|
|
192
227
|
lambda: IR,
|
|
193
228
|
options?: { abortController?: AbortController | undefined },
|
|
194
229
|
): Promise<CubeResult>;
|
|
230
|
+
/**
|
|
231
|
+
* Runs an execution lambda and gives its rows as CSV text (PLAN §11.10):
|
|
232
|
+
* the engine's own, a header row first, every value as the engine writes
|
|
233
|
+
* it; rejects with a `CubeEngineError`
|
|
234
|
+
*/
|
|
235
|
+
exportCsv(
|
|
236
|
+
model: ModelContext,
|
|
237
|
+
lambda: IR,
|
|
238
|
+
options?: { abortController?: AbortController | undefined },
|
|
239
|
+
): Promise<string>;
|
|
195
240
|
/** The Pure text of a lambda, for display only: never parsed back */
|
|
196
241
|
renderPure(lambda: IR): Promise<string>;
|
|
242
|
+
/**
|
|
243
|
+
* A lambda as the engine receives it, pretty-printed, its numbers kept
|
|
244
|
+
* exact (PLAN §11.16): for a viewer to copy while debugging a run
|
|
245
|
+
*/
|
|
246
|
+
serializeLambda(lambda: IR): string;
|
|
197
247
|
/**
|
|
198
248
|
* An Extend column's expression as the engine's JSON (PLAN §11.7), located
|
|
199
249
|
* under the source id; rejects with a `CubeEngineError` placed in the text
|
|
@@ -0,0 +1,64 @@
|
|
|
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
|
+
/** What Dev Settings changes on an engine client: the engine server client's own setters */
|
|
18
|
+
export interface CubeEngineClientControls {
|
|
19
|
+
setBaseUrl(url: string | undefined): void;
|
|
20
|
+
setCompression(enabled: boolean): void;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
/**
|
|
24
|
+
* The settings every engine client of Cube shares (PLAN §11.16): the
|
|
25
|
+
* engine's URL and whether requests are compressed. The engine, the
|
|
26
|
+
* connection explorer and the catalogs each have their own client, built
|
|
27
|
+
* from the same configuration; each registers here, so Dev Settings changes
|
|
28
|
+
* them all at once. A change takes effect from the next request.
|
|
29
|
+
*/
|
|
30
|
+
export class CubeEngineClientSettings {
|
|
31
|
+
/** The URL the host configured, to go back to */
|
|
32
|
+
readonly defaultBaseUrl: string | undefined;
|
|
33
|
+
baseUrl: string | undefined;
|
|
34
|
+
requestCompression: boolean;
|
|
35
|
+
private readonly clients: CubeEngineClientControls[] = [];
|
|
36
|
+
|
|
37
|
+
constructor(config: {
|
|
38
|
+
readonly baseUrl?: string | undefined;
|
|
39
|
+
readonly enableCompression?: boolean | undefined;
|
|
40
|
+
}) {
|
|
41
|
+
this.defaultBaseUrl = config.baseUrl;
|
|
42
|
+
this.baseUrl = config.baseUrl;
|
|
43
|
+
this.requestCompression = Boolean(config.enableCompression);
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
/** Adds a client built from the same configuration, given the settings changed since */
|
|
47
|
+
register(client: CubeEngineClientControls): void {
|
|
48
|
+
this.clients.push(client);
|
|
49
|
+
if (this.baseUrl !== this.defaultBaseUrl) {
|
|
50
|
+
client.setBaseUrl(this.baseUrl);
|
|
51
|
+
}
|
|
52
|
+
client.setCompression(this.requestCompression);
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
setBaseUrl(url: string | undefined): void {
|
|
56
|
+
this.baseUrl = url;
|
|
57
|
+
this.clients.forEach((client) => client.setBaseUrl(url));
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
setRequestCompression(enabled: boolean): void {
|
|
61
|
+
this.requestCompression = enabled;
|
|
62
|
+
this.clients.forEach((client) => client.setCompression(enabled));
|
|
63
|
+
}
|
|
64
|
+
}
|
|
@@ -118,6 +118,21 @@ export interface CubeIngestUrn {
|
|
|
118
118
|
readonly definition: string;
|
|
119
119
|
}
|
|
120
120
|
|
|
121
|
+
/** The URN's environment segment of each class */
|
|
122
|
+
const URN_ENVIRONMENTS: Readonly<
|
|
123
|
+
Record<CubeDataProductEnvironmentType, string>
|
|
124
|
+
> = {
|
|
125
|
+
[CubeDataProductEnvironmentType.PRODUCTION]: 'prod',
|
|
126
|
+
[CubeDataProductEnvironmentType.PRODUCTION_PARALLEL]: 'prod-parallel',
|
|
127
|
+
};
|
|
128
|
+
|
|
129
|
+
/**
|
|
130
|
+
* The URN of a definition deployed from SDLC, as `parseCubeIngestUrn` reads
|
|
131
|
+
* it: for a host naming definitions of its own, e.g. Studio's workspace
|
|
132
|
+
*/
|
|
133
|
+
export const formatCubeIngestUrn = (urn: CubeIngestUrn): string =>
|
|
134
|
+
`urn:lakehouse:${URN_ENVIRONMENTS[urn.environmentType]}:ingest:definition:alloy-git:${urn.groupId}~${urn.artifactId}~${urn.definition}`;
|
|
135
|
+
|
|
121
136
|
const SDLC_DEPLOYED_URN =
|
|
122
137
|
/^urn:lakehouse:(?<environment>[^:]+):ingest:definition:alloy-git:(?<groupId>[^~]+)~(?<artifactId>[^~]+)~(?<definition>.+)$/u;
|
|
123
138
|
|