@finos/legend-cube-builder 0.0.4 → 0.0.6
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 +24 -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 +83 -5
- 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 +16 -2
- package/lib/__lib__/LegendCubeHelpText.js.map +1 -1
- package/lib/__lib__/LegendCubeLabels.d.ts +130 -9
- package/lib/__lib__/LegendCubeLabels.d.ts.map +1 -1
- package/lib/__lib__/LegendCubeLabels.js +169 -17
- package/lib/__lib__/LegendCubeLabels.js.map +1 -1
- package/lib/__lib__/LegendCubeNavigation.d.ts +23 -0
- package/lib/__lib__/LegendCubeNavigation.d.ts.map +1 -0
- package/lib/__lib__/LegendCubeNavigation.js +33 -0
- package/lib/__lib__/LegendCubeNavigation.js.map +1 -0
- 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 +10 -1
- package/lib/__lib__/LegendCubeTesting.d.ts.map +1 -1
- package/lib/__lib__/LegendCubeTesting.js +9 -0
- package/lib/__lib__/LegendCubeTesting.js.map +1 -1
- package/lib/__lib__/LegendCubeTour.d.ts +62 -0
- package/lib/__lib__/LegendCubeTour.d.ts.map +1 -0
- package/lib/__lib__/LegendCubeTour.js +149 -0
- package/lib/__lib__/LegendCubeTour.js.map +1 -0
- 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__/CubeExampleTestUtils.d.ts +34 -0
- package/lib/__test-utils__/CubeExampleTestUtils.d.ts.map +1 -0
- package/lib/__test-utils__/CubeExampleTestUtils.js +72 -0
- package/lib/__test-utils__/CubeExampleTestUtils.js.map +1 -0
- 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__/CubeVariantTestUtils.d.ts +16 -0
- package/lib/__test-utils__/CubeVariantTestUtils.d.ts.map +1 -0
- package/lib/__test-utils__/CubeVariantTestUtils.js +66 -0
- package/lib/__test-utils__/CubeVariantTestUtils.js.map +1 -0
- 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 +11 -7
- 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 +22 -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 +78 -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 +6 -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 +40 -6
- 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 +11 -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 +54 -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 +6 -4
- 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/CubeExplodeEditor.d.ts +26 -0
- package/lib/components/editors/CubeExplodeEditor.d.ts.map +1 -0
- package/lib/components/editors/CubeExplodeEditor.js +61 -0
- package/lib/components/editors/CubeExplodeEditor.js.map +1 -0
- 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 +86 -0
- package/lib/components/editors/CubeExpressionFilterEditor.js.map +1 -0
- package/lib/components/editors/CubeExtendEditor.d.ts.map +1 -1
- package/lib/components/editors/CubeExtendEditor.js +13 -12
- 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/CubeJsonFieldsTree.d.ts +46 -0
- package/lib/components/editors/CubeJsonFieldsTree.d.ts.map +1 -0
- package/lib/components/editors/CubeJsonFieldsTree.js +93 -0
- package/lib/components/editors/CubeJsonFieldsTree.js.map +1 -0
- 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 +11 -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 +43 -28
- package/lib/components/grid/CubeGridRegion.js.map +1 -1
- package/lib/components/grid/CubeGridValues.d.ts +36 -4
- package/lib/components/grid/CubeGridValues.d.ts.map +1 -1
- package/lib/components/grid/CubeGridValues.js +116 -4
- package/lib/components/grid/CubeGridValues.js.map +1 -1
- package/lib/components/grid/CubeJsonExplorerDialog.d.ts +27 -0
- package/lib/components/grid/CubeJsonExplorerDialog.d.ts.map +1 -0
- package/lib/components/grid/CubeJsonExplorerDialog.js +102 -0
- package/lib/components/grid/CubeJsonExplorerDialog.js.map +1 -0
- package/lib/components/grid/CubeJsonViewerDialog.d.ts +27 -0
- package/lib/components/grid/CubeJsonViewerDialog.d.ts.map +1 -0
- package/lib/components/grid/CubeJsonViewerDialog.js +68 -0
- package/lib/components/grid/CubeJsonViewerDialog.js.map +1 -0
- package/lib/components/grid/CubeResultGrid.d.ts +81 -6
- package/lib/components/grid/CubeResultGrid.d.ts.map +1 -1
- package/lib/components/grid/CubeResultGrid.js +400 -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 +116 -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 +36 -14
- 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 +2 -2
- package/lib/components/source-picker/CubeIngestTab.d.ts.map +1 -1
- package/lib/components/source-picker/CubeIngestTab.js +49 -20
- 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/components/tour/CubeTour.d.ts +36 -0
- package/lib/components/tour/CubeTour.d.ts.map +1 -0
- package/lib/components/tour/CubeTour.js +183 -0
- package/lib/components/tour/CubeTour.js.map +1 -0
- 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 +13 -3
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +11 -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 +189 -43
- package/lib/stores/CubeEditorState.d.ts.map +1 -1
- package/lib/stores/CubeEditorState.js +532 -117
- 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 +136 -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 +6 -3
- 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 +25 -6
- package/lib/stores/CubeGridQuickActions.d.ts.map +1 -1
- package/lib/stores/CubeGridQuickActions.js +52 -23
- 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/CubePureText.d.ts +20 -0
- package/lib/stores/CubePureText.d.ts.map +1 -0
- package/lib/stores/CubePureText.js +24 -0
- package/lib/stores/CubePureText.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/CubeTourState.d.ts +49 -0
- package/lib/stores/CubeTourState.d.ts.map +1 -0
- package/lib/stores/CubeTourState.js +92 -0
- package/lib/stores/CubeTourState.js.map +1 -0
- package/lib/stores/LegendCubeHost.d.ts +88 -0
- package/lib/stores/LegendCubeHost.d.ts.map +1 -0
- package/lib/stores/LegendCubeHost.js +149 -0
- package/lib/stores/LegendCubeHost.js.map +1 -0
- 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/CubeExplodeDraft.d.ts +87 -0
- package/lib/stores/editors/CubeExplodeDraft.d.ts.map +1 -0
- package/lib/stores/editors/CubeExplodeDraft.js +221 -0
- package/lib/stores/editors/CubeExplodeDraft.js.map +1 -0
- package/lib/stores/editors/CubeExpressionFilterDraft.d.ts +94 -0
- package/lib/stores/editors/CubeExpressionFilterDraft.d.ts.map +1 -0
- package/lib/stores/editors/CubeExpressionFilterDraft.js +258 -0
- package/lib/stores/editors/CubeExpressionFilterDraft.js.map +1 -0
- package/lib/stores/editors/CubeExtendDraft.d.ts +9 -0
- package/lib/stores/editors/CubeExtendDraft.d.ts.map +1 -1
- package/lib/stores/editors/CubeExtendDraft.js +26 -0
- package/lib/stores/editors/CubeExtendDraft.js.map +1 -1
- 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 +25 -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 +27 -0
- package/lib/stores/fixtures/CubeSalesDuckDbModel.d.ts.map +1 -0
- package/lib/stores/fixtures/CubeSalesDuckDbModel.js +52 -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 +62 -15
- package/lib/stores/source-picker/CubeIngestTabState.d.ts.map +1 -1
- package/lib/stores/source-picker/CubeIngestTabState.js +212 -60
- 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/lib/stores/variant/CubeJson.d.ts +48 -0
- package/lib/stores/variant/CubeJson.d.ts.map +1 -0
- package/lib/stores/variant/CubeJson.js +207 -0
- package/lib/stores/variant/CubeJson.js.map +1 -0
- package/lib/stores/variant/CubeJsonExplorerState.d.ts +88 -0
- package/lib/stores/variant/CubeJsonExplorerState.d.ts.map +1 -0
- package/lib/stores/variant/CubeJsonExplorerState.js +297 -0
- package/lib/stores/variant/CubeJsonExplorerState.js.map +1 -0
- package/lib/stores/variant/CubeJsonFieldsState.d.ts +83 -0
- package/lib/stores/variant/CubeJsonFieldsState.d.ts.map +1 -0
- package/lib/stores/variant/CubeJsonFieldsState.js +207 -0
- package/lib/stores/variant/CubeJsonFieldsState.js.map +1 -0
- package/lib/stores/variant/CubeJsonOffers.d.ts +76 -0
- package/lib/stores/variant/CubeJsonOffers.d.ts.map +1 -0
- package/lib/stores/variant/CubeJsonOffers.js +250 -0
- package/lib/stores/variant/CubeJsonOffers.js.map +1 -0
- package/lib/stores/variant/CubeJsonParse.d.ts +28 -0
- package/lib/stores/variant/CubeJsonParse.d.ts.map +1 -0
- package/lib/stores/variant/CubeJsonParse.js +53 -0
- package/lib/stores/variant/CubeJsonParse.js.map +1 -0
- package/lib/stores/variant/CubeJsonSampling.d.ts +41 -0
- package/lib/stores/variant/CubeJsonSampling.d.ts.map +1 -0
- package/lib/stores/variant/CubeJsonSampling.js +59 -0
- package/lib/stores/variant/CubeJsonSampling.js.map +1 -0
- package/lib/stores/variant/CubeJsonShape.d.ts +87 -0
- package/lib/stores/variant/CubeJsonShape.d.ts.map +1 -0
- package/lib/stores/variant/CubeJsonShape.js +209 -0
- package/lib/stores/variant/CubeJsonShape.js.map +1 -0
- package/lib/stores/variant/CubeJsonViewerState.d.ts +33 -0
- package/lib/stores/variant/CubeJsonViewerState.d.ts.map +1 -0
- package/lib/stores/variant/CubeJsonViewerState.js +53 -0
- package/lib/stores/variant/CubeJsonViewerState.js.map +1 -0
- package/package.json +10 -9
- package/src/__lib__/LegendCubeCommand.ts +7 -0
- package/src/__lib__/LegendCubeFunctionLabels.ts +41 -0
- package/src/__lib__/LegendCubeHelpText.ts +27 -1
- package/src/__lib__/LegendCubeLabels.ts +225 -16
- package/src/__lib__/LegendCubeNavigation.ts +48 -0
- package/src/__lib__/LegendCubeProjectSourceLabels.ts +26 -0
- package/src/__lib__/LegendCubeServiceLabels.ts +41 -0
- package/src/__lib__/LegendCubeTesting.ts +9 -0
- package/src/__lib__/LegendCubeTour.ts +173 -0
- package/src/__test-utils__/CubeEngineTestSupport.ts +2 -1
- package/src/__test-utils__/CubeExampleTestUtils.ts +119 -0
- 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__/CubeVariantTestUtils.ts +103 -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 +15 -6
- package/src/components/CubeDialogTheme.ts +25 -0
- package/src/components/CubeEditor.tsx +170 -129
- package/src/components/CubeFileMenu.tsx +129 -0
- package/src/components/CubeLambdaImportBanner.tsx +97 -0
- package/src/components/CubeNodeIcon.tsx +9 -0
- package/src/components/CubeSchemaColumnsTable.tsx +7 -2
- package/src/components/canvas/CubeCanvas.tsx +65 -10
- 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 +37 -3
- package/src/components/dev-settings/CubeDevSettings.tsx +169 -0
- package/src/components/editors/CubeColumnChecklist.tsx +8 -2
- package/src/components/editors/CubeColumnPicker.tsx +9 -3
- package/src/components/editors/CubeConcatEditor.tsx +2 -2
- package/src/components/editors/CubeExplodeEditor.tsx +207 -0
- package/src/components/editors/CubeExpressionFilterEditor.tsx +210 -0
- package/src/components/editors/CubeExtendEditor.tsx +34 -21
- 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/CubeJsonFieldsTree.tsx +316 -0
- package/src/components/editors/CubeNodeEditorPanel.tsx +22 -10
- package/src/components/editors/CubeNodeEditorPopper.tsx +9 -1
- package/src/components/editors/CubeNodeEditorRegistry.ts +15 -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 +190 -56
- package/src/components/grid/CubeGridValues.ts +154 -4
- package/src/components/grid/CubeJsonExplorerDialog.tsx +304 -0
- package/src/components/grid/CubeJsonViewerDialog.tsx +190 -0
- package/src/components/grid/CubeResultGrid.tsx +586 -42
- package/src/components/grid/CubeRunStatsPanel.tsx +156 -0
- package/src/components/grid/CubeServerSideGrid.tsx +213 -0
- package/src/components/grid/CubeSqlDialog.tsx +90 -0
- package/src/components/grid/CubeSqlFormat.ts +37 -0
- package/src/components/palette/CubePalette.tsx +54 -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 +195 -83
- 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/components/tour/CubeTour.tsx +317 -0
- 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 +39 -2
- package/src/stores/CubeAddPlacement.ts +25 -5
- package/src/stores/CubeDevSettingsState.ts +117 -0
- package/src/stores/CubeEditorState.ts +722 -201
- package/src/stores/CubeEngineChecks.ts +240 -0
- package/src/stores/CubeExamples.ts +188 -1
- package/src/stores/CubeExamplesState.ts +13 -3
- 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 +56 -23
- 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/CubePureText.ts +28 -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/CubeTourState.ts +116 -0
- package/src/stores/LegendCubeHost.ts +243 -0
- package/src/stores/LocalModelCatalog.ts +6 -1
- package/src/stores/editors/CubeExplodeDraft.ts +272 -0
- package/src/stores/editors/CubeExpressionFilterDraft.ts +389 -0
- package/src/stores/editors/CubeExtendDraft.ts +29 -0
- package/src/stores/editors/CubeFunctionDraft.ts +92 -0
- package/src/stores/editors/CubeNodeDraftRegistry.ts +34 -2
- package/src/stores/editors/CubePivotDraft.ts +355 -0
- package/src/stores/fixtures/CubeSalesDuckDbModel.ts +60 -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 +331 -106
- 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/src/stores/variant/CubeJson.ts +229 -0
- package/src/stores/variant/CubeJsonExplorerState.ts +378 -0
- package/src/stores/variant/CubeJsonFieldsState.ts +252 -0
- package/src/stores/variant/CubeJsonOffers.ts +359 -0
- package/src/stores/variant/CubeJsonParse.ts +75 -0
- package/src/stores/variant/CubeJsonSampling.ts +90 -0
- package/src/stores/variant/CubeJsonShape.ts +279 -0
- package/src/stores/variant/CubeJsonViewerState.ts +59 -0
- package/tsconfig.json +72 -1
|
@@ -15,6 +15,7 @@
|
|
|
15
15
|
*/
|
|
16
16
|
|
|
17
17
|
export enum LEGEND_CUBE_TEST_ID {
|
|
18
|
+
RUNNING_NODE_BADGE = 'legend-cube__running-node-badge',
|
|
18
19
|
EDITOR = 'legend-cube__editor',
|
|
19
20
|
GRAPH_REGION = 'legend-cube__graph-region',
|
|
20
21
|
GRID_REGION = 'legend-cube__grid-region',
|
|
@@ -26,9 +27,17 @@ export enum LEGEND_CUBE_TEST_ID {
|
|
|
26
27
|
NODE_EDITOR = 'legend-cube__node-editor',
|
|
27
28
|
EDITOR_NOTICE = 'legend-cube__editor-notice',
|
|
28
29
|
ENTRY_SOURCE_ERROR = 'legend-cube__entry-source-error',
|
|
30
|
+
LAMBDA_IMPORT = 'legend-cube__lambda-import',
|
|
31
|
+
IMPORT_PURE = 'legend-cube__import-pure',
|
|
29
32
|
FILTER_CONDITION = 'legend-cube__filter-condition',
|
|
30
33
|
RESULT_GRID = 'legend-cube__result-grid',
|
|
34
|
+
DRILLDOWN_BAR = 'legend-cube__drilldown-bar',
|
|
35
|
+
RUN_STATS = 'legend-cube__run-stats',
|
|
36
|
+
COLUMN_FORMAT = 'legend-cube__column-format',
|
|
37
|
+
DRILLDOWN_SETTINGS = 'legend-cube__drilldown-settings',
|
|
31
38
|
GRID_TOOLBAR = 'legend-cube__grid-toolbar',
|
|
32
39
|
EXECUTION_ERROR = 'legend-cube__execution-error',
|
|
33
40
|
SQL_PANEL = 'legend-cube__sql-panel',
|
|
41
|
+
JSON_VIEWER = 'legend-cube__json-viewer',
|
|
42
|
+
JSON_EXPLORER = 'legend-cube__json-explorer',
|
|
34
43
|
}
|
|
@@ -0,0 +1,173 @@
|
|
|
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
|
+
EXECUTE_SHORTCUT_LABEL,
|
|
19
|
+
REDO_SHORTCUT_LABEL,
|
|
20
|
+
UNDO_SHORTCUT_LABEL,
|
|
21
|
+
} from './LegendCubeCommand.js';
|
|
22
|
+
|
|
23
|
+
// The editor's guided tour (PLAN §11.21): its steps, in order, each pointing
|
|
24
|
+
// at the controls marked with its anchor. A control joins a step by carrying
|
|
25
|
+
// `cubeTourAnchor(...)`; a step whose controls aren't on the page (the graph
|
|
26
|
+
// hidden, no run yet, a host without examples) is skipped. A new step adds
|
|
27
|
+
// its anchor here, its text below, and the anchor on its controls.
|
|
28
|
+
|
|
29
|
+
/** The attribute that marks a control as a tour step's */
|
|
30
|
+
export const CUBE_TOUR_ANCHOR_ATTRIBUTE = 'data-cube-tour';
|
|
31
|
+
|
|
32
|
+
export enum CUBE_TOUR_ANCHOR {
|
|
33
|
+
SOURCES = 'sources',
|
|
34
|
+
STEPS = 'steps',
|
|
35
|
+
CANVAS = 'canvas',
|
|
36
|
+
RUNNING_STEP = 'running-step',
|
|
37
|
+
EXECUTE = 'execute',
|
|
38
|
+
GRID_MODE = 'grid-mode',
|
|
39
|
+
RESULTS = 'results',
|
|
40
|
+
SHOW_SQL = 'show-sql',
|
|
41
|
+
RUNS = 'runs',
|
|
42
|
+
CUBE_MENU = 'cube-menu',
|
|
43
|
+
ADD_ITEMS = 'add-items',
|
|
44
|
+
EXAMPLES = 'examples',
|
|
45
|
+
VIEW = 'view',
|
|
46
|
+
PAGE_MENU = 'page-menu',
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
/** The props that mark a control as a tour step's */
|
|
50
|
+
export const cubeTourAnchor = (
|
|
51
|
+
anchor: CUBE_TOUR_ANCHOR,
|
|
52
|
+
): { [CUBE_TOUR_ANCHOR_ATTRIBUTE]: string } => ({
|
|
53
|
+
[CUBE_TOUR_ANCHOR_ATTRIBUTE]: anchor,
|
|
54
|
+
});
|
|
55
|
+
|
|
56
|
+
/** Where a step's card sits beside its controls */
|
|
57
|
+
export type CubeTourPlacement = 'top' | 'bottom' | 'left' | 'right';
|
|
58
|
+
|
|
59
|
+
export interface CubeTourStep {
|
|
60
|
+
readonly title: string;
|
|
61
|
+
readonly text: string;
|
|
62
|
+
/** The controls it points at; none for a card in the middle of the page */
|
|
63
|
+
readonly anchor?: CUBE_TOUR_ANCHOR | undefined;
|
|
64
|
+
readonly placement?: CubeTourPlacement | undefined;
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
/** The example the tour opens on an empty cube, where examples are offered */
|
|
68
|
+
export const CUBE_TOUR_EXAMPLE_ID = 'northwind-top-customers';
|
|
69
|
+
|
|
70
|
+
export const CUBE_EDITOR_TOUR: readonly CubeTourStep[] = Object.freeze([
|
|
71
|
+
{
|
|
72
|
+
title: 'Welcome to Legend Cube',
|
|
73
|
+
text: 'A cube is a query built as a chain of steps: a source of rows, then steps that sort, group, filter or join them. This tour shows where everything is: Next (or the → key) moves on, and Esc ends it.',
|
|
74
|
+
},
|
|
75
|
+
{
|
|
76
|
+
anchor: CUBE_TOUR_ANCHOR.SOURCES,
|
|
77
|
+
placement: 'right',
|
|
78
|
+
title: 'Sources',
|
|
79
|
+
text: 'Where the rows come from: a database table, a function, a data product or a service. Click one, or drop it on the canvas.',
|
|
80
|
+
},
|
|
81
|
+
{
|
|
82
|
+
anchor: CUBE_TOUR_ANCHOR.STEPS,
|
|
83
|
+
placement: 'right',
|
|
84
|
+
title: 'Steps',
|
|
85
|
+
text: 'Each step works on the rows of the step before it. Click one to add it after the selected step, or drop it on the canvas. A greyed-out step says why when you hover over it.',
|
|
86
|
+
},
|
|
87
|
+
{
|
|
88
|
+
anchor: CUBE_TOUR_ANCHOR.CANVAS,
|
|
89
|
+
placement: 'bottom',
|
|
90
|
+
title: 'The graph',
|
|
91
|
+
text: 'Your query, from left to right. Click a step to edit it: its editor opens beside it, with a ? that says what the step does.',
|
|
92
|
+
},
|
|
93
|
+
{
|
|
94
|
+
anchor: CUBE_TOUR_ANCHOR.RUNNING_STEP,
|
|
95
|
+
placement: 'bottom',
|
|
96
|
+
title: 'The step that runs',
|
|
97
|
+
text: 'Execute runs the query up to the step marked Runs. To run up to another step, open its editor and click Run this step.',
|
|
98
|
+
},
|
|
99
|
+
{
|
|
100
|
+
anchor: CUBE_TOUR_ANCHOR.EXECUTE,
|
|
101
|
+
placement: 'top',
|
|
102
|
+
title: 'Execute',
|
|
103
|
+
text: `Runs the query and shows its rows below (${EXECUTE_SHORTCUT_LABEL}). Rows caps how many rows come back.`,
|
|
104
|
+
},
|
|
105
|
+
{
|
|
106
|
+
anchor: CUBE_TOUR_ANCHOR.GRID_MODE,
|
|
107
|
+
placement: 'top',
|
|
108
|
+
title: 'Server-side or Local',
|
|
109
|
+
text: 'Server-side: each sort and drill-down in the grid runs on the engine, over every row of the query. Local: the grid groups, pivots and filters the rows already fetched, in your browser.',
|
|
110
|
+
},
|
|
111
|
+
{
|
|
112
|
+
anchor: CUBE_TOUR_ANCHOR.RESULTS,
|
|
113
|
+
placement: 'top',
|
|
114
|
+
title: 'The results',
|
|
115
|
+
text: 'The rows of the last run. Right-click a cell to sort, group or filter by its column as a new step, drill down, format a number column, or export the rows.',
|
|
116
|
+
},
|
|
117
|
+
{
|
|
118
|
+
anchor: CUBE_TOUR_ANCHOR.SHOW_SQL,
|
|
119
|
+
placement: 'top',
|
|
120
|
+
title: 'Show SQL',
|
|
121
|
+
text: 'The SQL the last run sent to the database.',
|
|
122
|
+
},
|
|
123
|
+
{
|
|
124
|
+
anchor: CUBE_TOUR_ANCHOR.RUNS,
|
|
125
|
+
placement: 'top',
|
|
126
|
+
title: 'Runs',
|
|
127
|
+
text: 'The latest runs, fetches and exports, each with its SQL and how long it took.',
|
|
128
|
+
},
|
|
129
|
+
{
|
|
130
|
+
anchor: CUBE_TOUR_ANCHOR.CUBE_MENU,
|
|
131
|
+
placement: 'bottom',
|
|
132
|
+
title: 'The Cube menu',
|
|
133
|
+
text: 'Start a new cube, import or export one, or read a Pure query in as steps with Import Pure.',
|
|
134
|
+
},
|
|
135
|
+
{
|
|
136
|
+
anchor: CUBE_TOUR_ANCHOR.ADD_ITEMS,
|
|
137
|
+
placement: 'bottom',
|
|
138
|
+
title: 'Add Items',
|
|
139
|
+
text: "The palette's sources and steps, as a menu.",
|
|
140
|
+
},
|
|
141
|
+
{
|
|
142
|
+
anchor: CUBE_TOUR_ANCHOR.EXAMPLES,
|
|
143
|
+
placement: 'bottom',
|
|
144
|
+
title: 'Examples',
|
|
145
|
+
text: 'Ready-made cubes on sample data, to try things out.',
|
|
146
|
+
},
|
|
147
|
+
{
|
|
148
|
+
anchor: CUBE_TOUR_ANCHOR.VIEW,
|
|
149
|
+
placement: 'bottom',
|
|
150
|
+
title: 'Undo, Show Pure, Hide graph',
|
|
151
|
+
text: `Undo (${UNDO_SHORTCUT_LABEL}) and Redo (${REDO_SHORTCUT_LABEL}) every change. Show Pure shows the Pure query Execute runs. Hide graph leaves more room for the results.`,
|
|
152
|
+
},
|
|
153
|
+
{
|
|
154
|
+
anchor: CUBE_TOUR_ANCHOR.PAGE_MENU,
|
|
155
|
+
placement: 'right',
|
|
156
|
+
title: "That's the tour",
|
|
157
|
+
text: 'Take it again from this menu whenever you like.',
|
|
158
|
+
},
|
|
159
|
+
]);
|
|
160
|
+
|
|
161
|
+
export const CUBE_TOUR_LABEL = {
|
|
162
|
+
START: 'Take the tour',
|
|
163
|
+
/** The empty canvas's offer */
|
|
164
|
+
OFFER: 'New to Legend Cube?',
|
|
165
|
+
NEXT: 'Next',
|
|
166
|
+
BACK: 'Back',
|
|
167
|
+
DONE: 'Done',
|
|
168
|
+
END: 'End the tour',
|
|
169
|
+
progress: (step: number, steps: number): string => `${step} of ${steps}`,
|
|
170
|
+
/** Added to the first step when the tour opened its example */
|
|
171
|
+
EXAMPLE_OPENED:
|
|
172
|
+
'The tour opened the example "Top customers by orders" to show you around; Undo puts the empty cube back.',
|
|
173
|
+
};
|
|
@@ -117,13 +117,14 @@ export const CUBE_ENGINE_TEST__jsonToGrammar_lambda = async (
|
|
|
117
117
|
*/
|
|
118
118
|
export const CUBE_ENGINE_TEST__execute = async (
|
|
119
119
|
input: object | string,
|
|
120
|
+
serializationFormat = 'DEFAULT',
|
|
120
121
|
): Promise<{ ok: boolean; status: number; text: () => Promise<string> }> => {
|
|
121
122
|
const response = await axios.post<unknown, AxiosResponse<string>>(
|
|
122
123
|
`${PURE_API}/execution/execute`,
|
|
123
124
|
input,
|
|
124
125
|
{
|
|
125
126
|
headers: JSON_HEADERS,
|
|
126
|
-
params: { serializationFormat
|
|
127
|
+
params: { serializationFormat },
|
|
127
128
|
responseType: 'text',
|
|
128
129
|
transformResponse: (data: string) => data,
|
|
129
130
|
validateStatus: () => true,
|
|
@@ -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
|
+
createNodeRegistry,
|
|
20
|
+
Extend,
|
|
21
|
+
type ModelContext,
|
|
22
|
+
Query,
|
|
23
|
+
RelationalTableSource,
|
|
24
|
+
Schema,
|
|
25
|
+
} from '@finos/legend-cube';
|
|
26
|
+
import type { CubeEngine } from '../graph-manager/CubeEngine.js';
|
|
27
|
+
import {
|
|
28
|
+
buildCubeExtendTypingLambdas,
|
|
29
|
+
readCubeExtendTyping,
|
|
30
|
+
} from '../stores/CubeExtendTyping.js';
|
|
31
|
+
import type { CubeExample } from '../stores/CubeExamples.js';
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
* The query with each Extend typed by the engine, in node order, as the
|
|
35
|
+
* editor types them in the background
|
|
36
|
+
*/
|
|
37
|
+
export const TEST__typeExtendsOnEngine = async (
|
|
38
|
+
engine: CubeEngine,
|
|
39
|
+
model: ModelContext,
|
|
40
|
+
input: Query,
|
|
41
|
+
): Promise<Query> => {
|
|
42
|
+
const registry = createNodeRegistry();
|
|
43
|
+
let query = input;
|
|
44
|
+
for (const node of query.nodes) {
|
|
45
|
+
if (node instanceof Extend) {
|
|
46
|
+
const columns = node.columns.map(({ name, lambda }) => ({
|
|
47
|
+
name,
|
|
48
|
+
lambda: lambda as NonNullable<typeof lambda>,
|
|
49
|
+
}));
|
|
50
|
+
const [inputId] = query.getInputIds(node.id);
|
|
51
|
+
const answers = await engine.typeLambdas(
|
|
52
|
+
model,
|
|
53
|
+
buildCubeExtendTypingLambdas(query, node, columns, registry, false),
|
|
54
|
+
);
|
|
55
|
+
const { typing } = readCubeExtendTyping(
|
|
56
|
+
answers,
|
|
57
|
+
node,
|
|
58
|
+
buildSchemasAndValidity(query, registry.queryRules).schemas.get(
|
|
59
|
+
inputId ?? '',
|
|
60
|
+
) as Schema,
|
|
61
|
+
columns,
|
|
62
|
+
undefined,
|
|
63
|
+
);
|
|
64
|
+
query = query.replace(
|
|
65
|
+
new Extend(node.id, node.columns, typing, node.rest),
|
|
66
|
+
);
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
return query;
|
|
70
|
+
};
|
|
71
|
+
|
|
72
|
+
/**
|
|
73
|
+
* An example's cube as opening it types it, on the engine: its tables, then
|
|
74
|
+
* each Extend, in node order, as the editor types it in the background (an
|
|
75
|
+
* Extend parsing JSON, PLAN §11.20)
|
|
76
|
+
*/
|
|
77
|
+
export const TEST__openExampleOnEngine = async (
|
|
78
|
+
engine: CubeEngine,
|
|
79
|
+
example: CubeExample,
|
|
80
|
+
): Promise<{ model: ModelContext; runtime: string; query: Query }> => {
|
|
81
|
+
const document = example.createDocument();
|
|
82
|
+
const model = document.context?.model;
|
|
83
|
+
const runtime = document.context?.runtime;
|
|
84
|
+
if (!model || !runtime) {
|
|
85
|
+
throw new Error(`Example ${example.id} has no model or runtime`);
|
|
86
|
+
}
|
|
87
|
+
const sources = document.query.nodes.filter(
|
|
88
|
+
(node): node is RelationalTableSource =>
|
|
89
|
+
node instanceof RelationalTableSource,
|
|
90
|
+
);
|
|
91
|
+
const typed = await engine.resolveSchemas(
|
|
92
|
+
model,
|
|
93
|
+
new Map(
|
|
94
|
+
sources.map((source) => [
|
|
95
|
+
source.id,
|
|
96
|
+
[source.database, source.schema, source.table] as const,
|
|
97
|
+
]),
|
|
98
|
+
),
|
|
99
|
+
);
|
|
100
|
+
const query = new Query(
|
|
101
|
+
document.query.nodes.map((node) => {
|
|
102
|
+
if (!(node instanceof RelationalTableSource)) {
|
|
103
|
+
return node;
|
|
104
|
+
}
|
|
105
|
+
const schema = typed.get(node.id);
|
|
106
|
+
if (!(schema instanceof Schema)) {
|
|
107
|
+
throw schema ?? new Error(`No schema for ${node.id}`);
|
|
108
|
+
}
|
|
109
|
+
return node.withResolution({ kind: 'resolved', schema });
|
|
110
|
+
}),
|
|
111
|
+
document.query.connections,
|
|
112
|
+
document.query.selected,
|
|
113
|
+
);
|
|
114
|
+
return {
|
|
115
|
+
model,
|
|
116
|
+
runtime,
|
|
117
|
+
query: await TEST__typeExtendsOnEngine(engine, model, query),
|
|
118
|
+
};
|
|
119
|
+
};
|
|
@@ -16,15 +16,18 @@
|
|
|
16
16
|
|
|
17
17
|
import {
|
|
18
18
|
buildSchemasAndValidity,
|
|
19
|
+
ExpressionFilter,
|
|
19
20
|
Extend,
|
|
21
|
+
getExpressionFilterSignature,
|
|
20
22
|
getExtendSignature,
|
|
21
23
|
type JsonObject,
|
|
22
24
|
PrimitiveType,
|
|
23
25
|
type Query,
|
|
24
26
|
} from '@finos/legend-cube';
|
|
25
27
|
|
|
26
|
-
// Extend columns for tests (PLAN §11.7
|
|
27
|
-
//
|
|
28
|
+
// Extend columns and filter conditions for tests (PLAN §11.7, §11.11),
|
|
29
|
+
// written as the engine's JSON, as a node stores it: number literals as their
|
|
30
|
+
// digits
|
|
28
31
|
|
|
29
32
|
/** `x | <body>` and the pieces of a body */
|
|
30
33
|
export const TEST__expression = {
|
|
@@ -54,6 +57,7 @@ export const TEST__expression = {
|
|
|
54
57
|
_type: 'integer',
|
|
55
58
|
value: String(value),
|
|
56
59
|
}),
|
|
60
|
+
string: (value: string): JsonObject => ({ _type: 'string', value }),
|
|
57
61
|
};
|
|
58
62
|
|
|
59
63
|
/** A new column: its name, its lambda, and the type the engine gives it */
|
|
@@ -88,6 +92,29 @@ export const TEST__typedExtend = (
|
|
|
88
92
|
});
|
|
89
93
|
};
|
|
90
94
|
|
|
95
|
+
/**
|
|
96
|
+
* A Filter by Expression of this condition, checked for the input Cube infers
|
|
97
|
+
* for `input`'s selected node, so it is valid without the engine; the engine
|
|
98
|
+
* tests check the engine takes it. With an invalid input, not checked.
|
|
99
|
+
*/
|
|
100
|
+
export const TEST__checkedExpressionFilter = (
|
|
101
|
+
id: string,
|
|
102
|
+
input: Query,
|
|
103
|
+
code: string,
|
|
104
|
+
lambda: JsonObject,
|
|
105
|
+
): ExpressionFilter => {
|
|
106
|
+
const filter = new ExpressionFilter(id, code, lambda);
|
|
107
|
+
const schema = buildSchemasAndValidity(input).schemas.get(
|
|
108
|
+
input.selected ?? '',
|
|
109
|
+
);
|
|
110
|
+
return schema
|
|
111
|
+
? filter.withCheck({
|
|
112
|
+
kind: 'checked',
|
|
113
|
+
signature: getExpressionFilterSignature(schema, lambda),
|
|
114
|
+
})
|
|
115
|
+
: filter;
|
|
116
|
+
};
|
|
117
|
+
|
|
91
118
|
/** `a: x | $x.ORDER_ID + 1` and `b: x | $x.a * 2`, the second using the first, both Integer */
|
|
92
119
|
export const TEST__ORDER_ID_EXTEND_COLUMNS: readonly TEST__ExtendColumn[] = [
|
|
93
120
|
[
|
|
@@ -0,0 +1,78 @@
|
|
|
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 { resolveCubeType, Schema, SchemaColumn } from '@finos/legend-cube';
|
|
18
|
+
import type {
|
|
19
|
+
CubeModelOutline,
|
|
20
|
+
CubeOutlineFunction,
|
|
21
|
+
} from '../graph-manager/CubeEngine.js';
|
|
22
|
+
import {
|
|
23
|
+
NORTHWIND_DATABASE,
|
|
24
|
+
NORTHWIND_RUNTIME,
|
|
25
|
+
} from './CubeNorthwindTestQueries.js';
|
|
26
|
+
import { FAKE_NORTHWIND_OUTLINE } from './FakeCubeEngine.js';
|
|
27
|
+
|
|
28
|
+
// The fake Northwind outline with functions that return a relation (PLAN
|
|
29
|
+
// §6.5), and a second runtime: one function of each kind
|
|
30
|
+
|
|
31
|
+
export const ARCHIVE_RUNTIME = 'northwind::ArchiveRuntime';
|
|
32
|
+
|
|
33
|
+
const fn = (
|
|
34
|
+
name: string,
|
|
35
|
+
parameters: CubeOutlineFunction['parameters'] = [],
|
|
36
|
+
extra: Partial<CubeOutlineFunction> = {},
|
|
37
|
+
): CubeOutlineFunction => ({
|
|
38
|
+
path: `northwind::${name}`,
|
|
39
|
+
signature: `northwind::${name}__Relation_1_`,
|
|
40
|
+
parameters,
|
|
41
|
+
columns: [{ name: 'ORDER_ID', type: 'Integer' }],
|
|
42
|
+
...extra,
|
|
43
|
+
});
|
|
44
|
+
|
|
45
|
+
export const ALL_ORDERS = fn('allOrders');
|
|
46
|
+
export const ORDERS_ABOVE = fn('ordersAbove', [
|
|
47
|
+
{ name: 'min', type: 'Float', multiplicity: '[1]' },
|
|
48
|
+
{ name: 'status', type: 'String', multiplicity: '[0..1]' },
|
|
49
|
+
]);
|
|
50
|
+
export const SHIPPED = fn('shipped', [], { runtime: NORTHWIND_RUNTIME });
|
|
51
|
+
export const ARCHIVED = fn('archived', [], { runtime: ARCHIVE_RUNTIME });
|
|
52
|
+
export const ORDERS_OF = fn(
|
|
53
|
+
'ordersOf',
|
|
54
|
+
[{ name: 'ids', type: 'Integer', multiplicity: '[*]' }],
|
|
55
|
+
{
|
|
56
|
+
problem:
|
|
57
|
+
'Its parameter "ids" takes [*] values; Cube takes one value, or none',
|
|
58
|
+
},
|
|
59
|
+
);
|
|
60
|
+
|
|
61
|
+
export const FUNCTIONS_OUTLINE: CubeModelOutline = {
|
|
62
|
+
...FAKE_NORTHWIND_OUTLINE,
|
|
63
|
+
runtimes: [
|
|
64
|
+
...FAKE_NORTHWIND_OUTLINE.runtimes,
|
|
65
|
+
{
|
|
66
|
+
path: ARCHIVE_RUNTIME,
|
|
67
|
+
storePaths: [NORTHWIND_DATABASE],
|
|
68
|
+
connections: [
|
|
69
|
+
{ storePath: NORTHWIND_DATABASE, databaseType: 'Postgres' },
|
|
70
|
+
],
|
|
71
|
+
},
|
|
72
|
+
],
|
|
73
|
+
functions: [ALL_ORDERS, ORDERS_ABOVE, SHIPPED, ARCHIVED, ORDERS_OF],
|
|
74
|
+
};
|
|
75
|
+
|
|
76
|
+
export const FUNCTION_SCHEMA = new Schema([
|
|
77
|
+
new SchemaColumn('ORDER_ID', resolveCubeType('Integer'), true),
|
|
78
|
+
]);
|
|
@@ -0,0 +1,137 @@
|
|
|
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
|
+
CubeLambdaReadError,
|
|
20
|
+
decodeCubeSpec,
|
|
21
|
+
ExpressionFilter,
|
|
22
|
+
getExpressionFilterSignature,
|
|
23
|
+
lambda,
|
|
24
|
+
QueryEmitter,
|
|
25
|
+
RelationalTableSource,
|
|
26
|
+
type CubeDocument,
|
|
27
|
+
type CubeSourceStep,
|
|
28
|
+
type IR,
|
|
29
|
+
type Query,
|
|
30
|
+
} from '@finos/legend-cube';
|
|
31
|
+
import { readdirSync, readFileSync } from 'fs';
|
|
32
|
+
import { join, resolve } from 'path';
|
|
33
|
+
|
|
34
|
+
// The lambdas Cube writes for the core's saved spec samples (PLAN §10.3),
|
|
35
|
+
// for Import Pure's round trips (PLAN §11.18): for each node that can be
|
|
36
|
+
// written, as a matview saves it and as Show Pure shows a run of it
|
|
37
|
+
|
|
38
|
+
const FIXTURES = resolve(
|
|
39
|
+
__dirname,
|
|
40
|
+
'../../../legend-cube/src/spec/__tests__/fixtures',
|
|
41
|
+
);
|
|
42
|
+
|
|
43
|
+
export interface TEST__CubeLambdaSample {
|
|
44
|
+
/** `<file>/<node id>` */
|
|
45
|
+
readonly key: string;
|
|
46
|
+
readonly document: CubeDocument;
|
|
47
|
+
readonly nodeId: string;
|
|
48
|
+
/** The node's relation, as a matview saves it: `{| <relation>}`, written with its rows' order */
|
|
49
|
+
readonly relation: IR;
|
|
50
|
+
/** A run of the node with no row limit, as Show Pure shows it: lets, the capture's sort, `from()` */
|
|
51
|
+
readonly run: IR;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
/** Every node of every sample that can be written, by key */
|
|
55
|
+
export const TEST__cubeLambdaSamples = (): TEST__CubeLambdaSample[] =>
|
|
56
|
+
readdirSync(FIXTURES)
|
|
57
|
+
.filter((file) => file.endsWith('.cube.json'))
|
|
58
|
+
.sort()
|
|
59
|
+
.flatMap((file) => {
|
|
60
|
+
const { document } = decodeCubeSpec(
|
|
61
|
+
JSON.parse(readFileSync(join(FIXTURES, file), 'utf-8')),
|
|
62
|
+
);
|
|
63
|
+
const runtime = document.context?.runtime;
|
|
64
|
+
if (runtime === undefined) {
|
|
65
|
+
return [];
|
|
66
|
+
}
|
|
67
|
+
const emitter = new QueryEmitter(document.query);
|
|
68
|
+
return document.query.nodes
|
|
69
|
+
.filter((node) => emitter.canEmit(node.id))
|
|
70
|
+
.map((node) => ({
|
|
71
|
+
key: `${file}/${node.id}`,
|
|
72
|
+
document,
|
|
73
|
+
nodeId: node.id,
|
|
74
|
+
relation: lambda(
|
|
75
|
+
[],
|
|
76
|
+
[emitter.emitRelation(node.id, { withRowOrder: true })],
|
|
77
|
+
),
|
|
78
|
+
run: new QueryEmitter(
|
|
79
|
+
document.query.selected === node.id
|
|
80
|
+
? document.query
|
|
81
|
+
: document.query.select(node.id),
|
|
82
|
+
).emitExecutionLambda({ runtime }),
|
|
83
|
+
}));
|
|
84
|
+
});
|
|
85
|
+
|
|
86
|
+
/** Each table of the lambda bound to the sample's own source of it, with its saved columns */
|
|
87
|
+
export const TEST__bindSampleSources =
|
|
88
|
+
(document: CubeDocument) =>
|
|
89
|
+
(source: IR): CubeSourceStep => {
|
|
90
|
+
const table = document.query.nodes.find(
|
|
91
|
+
(node): node is RelationalTableSource =>
|
|
92
|
+
node instanceof RelationalTableSource &&
|
|
93
|
+
source.k === 'storeAccessor' &&
|
|
94
|
+
source.path.join('.') ===
|
|
95
|
+
[node.database, node.schema, node.table].join('.'),
|
|
96
|
+
);
|
|
97
|
+
if (!table) {
|
|
98
|
+
throw new CubeLambdaReadError(`No table for ${JSON.stringify(source)}`);
|
|
99
|
+
}
|
|
100
|
+
return {
|
|
101
|
+
type: RelationalTableSource.TYPE,
|
|
102
|
+
create: (id) =>
|
|
103
|
+
new RelationalTableSource(
|
|
104
|
+
id,
|
|
105
|
+
{
|
|
106
|
+
database: table.database,
|
|
107
|
+
schema: table.schema,
|
|
108
|
+
table: table.table,
|
|
109
|
+
},
|
|
110
|
+
table.resolution,
|
|
111
|
+
),
|
|
112
|
+
};
|
|
113
|
+
};
|
|
114
|
+
|
|
115
|
+
/**
|
|
116
|
+
* The query with each Filter by Expression checked, as the editor has the
|
|
117
|
+
* engine check them on import: the samples' conditions are all Booleans
|
|
118
|
+
*/
|
|
119
|
+
export const TEST__checkedAsTheEngineWould = (query: Query): Query =>
|
|
120
|
+
query.nodes.reduce((checked, node) => {
|
|
121
|
+
if (!(node instanceof ExpressionFilter) || !node.lambda) {
|
|
122
|
+
return checked;
|
|
123
|
+
}
|
|
124
|
+
const [inputId] = checked.getInputIds(node.id);
|
|
125
|
+
const input =
|
|
126
|
+
inputId === undefined
|
|
127
|
+
? undefined
|
|
128
|
+
: buildSchemasAndValidity(checked).schemas.get(inputId);
|
|
129
|
+
return input
|
|
130
|
+
? checked.replace(
|
|
131
|
+
node.withCheck({
|
|
132
|
+
kind: 'checked',
|
|
133
|
+
signature: getExpressionFilterSignature(input, node.lambda),
|
|
134
|
+
}),
|
|
135
|
+
)
|
|
136
|
+
: checked;
|
|
137
|
+
}, query);
|
|
@@ -129,3 +129,37 @@ export const TEST__closeAddItems = async (): Promise<void> => {
|
|
|
129
129
|
fireEvent.keyDown(screen.getByRole('menu'), { key: 'Escape' });
|
|
130
130
|
await waitFor(() => expect(screen.queryByRole('menu')).toBeNull());
|
|
131
131
|
};
|
|
132
|
+
|
|
133
|
+
/** Opens 'Cube' (New, Import, Export) in the graph's header and returns its menu */
|
|
134
|
+
export const TEST__openCubeMenu = async (): Promise<HTMLElement> => {
|
|
135
|
+
fireEvent.click(
|
|
136
|
+
within(screen.getByTestId(LEGEND_CUBE_TEST_ID.GRAPH_REGION)).getByRole(
|
|
137
|
+
'button',
|
|
138
|
+
{ name: 'Cube' },
|
|
139
|
+
),
|
|
140
|
+
);
|
|
141
|
+
return screen.findByRole('menu');
|
|
142
|
+
};
|
|
143
|
+
|
|
144
|
+
/** Chooses an item of the 'Cube' menu (New, Import or Export), and waits for the menu to close */
|
|
145
|
+
export const TEST__chooseCubeMenuItem = async (
|
|
146
|
+
label: string,
|
|
147
|
+
): Promise<void> => {
|
|
148
|
+
const menu = await TEST__openCubeMenu();
|
|
149
|
+
fireEvent.click(within(menu).getByRole('menuitem', { name: label }));
|
|
150
|
+
await waitFor(() => expect(screen.queryByRole('menu')).toBeNull());
|
|
151
|
+
};
|
|
152
|
+
|
|
153
|
+
/** Whether an item of the 'Cube' menu is disabled; the menu is closed again */
|
|
154
|
+
export const TEST__isCubeMenuItemDisabled = async (
|
|
155
|
+
label: string,
|
|
156
|
+
): Promise<boolean> => {
|
|
157
|
+
const menu = await TEST__openCubeMenu();
|
|
158
|
+
const disabled =
|
|
159
|
+
within(menu)
|
|
160
|
+
.getByRole('menuitem', { name: label })
|
|
161
|
+
.getAttribute('aria-disabled') === 'true';
|
|
162
|
+
fireEvent.keyDown(menu, { key: 'Escape' });
|
|
163
|
+
await waitFor(() => expect(screen.queryByRole('menu')).toBeNull());
|
|
164
|
+
return disabled;
|
|
165
|
+
};
|