@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
|
@@ -16,10 +16,18 @@
|
|
|
16
16
|
|
|
17
17
|
import {
|
|
18
18
|
type CubeContext,
|
|
19
|
+
type EnteredValue,
|
|
20
|
+
FUNCTION_SOURCE_DEFINITION,
|
|
21
|
+
type FunctionParameter,
|
|
22
|
+
FunctionSource,
|
|
19
23
|
getRelationalDisplayName,
|
|
20
24
|
type ModelContext,
|
|
25
|
+
parseValue,
|
|
21
26
|
RELATIONAL_TABLE_SOURCE_DEFINITION,
|
|
22
27
|
RelationalTableSource,
|
|
28
|
+
resolveCubeType,
|
|
29
|
+
getFunctionParameterValueError,
|
|
30
|
+
Schema,
|
|
23
31
|
} from '@finos/legend-cube';
|
|
24
32
|
import { assertErrorThrown, type GeneratorFn } from '@finos/legend-shared';
|
|
25
33
|
import {
|
|
@@ -36,17 +44,22 @@ import {
|
|
|
36
44
|
CubeTableFlag,
|
|
37
45
|
type CubeModelOutline,
|
|
38
46
|
type CubeOutlineDatabase,
|
|
47
|
+
type CubeOutlineFunction,
|
|
39
48
|
type CubeOutlineRuntime,
|
|
40
49
|
type CubeOutlineSchema,
|
|
41
50
|
type CubeOutlineTable,
|
|
42
51
|
} from '../../graph-manager/CubeEngine.js';
|
|
43
52
|
import { getRuntimesForDatabase } from '../../graph-manager/CubeModelOutlineHelper.js';
|
|
44
53
|
import type { CubeEditorState } from '../CubeEditorState.js';
|
|
45
|
-
import { loadCubeModelOutline } from '../CubeHost.js';
|
|
54
|
+
import { isCubeSampleDataOffered, loadCubeModelOutline } from '../CubeHost.js';
|
|
55
|
+
import { recheckCubeFunctionSources } from '../CubeFunctionRecheck.js';
|
|
56
|
+
import { CUBE_FUNCTION_MESSAGE } from '../../__lib__/LegendCubeFunctionLabels.js';
|
|
46
57
|
import { type BundledModel, createTextModel } from '../LocalModelCatalog.js';
|
|
47
58
|
import {
|
|
48
59
|
type CubeSourcePickerTab,
|
|
49
60
|
CubeSourcePickerTabKey,
|
|
61
|
+
CUBE_TABLE_PREVIEW_DELAY_MS,
|
|
62
|
+
generateCubeNodeIds,
|
|
50
63
|
} from './CubeSourcePickerTab.js';
|
|
51
64
|
|
|
52
65
|
const toMessage = (error: unknown): string => {
|
|
@@ -58,6 +71,31 @@ const toMessage = (error: unknown): string => {
|
|
|
58
71
|
export const isTableSelectable = (table: CubeOutlineTable): boolean =>
|
|
59
72
|
!table.flags.includes(CubeTableFlag.UNAVAILABLE);
|
|
60
73
|
|
|
74
|
+
/** What the tab adds from the model: a table, or a function that returns a relation (PLAN §6.5) */
|
|
75
|
+
export enum CubeModelReadKind {
|
|
76
|
+
TABLE = 'table',
|
|
77
|
+
FUNCTION = 'function',
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
/**
|
|
81
|
+
* A parameter's value from its text: none for empty text, whatever the type,
|
|
82
|
+
* so an optional String left empty passes `[]`, not `''`
|
|
83
|
+
*/
|
|
84
|
+
export const readCubeFunctionValue = (
|
|
85
|
+
text: string,
|
|
86
|
+
parameter: FunctionParameter,
|
|
87
|
+
): EnteredValue => (text === '' ? undefined : parseValue(text, parameter.type));
|
|
88
|
+
|
|
89
|
+
/** A function's parameters as Cube types: `[0..1]` ones optional */
|
|
90
|
+
export const getCubeFunctionParameters = (
|
|
91
|
+
fn: CubeOutlineFunction,
|
|
92
|
+
): FunctionParameter[] =>
|
|
93
|
+
fn.parameters.map((parameter) => ({
|
|
94
|
+
name: parameter.name,
|
|
95
|
+
type: resolveCubeType(parameter.type),
|
|
96
|
+
optional: parameter.multiplicity === '[0..1]',
|
|
97
|
+
}));
|
|
98
|
+
|
|
61
99
|
/**
|
|
62
100
|
* The source picker's Model tab (PLAN §6.2.7, Settled before M1.8): model,
|
|
63
101
|
* then database, then a runtime keyed by that database, then schema and
|
|
@@ -82,9 +120,31 @@ export class CubeInlineModelTabState implements CubeSourcePickerTab {
|
|
|
82
120
|
databasePath: string | undefined;
|
|
83
121
|
runtimePath: string | undefined;
|
|
84
122
|
schemaName: string | undefined;
|
|
85
|
-
|
|
123
|
+
/** The picked tables, in the order picked; several are added at once */
|
|
124
|
+
tableNames: readonly string[] = [];
|
|
86
125
|
tableSearch = '';
|
|
126
|
+
/** Whether the tab adds a table or a function */
|
|
127
|
+
readKind = CubeModelReadKind.TABLE;
|
|
128
|
+
functionSearch = '';
|
|
129
|
+
/** The picked function's full name */
|
|
130
|
+
functionSignature: string | undefined;
|
|
131
|
+
/** The text entered for each of its parameters */
|
|
132
|
+
functionValueTexts: string[] = [];
|
|
133
|
+
/** The runtime picked for a function that leaves it to its caller */
|
|
134
|
+
functionRuntimePath: string | undefined;
|
|
87
135
|
isResolving = false;
|
|
136
|
+
/** The table whose columns the tab shows under the list: the one picked last */
|
|
137
|
+
previewTableName: string | undefined;
|
|
138
|
+
/**
|
|
139
|
+
* The columns of each table previewed, or why they couldn't be read, by
|
|
140
|
+
* database, schema and table; Add takes them, so it asks the engine only
|
|
141
|
+
* for the others (the review of the demo, 2026-10-13)
|
|
142
|
+
*/
|
|
143
|
+
previewSchemas: ReadonlyMap<string, Schema | string> = new Map();
|
|
144
|
+
/** Counts the model, database or runtime changes, so a late preview is dropped */
|
|
145
|
+
private previewGeneration = 0;
|
|
146
|
+
/** The preview waiting for the clicks to pause */
|
|
147
|
+
private previewTimer: ReturnType<typeof setTimeout> | undefined;
|
|
88
148
|
/** Why the outline or the table couldn't be loaded, shown in the dialog */
|
|
89
149
|
error: string | undefined;
|
|
90
150
|
/** Counts Add presses: closing the dialog moves it on, so the pending Add is dropped */
|
|
@@ -100,9 +160,31 @@ export class CubeInlineModelTabState implements CubeSourcePickerTab {
|
|
|
100
160
|
databasePath: observable,
|
|
101
161
|
runtimePath: observable,
|
|
102
162
|
schemaName: observable,
|
|
103
|
-
|
|
163
|
+
tableNames: observable.ref,
|
|
164
|
+
tableName: computed,
|
|
104
165
|
tableSearch: observable,
|
|
166
|
+
readKind: observable,
|
|
167
|
+
functionSearch: observable,
|
|
168
|
+
functionSignature: observable,
|
|
169
|
+
functionValueTexts: observable.ref,
|
|
170
|
+
functionRuntimePath: observable,
|
|
105
171
|
isResolving: observable,
|
|
172
|
+
previewTableName: observable,
|
|
173
|
+
previewSchemas: observable.ref,
|
|
174
|
+
previewedColumns: computed,
|
|
175
|
+
loadPreview: flow,
|
|
176
|
+
functions: computed,
|
|
177
|
+
pickedFunction: computed,
|
|
178
|
+
functionParameters: computed,
|
|
179
|
+
functionValues: computed,
|
|
180
|
+
functionRuntime: computed,
|
|
181
|
+
functionRuntimes: computed,
|
|
182
|
+
functionProblem: computed,
|
|
183
|
+
setReadKind: action,
|
|
184
|
+
setFunctionSearch: action,
|
|
185
|
+
selectFunction: action,
|
|
186
|
+
setFunctionValueText: action,
|
|
187
|
+
selectFunctionRuntime: action,
|
|
106
188
|
error: observable,
|
|
107
189
|
fixedContext: computed,
|
|
108
190
|
fixedDatabasePath: computed,
|
|
@@ -110,6 +192,7 @@ export class CubeInlineModelTabState implements CubeSourcePickerTab {
|
|
|
110
192
|
runtimes: computed,
|
|
111
193
|
schemas: computed,
|
|
112
194
|
tables: computed,
|
|
195
|
+
schemaTables: computed,
|
|
113
196
|
canConfirm: computed,
|
|
114
197
|
isBusy: computed,
|
|
115
198
|
open: action,
|
|
@@ -118,12 +201,14 @@ export class CubeInlineModelTabState implements CubeSourcePickerTab {
|
|
|
118
201
|
selectRuntime: action,
|
|
119
202
|
selectSchema: action,
|
|
120
203
|
selectTable: action,
|
|
204
|
+
toggleTable: action,
|
|
121
205
|
setTableSearch: action,
|
|
122
206
|
startPastingModel: action,
|
|
123
207
|
setPastedModelText: action,
|
|
124
208
|
selectModel: flow,
|
|
125
209
|
loadPastedModel: flow,
|
|
126
210
|
confirm: flow,
|
|
211
|
+
confirmFunction: flow,
|
|
127
212
|
});
|
|
128
213
|
this.editorState = editorState;
|
|
129
214
|
}
|
|
@@ -177,6 +262,20 @@ export class CubeInlineModelTabState implements CubeSourcePickerTab {
|
|
|
177
262
|
);
|
|
178
263
|
}
|
|
179
264
|
|
|
265
|
+
/** The schema's tables, views left out */
|
|
266
|
+
get schemaTables(): readonly CubeOutlineTable[] {
|
|
267
|
+
return (
|
|
268
|
+
this.schemas
|
|
269
|
+
.find((schema) => schema.name === this.schemaName)
|
|
270
|
+
?.tables.filter((table) => !table.isView) ?? []
|
|
271
|
+
);
|
|
272
|
+
}
|
|
273
|
+
|
|
274
|
+
/** The one picked table; none when several are */
|
|
275
|
+
get tableName(): string | undefined {
|
|
276
|
+
return this.tableNames.length === 1 ? this.tableNames[0] : undefined;
|
|
277
|
+
}
|
|
278
|
+
|
|
180
279
|
/** The schema's tables, views left out, filtered by the search text */
|
|
181
280
|
get tables(): readonly CubeOutlineTable[] {
|
|
182
281
|
const search = this.tableSearch.trim().toLowerCase();
|
|
@@ -190,9 +289,71 @@ export class CubeInlineModelTabState implements CubeSourcePickerTab {
|
|
|
190
289
|
);
|
|
191
290
|
}
|
|
192
291
|
|
|
193
|
-
/** The
|
|
292
|
+
/** The model's functions that return a relation, filtered by the search text */
|
|
293
|
+
get functions(): readonly CubeOutlineFunction[] {
|
|
294
|
+
const search = this.functionSearch.trim().toLowerCase();
|
|
295
|
+
return (this.outline?.functions ?? []).filter((fn) =>
|
|
296
|
+
fn.path.toLowerCase().includes(search),
|
|
297
|
+
);
|
|
298
|
+
}
|
|
299
|
+
|
|
300
|
+
get pickedFunction(): CubeOutlineFunction | undefined {
|
|
301
|
+
return this.outline?.functions?.find(
|
|
302
|
+
(fn) => fn.signature === this.functionSignature,
|
|
303
|
+
);
|
|
304
|
+
}
|
|
305
|
+
|
|
306
|
+
get functionParameters(): readonly FunctionParameter[] {
|
|
307
|
+
const fn = this.pickedFunction;
|
|
308
|
+
return fn ? getCubeFunctionParameters(fn) : [];
|
|
309
|
+
}
|
|
310
|
+
|
|
311
|
+
/** The value entered for each parameter */
|
|
312
|
+
get functionValues(): readonly EnteredValue[] {
|
|
313
|
+
return this.functionParameters.map((parameter, index) =>
|
|
314
|
+
readCubeFunctionValue(this.functionValueTexts[index] ?? '', parameter),
|
|
315
|
+
);
|
|
316
|
+
}
|
|
317
|
+
|
|
318
|
+
/**
|
|
319
|
+
* The runtimes a function that leaves the runtime to its caller can run
|
|
320
|
+
* on: the cube's, once it has one, else every runtime of the model
|
|
321
|
+
*/
|
|
322
|
+
get functionRuntimes(): readonly CubeOutlineRuntime[] {
|
|
323
|
+
const fixedRuntime = this.fixedContext?.runtime;
|
|
324
|
+
return (this.outline?.runtimes ?? []).filter(
|
|
325
|
+
(runtime) => fixedRuntime === undefined || runtime.path === fixedRuntime,
|
|
326
|
+
);
|
|
327
|
+
}
|
|
328
|
+
|
|
329
|
+
/**
|
|
330
|
+
* The runtime the picked function runs on: its own, when its body names
|
|
331
|
+
* one; else the one picked
|
|
332
|
+
*/
|
|
333
|
+
get functionRuntime(): string | undefined {
|
|
334
|
+
return this.pickedFunction?.runtime ?? this.functionRuntimePath;
|
|
335
|
+
}
|
|
336
|
+
|
|
337
|
+
/** Why the picked function can't be added, if it can't */
|
|
338
|
+
get functionProblem(): string | undefined {
|
|
339
|
+
const fn = this.pickedFunction;
|
|
340
|
+
if (!fn) {
|
|
341
|
+
return undefined;
|
|
342
|
+
}
|
|
343
|
+
if (fn.problem !== undefined) {
|
|
344
|
+
return fn.problem;
|
|
345
|
+
}
|
|
346
|
+
const fixedRuntime = this.fixedContext?.runtime;
|
|
347
|
+
return fn.runtime !== undefined &&
|
|
348
|
+
fixedRuntime !== undefined &&
|
|
349
|
+
fn.runtime !== fixedRuntime
|
|
350
|
+
? CUBE_FUNCTION_MESSAGE.OTHER_RUNTIME(fn.runtime, fixedRuntime)
|
|
351
|
+
: undefined;
|
|
352
|
+
}
|
|
353
|
+
|
|
354
|
+
/** The host serves the tab unless it offers no sample data */
|
|
194
355
|
get isAvailable(): boolean {
|
|
195
|
-
return
|
|
356
|
+
return isCubeSampleDataOffered(this.editorState.host);
|
|
196
357
|
}
|
|
197
358
|
|
|
198
359
|
get isBusy(): boolean {
|
|
@@ -205,16 +366,34 @@ export class CubeInlineModelTabState implements CubeSourcePickerTab {
|
|
|
205
366
|
}
|
|
206
367
|
|
|
207
368
|
get canConfirm(): boolean {
|
|
208
|
-
|
|
209
|
-
(
|
|
369
|
+
if (this.readKind === CubeModelReadKind.FUNCTION) {
|
|
370
|
+
return (
|
|
371
|
+
!this.isLoadingModel &&
|
|
372
|
+
!this.isResolving &&
|
|
373
|
+
this.model !== undefined &&
|
|
374
|
+
this.pickedFunction !== undefined &&
|
|
375
|
+
this.functionProblem === undefined &&
|
|
376
|
+
this.functionRuntime !== undefined &&
|
|
377
|
+
this.functionParameters.every(
|
|
378
|
+
(parameter, index) =>
|
|
379
|
+
getFunctionParameterValueError(
|
|
380
|
+
parameter,
|
|
381
|
+
this.functionValues[index],
|
|
382
|
+
) === undefined,
|
|
383
|
+
)
|
|
384
|
+
);
|
|
385
|
+
}
|
|
386
|
+
// a picked table hidden by the search still counts
|
|
387
|
+
const tables = this.tableNames.map((name) =>
|
|
388
|
+
this.schemaTables.find((candidate) => candidate.name === name),
|
|
210
389
|
);
|
|
211
390
|
return (
|
|
212
391
|
!this.isLoadingModel &&
|
|
213
392
|
!this.isResolving &&
|
|
214
393
|
this.model !== undefined &&
|
|
215
394
|
this.runtimePath !== undefined &&
|
|
216
|
-
|
|
217
|
-
isTableSelectable(table)
|
|
395
|
+
tables.length > 0 &&
|
|
396
|
+
tables.every((table) => table !== undefined && isTableSelectable(table))
|
|
218
397
|
);
|
|
219
398
|
}
|
|
220
399
|
|
|
@@ -249,6 +428,27 @@ export class CubeInlineModelTabState implements CubeSourcePickerTab {
|
|
|
249
428
|
this.selectDatabase(
|
|
250
429
|
onlyDatabase && !otherDatabases.length ? onlyDatabase.path : undefined,
|
|
251
430
|
);
|
|
431
|
+
} else {
|
|
432
|
+
this.followFixedRuntime();
|
|
433
|
+
}
|
|
434
|
+
}
|
|
435
|
+
|
|
436
|
+
/**
|
|
437
|
+
* Takes the cube's runtime once it has one, e.g. a function's (PLAN
|
|
438
|
+
* §6.5): its table and function steps can't pick another
|
|
439
|
+
*/
|
|
440
|
+
protected followFixedRuntime(): void {
|
|
441
|
+
const fixedRuntime = this.fixedContext?.runtime;
|
|
442
|
+
if (fixedRuntime === undefined) {
|
|
443
|
+
return;
|
|
444
|
+
}
|
|
445
|
+
if (this.runtimes.some((runtime) => runtime.path === fixedRuntime)) {
|
|
446
|
+
this.runtimePath = fixedRuntime;
|
|
447
|
+
}
|
|
448
|
+
if (
|
|
449
|
+
this.functionRuntimes.some((runtime) => runtime.path === fixedRuntime)
|
|
450
|
+
) {
|
|
451
|
+
this.functionRuntimePath = fixedRuntime;
|
|
252
452
|
}
|
|
253
453
|
}
|
|
254
454
|
|
|
@@ -256,6 +456,7 @@ export class CubeInlineModelTabState implements CubeSourcePickerTab {
|
|
|
256
456
|
close(): void {
|
|
257
457
|
this.confirmRequest++;
|
|
258
458
|
this.isResolving = false;
|
|
459
|
+
this.cancelPreview();
|
|
259
460
|
}
|
|
260
461
|
|
|
261
462
|
/** Offers a text box for a Pure model in place of the bundled ones */
|
|
@@ -340,15 +541,153 @@ export class CubeInlineModelTabState implements CubeSourcePickerTab {
|
|
|
340
541
|
this.resetFrom('table');
|
|
341
542
|
}
|
|
342
543
|
|
|
544
|
+
/** Picks the table alone, in place of any picked, and previews its columns */
|
|
343
545
|
selectTable(name: string | undefined): void {
|
|
344
|
-
this.
|
|
546
|
+
this.tableNames = name === undefined ? [] : [name];
|
|
547
|
+
this.error = undefined;
|
|
548
|
+
this.preview(name);
|
|
549
|
+
}
|
|
550
|
+
|
|
551
|
+
/** Adds the table to the picked ones, previewing it, or takes it out */
|
|
552
|
+
toggleTable(name: string): void {
|
|
553
|
+
const adding = !this.tableNames.includes(name);
|
|
554
|
+
this.tableNames = adding
|
|
555
|
+
? [...this.tableNames, name]
|
|
556
|
+
: this.tableNames.filter((each) => each !== name);
|
|
345
557
|
this.error = undefined;
|
|
558
|
+
this.preview(adding ? name : this.tableNames.at(-1));
|
|
559
|
+
}
|
|
560
|
+
|
|
561
|
+
private previewKey(table: string): string {
|
|
562
|
+
return `${this.databasePath ?? ''}\u0000${this.schemaName ?? ''}\u0000${table}`;
|
|
563
|
+
}
|
|
564
|
+
|
|
565
|
+
/** The previewed table's columns, `undefined` while they load, or why they couldn't be read */
|
|
566
|
+
get previewedColumns(): Schema | string | undefined {
|
|
567
|
+
const name = this.previewTableName;
|
|
568
|
+
return name === undefined
|
|
569
|
+
? undefined
|
|
570
|
+
: this.previewSchemas.get(this.previewKey(name));
|
|
571
|
+
}
|
|
572
|
+
|
|
573
|
+
/**
|
|
574
|
+
* Previews the table once the clicks pause, so picking several in a row
|
|
575
|
+
* asks the engine for the last only; Add, Close and another pick cancel it
|
|
576
|
+
*/
|
|
577
|
+
private preview(name: string | undefined): void {
|
|
578
|
+
this.previewTableName = name;
|
|
579
|
+
this.cancelPreview();
|
|
580
|
+
if (name !== undefined) {
|
|
581
|
+
this.previewTimer = setTimeout(() => {
|
|
582
|
+
this.previewTimer = undefined;
|
|
583
|
+
flowResult(this.loadPreview(name)).catch(
|
|
584
|
+
this.editorState.host.applicationStore.alertUnhandledError,
|
|
585
|
+
);
|
|
586
|
+
}, CUBE_TABLE_PREVIEW_DELAY_MS);
|
|
587
|
+
}
|
|
588
|
+
}
|
|
589
|
+
|
|
590
|
+
private cancelPreview(): void {
|
|
591
|
+
if (this.previewTimer !== undefined) {
|
|
592
|
+
clearTimeout(this.previewTimer);
|
|
593
|
+
this.previewTimer = undefined;
|
|
594
|
+
}
|
|
595
|
+
}
|
|
596
|
+
|
|
597
|
+
/** Reads a table's columns from the engine, once a table and a model's database */
|
|
598
|
+
*loadPreview(name: string): GeneratorFn<void> {
|
|
599
|
+
const key = this.previewKey(name);
|
|
600
|
+
const model = this.model;
|
|
601
|
+
const database = this.databasePath;
|
|
602
|
+
const schemaName = this.schemaName;
|
|
603
|
+
if (
|
|
604
|
+
this.previewSchemas.has(key) ||
|
|
605
|
+
!model ||
|
|
606
|
+
database === undefined ||
|
|
607
|
+
schemaName === undefined
|
|
608
|
+
) {
|
|
609
|
+
return;
|
|
610
|
+
}
|
|
611
|
+
const generation = this.previewGeneration;
|
|
612
|
+
// an id of its own, as the engine stamps the table's accessor with it
|
|
613
|
+
const id = this.editorState.document.query.generateId(
|
|
614
|
+
RelationalTableSource.TYPE,
|
|
615
|
+
);
|
|
616
|
+
let answer: Schema | string;
|
|
617
|
+
try {
|
|
618
|
+
const typed = (yield this.editorState.host.engine.resolveSchemas(
|
|
619
|
+
model,
|
|
620
|
+
new Map([[id, [database, schemaName, name]]]),
|
|
621
|
+
)) as Awaited<
|
|
622
|
+
ReturnType<typeof this.editorState.host.engine.resolveSchemas>
|
|
623
|
+
>;
|
|
624
|
+
const schema = typed.get(id);
|
|
625
|
+
answer =
|
|
626
|
+
schema instanceof Schema
|
|
627
|
+
? schema
|
|
628
|
+
: (schema?.message ?? 'The engine gave no schema for this table');
|
|
629
|
+
} catch (error) {
|
|
630
|
+
answer = toMessage(error);
|
|
631
|
+
}
|
|
632
|
+
if (generation === this.previewGeneration) {
|
|
633
|
+
this.previewSchemas = new Map(this.previewSchemas).set(key, answer);
|
|
634
|
+
}
|
|
635
|
+
}
|
|
636
|
+
|
|
637
|
+
/** How many sources Add adds */
|
|
638
|
+
get pickedCount(): number {
|
|
639
|
+
return this.readKind === CubeModelReadKind.FUNCTION
|
|
640
|
+
? 1
|
|
641
|
+
: this.tableNames.length;
|
|
346
642
|
}
|
|
347
643
|
|
|
348
644
|
setTableSearch(search: string): void {
|
|
349
645
|
this.tableSearch = search;
|
|
350
646
|
}
|
|
351
647
|
|
|
648
|
+
/**
|
|
649
|
+
* What the tab reads: a model's tables or functions; a project's tables
|
|
650
|
+
* and functions each have a tab of their own (user, 2026-10-13)
|
|
651
|
+
*/
|
|
652
|
+
get readKinds(): readonly CubeModelReadKind[] {
|
|
653
|
+
return [CubeModelReadKind.TABLE, CubeModelReadKind.FUNCTION];
|
|
654
|
+
}
|
|
655
|
+
|
|
656
|
+
/** Reads tables or functions, when the tab reads that kind */
|
|
657
|
+
setReadKind(kind: CubeModelReadKind): void {
|
|
658
|
+
if (this.readKinds.includes(kind)) {
|
|
659
|
+
this.readKind = kind;
|
|
660
|
+
this.error = undefined;
|
|
661
|
+
}
|
|
662
|
+
}
|
|
663
|
+
|
|
664
|
+
setFunctionSearch(search: string): void {
|
|
665
|
+
this.functionSearch = search;
|
|
666
|
+
}
|
|
667
|
+
|
|
668
|
+
/** Picks a function; its parameters start empty, and its runtime is the only one there is */
|
|
669
|
+
selectFunction(signature: string | undefined): void {
|
|
670
|
+
if (signature === this.functionSignature) {
|
|
671
|
+
return;
|
|
672
|
+
}
|
|
673
|
+
this.functionSignature = signature;
|
|
674
|
+
this.functionValueTexts = [];
|
|
675
|
+
this.error = undefined;
|
|
676
|
+
const [onlyRuntime, ...otherRuntimes] = this.functionRuntimes;
|
|
677
|
+
this.functionRuntimePath =
|
|
678
|
+
onlyRuntime && !otherRuntimes.length ? onlyRuntime.path : undefined;
|
|
679
|
+
}
|
|
680
|
+
|
|
681
|
+
setFunctionValueText(index: number, text: string): void {
|
|
682
|
+
const texts = [...this.functionValueTexts];
|
|
683
|
+
texts[index] = text;
|
|
684
|
+
this.functionValueTexts = texts;
|
|
685
|
+
}
|
|
686
|
+
|
|
687
|
+
selectFunctionRuntime(path: string | undefined): void {
|
|
688
|
+
this.functionRuntimePath = path;
|
|
689
|
+
}
|
|
690
|
+
|
|
352
691
|
/**
|
|
353
692
|
* Types the picked table with the engine, then adds it; the first table
|
|
354
693
|
* also sets the cube's model and runtime, in the same undo step. The cube
|
|
@@ -360,29 +699,164 @@ export class CubeInlineModelTabState implements CubeSourcePickerTab {
|
|
|
360
699
|
if (!this.canConfirm) {
|
|
361
700
|
return false;
|
|
362
701
|
}
|
|
702
|
+
if (this.readKind === CubeModelReadKind.FUNCTION) {
|
|
703
|
+
return (yield flowResult(this.confirmFunction())) as boolean;
|
|
704
|
+
}
|
|
363
705
|
const { editorState } = this;
|
|
364
706
|
const model = this.model as ModelContext;
|
|
365
707
|
const runtime = this.runtimePath as string;
|
|
366
|
-
const
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
table: this.tableName as string,
|
|
370
|
-
};
|
|
708
|
+
const database = this.databasePath as string;
|
|
709
|
+
const schemaName = this.schemaName as string;
|
|
710
|
+
const names = [...this.tableNames];
|
|
371
711
|
const contextBefore = editorState.document.context;
|
|
372
|
-
// the engine stamps
|
|
373
|
-
const
|
|
712
|
+
// the engine stamps each table's accessor with its node id, so the ids come first
|
|
713
|
+
const ids = generateCubeNodeIds(
|
|
714
|
+
editorState.document.query,
|
|
374
715
|
RelationalTableSource.TYPE,
|
|
716
|
+
names.length,
|
|
375
717
|
);
|
|
718
|
+
this.cancelPreview();
|
|
376
719
|
const request = ++this.confirmRequest;
|
|
377
720
|
this.isResolving = true;
|
|
378
721
|
this.error = undefined;
|
|
379
722
|
try {
|
|
380
|
-
|
|
723
|
+
// a table previewed has its columns already: the engine types the others
|
|
724
|
+
const previewed = new Map<string, Schema>();
|
|
725
|
+
names.forEach((table, index) => {
|
|
726
|
+
const schema = this.previewSchemas.get(this.previewKey(table));
|
|
727
|
+
if (schema instanceof Schema) {
|
|
728
|
+
previewed.set(ids[index] as string, schema);
|
|
729
|
+
}
|
|
730
|
+
});
|
|
731
|
+
const toType = names
|
|
732
|
+
.map((table, index) => [ids[index] as string, table] as const)
|
|
733
|
+
.filter(([id]) => !previewed.has(id));
|
|
734
|
+
const typed = new Map<string, Schema | CubeEngineError>(previewed);
|
|
735
|
+
if (toType.length) {
|
|
736
|
+
const answer = (yield editorState.host.engine.resolveSchemas(
|
|
737
|
+
model,
|
|
738
|
+
new Map(
|
|
739
|
+
toType.map(([id, table]) => [id, [database, schemaName, table]]),
|
|
740
|
+
),
|
|
741
|
+
)) as Awaited<
|
|
742
|
+
ReturnType<typeof editorState.host.engine.resolveSchemas>
|
|
743
|
+
>;
|
|
744
|
+
answer.forEach((schema, id) => typed.set(id, schema));
|
|
745
|
+
}
|
|
746
|
+
if (request !== this.confirmRequest) {
|
|
747
|
+
return false;
|
|
748
|
+
}
|
|
749
|
+
const { document } = editorState;
|
|
750
|
+
if (document.context !== contextBefore) {
|
|
751
|
+
throw new Error(
|
|
752
|
+
`The cube changed while the table was loading; pick the table again.`,
|
|
753
|
+
);
|
|
754
|
+
}
|
|
755
|
+
// each table typed is added, in the order picked; the first one picked
|
|
756
|
+
// is the one that runs on an empty cube, as a single table would be
|
|
757
|
+
let query = document.query;
|
|
758
|
+
const added: string[] = [];
|
|
759
|
+
const failed: string[] = [];
|
|
760
|
+
// with several tables, each failure names its table
|
|
761
|
+
const named = (table: string, message: string): string =>
|
|
762
|
+
names.length > 1
|
|
763
|
+
? `${getRelationalDisplayName(table)}: ${message}`
|
|
764
|
+
: message;
|
|
765
|
+
names.forEach((table, index) => {
|
|
766
|
+
const id = ids[index] as string;
|
|
767
|
+
const schema = typed.get(id);
|
|
768
|
+
if (schema === undefined || schema instanceof CubeEngineError) {
|
|
769
|
+
failed.push(
|
|
770
|
+
named(
|
|
771
|
+
table,
|
|
772
|
+
schema?.message ?? 'The engine gave no schema for this table',
|
|
773
|
+
),
|
|
774
|
+
);
|
|
775
|
+
return;
|
|
776
|
+
}
|
|
777
|
+
const node = RELATIONAL_TABLE_SOURCE_DEFINITION.resolve(
|
|
778
|
+
RELATIONAL_TABLE_SOURCE_DEFINITION.fromCoordinates(id, {
|
|
779
|
+
database,
|
|
780
|
+
schema: schemaName,
|
|
781
|
+
table,
|
|
782
|
+
}),
|
|
783
|
+
{ kind: 'resolved', schema },
|
|
784
|
+
);
|
|
785
|
+
if (!query.canAdd(node)) {
|
|
786
|
+
failed.push(
|
|
787
|
+
named(
|
|
788
|
+
table,
|
|
789
|
+
'The cube changed while the table was loading; pick the table again.',
|
|
790
|
+
),
|
|
791
|
+
);
|
|
792
|
+
return;
|
|
793
|
+
}
|
|
794
|
+
query = query.add(node);
|
|
795
|
+
added.push(table);
|
|
796
|
+
});
|
|
797
|
+
if (added.length) {
|
|
798
|
+
// the first table sets the model and runtime; a cube saved with a model
|
|
799
|
+
// but no runtime takes the picked runtime and keeps the rest
|
|
800
|
+
editorState.applyDocument(
|
|
801
|
+
document.context?.runtime !== undefined
|
|
802
|
+
? document.withQuery(query)
|
|
803
|
+
: document
|
|
804
|
+
.withContext({
|
|
805
|
+
...document.context,
|
|
806
|
+
model: document.context?.model ?? model,
|
|
807
|
+
runtime,
|
|
808
|
+
})
|
|
809
|
+
.withQuery(query),
|
|
810
|
+
);
|
|
811
|
+
}
|
|
812
|
+
if (failed.length) {
|
|
813
|
+
// the tables added aren't picked any more, so Add again adds only the others
|
|
814
|
+
this.tableNames = names.filter((table) => !added.includes(table));
|
|
815
|
+
this.error = failed.join('\n');
|
|
816
|
+
return false;
|
|
817
|
+
}
|
|
818
|
+
this.resetFrom('table');
|
|
819
|
+
return true;
|
|
820
|
+
} catch (error) {
|
|
821
|
+
if (request === this.confirmRequest) {
|
|
822
|
+
this.error = toMessage(error);
|
|
823
|
+
}
|
|
824
|
+
return false;
|
|
825
|
+
} finally {
|
|
826
|
+
if (request === this.confirmRequest) {
|
|
827
|
+
this.isResolving = false;
|
|
828
|
+
}
|
|
829
|
+
}
|
|
830
|
+
}
|
|
831
|
+
|
|
832
|
+
/**
|
|
833
|
+
* Types the picked function's call with the engine, then adds it with its
|
|
834
|
+
* values; the first source also sets the cube's model and runtime, in the
|
|
835
|
+
* same undo step: the function's own runtime when its body names one
|
|
836
|
+
* (PLAN §6.5). Gives whether the function was added.
|
|
837
|
+
*/
|
|
838
|
+
*confirmFunction(): GeneratorFn<boolean> {
|
|
839
|
+
const { editorState } = this;
|
|
840
|
+
const model = this.model as ModelContext;
|
|
841
|
+
const fn = this.pickedFunction as CubeOutlineFunction;
|
|
842
|
+
const runtime = this.functionRuntime as string;
|
|
843
|
+
const contextBefore = editorState.document.context;
|
|
844
|
+
const id = editorState.document.query.generateId(FunctionSource.TYPE);
|
|
845
|
+
const unresolved = FUNCTION_SOURCE_DEFINITION.fromCoordinates(id, {
|
|
846
|
+
function: fn.path,
|
|
847
|
+
signature: fn.signature,
|
|
848
|
+
parameters: this.functionParameters,
|
|
849
|
+
values: this.functionValues,
|
|
850
|
+
});
|
|
851
|
+
const request = ++this.confirmRequest;
|
|
852
|
+
this.isResolving = true;
|
|
853
|
+
this.error = undefined;
|
|
854
|
+
try {
|
|
855
|
+
const typed = (yield recheckCubeFunctionSources(
|
|
856
|
+
editorState.host.engine,
|
|
381
857
|
model,
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
]),
|
|
385
|
-
)) as Awaited<ReturnType<typeof editorState.host.engine.resolveSchemas>>;
|
|
858
|
+
[unresolved],
|
|
859
|
+
)) as Awaited<ReturnType<typeof recheckCubeFunctionSources>>;
|
|
386
860
|
if (request !== this.confirmRequest) {
|
|
387
861
|
return false;
|
|
388
862
|
}
|
|
@@ -392,23 +866,19 @@ export class CubeInlineModelTabState implements CubeSourcePickerTab {
|
|
|
392
866
|
schema ??
|
|
393
867
|
new CubeEngineError(
|
|
394
868
|
CubeEngineErrorKind.COMPILE,
|
|
395
|
-
|
|
869
|
+
CUBE_FUNCTION_MESSAGE.NO_ANSWER,
|
|
396
870
|
)
|
|
397
871
|
);
|
|
398
872
|
}
|
|
399
|
-
const node =
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
);
|
|
873
|
+
const node = FUNCTION_SOURCE_DEFINITION.resolve(unresolved, {
|
|
874
|
+
kind: 'resolved',
|
|
875
|
+
schema,
|
|
876
|
+
});
|
|
403
877
|
const { document } = editorState;
|
|
404
878
|
if (document.context !== contextBefore || !document.query.canAdd(node)) {
|
|
405
|
-
throw new Error(
|
|
406
|
-
`The cube changed while the table was loading; pick the table again.`,
|
|
407
|
-
);
|
|
879
|
+
throw new Error(CUBE_FUNCTION_MESSAGE.CUBE_CHANGED);
|
|
408
880
|
}
|
|
409
881
|
const query = document.query.add(node);
|
|
410
|
-
// the first table sets the model and runtime; a cube saved with a model
|
|
411
|
-
// but no runtime takes the picked runtime and keeps the rest
|
|
412
882
|
editorState.applyDocument(
|
|
413
883
|
document.context?.runtime !== undefined
|
|
414
884
|
? document.withQuery(query)
|
|
@@ -420,7 +890,8 @@ export class CubeInlineModelTabState implements CubeSourcePickerTab {
|
|
|
420
890
|
})
|
|
421
891
|
.withQuery(query),
|
|
422
892
|
);
|
|
423
|
-
this.
|
|
893
|
+
this.functionSignature = undefined;
|
|
894
|
+
this.functionValueTexts = [];
|
|
424
895
|
return true;
|
|
425
896
|
} catch (error) {
|
|
426
897
|
if (request === this.confirmRequest) {
|
|
@@ -437,12 +908,21 @@ export class CubeInlineModelTabState implements CubeSourcePickerTab {
|
|
|
437
908
|
protected resetFrom(step: 'database' | 'runtime' | 'table'): void {
|
|
438
909
|
if (step === 'database') {
|
|
439
910
|
this.databasePath = undefined;
|
|
911
|
+
this.functionSignature = undefined;
|
|
912
|
+
this.functionValueTexts = [];
|
|
913
|
+
this.functionRuntimePath = undefined;
|
|
914
|
+
this.functionSearch = '';
|
|
440
915
|
}
|
|
441
916
|
if (step === 'database' || step === 'runtime') {
|
|
442
917
|
this.runtimePath = undefined;
|
|
443
918
|
this.schemaName = undefined;
|
|
919
|
+
// another model or database: its previews go, and late ones are dropped
|
|
920
|
+
this.previewGeneration++;
|
|
921
|
+
this.previewSchemas = new Map();
|
|
444
922
|
}
|
|
445
|
-
this.
|
|
923
|
+
this.tableNames = [];
|
|
446
924
|
this.tableSearch = '';
|
|
925
|
+
this.previewTableName = undefined;
|
|
926
|
+
this.cancelPreview();
|
|
447
927
|
}
|
|
448
928
|
}
|