@finos/legend-cube-builder 0.0.0-stage → 0.0.2
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/LICENSE +201 -0
- package/README.md +5 -2
- package/lib/__lib__/LegendCubeCommand.d.ts +26 -0
- package/lib/__lib__/LegendCubeCommand.d.ts.map +1 -0
- package/lib/__lib__/LegendCubeCommand.js +40 -0
- package/lib/__lib__/LegendCubeCommand.js.map +1 -0
- package/lib/__lib__/LegendCubeHelpText.d.ts +19 -0
- package/lib/__lib__/LegendCubeHelpText.d.ts.map +1 -0
- package/lib/__lib__/LegendCubeHelpText.js +27 -0
- package/lib/__lib__/LegendCubeHelpText.js.map +1 -0
- package/lib/__lib__/LegendCubeLabels.d.ts +68 -0
- package/lib/__lib__/LegendCubeLabels.d.ts.map +1 -0
- package/lib/__lib__/LegendCubeLabels.js +109 -0
- package/lib/__lib__/LegendCubeLabels.js.map +1 -0
- package/lib/__lib__/LegendCubeTesting.d.ts +33 -0
- package/lib/__lib__/LegendCubeTesting.d.ts.map +1 -0
- package/lib/__lib__/LegendCubeTesting.js +34 -0
- package/lib/__lib__/LegendCubeTesting.js.map +1 -0
- package/lib/__test-utils__/CubeCanvasTestUtils.d.ts +24 -0
- package/lib/__test-utils__/CubeCanvasTestUtils.d.ts.map +1 -0
- package/lib/__test-utils__/CubeCanvasTestUtils.js +37 -0
- package/lib/__test-utils__/CubeCanvasTestUtils.js.map +1 -0
- package/lib/__test-utils__/CubeEngineTestSupport.d.ts +41 -0
- package/lib/__test-utils__/CubeEngineTestSupport.d.ts.map +1 -0
- package/lib/__test-utils__/CubeEngineTestSupport.js +76 -0
- package/lib/__test-utils__/CubeEngineTestSupport.js.map +1 -0
- package/lib/__test-utils__/CubeNorthwindTestQueries.d.ts +31 -0
- package/lib/__test-utils__/CubeNorthwindTestQueries.d.ts.map +1 -0
- package/lib/__test-utils__/CubeNorthwindTestQueries.js +102 -0
- package/lib/__test-utils__/CubeNorthwindTestQueries.js.map +1 -0
- package/lib/__test-utils__/CubePageTestUtils.d.ts +33 -0
- package/lib/__test-utils__/CubePageTestUtils.d.ts.map +1 -0
- package/lib/__test-utils__/CubePageTestUtils.js +68 -0
- package/lib/__test-utils__/CubePageTestUtils.js.map +1 -0
- package/lib/__test-utils__/CubeTestApplication.d.ts +30 -0
- package/lib/__test-utils__/CubeTestApplication.d.ts.map +1 -0
- package/lib/__test-utils__/CubeTestApplication.js +57 -0
- package/lib/__test-utils__/CubeTestApplication.js.map +1 -0
- package/lib/__test-utils__/FakeCubeEngine.d.ts +41 -0
- package/lib/__test-utils__/FakeCubeEngine.d.ts.map +1 -0
- package/lib/__test-utils__/FakeCubeEngine.js +85 -0
- package/lib/__test-utils__/FakeCubeEngine.js.map +1 -0
- package/lib/components/CubeButton.d.ts +20 -0
- package/lib/components/CubeButton.d.ts.map +1 -0
- package/lib/components/CubeButton.js +24 -0
- package/lib/components/CubeButton.js.map +1 -0
- package/lib/components/CubeEditor.d.ts +31 -0
- package/lib/components/CubeEditor.d.ts.map +1 -0
- package/lib/components/CubeEditor.js +90 -0
- package/lib/components/CubeEditor.js.map +1 -0
- package/lib/components/CubeNodeIcon.d.ts +23 -0
- package/lib/components/CubeNodeIcon.d.ts.map +1 -0
- package/lib/components/CubeNodeIcon.js +32 -0
- package/lib/components/CubeNodeIcon.js.map +1 -0
- package/lib/components/canvas/CubeCanvas.d.ts +37 -0
- package/lib/components/canvas/CubeCanvas.d.ts.map +1 -0
- package/lib/components/canvas/CubeCanvas.js +135 -0
- package/lib/components/canvas/CubeCanvas.js.map +1 -0
- package/lib/components/canvas/CubeCanvasContext.d.ts +19 -0
- package/lib/components/canvas/CubeCanvasContext.d.ts.map +1 -0
- package/lib/components/canvas/CubeCanvasContext.js +22 -0
- package/lib/components/canvas/CubeCanvasContext.js.map +1 -0
- package/lib/components/canvas/CubeCanvasContextMenu.d.ts +28 -0
- package/lib/components/canvas/CubeCanvasContextMenu.d.ts.map +1 -0
- package/lib/components/canvas/CubeCanvasContextMenu.js +35 -0
- package/lib/components/canvas/CubeCanvasContextMenu.js.map +1 -0
- package/lib/components/canvas/CubeCanvasDnd.d.ts +43 -0
- package/lib/components/canvas/CubeCanvasDnd.d.ts.map +1 -0
- package/lib/components/canvas/CubeCanvasDnd.js +51 -0
- package/lib/components/canvas/CubeCanvasDnd.js.map +1 -0
- package/lib/components/canvas/CubeCanvasEdge.d.ts +24 -0
- package/lib/components/canvas/CubeCanvasEdge.d.ts.map +1 -0
- package/lib/components/canvas/CubeCanvasEdge.js +33 -0
- package/lib/components/canvas/CubeCanvasEdge.js.map +1 -0
- package/lib/components/canvas/CubeCanvasElements.d.ts +64 -0
- package/lib/components/canvas/CubeCanvasElements.d.ts.map +1 -0
- package/lib/components/canvas/CubeCanvasElements.js +96 -0
- package/lib/components/canvas/CubeCanvasElements.js.map +1 -0
- package/lib/components/canvas/CubeCanvasLayout.d.ts +32 -0
- package/lib/components/canvas/CubeCanvasLayout.d.ts.map +1 -0
- package/lib/components/canvas/CubeCanvasLayout.js +63 -0
- package/lib/components/canvas/CubeCanvasLayout.js.map +1 -0
- package/lib/components/canvas/CubeCanvasNode.d.ts +29 -0
- package/lib/components/canvas/CubeCanvasNode.d.ts.map +1 -0
- package/lib/components/canvas/CubeCanvasNode.js +72 -0
- package/lib/components/canvas/CubeCanvasNode.js.map +1 -0
- package/lib/components/editors/CubeColumnPicker.d.ts +40 -0
- package/lib/components/editors/CubeColumnPicker.d.ts.map +1 -0
- package/lib/components/editors/CubeColumnPicker.js +51 -0
- package/lib/components/editors/CubeColumnPicker.js.map +1 -0
- package/lib/components/editors/CubeFilterEditor.d.ts +26 -0
- package/lib/components/editors/CubeFilterEditor.d.ts.map +1 -0
- package/lib/components/editors/CubeFilterEditor.js +90 -0
- package/lib/components/editors/CubeFilterEditor.js.map +1 -0
- package/lib/components/editors/CubeJoinEditor.d.ts +26 -0
- package/lib/components/editors/CubeJoinEditor.d.ts.map +1 -0
- package/lib/components/editors/CubeJoinEditor.js +76 -0
- package/lib/components/editors/CubeJoinEditor.js.map +1 -0
- package/lib/components/editors/CubeNodeEditorPanel.d.ts +29 -0
- package/lib/components/editors/CubeNodeEditorPanel.d.ts.map +1 -0
- package/lib/components/editors/CubeNodeEditorPanel.js +71 -0
- package/lib/components/editors/CubeNodeEditorPanel.js.map +1 -0
- package/lib/components/editors/CubeNodeEditorRegistry.d.ts +44 -0
- package/lib/components/editors/CubeNodeEditorRegistry.d.ts.map +1 -0
- package/lib/components/editors/CubeNodeEditorRegistry.js +30 -0
- package/lib/components/editors/CubeNodeEditorRegistry.js.map +1 -0
- package/lib/components/editors/CubeSourceEditor.d.ts +25 -0
- package/lib/components/editors/CubeSourceEditor.d.ts.map +1 -0
- package/lib/components/editors/CubeSourceEditor.js +42 -0
- package/lib/components/editors/CubeSourceEditor.js.map +1 -0
- package/lib/components/editors/CubeValueEditor.d.ts +40 -0
- package/lib/components/editors/CubeValueEditor.d.ts.map +1 -0
- package/lib/components/editors/CubeValueEditor.js +177 -0
- package/lib/components/editors/CubeValueEditor.js.map +1 -0
- package/lib/components/grid/CubeGridRegion.d.ts +23 -0
- package/lib/components/grid/CubeGridRegion.d.ts.map +1 -0
- package/lib/components/grid/CubeGridRegion.js +94 -0
- package/lib/components/grid/CubeGridRegion.js.map +1 -0
- package/lib/components/grid/CubeGridValues.d.ts +25 -0
- package/lib/components/grid/CubeGridValues.d.ts.map +1 -0
- package/lib/components/grid/CubeGridValues.js +95 -0
- package/lib/components/grid/CubeGridValues.js.map +1 -0
- package/lib/components/grid/CubeResultGrid.d.ts +26 -0
- package/lib/components/grid/CubeResultGrid.d.ts.map +1 -0
- package/lib/components/grid/CubeResultGrid.js +50 -0
- package/lib/components/grid/CubeResultGrid.js.map +1 -0
- package/lib/components/palette/CubePalette.d.ts +29 -0
- package/lib/components/palette/CubePalette.d.ts.map +1 -0
- package/lib/components/palette/CubePalette.js +73 -0
- package/lib/components/palette/CubePalette.js.map +1 -0
- package/lib/components/show-pure/CubeShowPureDialog.d.ts +23 -0
- package/lib/components/show-pure/CubeShowPureDialog.d.ts.map +1 -0
- package/lib/components/show-pure/CubeShowPureDialog.js +37 -0
- package/lib/components/show-pure/CubeShowPureDialog.js.map +1 -0
- package/lib/components/source-picker/CubeSourcePicker.d.ts +22 -0
- package/lib/components/source-picker/CubeSourcePicker.d.ts.map +1 -0
- package/lib/components/source-picker/CubeSourcePicker.js +89 -0
- package/lib/components/source-picker/CubeSourcePicker.js.map +1 -0
- package/lib/components/spec-transfer/CubeSpecTransferDialog.d.ts +26 -0
- package/lib/components/spec-transfer/CubeSpecTransferDialog.d.ts.map +1 -0
- package/lib/components/spec-transfer/CubeSpecTransferDialog.js +45 -0
- package/lib/components/spec-transfer/CubeSpecTransferDialog.js.map +1 -0
- package/lib/graph-manager/CubeEngine.d.ts +115 -0
- package/lib/graph-manager/CubeEngine.d.ts.map +1 -0
- package/lib/graph-manager/CubeEngine.js +61 -0
- package/lib/graph-manager/CubeEngine.js.map +1 -0
- package/lib/graph-manager/CubeModelOutlineHelper.d.ts +25 -0
- package/lib/graph-manager/CubeModelOutlineHelper.d.ts.map +1 -0
- package/lib/graph-manager/CubeModelOutlineHelper.js +24 -0
- package/lib/graph-manager/CubeModelOutlineHelper.js.map +1 -0
- package/lib/graph-manager/protocol/pure/CubeEngineBuilder.d.ts +26 -0
- package/lib/graph-manager/protocol/pure/CubeEngineBuilder.d.ts.map +1 -0
- package/lib/graph-manager/protocol/pure/CubeEngineBuilder.js +22 -0
- package/lib/graph-manager/protocol/pure/CubeEngineBuilder.js.map +1 -0
- package/lib/graph-manager/protocol/pure/v1/V1_CubeEngineErrors.d.ts +27 -0
- package/lib/graph-manager/protocol/pure/v1/V1_CubeEngineErrors.d.ts.map +1 -0
- package/lib/graph-manager/protocol/pure/v1/V1_CubeEngineErrors.js +76 -0
- package/lib/graph-manager/protocol/pure/v1/V1_CubeEngineErrors.js.map +1 -0
- package/lib/graph-manager/protocol/pure/v1/V1_CubeExecutionResultReader.d.ts +27 -0
- package/lib/graph-manager/protocol/pure/v1/V1_CubeExecutionResultReader.d.ts.map +1 -0
- package/lib/graph-manager/protocol/pure/v1/V1_CubeExecutionResultReader.js +82 -0
- package/lib/graph-manager/protocol/pure/v1/V1_CubeExecutionResultReader.js.map +1 -0
- package/lib/graph-manager/protocol/pure/v1/V1_CubeLambdaSerializer.d.ts +32 -0
- package/lib/graph-manager/protocol/pure/v1/V1_CubeLambdaSerializer.d.ts.map +1 -0
- package/lib/graph-manager/protocol/pure/v1/V1_CubeLambdaSerializer.js +195 -0
- package/lib/graph-manager/protocol/pure/v1/V1_CubeLambdaSerializer.js.map +1 -0
- package/lib/graph-manager/protocol/pure/v1/V1_CubeModelOutlineBuilder.d.ts +20 -0
- package/lib/graph-manager/protocol/pure/v1/V1_CubeModelOutlineBuilder.d.ts.map +1 -0
- package/lib/graph-manager/protocol/pure/v1/V1_CubeModelOutlineBuilder.js +121 -0
- package/lib/graph-manager/protocol/pure/v1/V1_CubeModelOutlineBuilder.js.map +1 -0
- package/lib/graph-manager/protocol/pure/v1/V1_CubeRelationTypeAdapter.d.ts +24 -0
- package/lib/graph-manager/protocol/pure/v1/V1_CubeRelationTypeAdapter.d.ts.map +1 -0
- package/lib/graph-manager/protocol/pure/v1/V1_CubeRelationTypeAdapter.js +43 -0
- package/lib/graph-manager/protocol/pure/v1/V1_CubeRelationTypeAdapter.js.map +1 -0
- package/lib/graph-manager/protocol/pure/v1/V1_LegendCubeEngine.d.ts +45 -0
- package/lib/graph-manager/protocol/pure/v1/V1_LegendCubeEngine.d.ts.map +1 -0
- package/lib/graph-manager/protocol/pure/v1/V1_LegendCubeEngine.js +171 -0
- package/lib/graph-manager/protocol/pure/v1/V1_LegendCubeEngine.js.map +1 -0
- package/lib/graph-manager/protocol/pure/v1/__test-utils__/V1_CubeEngineTestUtils.d.ts +22 -0
- package/lib/graph-manager/protocol/pure/v1/__test-utils__/V1_CubeEngineTestUtils.d.ts.map +1 -0
- package/lib/graph-manager/protocol/pure/v1/__test-utils__/V1_CubeEngineTestUtils.js +79 -0
- package/lib/graph-manager/protocol/pure/v1/__test-utils__/V1_CubeEngineTestUtils.js.map +1 -0
- package/lib/index.css +17 -0
- package/lib/index.css.map +1 -0
- package/lib/index.d.ts +25 -0
- package/lib/index.d.ts.map +1 -0
- package/lib/index.js +24 -0
- package/lib/index.js.map +1 -0
- package/lib/stores/CubeEditorState.d.ts +206 -0
- package/lib/stores/CubeEditorState.d.ts.map +1 -0
- package/lib/stores/CubeEditorState.js +551 -0
- package/lib/stores/CubeEditorState.js.map +1 -0
- package/lib/stores/CubeExecutionState.d.ts +67 -0
- package/lib/stores/CubeExecutionState.d.ts.map +1 -0
- package/lib/stores/CubeExecutionState.js +196 -0
- package/lib/stores/CubeExecutionState.js.map +1 -0
- package/lib/stores/CubeHost.d.ts +31 -0
- package/lib/stores/CubeHost.d.ts.map +1 -0
- package/lib/stores/CubeHost.js +17 -0
- package/lib/stores/CubeHost.js.map +1 -0
- package/lib/stores/CubeNodeEditorState.d.ts +85 -0
- package/lib/stores/CubeNodeEditorState.d.ts.map +1 -0
- package/lib/stores/CubeNodeEditorState.js +207 -0
- package/lib/stores/CubeNodeEditorState.js.map +1 -0
- package/lib/stores/CubeShowPureState.d.ts +38 -0
- package/lib/stores/CubeShowPureState.d.ts.map +1 -0
- package/lib/stores/CubeShowPureState.js +83 -0
- package/lib/stores/CubeShowPureState.js.map +1 -0
- package/lib/stores/CubeSourcePickerState.d.ts +98 -0
- package/lib/stores/CubeSourcePickerState.d.ts.map +1 -0
- package/lib/stores/CubeSourcePickerState.js +334 -0
- package/lib/stores/CubeSourcePickerState.js.map +1 -0
- package/lib/stores/CubeSpecTransferState.d.ts +60 -0
- package/lib/stores/CubeSpecTransferState.d.ts.map +1 -0
- package/lib/stores/CubeSpecTransferState.js +167 -0
- package/lib/stores/CubeSpecTransferState.js.map +1 -0
- package/lib/stores/LocalModelCatalog.d.ts +37 -0
- package/lib/stores/LocalModelCatalog.d.ts.map +1 -0
- package/lib/stores/LocalModelCatalog.js +49 -0
- package/lib/stores/LocalModelCatalog.js.map +1 -0
- package/lib/stores/editors/CubeFilterDraft.d.ts +61 -0
- package/lib/stores/editors/CubeFilterDraft.d.ts.map +1 -0
- package/lib/stores/editors/CubeFilterDraft.js +186 -0
- package/lib/stores/editors/CubeFilterDraft.js.map +1 -0
- package/lib/stores/editors/CubeJoinDraft.d.ts +63 -0
- package/lib/stores/editors/CubeJoinDraft.d.ts.map +1 -0
- package/lib/stores/editors/CubeJoinDraft.js +136 -0
- package/lib/stores/editors/CubeJoinDraft.js.map +1 -0
- package/lib/stores/editors/CubeNodeDraft.d.ts +38 -0
- package/lib/stores/editors/CubeNodeDraft.d.ts.map +1 -0
- package/lib/stores/editors/CubeNodeDraft.js +35 -0
- package/lib/stores/editors/CubeNodeDraft.js.map +1 -0
- package/lib/stores/editors/CubeNodeDraftRegistry.d.ts +29 -0
- package/lib/stores/editors/CubeNodeDraftRegistry.d.ts.map +1 -0
- package/lib/stores/editors/CubeNodeDraftRegistry.js +33 -0
- package/lib/stores/editors/CubeNodeDraftRegistry.js.map +1 -0
- package/lib/stores/fixtures/CubeNorthwindModel.d.ts +23 -0
- package/lib/stores/fixtures/CubeNorthwindModel.d.ts.map +1 -0
- package/lib/stores/fixtures/CubeNorthwindModel.js +338 -0
- package/lib/stores/fixtures/CubeNorthwindModel.js.map +1 -0
- package/package.json +81 -3
- package/src/__lib__/LegendCubeCommand.ts +44 -0
- package/src/__lib__/LegendCubeHelpText.ts +38 -0
- package/src/__lib__/LegendCubeLabels.ts +141 -0
- package/src/__lib__/LegendCubeTesting.ts +33 -0
- package/src/__test-utils__/CubeCanvasTestUtils.ts +53 -0
- package/src/__test-utils__/CubeEngineTestSupport.ts +137 -0
- package/src/__test-utils__/CubeNorthwindTestQueries.ts +165 -0
- package/src/__test-utils__/CubePageTestUtils.tsx +96 -0
- package/src/__test-utils__/CubeTestApplication.ts +82 -0
- package/src/__test-utils__/FakeCubeEngine.ts +139 -0
- package/src/components/CubeButton.tsx +35 -0
- package/src/components/CubeEditor.tsx +239 -0
- package/src/components/CubeNodeIcon.tsx +47 -0
- package/src/components/canvas/CubeCanvas.tsx +260 -0
- package/src/components/canvas/CubeCanvasContext.ts +31 -0
- package/src/components/canvas/CubeCanvasContextMenu.tsx +89 -0
- package/src/components/canvas/CubeCanvasDnd.ts +82 -0
- package/src/components/canvas/CubeCanvasEdge.tsx +57 -0
- package/src/components/canvas/CubeCanvasElements.ts +150 -0
- package/src/components/canvas/CubeCanvasLayout.ts +88 -0
- package/src/components/canvas/CubeCanvasNode.tsx +141 -0
- package/src/components/editors/CubeColumnPicker.tsx +114 -0
- package/src/components/editors/CubeFilterEditor.tsx +309 -0
- package/src/components/editors/CubeJoinEditor.tsx +224 -0
- package/src/components/editors/CubeNodeEditorPanel.tsx +204 -0
- package/src/components/editors/CubeNodeEditorRegistry.ts +61 -0
- package/src/components/editors/CubeSourceEditor.tsx +116 -0
- package/src/components/editors/CubeValueEditor.tsx +332 -0
- package/src/components/grid/CubeGridRegion.tsx +274 -0
- package/src/components/grid/CubeGridValues.ts +125 -0
- package/src/components/grid/CubeResultGrid.tsx +84 -0
- package/src/components/palette/CubePalette.tsx +177 -0
- package/src/components/show-pure/CubeShowPureDialog.tsx +101 -0
- package/src/components/source-picker/CubeSourcePicker.tsx +304 -0
- package/src/components/spec-transfer/CubeSpecTransferDialog.tsx +157 -0
- package/src/graph-manager/CubeEngine.ts +155 -0
- package/src/graph-manager/CubeModelOutlineHelper.ts +32 -0
- package/src/graph-manager/protocol/pure/CubeEngineBuilder.ts +34 -0
- package/src/graph-manager/protocol/pure/v1/V1_CubeEngineErrors.ts +109 -0
- package/src/graph-manager/protocol/pure/v1/V1_CubeExecutionResultReader.ts +115 -0
- package/src/graph-manager/protocol/pure/v1/V1_CubeLambdaSerializer.ts +257 -0
- package/src/graph-manager/protocol/pure/v1/V1_CubeModelOutlineBuilder.ts +157 -0
- package/src/graph-manager/protocol/pure/v1/V1_CubeRelationTypeAdapter.ts +58 -0
- package/src/graph-manager/protocol/pure/v1/V1_LegendCubeEngine.ts +278 -0
- package/src/graph-manager/protocol/pure/v1/__test-utils__/V1_CubeEngineTestUtils.ts +124 -0
- package/src/index.ts +41 -0
- package/src/stores/CubeEditorState.ts +702 -0
- package/src/stores/CubeExecutionState.ts +255 -0
- package/src/stores/CubeHost.ts +32 -0
- package/src/stores/CubeNodeEditorState.ts +255 -0
- package/src/stores/CubeShowPureState.ts +96 -0
- package/src/stores/CubeSourcePickerState.ts +426 -0
- package/src/stores/CubeSpecTransferState.ts +198 -0
- package/src/stores/LocalModelCatalog.ts +70 -0
- package/src/stores/editors/CubeFilterDraft.ts +241 -0
- package/src/stores/editors/CubeJoinDraft.ts +197 -0
- package/src/stores/editors/CubeNodeDraft.ts +46 -0
- package/src/stores/editors/CubeNodeDraftRegistry.ts +49 -0
- package/src/stores/fixtures/CubeNorthwindModel.ts +355 -0
- package/tsconfig.json +118 -0
|
@@ -0,0 +1,165 @@
|
|
|
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
|
+
ColumnComparisonFilter,
|
|
19
|
+
CompositeFilter,
|
|
20
|
+
CompositeFilterOperator,
|
|
21
|
+
Connection,
|
|
22
|
+
Filter,
|
|
23
|
+
FilterOperator,
|
|
24
|
+
type FilterRule,
|
|
25
|
+
Join,
|
|
26
|
+
JoinType,
|
|
27
|
+
PrimitiveType,
|
|
28
|
+
Query,
|
|
29
|
+
RelationalTableSource,
|
|
30
|
+
Schema,
|
|
31
|
+
SchemaColumn,
|
|
32
|
+
} from '@finos/legend-cube';
|
|
33
|
+
|
|
34
|
+
// Cube queries over Northwind, typed as the engine types the Cube fixture
|
|
35
|
+
// (PLAN §8.5), for the serializer's and the engine's tests
|
|
36
|
+
|
|
37
|
+
export const NORTHWIND_DATABASE =
|
|
38
|
+
'showcase::northwind::store::NorthwindDatabase';
|
|
39
|
+
export const NORTHWIND_RUNTIME = 'showcase::northwind::mapping::StoreRuntime';
|
|
40
|
+
|
|
41
|
+
const P = 'meta::pure::precisePrimitives::';
|
|
42
|
+
|
|
43
|
+
const column = (
|
|
44
|
+
name: string,
|
|
45
|
+
path: string,
|
|
46
|
+
nullable = true,
|
|
47
|
+
params: number[] = [],
|
|
48
|
+
): SchemaColumn =>
|
|
49
|
+
new SchemaColumn(name, PrimitiveType.get(path, params), nullable);
|
|
50
|
+
const varchar = (name: string, length: number, nullable = true): SchemaColumn =>
|
|
51
|
+
column(name, `${P}Varchar`, nullable, [length]);
|
|
52
|
+
const smallInt = (name: string, nullable = true): SchemaColumn =>
|
|
53
|
+
column(name, `${P}SmallInt`, nullable);
|
|
54
|
+
const date = (name: string): SchemaColumn => column(name, 'StrictDate');
|
|
55
|
+
|
|
56
|
+
export const ORDERS_COLUMNS = [
|
|
57
|
+
smallInt('ORDER_ID', false),
|
|
58
|
+
varchar('CUSTOMER_ID', 5),
|
|
59
|
+
smallInt('EMPLOYEE_ID'),
|
|
60
|
+
date('ORDER_DATE'),
|
|
61
|
+
date('REQUIRED_DATE'),
|
|
62
|
+
date('SHIPPED_DATE'),
|
|
63
|
+
smallInt('SHIP_VIA'),
|
|
64
|
+
column('FREIGHT', `${P}Double`),
|
|
65
|
+
varchar('SHIP_NAME', 40),
|
|
66
|
+
varchar('SHIP_ADDRESS', 60),
|
|
67
|
+
varchar('SHIP_CITY', 15),
|
|
68
|
+
varchar('SHIP_REGION', 15),
|
|
69
|
+
varchar('SHIP_POSTAL_CODE', 10),
|
|
70
|
+
varchar('SHIP_COUNTRY', 15),
|
|
71
|
+
];
|
|
72
|
+
|
|
73
|
+
export const CUSTOMERS_COLUMNS = [
|
|
74
|
+
varchar('CUSTOMER_ID', 5, false),
|
|
75
|
+
varchar('COMPANY_NAME', 40, false),
|
|
76
|
+
varchar('CONTACT_NAME', 30),
|
|
77
|
+
varchar('CONTACT_TITLE', 30),
|
|
78
|
+
varchar('ADDRESS', 60),
|
|
79
|
+
varchar('CITY', 15),
|
|
80
|
+
varchar('REGION', 15),
|
|
81
|
+
varchar('POSTAL_CODE', 10),
|
|
82
|
+
varchar('COUNTRY', 15),
|
|
83
|
+
varchar('PHONE', 24),
|
|
84
|
+
varchar('FAX', 24),
|
|
85
|
+
];
|
|
86
|
+
|
|
87
|
+
export const northwindTable = (
|
|
88
|
+
id: string,
|
|
89
|
+
name: string,
|
|
90
|
+
columns: SchemaColumn[],
|
|
91
|
+
): RelationalTableSource =>
|
|
92
|
+
new RelationalTableSource(
|
|
93
|
+
id,
|
|
94
|
+
{ database: NORTHWIND_DATABASE, schema: 'NORTHWIND', table: name },
|
|
95
|
+
{ kind: 'resolved', schema: new Schema(columns) },
|
|
96
|
+
);
|
|
97
|
+
|
|
98
|
+
/** France since 1997, by employees 1 and 4 (PLAN §8.5) */
|
|
99
|
+
export const SLICE_FILTER: FilterRule = new CompositeFilter(
|
|
100
|
+
CompositeFilterOperator.AND,
|
|
101
|
+
[
|
|
102
|
+
new ColumnComparisonFilter('SHIP_COUNTRY', FilterOperator.EQUAL, {
|
|
103
|
+
kind: 'string',
|
|
104
|
+
value: 'France',
|
|
105
|
+
}),
|
|
106
|
+
new ColumnComparisonFilter(
|
|
107
|
+
'ORDER_DATE',
|
|
108
|
+
FilterOperator.GREATER_THAN_OR_EQUAL,
|
|
109
|
+
{ kind: 'strictDate', value: '1997-01-01' },
|
|
110
|
+
),
|
|
111
|
+
new ColumnComparisonFilter('EMPLOYEE_ID', FilterOperator.IN, [
|
|
112
|
+
{ kind: 'integer', value: '1' },
|
|
113
|
+
{ kind: 'integer', value: '4' },
|
|
114
|
+
]),
|
|
115
|
+
],
|
|
116
|
+
);
|
|
117
|
+
|
|
118
|
+
/** The slice (PLAN §8.5): ORDERS ⋈ CUSTOMERS on CUSTOMER_ID, then the filter, captured at the filter */
|
|
119
|
+
export const sliceQuery = (
|
|
120
|
+
filter: FilterRule = SLICE_FILTER,
|
|
121
|
+
joinType = JoinType.INNER,
|
|
122
|
+
): Query =>
|
|
123
|
+
new Query(
|
|
124
|
+
[
|
|
125
|
+
northwindTable('relational101', 'ORDERS', ORDERS_COLUMNS),
|
|
126
|
+
northwindTable('relational102', 'CUSTOMERS', CUSTOMERS_COLUMNS),
|
|
127
|
+
new Join('join101', {
|
|
128
|
+
leftColumns: ['CUSTOMER_ID'],
|
|
129
|
+
rightColumns: ['CUSTOMER_ID'],
|
|
130
|
+
joinType,
|
|
131
|
+
}),
|
|
132
|
+
new Filter('filter101', filter),
|
|
133
|
+
],
|
|
134
|
+
[
|
|
135
|
+
new Connection('relational101', 'join101', 'leftTds'),
|
|
136
|
+
new Connection('relational102', 'join101', 'rightTds'),
|
|
137
|
+
new Connection('join101', 'filter101', 'tds'),
|
|
138
|
+
],
|
|
139
|
+
'filter101',
|
|
140
|
+
);
|
|
141
|
+
|
|
142
|
+
/**
|
|
143
|
+
* ORDERS ⟗ a CUSTOMERS-like table on CUSTOMER_ID, nullable on both sides with
|
|
144
|
+
* different lengths (so `toOne()`, a merge and a cast), captured at the join
|
|
145
|
+
*/
|
|
146
|
+
export const fullJoinQuery = (): Query =>
|
|
147
|
+
new Query(
|
|
148
|
+
[
|
|
149
|
+
northwindTable('relational101', 'ORDERS', ORDERS_COLUMNS),
|
|
150
|
+
northwindTable('relational102', 'CUSTOMERS', [
|
|
151
|
+
varchar('CUSTOMER_ID', 40),
|
|
152
|
+
varchar('COMPANY_NAME', 40),
|
|
153
|
+
]),
|
|
154
|
+
new Join('join101', {
|
|
155
|
+
leftColumns: ['CUSTOMER_ID'],
|
|
156
|
+
rightColumns: ['CUSTOMER_ID'],
|
|
157
|
+
joinType: JoinType.FULL_OUTER,
|
|
158
|
+
}),
|
|
159
|
+
],
|
|
160
|
+
[
|
|
161
|
+
new Connection('relational101', 'join101', 'leftTds'),
|
|
162
|
+
new Connection('relational102', 'join101', 'rightTds'),
|
|
163
|
+
],
|
|
164
|
+
'join101',
|
|
165
|
+
);
|
|
@@ -0,0 +1,96 @@
|
|
|
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
|
+
ApplicationFrameworkProvider,
|
|
19
|
+
ApplicationStoreProvider,
|
|
20
|
+
type GenericLegendApplicationStore,
|
|
21
|
+
} from '@finos/legend-application';
|
|
22
|
+
import { TEST__BrowserEnvironmentProvider } from '@finos/legend-application/test';
|
|
23
|
+
import type { CubeDocument } from '@finos/legend-cube';
|
|
24
|
+
import {
|
|
25
|
+
act,
|
|
26
|
+
type RenderResult,
|
|
27
|
+
render,
|
|
28
|
+
waitFor,
|
|
29
|
+
} from '@testing-library/react';
|
|
30
|
+
import type { CubeEditorState } from '../stores/CubeEditorState.js';
|
|
31
|
+
|
|
32
|
+
/** React Flow watches the canvas with an IntersectionObserver, which jsdom lacks */
|
|
33
|
+
class TEST__IntersectionObserver {
|
|
34
|
+
observe(): void {
|
|
35
|
+
// nothing is ever in view under jsdom
|
|
36
|
+
}
|
|
37
|
+
unobserve(): void {
|
|
38
|
+
// nothing to stop watching
|
|
39
|
+
}
|
|
40
|
+
disconnect(): void {
|
|
41
|
+
// nothing to stop watching
|
|
42
|
+
}
|
|
43
|
+
takeRecords(): IntersectionObserverEntry[] {
|
|
44
|
+
return [];
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
/** Lets the canvas mount under jsdom; call before rendering it */
|
|
49
|
+
export const TEST__installCanvasDomStubs = (): void => {
|
|
50
|
+
if (!('IntersectionObserver' in window)) {
|
|
51
|
+
Object.defineProperty(window, 'IntersectionObserver', {
|
|
52
|
+
configurable: true,
|
|
53
|
+
writable: true,
|
|
54
|
+
value: TEST__IntersectionObserver,
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
};
|
|
58
|
+
|
|
59
|
+
/**
|
|
60
|
+
* Renders an element inside a Legend application, as a host would, and waits
|
|
61
|
+
* for the element with the given test id: the framework renders nothing until
|
|
62
|
+
* the application store has initialized
|
|
63
|
+
*/
|
|
64
|
+
export const TEST__renderInCubeApplication = async (
|
|
65
|
+
element: React.ReactNode,
|
|
66
|
+
applicationStore: GenericLegendApplicationStore,
|
|
67
|
+
readyTestId: string,
|
|
68
|
+
): Promise<RenderResult> => {
|
|
69
|
+
TEST__installCanvasDomStubs();
|
|
70
|
+
const renderResult = render(
|
|
71
|
+
<ApplicationStoreProvider store={applicationStore}>
|
|
72
|
+
<TEST__BrowserEnvironmentProvider initialEntries={['/']}>
|
|
73
|
+
<ApplicationFrameworkProvider>{element}</ApplicationFrameworkProvider>
|
|
74
|
+
</TEST__BrowserEnvironmentProvider>
|
|
75
|
+
</ApplicationStoreProvider>,
|
|
76
|
+
);
|
|
77
|
+
await waitFor(() => renderResult.getByTestId(readyTestId));
|
|
78
|
+
return renderResult;
|
|
79
|
+
};
|
|
80
|
+
|
|
81
|
+
/**
|
|
82
|
+
* Imports a cube into a rendered page, as Import does, and waits for its
|
|
83
|
+
* tables to be typed again, so nothing changes after the test has ended
|
|
84
|
+
*/
|
|
85
|
+
export const TEST__importDocument = async (
|
|
86
|
+
editorState: CubeEditorState,
|
|
87
|
+
document: CubeDocument,
|
|
88
|
+
readOnly = false,
|
|
89
|
+
): Promise<void> => {
|
|
90
|
+
act(() => editorState.importDocument(document, readOnly));
|
|
91
|
+
await waitFor(() => {
|
|
92
|
+
if (editorState.isResolvingSources) {
|
|
93
|
+
throw new Error('The imported tables are still being typed');
|
|
94
|
+
}
|
|
95
|
+
});
|
|
96
|
+
};
|
|
@@ -0,0 +1,82 @@
|
|
|
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
|
+
ApplicationStore,
|
|
19
|
+
type GenericLegendApplicationStore,
|
|
20
|
+
LegendApplicationConfig,
|
|
21
|
+
type LegendApplicationPlugin,
|
|
22
|
+
LegendApplicationPluginManager,
|
|
23
|
+
} from '@finos/legend-application';
|
|
24
|
+
import { TEST__getApplicationVersionData } from '@finos/legend-application/test';
|
|
25
|
+
import type { CubeHost } from '../stores/CubeHost.js';
|
|
26
|
+
import { LocalModelCatalog } from '../stores/LocalModelCatalog.js';
|
|
27
|
+
import {
|
|
28
|
+
createFakeCubeEngine,
|
|
29
|
+
type FakeCubeEngine,
|
|
30
|
+
type FakeCubeEngineAnswers,
|
|
31
|
+
} from './FakeCubeEngine.js';
|
|
32
|
+
|
|
33
|
+
// A bare Legend application for Cube's jsdom tests, as the data-space viewer's
|
|
34
|
+
// tests build theirs: the builder may not use the query builder's test helpers
|
|
35
|
+
|
|
36
|
+
export class TEST__LegendCubePluginManager extends LegendApplicationPluginManager<LegendApplicationPlugin> {
|
|
37
|
+
private constructor() {
|
|
38
|
+
super();
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
static create(): TEST__LegendCubePluginManager {
|
|
42
|
+
return new TEST__LegendCubePluginManager();
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
class TEST__LegendCubeApplicationConfig extends LegendApplicationConfig {
|
|
47
|
+
override getDefaultApplicationStorageKey(): string {
|
|
48
|
+
return 'test';
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
/** A fresh application store: build one per test, since it initializes once */
|
|
53
|
+
export const TEST__createCubeApplicationStore = (
|
|
54
|
+
plugins: LegendApplicationPlugin[] = [],
|
|
55
|
+
): GenericLegendApplicationStore => {
|
|
56
|
+
const pluginManager = TEST__LegendCubePluginManager.create();
|
|
57
|
+
pluginManager.usePlugins(plugins).install();
|
|
58
|
+
return new ApplicationStore(
|
|
59
|
+
new TEST__LegendCubeApplicationConfig({
|
|
60
|
+
configData: { env: 'TEST', appName: 'TEST' },
|
|
61
|
+
versionData: TEST__getApplicationVersionData(),
|
|
62
|
+
baseAddress: '/',
|
|
63
|
+
}),
|
|
64
|
+
pluginManager,
|
|
65
|
+
);
|
|
66
|
+
};
|
|
67
|
+
|
|
68
|
+
/** A host over a fake engine, with the bundled models */
|
|
69
|
+
export const TEST__createCubeHost = (
|
|
70
|
+
answers?: FakeCubeEngineAnswers,
|
|
71
|
+
applicationStore = TEST__createCubeApplicationStore(),
|
|
72
|
+
): { host: CubeHost; fake: FakeCubeEngine } => {
|
|
73
|
+
const fake = createFakeCubeEngine(answers);
|
|
74
|
+
return {
|
|
75
|
+
host: {
|
|
76
|
+
applicationStore,
|
|
77
|
+
engine: fake.engine,
|
|
78
|
+
modelCatalog: new LocalModelCatalog(fake.engine),
|
|
79
|
+
},
|
|
80
|
+
fake,
|
|
81
|
+
};
|
|
82
|
+
};
|
|
@@ -0,0 +1,139 @@
|
|
|
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 { jest } from '@jest/globals';
|
|
18
|
+
import { Schema } from '@finos/legend-cube';
|
|
19
|
+
import {
|
|
20
|
+
type CubeEngine,
|
|
21
|
+
CubeEngineError,
|
|
22
|
+
CubeEngineErrorKind,
|
|
23
|
+
type CubeModelOutline,
|
|
24
|
+
type CubeResult,
|
|
25
|
+
} from '../graph-manager/CubeEngine.js';
|
|
26
|
+
import {
|
|
27
|
+
CUSTOMERS_COLUMNS,
|
|
28
|
+
NORTHWIND_DATABASE,
|
|
29
|
+
NORTHWIND_RUNTIME,
|
|
30
|
+
ORDERS_COLUMNS,
|
|
31
|
+
} from './CubeNorthwindTestQueries.js';
|
|
32
|
+
|
|
33
|
+
// A CubeEngine for jsdom tests (PLAN §11.1 M1.8a): canned answers, no network.
|
|
34
|
+
// Each method is a jest.fn, kept in its own variable so tests can read its
|
|
35
|
+
// calls or change its answer.
|
|
36
|
+
|
|
37
|
+
/** Northwind as the fake knows it: two tables, one runtime keyed by the database */
|
|
38
|
+
export const FAKE_NORTHWIND_OUTLINE: CubeModelOutline = {
|
|
39
|
+
databases: [
|
|
40
|
+
{
|
|
41
|
+
path: NORTHWIND_DATABASE,
|
|
42
|
+
schemas: [
|
|
43
|
+
{
|
|
44
|
+
name: 'NORTHWIND',
|
|
45
|
+
tables: [
|
|
46
|
+
{
|
|
47
|
+
name: 'ORDERS',
|
|
48
|
+
isView: false,
|
|
49
|
+
columnCount: ORDERS_COLUMNS.length,
|
|
50
|
+
flags: [],
|
|
51
|
+
untypedColumns: [],
|
|
52
|
+
},
|
|
53
|
+
{
|
|
54
|
+
name: 'CUSTOMERS',
|
|
55
|
+
isView: false,
|
|
56
|
+
columnCount: CUSTOMERS_COLUMNS.length,
|
|
57
|
+
flags: [],
|
|
58
|
+
untypedColumns: [],
|
|
59
|
+
},
|
|
60
|
+
],
|
|
61
|
+
},
|
|
62
|
+
],
|
|
63
|
+
},
|
|
64
|
+
],
|
|
65
|
+
runtimes: [{ path: NORTHWIND_RUNTIME, storePaths: [NORTHWIND_DATABASE] }],
|
|
66
|
+
};
|
|
67
|
+
|
|
68
|
+
/** The schemas the fake gives, keyed by `<schema>.<table>` as the outline names them */
|
|
69
|
+
export const FAKE_NORTHWIND_SCHEMAS: ReadonlyMap<string, Schema> = new Map([
|
|
70
|
+
['NORTHWIND.ORDERS', new Schema(ORDERS_COLUMNS)],
|
|
71
|
+
['NORTHWIND.CUSTOMERS', new Schema(CUSTOMERS_COLUMNS)],
|
|
72
|
+
]);
|
|
73
|
+
|
|
74
|
+
export const EMPTY_CUBE_RESULT: CubeResult = {
|
|
75
|
+
columns: [],
|
|
76
|
+
rows: [],
|
|
77
|
+
sql: [],
|
|
78
|
+
durationMs: 0,
|
|
79
|
+
};
|
|
80
|
+
|
|
81
|
+
export interface FakeCubeEngineAnswers {
|
|
82
|
+
readonly outline?: CubeModelOutline;
|
|
83
|
+
/** keyed by `<schema>.<table>`; a table not in it gets a compile error */
|
|
84
|
+
readonly schemas?: ReadonlyMap<string, Schema>;
|
|
85
|
+
readonly result?: CubeResult;
|
|
86
|
+
readonly pure?: string;
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
export interface FakeCubeEngine {
|
|
90
|
+
readonly engine: CubeEngine;
|
|
91
|
+
readonly loadModel: jest.Mock<CubeEngine['loadModel']>;
|
|
92
|
+
readonly resolveSchemas: jest.Mock<CubeEngine['resolveSchemas']>;
|
|
93
|
+
readonly typeLambdas: jest.Mock<CubeEngine['typeLambdas']>;
|
|
94
|
+
readonly execute: jest.Mock<CubeEngine['execute']>;
|
|
95
|
+
readonly renderPure: jest.Mock<CubeEngine['renderPure']>;
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
/** A fresh fake: build one per test, since jest.fn keeps its calls across tests */
|
|
99
|
+
export const createFakeCubeEngine = (
|
|
100
|
+
answers: FakeCubeEngineAnswers = {},
|
|
101
|
+
): FakeCubeEngine => {
|
|
102
|
+
const schemas = answers.schemas ?? FAKE_NORTHWIND_SCHEMAS;
|
|
103
|
+
const loadModel = jest.fn<CubeEngine['loadModel']>(async () =>
|
|
104
|
+
Promise.resolve(answers.outline ?? FAKE_NORTHWIND_OUTLINE),
|
|
105
|
+
);
|
|
106
|
+
const resolveSchemas = jest.fn<CubeEngine['resolveSchemas']>(
|
|
107
|
+
async (_model, accessors) =>
|
|
108
|
+
Promise.resolve(
|
|
109
|
+
new Map(
|
|
110
|
+
[...accessors].map(([nodeId, [, schema, table]]) => [
|
|
111
|
+
nodeId,
|
|
112
|
+
schemas.get(`${schema}.${table}`) ??
|
|
113
|
+
new CubeEngineError(
|
|
114
|
+
CubeEngineErrorKind.COMPILE,
|
|
115
|
+
`The table "${schema}.${table}" can't be found`,
|
|
116
|
+
nodeId,
|
|
117
|
+
),
|
|
118
|
+
]),
|
|
119
|
+
),
|
|
120
|
+
),
|
|
121
|
+
);
|
|
122
|
+
const typeLambdas = jest.fn<CubeEngine['typeLambdas']>(async () =>
|
|
123
|
+
Promise.resolve(new Map()),
|
|
124
|
+
);
|
|
125
|
+
const execute = jest.fn<CubeEngine['execute']>(async () =>
|
|
126
|
+
Promise.resolve(answers.result ?? EMPTY_CUBE_RESULT),
|
|
127
|
+
);
|
|
128
|
+
const renderPure = jest.fn<CubeEngine['renderPure']>(async () =>
|
|
129
|
+
Promise.resolve(answers.pure ?? ''),
|
|
130
|
+
);
|
|
131
|
+
return {
|
|
132
|
+
engine: { loadModel, resolveSchemas, typeLambdas, execute, renderPure },
|
|
133
|
+
loadModel,
|
|
134
|
+
resolveSchemas,
|
|
135
|
+
typeLambdas,
|
|
136
|
+
execute,
|
|
137
|
+
renderPure,
|
|
138
|
+
};
|
|
139
|
+
};
|
|
@@ -0,0 +1,35 @@
|
|
|
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 { clsx } from '@finos/legend-art';
|
|
18
|
+
|
|
19
|
+
/** A small text button in the page's toolbars and lists, coloured by the theme's tokens */
|
|
20
|
+
export const CubeButton: React.FC<
|
|
21
|
+
React.ButtonHTMLAttributes<HTMLButtonElement> & { primary?: boolean }
|
|
22
|
+
> = ({ className, primary, ...props }) => (
|
|
23
|
+
<button
|
|
24
|
+
{...props}
|
|
25
|
+
// these buttons never submit a form
|
|
26
|
+
type="button"
|
|
27
|
+
className={clsx(
|
|
28
|
+
'h-6 shrink-0 rounded-sm border px-2 text-base enabled:cursor-pointer disabled:cursor-not-allowed disabled:text-[var(--color-text-disabled)]',
|
|
29
|
+
primary
|
|
30
|
+
? 'border-[var(--color-accent)] bg-[var(--color-accent)] text-[var(--color-text-on-accent)] enabled:hover:bg-[var(--color-accent-hover)] disabled:border-[var(--color-border-default)] disabled:bg-[var(--color-bg-panel-header)]'
|
|
31
|
+
: 'border-[var(--color-border-default)] bg-[var(--color-bg-elevated)] text-[var(--color-text-primary)] enabled:hover:bg-[var(--color-bg-hover)]',
|
|
32
|
+
className,
|
|
33
|
+
)}
|
|
34
|
+
/>
|
|
35
|
+
);
|