@finos/legend-cube-builder 0.0.4 → 0.0.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +9 -3
- package/docs/adding-an-operation.md +22 -12
- package/docs/demo/DEMO-FAST-NOTES.md +67 -0
- package/docs/demo/README.md +102 -0
- package/docs/demo/specs/duckdb-sales-pivot.cube.json +110 -0
- package/docs/demo/specs/trades-desks-1-joined.cube.json +123 -0
- package/docs/demo/specs/trades-desks-2-grouped.cube.json +140 -0
- package/docs/demo/specs/trades-desks-3-ranked.cube.json +158 -0
- package/docs/demo/specs/trades-desks-4-extended.cube.json +208 -0
- package/docs/demo/specs/trades-desks-5-final.cube.json +248 -0
- package/docs/hosting.md +50 -3
- package/docs/testing.md +32 -0
- package/lib/__lib__/LegendCubeCommand.d.ts +2 -0
- package/lib/__lib__/LegendCubeCommand.d.ts.map +1 -1
- package/lib/__lib__/LegendCubeCommand.js +7 -0
- package/lib/__lib__/LegendCubeCommand.js.map +1 -1
- package/lib/__lib__/LegendCubeFunctionLabels.d.ts +29 -0
- package/lib/__lib__/LegendCubeFunctionLabels.d.ts.map +1 -0
- package/lib/__lib__/LegendCubeFunctionLabels.js +31 -0
- package/lib/__lib__/LegendCubeFunctionLabels.js.map +1 -0
- package/lib/__lib__/LegendCubeHelpText.d.ts +5 -1
- package/lib/__lib__/LegendCubeHelpText.d.ts.map +1 -1
- package/lib/__lib__/LegendCubeHelpText.js +14 -2
- package/lib/__lib__/LegendCubeHelpText.js.map +1 -1
- package/lib/__lib__/LegendCubeLabels.d.ts +100 -8
- package/lib/__lib__/LegendCubeLabels.d.ts.map +1 -1
- package/lib/__lib__/LegendCubeLabels.js +129 -14
- package/lib/__lib__/LegendCubeLabels.js.map +1 -1
- package/lib/__lib__/LegendCubeProjectSourceLabels.d.ts +26 -0
- package/lib/__lib__/LegendCubeProjectSourceLabels.d.ts.map +1 -0
- package/lib/__lib__/LegendCubeProjectSourceLabels.js +26 -0
- package/lib/__lib__/LegendCubeProjectSourceLabels.js.map +1 -0
- package/lib/__lib__/LegendCubeServiceLabels.d.ts +27 -0
- package/lib/__lib__/LegendCubeServiceLabels.d.ts.map +1 -0
- package/lib/__lib__/LegendCubeServiceLabels.js +32 -0
- package/lib/__lib__/LegendCubeServiceLabels.js.map +1 -0
- package/lib/__lib__/LegendCubeTesting.d.ts +7 -0
- package/lib/__lib__/LegendCubeTesting.d.ts.map +1 -1
- package/lib/__lib__/LegendCubeTesting.js +7 -0
- package/lib/__lib__/LegendCubeTesting.js.map +1 -1
- package/lib/__test-utils__/CubeEngineTestSupport.d.ts +1 -1
- package/lib/__test-utils__/CubeEngineTestSupport.d.ts.map +1 -1
- package/lib/__test-utils__/CubeEngineTestSupport.js +2 -2
- package/lib/__test-utils__/CubeEngineTestSupport.js.map +1 -1
- package/lib/__test-utils__/CubeExpressionTestUtils.d.ts +8 -1
- package/lib/__test-utils__/CubeExpressionTestUtils.d.ts.map +1 -1
- package/lib/__test-utils__/CubeExpressionTestUtils.js +20 -3
- package/lib/__test-utils__/CubeExpressionTestUtils.js.map +1 -1
- package/lib/__test-utils__/CubeFunctionTestOutline.d.ts +26 -0
- package/lib/__test-utils__/CubeFunctionTestOutline.d.ts.map +1 -0
- package/lib/__test-utils__/CubeFunctionTestOutline.js +56 -0
- package/lib/__test-utils__/CubeFunctionTestOutline.js.map +1 -0
- package/lib/__test-utils__/CubeLambdaCorpus.d.ts +36 -0
- package/lib/__test-utils__/CubeLambdaCorpus.d.ts.map +1 -0
- package/lib/__test-utils__/CubeLambdaCorpus.js +83 -0
- package/lib/__test-utils__/CubeLambdaCorpus.js.map +1 -0
- package/lib/__test-utils__/CubePageTestUtils.d.ts +6 -0
- package/lib/__test-utils__/CubePageTestUtils.d.ts.map +1 -1
- package/lib/__test-utils__/CubePageTestUtils.js +21 -0
- package/lib/__test-utils__/CubePageTestUtils.js.map +1 -1
- package/lib/__test-utils__/CubeTestApplication.d.ts +9 -0
- package/lib/__test-utils__/CubeTestApplication.d.ts.map +1 -1
- package/lib/__test-utils__/CubeTestApplication.js +16 -0
- package/lib/__test-utils__/CubeTestApplication.js.map +1 -1
- package/lib/__test-utils__/FakeCubeEngine.d.ts +5 -0
- package/lib/__test-utils__/FakeCubeEngine.d.ts.map +1 -1
- package/lib/__test-utils__/FakeCubeEngine.js +17 -0
- package/lib/__test-utils__/FakeCubeEngine.js.map +1 -1
- package/lib/__test-utils__/FakeCubeIngestCatalog.d.ts +7 -1
- package/lib/__test-utils__/FakeCubeIngestCatalog.d.ts.map +1 -1
- package/lib/__test-utils__/FakeCubeIngestCatalog.js +16 -0
- package/lib/__test-utils__/FakeCubeIngestCatalog.js.map +1 -1
- package/lib/__test-utils__/FakeCubeServiceCatalog.d.ts +26 -0
- package/lib/__test-utils__/FakeCubeServiceCatalog.d.ts.map +1 -0
- package/lib/__test-utils__/FakeCubeServiceCatalog.js +40 -0
- package/lib/__test-utils__/FakeCubeServiceCatalog.js.map +1 -0
- package/lib/components/CubeAddItems.d.ts.map +1 -1
- package/lib/components/CubeAddItems.js +9 -6
- package/lib/components/CubeAddItems.js.map +1 -1
- package/lib/components/CubeDialogTheme.d.ts +25 -0
- package/lib/components/CubeDialogTheme.d.ts.map +1 -0
- package/lib/components/CubeDialogTheme.js +25 -0
- package/lib/components/CubeDialogTheme.js.map +1 -0
- package/lib/components/CubeEditor.d.ts +12 -1
- package/lib/components/CubeEditor.d.ts.map +1 -1
- package/lib/components/CubeEditor.js +16 -14
- package/lib/components/CubeEditor.js.map +1 -1
- package/lib/components/CubeFileMenu.d.ts +28 -0
- package/lib/components/CubeFileMenu.d.ts.map +1 -0
- package/lib/components/CubeFileMenu.js +77 -0
- package/lib/components/CubeFileMenu.js.map +1 -0
- package/lib/components/CubeLambdaImportBanner.d.ts +26 -0
- package/lib/components/CubeLambdaImportBanner.d.ts.map +1 -0
- package/lib/components/CubeLambdaImportBanner.js +47 -0
- package/lib/components/CubeLambdaImportBanner.js.map +1 -0
- package/lib/components/CubeNodeIcon.d.ts.map +1 -1
- package/lib/components/CubeNodeIcon.js +5 -1
- package/lib/components/CubeNodeIcon.js.map +1 -1
- package/lib/components/CubeSchemaColumnsTable.d.ts.map +1 -1
- package/lib/components/CubeSchemaColumnsTable.js +2 -2
- package/lib/components/CubeSchemaColumnsTable.js.map +1 -1
- package/lib/components/canvas/CubeCanvas.d.ts.map +1 -1
- package/lib/components/canvas/CubeCanvas.js +38 -5
- package/lib/components/canvas/CubeCanvas.js.map +1 -1
- package/lib/components/canvas/CubeCanvasContextMenu.d.ts.map +1 -1
- package/lib/components/canvas/CubeCanvasContextMenu.js +2 -1
- package/lib/components/canvas/CubeCanvasContextMenu.js.map +1 -1
- package/lib/components/canvas/CubeCanvasElements.d.ts +18 -1
- package/lib/components/canvas/CubeCanvasElements.d.ts.map +1 -1
- package/lib/components/canvas/CubeCanvasElements.js +58 -3
- package/lib/components/canvas/CubeCanvasElements.js.map +1 -1
- package/lib/components/canvas/CubeCanvasLayout.js +1 -1
- package/lib/components/canvas/CubeCanvasNode.d.ts.map +1 -1
- package/lib/components/canvas/CubeCanvasNode.js +8 -4
- package/lib/components/canvas/CubeCanvasNode.js.map +1 -1
- package/lib/components/dev-settings/CubeDevSettings.d.ts +35 -0
- package/lib/components/dev-settings/CubeDevSettings.d.ts.map +1 -0
- package/lib/components/dev-settings/CubeDevSettings.js +50 -0
- package/lib/components/dev-settings/CubeDevSettings.js.map +1 -0
- package/lib/components/editors/CubeColumnChecklist.d.ts.map +1 -1
- package/lib/components/editors/CubeColumnChecklist.js +2 -2
- package/lib/components/editors/CubeColumnChecklist.js.map +1 -1
- package/lib/components/editors/CubeColumnPicker.d.ts.map +1 -1
- package/lib/components/editors/CubeColumnPicker.js +3 -3
- package/lib/components/editors/CubeColumnPicker.js.map +1 -1
- package/lib/components/editors/CubeConcatEditor.js +2 -2
- package/lib/components/editors/CubeConcatEditor.js.map +1 -1
- package/lib/components/editors/CubeExpressionFilterEditor.d.ts +25 -0
- package/lib/components/editors/CubeExpressionFilterEditor.d.ts.map +1 -0
- package/lib/components/editors/CubeExpressionFilterEditor.js +83 -0
- package/lib/components/editors/CubeExpressionFilterEditor.js.map +1 -0
- package/lib/components/editors/CubeExtendEditor.d.ts +2 -0
- package/lib/components/editors/CubeExtendEditor.d.ts.map +1 -1
- package/lib/components/editors/CubeExtendEditor.js +3 -3
- package/lib/components/editors/CubeExtendEditor.js.map +1 -1
- package/lib/components/editors/CubeFilterEditor.d.ts.map +1 -1
- package/lib/components/editors/CubeFilterEditor.js +13 -2
- package/lib/components/editors/CubeFilterEditor.js.map +1 -1
- package/lib/components/editors/CubeFunctionSourceEditor.d.ts +25 -0
- package/lib/components/editors/CubeFunctionSourceEditor.d.ts.map +1 -0
- package/lib/components/editors/CubeFunctionSourceEditor.js +55 -0
- package/lib/components/editors/CubeFunctionSourceEditor.js.map +1 -0
- package/lib/components/editors/CubeJoinEditor.d.ts.map +1 -1
- package/lib/components/editors/CubeJoinEditor.js +16 -4
- package/lib/components/editors/CubeJoinEditor.js.map +1 -1
- package/lib/components/editors/CubeNodeEditorPanel.d.ts.map +1 -1
- package/lib/components/editors/CubeNodeEditorPanel.js +18 -8
- package/lib/components/editors/CubeNodeEditorPanel.js.map +1 -1
- package/lib/components/editors/CubeNodeEditorPopper.d.ts +5 -1
- package/lib/components/editors/CubeNodeEditorPopper.d.ts.map +1 -1
- package/lib/components/editors/CubeNodeEditorPopper.js +10 -2
- package/lib/components/editors/CubeNodeEditorPopper.js.map +1 -1
- package/lib/components/editors/CubeNodeEditorRegistry.d.ts.map +1 -1
- package/lib/components/editors/CubeNodeEditorRegistry.js +9 -1
- package/lib/components/editors/CubeNodeEditorRegistry.js.map +1 -1
- package/lib/components/editors/CubePivotEditor.d.ts +26 -0
- package/lib/components/editors/CubePivotEditor.d.ts.map +1 -0
- package/lib/components/editors/CubePivotEditor.js +93 -0
- package/lib/components/editors/CubePivotEditor.js.map +1 -0
- package/lib/components/editors/CubeRestrictEditor.d.ts.map +1 -1
- package/lib/components/editors/CubeRestrictEditor.js +2 -2
- package/lib/components/editors/CubeRestrictEditor.js.map +1 -1
- package/lib/components/editors/CubeServiceSourceEditor.d.ts +25 -0
- package/lib/components/editors/CubeServiceSourceEditor.d.ts.map +1 -0
- package/lib/components/editors/CubeServiceSourceEditor.js +41 -0
- package/lib/components/editors/CubeServiceSourceEditor.js.map +1 -0
- package/lib/components/grid/CubeColumnFormatDialog.d.ts +28 -0
- package/lib/components/grid/CubeColumnFormatDialog.d.ts.map +1 -0
- package/lib/components/grid/CubeColumnFormatDialog.js +94 -0
- package/lib/components/grid/CubeColumnFormatDialog.js.map +1 -0
- package/lib/components/grid/CubeDrilldownBar.d.ts +37 -0
- package/lib/components/grid/CubeDrilldownBar.d.ts.map +1 -0
- package/lib/components/grid/CubeDrilldownBar.js +77 -0
- package/lib/components/grid/CubeDrilldownBar.js.map +1 -0
- package/lib/components/grid/CubeGridRegion.d.ts.map +1 -1
- package/lib/components/grid/CubeGridRegion.js +40 -26
- package/lib/components/grid/CubeGridRegion.js.map +1 -1
- package/lib/components/grid/CubeGridValues.d.ts +31 -1
- package/lib/components/grid/CubeGridValues.d.ts.map +1 -1
- package/lib/components/grid/CubeGridValues.js +108 -1
- package/lib/components/grid/CubeGridValues.js.map +1 -1
- package/lib/components/grid/CubeResultGrid.d.ts +68 -5
- package/lib/components/grid/CubeResultGrid.d.ts.map +1 -1
- package/lib/components/grid/CubeResultGrid.js +308 -35
- package/lib/components/grid/CubeResultGrid.js.map +1 -1
- package/lib/components/grid/CubeRunStatsPanel.d.ts +28 -0
- package/lib/components/grid/CubeRunStatsPanel.d.ts.map +1 -0
- package/lib/components/grid/CubeRunStatsPanel.js +61 -0
- package/lib/components/grid/CubeRunStatsPanel.js.map +1 -0
- package/lib/components/grid/CubeServerSideGrid.d.ts +36 -0
- package/lib/components/grid/CubeServerSideGrid.d.ts.map +1 -0
- package/lib/components/grid/CubeServerSideGrid.js +114 -0
- package/lib/components/grid/CubeServerSideGrid.js.map +1 -0
- package/lib/components/grid/CubeSqlDialog.d.ts +24 -0
- package/lib/components/grid/CubeSqlDialog.d.ts.map +1 -0
- package/lib/components/grid/CubeSqlDialog.js +39 -0
- package/lib/components/grid/CubeSqlDialog.js.map +1 -0
- package/lib/components/grid/CubeSqlFormat.d.ts +20 -0
- package/lib/components/grid/CubeSqlFormat.d.ts.map +1 -0
- package/lib/components/grid/CubeSqlFormat.js +32 -0
- package/lib/components/grid/CubeSqlFormat.js.map +1 -0
- package/lib/components/palette/CubePalette.d.ts.map +1 -1
- package/lib/components/palette/CubePalette.js +32 -13
- package/lib/components/palette/CubePalette.js.map +1 -1
- package/lib/components/show-pure/CubeShowPureDialog.d.ts +4 -1
- package/lib/components/show-pure/CubeShowPureDialog.d.ts.map +1 -1
- package/lib/components/show-pure/CubeShowPureDialog.js +8 -4
- package/lib/components/show-pure/CubeShowPureDialog.js.map +1 -1
- package/lib/components/source-picker/CubeDataProductTab.d.ts.map +1 -1
- package/lib/components/source-picker/CubeDataProductTab.js +37 -16
- package/lib/components/source-picker/CubeDataProductTab.js.map +1 -1
- package/lib/components/source-picker/CubeDirectConnectionTab.d.ts.map +1 -1
- package/lib/components/source-picker/CubeDirectConnectionTab.js +6 -4
- package/lib/components/source-picker/CubeDirectConnectionTab.js.map +1 -1
- package/lib/components/source-picker/CubeFunctionSteps.d.ts +36 -0
- package/lib/components/source-picker/CubeFunctionSteps.d.ts.map +1 -0
- package/lib/components/source-picker/CubeFunctionSteps.js +76 -0
- package/lib/components/source-picker/CubeFunctionSteps.js.map +1 -0
- package/lib/components/source-picker/CubeIngestTab.d.ts.map +1 -1
- package/lib/components/source-picker/CubeIngestTab.js +39 -16
- package/lib/components/source-picker/CubeIngestTab.js.map +1 -1
- package/lib/components/source-picker/CubeInlineModelTab.d.ts +3 -2
- package/lib/components/source-picker/CubeInlineModelTab.d.ts.map +1 -1
- package/lib/components/source-picker/CubeInlineModelTab.js +23 -13
- package/lib/components/source-picker/CubeInlineModelTab.js.map +1 -1
- package/lib/components/source-picker/CubePickerListItem.d.ts +47 -0
- package/lib/components/source-picker/CubePickerListItem.d.ts.map +1 -0
- package/lib/components/source-picker/CubePickerListItem.js +62 -0
- package/lib/components/source-picker/CubePickerListItem.js.map +1 -0
- package/lib/components/source-picker/CubeProjectTab.d.ts +4 -3
- package/lib/components/source-picker/CubeProjectTab.d.ts.map +1 -1
- package/lib/components/source-picker/CubeProjectTab.js +7 -4
- package/lib/components/source-picker/CubeProjectTab.js.map +1 -1
- package/lib/components/source-picker/CubeServiceTab.d.ts +27 -0
- package/lib/components/source-picker/CubeServiceTab.d.ts.map +1 -0
- package/lib/components/source-picker/CubeServiceTab.js +36 -0
- package/lib/components/source-picker/CubeServiceTab.js.map +1 -0
- package/lib/components/source-picker/CubeSourcePicker.d.ts.map +1 -1
- package/lib/components/source-picker/CubeSourcePicker.js +16 -3
- package/lib/components/source-picker/CubeSourcePicker.js.map +1 -1
- package/lib/components/source-picker/CubeTablePreview.d.ts +29 -0
- package/lib/components/source-picker/CubeTablePreview.d.ts.map +1 -0
- package/lib/components/source-picker/CubeTablePreview.js +10 -0
- package/lib/components/source-picker/CubeTablePreview.js.map +1 -0
- package/lib/components/spec-transfer/CubeImportPureDialog.d.ts +27 -0
- package/lib/components/spec-transfer/CubeImportPureDialog.d.ts.map +1 -0
- package/lib/components/spec-transfer/CubeImportPureDialog.js +38 -0
- package/lib/components/spec-transfer/CubeImportPureDialog.js.map +1 -0
- package/lib/components/spec-transfer/CubeSpecTransferDialog.d.ts.map +1 -1
- package/lib/components/spec-transfer/CubeSpecTransferDialog.js +9 -3
- package/lib/components/spec-transfer/CubeSpecTransferDialog.js.map +1 -1
- package/lib/graph-manager/CubeDataProductCatalog.d.ts +10 -0
- package/lib/graph-manager/CubeDataProductCatalog.d.ts.map +1 -1
- package/lib/graph-manager/CubeDataProductCatalog.js.map +1 -1
- package/lib/graph-manager/CubeEngine.d.ts +46 -1
- package/lib/graph-manager/CubeEngine.d.ts.map +1 -1
- package/lib/graph-manager/CubeEngine.js.map +1 -1
- package/lib/graph-manager/CubeEngineClientSettings.d.ts +43 -0
- package/lib/graph-manager/CubeEngineClientSettings.d.ts.map +1 -0
- package/lib/graph-manager/CubeEngineClientSettings.js +51 -0
- package/lib/graph-manager/CubeEngineClientSettings.js.map +1 -0
- package/lib/graph-manager/CubeIngest.d.ts +5 -0
- package/lib/graph-manager/CubeIngest.d.ts.map +1 -1
- package/lib/graph-manager/CubeIngest.js +10 -0
- package/lib/graph-manager/CubeIngest.js.map +1 -1
- package/lib/graph-manager/CubeIngestCatalog.d.ts +26 -0
- package/lib/graph-manager/CubeIngestCatalog.d.ts.map +1 -1
- package/lib/graph-manager/CubeIngestCatalog.js +6 -0
- package/lib/graph-manager/CubeIngestCatalog.js.map +1 -1
- package/lib/graph-manager/CubeLakehouseRuntime.d.ts +29 -0
- package/lib/graph-manager/CubeLakehouseRuntime.d.ts.map +1 -0
- package/lib/graph-manager/CubeLakehouseRuntime.js +40 -0
- package/lib/graph-manager/CubeLakehouseRuntime.js.map +1 -0
- package/lib/graph-manager/CubeProjectCatalog.d.ts +3 -3
- package/lib/graph-manager/CubeService.d.ts +20 -0
- package/lib/graph-manager/CubeService.d.ts.map +1 -0
- package/lib/graph-manager/CubeService.js +22 -0
- package/lib/graph-manager/CubeService.js.map +1 -0
- package/lib/graph-manager/CubeServiceCatalog.d.ts +31 -0
- package/lib/graph-manager/CubeServiceCatalog.d.ts.map +1 -0
- package/lib/graph-manager/CubeServiceCatalog.js +17 -0
- package/lib/graph-manager/CubeServiceCatalog.js.map +1 -0
- package/lib/graph-manager/protocol/pure/CubeEngineBuilder.d.ts +52 -5
- package/lib/graph-manager/protocol/pure/CubeEngineBuilder.d.ts.map +1 -1
- package/lib/graph-manager/protocol/pure/CubeEngineBuilder.js +63 -5
- package/lib/graph-manager/protocol/pure/CubeEngineBuilder.js.map +1 -1
- package/lib/graph-manager/protocol/pure/v1/V1_CubeDataProductModel.d.ts +9 -6
- package/lib/graph-manager/protocol/pure/v1/V1_CubeDataProductModel.d.ts.map +1 -1
- package/lib/graph-manager/protocol/pure/v1/V1_CubeDataProductModel.js +12 -8
- package/lib/graph-manager/protocol/pure/v1/V1_CubeDataProductModel.js.map +1 -1
- package/lib/graph-manager/protocol/pure/v1/V1_CubeFunctionOutlineBuilder.d.ts +30 -0
- package/lib/graph-manager/protocol/pure/v1/V1_CubeFunctionOutlineBuilder.d.ts.map +1 -0
- package/lib/graph-manager/protocol/pure/v1/V1_CubeFunctionOutlineBuilder.js +229 -0
- package/lib/graph-manager/protocol/pure/v1/V1_CubeFunctionOutlineBuilder.js.map +1 -0
- package/lib/graph-manager/protocol/pure/v1/V1_CubeIngestDefinition.d.ts.map +1 -1
- package/lib/graph-manager/protocol/pure/v1/V1_CubeIngestDefinition.js +18 -9
- package/lib/graph-manager/protocol/pure/v1/V1_CubeIngestDefinition.js.map +1 -1
- package/lib/graph-manager/protocol/pure/v1/V1_CubeIngestModel.d.ts +4 -9
- package/lib/graph-manager/protocol/pure/v1/V1_CubeIngestModel.d.ts.map +1 -1
- package/lib/graph-manager/protocol/pure/v1/V1_CubeIngestModel.js +2 -1
- package/lib/graph-manager/protocol/pure/v1/V1_CubeIngestModel.js.map +1 -1
- package/lib/graph-manager/protocol/pure/v1/V1_CubeLambdaReader.d.ts +34 -0
- package/lib/graph-manager/protocol/pure/v1/V1_CubeLambdaReader.d.ts.map +1 -0
- package/lib/graph-manager/protocol/pure/v1/V1_CubeLambdaReader.js +332 -0
- package/lib/graph-manager/protocol/pure/v1/V1_CubeLambdaReader.js.map +1 -0
- package/lib/graph-manager/protocol/pure/v1/V1_CubeLambdaSerializer.d.ts.map +1 -1
- package/lib/graph-manager/protocol/pure/v1/V1_CubeLambdaSerializer.js +49 -10
- package/lib/graph-manager/protocol/pure/v1/V1_CubeLambdaSerializer.js.map +1 -1
- package/lib/graph-manager/protocol/pure/v1/V1_CubeModelOutlineBuilder.d.ts +1 -1
- package/lib/graph-manager/protocol/pure/v1/V1_CubeModelOutlineBuilder.d.ts.map +1 -1
- package/lib/graph-manager/protocol/pure/v1/V1_CubeModelOutlineBuilder.js +3 -1
- package/lib/graph-manager/protocol/pure/v1/V1_CubeModelOutlineBuilder.js.map +1 -1
- package/lib/graph-manager/protocol/pure/v1/V1_LegendCubeConnectionExplorer.d.ts +2 -1
- package/lib/graph-manager/protocol/pure/v1/V1_LegendCubeConnectionExplorer.d.ts.map +1 -1
- package/lib/graph-manager/protocol/pure/v1/V1_LegendCubeConnectionExplorer.js +2 -1
- package/lib/graph-manager/protocol/pure/v1/V1_LegendCubeConnectionExplorer.js.map +1 -1
- package/lib/graph-manager/protocol/pure/v1/V1_LegendCubeEngine.d.ts +18 -0
- package/lib/graph-manager/protocol/pure/v1/V1_LegendCubeEngine.d.ts.map +1 -1
- package/lib/graph-manager/protocol/pure/v1/V1_LegendCubeEngine.js +74 -6
- package/lib/graph-manager/protocol/pure/v1/V1_LegendCubeEngine.js.map +1 -1
- package/lib/graph-manager/protocol/pure/v1/V1_LegendCubeProjectCatalog.d.ts.map +1 -1
- package/lib/graph-manager/protocol/pure/v1/V1_LegendCubeProjectCatalog.js +7 -4
- package/lib/graph-manager/protocol/pure/v1/V1_LegendCubeProjectCatalog.js.map +1 -1
- package/lib/graph-manager/protocol/pure/v1/V1_LegendCubeServiceCatalog.d.ts +31 -0
- package/lib/graph-manager/protocol/pure/v1/V1_LegendCubeServiceCatalog.d.ts.map +1 -0
- package/lib/graph-manager/protocol/pure/v1/V1_LegendCubeServiceCatalog.js +69 -0
- package/lib/graph-manager/protocol/pure/v1/V1_LegendCubeServiceCatalog.js.map +1 -0
- package/lib/graph-manager/protocol/pure/v1/__test-utils__/V1_CubeEngineTestUtils.d.ts.map +1 -1
- package/lib/graph-manager/protocol/pure/v1/__test-utils__/V1_CubeEngineTestUtils.js +6 -2
- package/lib/graph-manager/protocol/pure/v1/__test-utils__/V1_CubeEngineTestUtils.js.map +1 -1
- package/lib/index.css +2 -2
- package/lib/index.css.map +1 -1
- package/lib/index.d.ts +12 -3
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +10 -1
- package/lib/index.js.map +1 -1
- package/lib/stores/CubeAddPlacement.d.ts +10 -3
- package/lib/stores/CubeAddPlacement.d.ts.map +1 -1
- package/lib/stores/CubeAddPlacement.js +16 -5
- package/lib/stores/CubeAddPlacement.js.map +1 -1
- package/lib/stores/CubeDevSettingsState.d.ts +47 -0
- package/lib/stores/CubeDevSettingsState.d.ts.map +1 -0
- package/lib/stores/CubeDevSettingsState.js +99 -0
- package/lib/stores/CubeDevSettingsState.js.map +1 -0
- package/lib/stores/CubeEditorState.d.ts +173 -43
- package/lib/stores/CubeEditorState.d.ts.map +1 -1
- package/lib/stores/CubeEditorState.js +498 -113
- package/lib/stores/CubeEditorState.js.map +1 -1
- package/lib/stores/CubeEngineChecks.d.ts +59 -0
- package/lib/stores/CubeEngineChecks.d.ts.map +1 -0
- package/lib/stores/CubeEngineChecks.js +100 -0
- package/lib/stores/CubeEngineChecks.js.map +1 -0
- package/lib/stores/CubeExamples.d.ts.map +1 -1
- package/lib/stores/CubeExamples.js +39 -2
- package/lib/stores/CubeExamples.js.map +1 -1
- package/lib/stores/CubeExamplesState.d.ts +1 -1
- package/lib/stores/CubeExamplesState.d.ts.map +1 -1
- package/lib/stores/CubeExamplesState.js +2 -2
- package/lib/stores/CubeExamplesState.js.map +1 -1
- package/lib/stores/CubeExecutionState.d.ts.map +1 -1
- package/lib/stores/CubeExecutionState.js +24 -33
- package/lib/stores/CubeExecutionState.js.map +1 -1
- package/lib/stores/CubeExportState.d.ts +41 -0
- package/lib/stores/CubeExportState.d.ts.map +1 -0
- package/lib/stores/CubeExportState.js +134 -0
- package/lib/stores/CubeExportState.js.map +1 -0
- package/lib/stores/CubeExpressionFilterCheck.d.ts +51 -0
- package/lib/stores/CubeExpressionFilterCheck.d.ts.map +1 -0
- package/lib/stores/CubeExpressionFilterCheck.js +134 -0
- package/lib/stores/CubeExpressionFilterCheck.js.map +1 -0
- package/lib/stores/CubeExtendTyping.d.ts +6 -14
- package/lib/stores/CubeExtendTyping.d.ts.map +1 -1
- package/lib/stores/CubeExtendTyping.js +6 -33
- package/lib/stores/CubeExtendTyping.js.map +1 -1
- package/lib/stores/CubeFunctionRecheck.d.ts +30 -0
- package/lib/stores/CubeFunctionRecheck.d.ts.map +1 -0
- package/lib/stores/CubeFunctionRecheck.js +67 -0
- package/lib/stores/CubeFunctionRecheck.js.map +1 -0
- package/lib/stores/CubeGridFetcher.d.ts +75 -0
- package/lib/stores/CubeGridFetcher.d.ts.map +1 -0
- package/lib/stores/CubeGridFetcher.js +197 -0
- package/lib/stores/CubeGridFetcher.js.map +1 -0
- package/lib/stores/CubeGridQuickActions.d.ts +18 -6
- package/lib/stores/CubeGridQuickActions.d.ts.map +1 -1
- package/lib/stores/CubeGridQuickActions.js +32 -12
- package/lib/stores/CubeGridQuickActions.js.map +1 -1
- package/lib/stores/CubeGridState.d.ts +136 -0
- package/lib/stores/CubeGridState.d.ts.map +1 -0
- package/lib/stores/CubeGridState.js +317 -0
- package/lib/stores/CubeGridState.js.map +1 -0
- package/lib/stores/CubeHost.d.ts +42 -0
- package/lib/stores/CubeHost.d.ts.map +1 -1
- package/lib/stores/CubeHost.js +4 -0
- package/lib/stores/CubeHost.js.map +1 -1
- package/lib/stores/CubeLambdaImportState.d.ts +118 -0
- package/lib/stores/CubeLambdaImportState.d.ts.map +1 -0
- package/lib/stores/CubeLambdaImportState.js +302 -0
- package/lib/stores/CubeLambdaImportState.js.map +1 -0
- package/lib/stores/CubeLambdaSources.d.ts +45 -0
- package/lib/stores/CubeLambdaSources.d.ts.map +1 -0
- package/lib/stores/CubeLambdaSources.js +261 -0
- package/lib/stores/CubeLambdaSources.js.map +1 -0
- package/lib/stores/CubeQueryRun.d.ts +59 -0
- package/lib/stores/CubeQueryRun.d.ts.map +1 -0
- package/lib/stores/CubeQueryRun.js +101 -0
- package/lib/stores/CubeQueryRun.js.map +1 -0
- package/lib/stores/CubeRunStatsState.d.ts +61 -0
- package/lib/stores/CubeRunStatsState.d.ts.map +1 -0
- package/lib/stores/CubeRunStatsState.js +54 -0
- package/lib/stores/CubeRunStatsState.js.map +1 -0
- package/lib/stores/CubeRunningStepLambda.d.ts +25 -0
- package/lib/stores/CubeRunningStepLambda.d.ts.map +1 -0
- package/lib/stores/CubeRunningStepLambda.js +45 -0
- package/lib/stores/CubeRunningStepLambda.js.map +1 -0
- package/lib/stores/CubeServiceRecheck.d.ts +29 -0
- package/lib/stores/CubeServiceRecheck.d.ts.map +1 -0
- package/lib/stores/CubeServiceRecheck.js +33 -0
- package/lib/stores/CubeServiceRecheck.js.map +1 -0
- package/lib/stores/CubeShowPureState.d.ts +14 -1
- package/lib/stores/CubeShowPureState.d.ts.map +1 -1
- package/lib/stores/CubeShowPureState.js +41 -11
- package/lib/stores/CubeShowPureState.js.map +1 -1
- package/lib/stores/CubeSourcePickerState.d.ts +20 -4
- package/lib/stores/CubeSourcePickerState.d.ts.map +1 -1
- package/lib/stores/CubeSourcePickerState.js +75 -14
- package/lib/stores/CubeSourcePickerState.js.map +1 -1
- package/lib/stores/LocalModelCatalog.d.ts.map +1 -1
- package/lib/stores/LocalModelCatalog.js +3 -1
- package/lib/stores/LocalModelCatalog.js.map +1 -1
- package/lib/stores/editors/CubeExpressionFilterDraft.d.ts +91 -0
- package/lib/stores/editors/CubeExpressionFilterDraft.d.ts.map +1 -0
- package/lib/stores/editors/CubeExpressionFilterDraft.js +254 -0
- package/lib/stores/editors/CubeExpressionFilterDraft.js.map +1 -0
- package/lib/stores/editors/CubeFunctionDraft.d.ts +34 -0
- package/lib/stores/editors/CubeFunctionDraft.d.ts.map +1 -0
- package/lib/stores/editors/CubeFunctionDraft.js +69 -0
- package/lib/stores/editors/CubeFunctionDraft.js.map +1 -0
- package/lib/stores/editors/CubeNodeDraftRegistry.d.ts +4 -2
- package/lib/stores/editors/CubeNodeDraftRegistry.d.ts.map +1 -1
- package/lib/stores/editors/CubeNodeDraftRegistry.js +20 -3
- package/lib/stores/editors/CubeNodeDraftRegistry.js.map +1 -1
- package/lib/stores/editors/CubePivotDraft.d.ts +93 -0
- package/lib/stores/editors/CubePivotDraft.d.ts.map +1 -0
- package/lib/stores/editors/CubePivotDraft.js +267 -0
- package/lib/stores/editors/CubePivotDraft.js.map +1 -0
- package/lib/stores/fixtures/CubeSalesDuckDbModel.d.ts +26 -0
- package/lib/stores/fixtures/CubeSalesDuckDbModel.d.ts.map +1 -0
- package/lib/stores/fixtures/CubeSalesDuckDbModel.js +46 -0
- package/lib/stores/fixtures/CubeSalesDuckDbModel.js.map +1 -0
- package/lib/stores/fixtures/CubeTradesModel.d.ts +4 -0
- package/lib/stores/fixtures/CubeTradesModel.d.ts.map +1 -1
- package/lib/stores/fixtures/CubeTradesModel.js +31 -1
- package/lib/stores/fixtures/CubeTradesModel.js.map +1 -1
- package/lib/stores/source-picker/CubeDataProductTabState.d.ts +34 -5
- package/lib/stores/source-picker/CubeDataProductTabState.d.ts.map +1 -1
- package/lib/stores/source-picker/CubeDataProductTabState.js +111 -26
- package/lib/stores/source-picker/CubeDataProductTabState.js.map +1 -1
- package/lib/stores/source-picker/CubeDirectConnectionTabState.d.ts +25 -2
- package/lib/stores/source-picker/CubeDirectConnectionTabState.d.ts.map +1 -1
- package/lib/stores/source-picker/CubeDirectConnectionTabState.js +183 -31
- package/lib/stores/source-picker/CubeDirectConnectionTabState.js.map +1 -1
- package/lib/stores/source-picker/CubeIngestTabState.d.ts +22 -9
- package/lib/stores/source-picker/CubeIngestTabState.d.ts.map +1 -1
- package/lib/stores/source-picker/CubeIngestTabState.js +84 -29
- package/lib/stores/source-picker/CubeIngestTabState.js.map +1 -1
- package/lib/stores/source-picker/CubeInlineModelTabState.d.ts +100 -4
- package/lib/stores/source-picker/CubeInlineModelTabState.d.ts.map +1 -1
- package/lib/stores/source-picker/CubeInlineModelTabState.js +415 -28
- package/lib/stores/source-picker/CubeInlineModelTabState.js.map +1 -1
- package/lib/stores/source-picker/CubeProjectTabState.d.ts +18 -3
- package/lib/stores/source-picker/CubeProjectTabState.d.ts.map +1 -1
- package/lib/stores/source-picker/CubeProjectTabState.js +26 -1
- package/lib/stores/source-picker/CubeProjectTabState.js.map +1 -1
- package/lib/stores/source-picker/CubeServiceTabState.d.ts +74 -0
- package/lib/stores/source-picker/CubeServiceTabState.d.ts.map +1 -0
- package/lib/stores/source-picker/CubeServiceTabState.js +216 -0
- package/lib/stores/source-picker/CubeServiceTabState.js.map +1 -0
- package/lib/stores/source-picker/CubeSourcePickerTab.d.ts +15 -3
- package/lib/stores/source-picker/CubeSourcePickerTab.d.ts.map +1 -1
- package/lib/stores/source-picker/CubeSourcePickerTab.js +21 -0
- package/lib/stores/source-picker/CubeSourcePickerTab.js.map +1 -1
- package/package.json +10 -9
- package/src/__lib__/LegendCubeCommand.ts +7 -0
- package/src/__lib__/LegendCubeFunctionLabels.ts +41 -0
- package/src/__lib__/LegendCubeHelpText.ts +23 -1
- package/src/__lib__/LegendCubeLabels.ts +170 -13
- package/src/__lib__/LegendCubeProjectSourceLabels.ts +26 -0
- package/src/__lib__/LegendCubeServiceLabels.ts +41 -0
- package/src/__lib__/LegendCubeTesting.ts +7 -0
- package/src/__test-utils__/CubeEngineTestSupport.ts +2 -1
- package/src/__test-utils__/CubeExpressionTestUtils.ts +29 -2
- package/src/__test-utils__/CubeFunctionTestOutline.ts +78 -0
- package/src/__test-utils__/CubeLambdaCorpus.ts +137 -0
- package/src/__test-utils__/CubePageTestUtils.tsx +34 -0
- package/src/__test-utils__/CubeTestApplication.ts +25 -0
- package/src/__test-utils__/FakeCubeEngine.ts +27 -0
- package/src/__test-utils__/FakeCubeIngestCatalog.ts +18 -0
- package/src/__test-utils__/FakeCubeServiceCatalog.ts +57 -0
- package/src/components/CubeAddItems.tsx +13 -6
- package/src/components/CubeDialogTheme.ts +25 -0
- package/src/components/CubeEditor.tsx +155 -129
- package/src/components/CubeFileMenu.tsx +127 -0
- package/src/components/CubeLambdaImportBanner.tsx +97 -0
- package/src/components/CubeNodeIcon.tsx +7 -0
- package/src/components/CubeSchemaColumnsTable.tsx +7 -2
- package/src/components/canvas/CubeCanvas.tsx +52 -13
- package/src/components/canvas/CubeCanvasContextMenu.tsx +33 -2
- package/src/components/canvas/CubeCanvasElements.ts +76 -3
- package/src/components/canvas/CubeCanvasLayout.ts +1 -1
- package/src/components/canvas/CubeCanvasNode.tsx +30 -3
- package/src/components/dev-settings/CubeDevSettings.tsx +154 -0
- package/src/components/editors/CubeColumnChecklist.tsx +8 -2
- package/src/components/editors/CubeColumnPicker.tsx +6 -3
- package/src/components/editors/CubeConcatEditor.tsx +2 -2
- package/src/components/editors/CubeExpressionFilterEditor.tsx +193 -0
- package/src/components/editors/CubeExtendEditor.tsx +3 -3
- package/src/components/editors/CubeFilterEditor.tsx +13 -1
- package/src/components/editors/CubeFunctionSourceEditor.tsx +140 -0
- package/src/components/editors/CubeJoinEditor.tsx +23 -4
- package/src/components/editors/CubeNodeEditorPanel.tsx +22 -10
- package/src/components/editors/CubeNodeEditorPopper.tsx +9 -1
- package/src/components/editors/CubeNodeEditorRegistry.ts +12 -0
- package/src/components/editors/CubePivotEditor.tsx +277 -0
- package/src/components/editors/CubeRestrictEditor.tsx +8 -2
- package/src/components/editors/CubeServiceSourceEditor.tsx +77 -0
- package/src/components/grid/CubeColumnFormatDialog.tsx +289 -0
- package/src/components/grid/CubeDrilldownBar.tsx +219 -0
- package/src/components/grid/CubeGridRegion.tsx +170 -54
- package/src/components/grid/CubeGridValues.ts +146 -1
- package/src/components/grid/CubeResultGrid.tsx +443 -41
- package/src/components/grid/CubeRunStatsPanel.tsx +156 -0
- package/src/components/grid/CubeServerSideGrid.tsx +200 -0
- package/src/components/grid/CubeSqlDialog.tsx +90 -0
- package/src/components/grid/CubeSqlFormat.ts +37 -0
- package/src/components/palette/CubePalette.tsx +45 -12
- package/src/components/show-pure/CubeShowPureDialog.tsx +19 -5
- package/src/components/source-picker/CubeDataProductTab.tsx +169 -75
- package/src/components/source-picker/CubeDirectConnectionTab.tsx +42 -30
- package/src/components/source-picker/CubeFunctionSteps.tsx +244 -0
- package/src/components/source-picker/CubeIngestTab.tsx +159 -79
- package/src/components/source-picker/CubeInlineModelTab.tsx +110 -81
- package/src/components/source-picker/CubePickerListItem.tsx +118 -0
- package/src/components/source-picker/CubeProjectTab.tsx +6 -3
- package/src/components/source-picker/CubeServiceTab.tsx +151 -0
- package/src/components/source-picker/CubeSourcePicker.tsx +54 -18
- package/src/components/source-picker/CubeTablePreview.tsx +49 -0
- package/src/components/spec-transfer/CubeImportPureDialog.tsx +122 -0
- package/src/components/spec-transfer/CubeSpecTransferDialog.tsx +21 -8
- package/src/graph-manager/CubeDataProductCatalog.ts +11 -0
- package/src/graph-manager/CubeEngine.ts +51 -1
- package/src/graph-manager/CubeEngineClientSettings.ts +64 -0
- package/src/graph-manager/CubeIngest.ts +15 -0
- package/src/graph-manager/CubeIngestCatalog.ts +33 -0
- package/src/graph-manager/CubeLakehouseRuntime.ts +43 -0
- package/src/graph-manager/CubeProjectCatalog.ts +3 -3
- package/src/graph-manager/CubeService.ts +29 -0
- package/src/graph-manager/CubeServiceCatalog.ts +35 -0
- package/src/graph-manager/protocol/pure/CubeEngineBuilder.ts +115 -5
- package/src/graph-manager/protocol/pure/v1/V1_CubeDataProductModel.ts +13 -7
- package/src/graph-manager/protocol/pure/v1/V1_CubeFunctionOutlineBuilder.ts +312 -0
- package/src/graph-manager/protocol/pure/v1/V1_CubeIngestDefinition.ts +35 -9
- package/src/graph-manager/protocol/pure/v1/V1_CubeIngestModel.ts +6 -15
- package/src/graph-manager/protocol/pure/v1/V1_CubeLambdaReader.ts +471 -0
- package/src/graph-manager/protocol/pure/v1/V1_CubeLambdaSerializer.ts +70 -15
- package/src/graph-manager/protocol/pure/v1/V1_CubeModelOutlineBuilder.ts +3 -1
- package/src/graph-manager/protocol/pure/v1/V1_LegendCubeConnectionExplorer.ts +7 -1
- package/src/graph-manager/protocol/pure/v1/V1_LegendCubeEngine.ts +122 -7
- package/src/graph-manager/protocol/pure/v1/V1_LegendCubeProjectCatalog.ts +9 -4
- package/src/graph-manager/protocol/pure/v1/V1_LegendCubeServiceCatalog.ts +92 -0
- package/src/graph-manager/protocol/pure/v1/__test-utils__/V1_CubeEngineTestUtils.ts +6 -1
- package/src/index.ts +32 -2
- package/src/stores/CubeAddPlacement.ts +25 -5
- package/src/stores/CubeDevSettingsState.ts +117 -0
- package/src/stores/CubeEditorState.ts +687 -197
- package/src/stores/CubeEngineChecks.ts +240 -0
- package/src/stores/CubeExamples.ts +70 -1
- package/src/stores/CubeExamplesState.ts +4 -2
- package/src/stores/CubeExecutionState.ts +26 -57
- package/src/stores/CubeExportState.ts +196 -0
- package/src/stores/CubeExpressionFilterCheck.ts +218 -0
- package/src/stores/CubeExtendTyping.ts +6 -46
- package/src/stores/CubeFunctionRecheck.ts +97 -0
- package/src/stores/CubeGridFetcher.ts +302 -0
- package/src/stores/CubeGridQuickActions.ts +33 -11
- package/src/stores/CubeGridState.ts +450 -0
- package/src/stores/CubeHost.ts +48 -0
- package/src/stores/CubeLambdaImportState.ts +434 -0
- package/src/stores/CubeLambdaSources.ts +390 -0
- package/src/stores/CubeQueryRun.ts +169 -0
- package/src/stores/CubeRunStatsState.ts +91 -0
- package/src/stores/CubeRunningStepLambda.ts +62 -0
- package/src/stores/CubeServiceRecheck.ts +53 -0
- package/src/stores/CubeShowPureState.ts +51 -12
- package/src/stores/CubeSourcePickerState.ts +89 -13
- package/src/stores/LocalModelCatalog.ts +6 -1
- package/src/stores/editors/CubeExpressionFilterDraft.ts +385 -0
- package/src/stores/editors/CubeFunctionDraft.ts +92 -0
- package/src/stores/editors/CubeNodeDraftRegistry.ts +27 -2
- package/src/stores/editors/CubePivotDraft.ts +355 -0
- package/src/stores/fixtures/CubeSalesDuckDbModel.ts +54 -0
- package/src/stores/fixtures/CubeTradesModel.ts +36 -1
- package/src/stores/source-picker/CubeDataProductTabState.ts +162 -35
- package/src/stores/source-picker/CubeDirectConnectionTabState.ts +246 -47
- package/src/stores/source-picker/CubeIngestTabState.ts +112 -38
- package/src/stores/source-picker/CubeInlineModelTabState.ts +514 -34
- package/src/stores/source-picker/CubeProjectTabState.ts +35 -3
- package/src/stores/source-picker/CubeServiceTabState.ts +288 -0
- package/src/stores/source-picker/CubeSourcePickerTab.ts +31 -2
- package/tsconfig.json +50 -0
|
@@ -0,0 +1,471 @@
|
|
|
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
|
+
aggregationColSpec,
|
|
19
|
+
collection,
|
|
20
|
+
colSpec,
|
|
21
|
+
colSpecArray,
|
|
22
|
+
CubeLambdaReadError,
|
|
23
|
+
dataProductAccessor,
|
|
24
|
+
elementPtr,
|
|
25
|
+
enumValue,
|
|
26
|
+
func,
|
|
27
|
+
genericType,
|
|
28
|
+
ingestAccessor,
|
|
29
|
+
lambda,
|
|
30
|
+
letBinding,
|
|
31
|
+
literal,
|
|
32
|
+
property,
|
|
33
|
+
relationType,
|
|
34
|
+
storeAccessor,
|
|
35
|
+
variable,
|
|
36
|
+
type IR,
|
|
37
|
+
type LiteralValue,
|
|
38
|
+
type RelationTypeColumn,
|
|
39
|
+
} from '@finos/legend-cube';
|
|
40
|
+
|
|
41
|
+
// V1 protocol lambda JSON → Cube IR (Import Pure, PLAN §11.18): the inverse
|
|
42
|
+
// of `V1_serializeCubeLambda`, tolerant of the shapes the engine's grammar
|
|
43
|
+
// gives the same Pure. Source information, multiplicities and the engine's
|
|
44
|
+
// function controls are ignored; numbers come as JS numbers, lossless numbers
|
|
45
|
+
// or strings, and are kept as their digits; `-5` comes as `minus(5)`. What
|
|
46
|
+
// Cube has no IR for is refused, by name.
|
|
47
|
+
|
|
48
|
+
export const V1_CUBE_LAMBDA_READER_MESSAGE = {
|
|
49
|
+
UNREADABLE: (what: string): string => `Cube can't read ${what} in a query.`,
|
|
50
|
+
NUMBER: (value: unknown): string =>
|
|
51
|
+
`Cube can't read the number ${String(value)} without losing digits.`,
|
|
52
|
+
ACCESSOR: (type: string): string =>
|
|
53
|
+
`Cube can't read the accessor #${type}{…}#: it reads #>{…}#, #P{…}# and #I{…}#.`,
|
|
54
|
+
ACCESSOR_PATH: (type: string): string =>
|
|
55
|
+
`The accessor #${type}{…}# doesn't name what it reads.`,
|
|
56
|
+
INGEST_METADATA:
|
|
57
|
+
"Cube reads an ingest data set's rows, not its metadata (#I{…}# with metadata).",
|
|
58
|
+
DATA_PRODUCT_PARAMETERS:
|
|
59
|
+
"Cube reads a data product's access points without parameters.",
|
|
60
|
+
LET_NAME: 'A let must name what it binds.',
|
|
61
|
+
};
|
|
62
|
+
|
|
63
|
+
type Json = Record<string, unknown>;
|
|
64
|
+
|
|
65
|
+
const isObject = (value: unknown): value is Json =>
|
|
66
|
+
typeof value === 'object' && value !== null && !Array.isArray(value);
|
|
67
|
+
|
|
68
|
+
const arrayOf = (value: unknown): readonly unknown[] =>
|
|
69
|
+
Array.isArray(value) ? value : [];
|
|
70
|
+
|
|
71
|
+
const stringOf = (value: unknown): string | undefined =>
|
|
72
|
+
typeof value === 'string' ? value : undefined;
|
|
73
|
+
|
|
74
|
+
/** A lossless number, as `parseLosslessJSON` gives one */
|
|
75
|
+
const isLosslessNumber = (
|
|
76
|
+
value: unknown,
|
|
77
|
+
): value is { isLosslessNumber: true; value: string } =>
|
|
78
|
+
isObject(value) &&
|
|
79
|
+
value.isLosslessNumber === true &&
|
|
80
|
+
typeof value.value === 'string';
|
|
81
|
+
|
|
82
|
+
/** A JS number or a lossless number, as a JS number: a multiplicity's bound */
|
|
83
|
+
const numberOf = (value: unknown): number | undefined =>
|
|
84
|
+
isLosslessNumber(value)
|
|
85
|
+
? Number(value.value)
|
|
86
|
+
: typeof value === 'number'
|
|
87
|
+
? value
|
|
88
|
+
: undefined;
|
|
89
|
+
|
|
90
|
+
/** A number literal's digits: a lossless number's text, a string, or a JS number short of losing digits */
|
|
91
|
+
const numberText = (
|
|
92
|
+
value: unknown,
|
|
93
|
+
kind: 'integer' | 'float' | 'decimal',
|
|
94
|
+
): string => {
|
|
95
|
+
if (isLosslessNumber(value)) {
|
|
96
|
+
return value.value;
|
|
97
|
+
}
|
|
98
|
+
if (typeof value === 'string' && value.trim()) {
|
|
99
|
+
return value.trim();
|
|
100
|
+
}
|
|
101
|
+
if (typeof value === 'number' && Number.isFinite(value)) {
|
|
102
|
+
if (kind === 'integer' && !Number.isSafeInteger(value)) {
|
|
103
|
+
throw new CubeLambdaReadError(
|
|
104
|
+
V1_CUBE_LAMBDA_READER_MESSAGE.NUMBER(value),
|
|
105
|
+
);
|
|
106
|
+
}
|
|
107
|
+
return String(value);
|
|
108
|
+
}
|
|
109
|
+
throw new CubeLambdaReadError(V1_CUBE_LAMBDA_READER_MESSAGE.NUMBER(value));
|
|
110
|
+
};
|
|
111
|
+
|
|
112
|
+
/** The protocol's literal types, with the `c`-prefixed names older protocol versions used */
|
|
113
|
+
const LITERAL_KINDS: Readonly<Record<string, LiteralValue['kind']>> = {
|
|
114
|
+
string: 'string',
|
|
115
|
+
cString: 'string',
|
|
116
|
+
boolean: 'boolean',
|
|
117
|
+
cBoolean: 'boolean',
|
|
118
|
+
integer: 'integer',
|
|
119
|
+
cInteger: 'integer',
|
|
120
|
+
float: 'float',
|
|
121
|
+
cFloat: 'float',
|
|
122
|
+
decimal: 'decimal',
|
|
123
|
+
cDecimal: 'decimal',
|
|
124
|
+
strictDate: 'strictDate',
|
|
125
|
+
cStrictDate: 'strictDate',
|
|
126
|
+
dateTime: 'dateTime',
|
|
127
|
+
cDateTime: 'dateTime',
|
|
128
|
+
};
|
|
129
|
+
|
|
130
|
+
const readLiteral = (kind: LiteralValue['kind'], json: Json): IR => {
|
|
131
|
+
const { value } = json;
|
|
132
|
+
switch (kind) {
|
|
133
|
+
case 'integer':
|
|
134
|
+
case 'float':
|
|
135
|
+
case 'decimal':
|
|
136
|
+
return literal({ kind, value: numberText(value, kind) });
|
|
137
|
+
case 'boolean':
|
|
138
|
+
if (typeof value !== 'boolean') {
|
|
139
|
+
throw new CubeLambdaReadError(
|
|
140
|
+
V1_CUBE_LAMBDA_READER_MESSAGE.UNREADABLE(
|
|
141
|
+
`the boolean ${String(value)}`,
|
|
142
|
+
),
|
|
143
|
+
);
|
|
144
|
+
}
|
|
145
|
+
return literal({ kind, value });
|
|
146
|
+
default:
|
|
147
|
+
if (typeof value !== 'string') {
|
|
148
|
+
throw new CubeLambdaReadError(
|
|
149
|
+
V1_CUBE_LAMBDA_READER_MESSAGE.UNREADABLE(
|
|
150
|
+
`the ${kind} ${String(value)}`,
|
|
151
|
+
),
|
|
152
|
+
);
|
|
153
|
+
}
|
|
154
|
+
return literal({ kind, value } as LiteralValue);
|
|
155
|
+
}
|
|
156
|
+
};
|
|
157
|
+
|
|
158
|
+
/** `-<number>`, which the engine's grammar gives as `minus(<number>)`, as the negative literal */
|
|
159
|
+
const negated = (ir: IR): IR | undefined => {
|
|
160
|
+
if (
|
|
161
|
+
ir.k !== 'literal' ||
|
|
162
|
+
(ir.value.kind !== 'integer' &&
|
|
163
|
+
ir.value.kind !== 'float' &&
|
|
164
|
+
ir.value.kind !== 'decimal')
|
|
165
|
+
) {
|
|
166
|
+
return undefined;
|
|
167
|
+
}
|
|
168
|
+
const text = ir.value.value;
|
|
169
|
+
return literal({
|
|
170
|
+
kind: ir.value.kind,
|
|
171
|
+
value: text.startsWith('-') ? text.slice(1) : `-${text}`,
|
|
172
|
+
});
|
|
173
|
+
};
|
|
174
|
+
|
|
175
|
+
/** A generic type's path and its integer parameters (`Varchar(15)`), from its JSON */
|
|
176
|
+
const readGenericType = (
|
|
177
|
+
json: unknown,
|
|
178
|
+
): Extract<IR, { readonly k: 'genericType' }> => {
|
|
179
|
+
const type = isObject(json) ? json : {};
|
|
180
|
+
const rawType = isObject(type.rawType) ? type.rawType : {};
|
|
181
|
+
const path = stringOf(rawType.fullPath) ?? stringOf(type.fullPath);
|
|
182
|
+
if (!path) {
|
|
183
|
+
throw new CubeLambdaReadError(
|
|
184
|
+
V1_CUBE_LAMBDA_READER_MESSAGE.UNREADABLE('a type without a name'),
|
|
185
|
+
);
|
|
186
|
+
}
|
|
187
|
+
const params = arrayOf(type.typeVariableValues).map((param) => {
|
|
188
|
+
const text = isObject(param) ? numberText(param.value, 'integer') : '';
|
|
189
|
+
const number = Number(text);
|
|
190
|
+
if (!Number.isSafeInteger(number)) {
|
|
191
|
+
throw new CubeLambdaReadError(
|
|
192
|
+
V1_CUBE_LAMBDA_READER_MESSAGE.UNREADABLE(`the type ${path}(${text})`),
|
|
193
|
+
);
|
|
194
|
+
}
|
|
195
|
+
return number;
|
|
196
|
+
});
|
|
197
|
+
return genericType(path, params);
|
|
198
|
+
};
|
|
199
|
+
|
|
200
|
+
/** A `genericTypeInstance`: a relation type (`@Relation<(…)>`) or a type (`@Integer`) */
|
|
201
|
+
const readTypeInstance = (json: Json): IR => {
|
|
202
|
+
const type = isObject(json.genericType) ? json.genericType : json;
|
|
203
|
+
const rawType = isObject(type.rawType) ? type.rawType : {};
|
|
204
|
+
const [argument] = arrayOf(type.typeArguments);
|
|
205
|
+
const argumentRawType =
|
|
206
|
+
isObject(argument) && isObject(argument.rawType)
|
|
207
|
+
? argument.rawType
|
|
208
|
+
: undefined;
|
|
209
|
+
if (
|
|
210
|
+
stringOf(rawType.fullPath) === 'Relation' &&
|
|
211
|
+
argumentRawType?._type === 'relationType'
|
|
212
|
+
) {
|
|
213
|
+
return relationType(
|
|
214
|
+
arrayOf(argumentRawType.columns).map((column): RelationTypeColumn => {
|
|
215
|
+
const value = isObject(column) ? column : {};
|
|
216
|
+
const name = stringOf(value.name);
|
|
217
|
+
if (name === undefined) {
|
|
218
|
+
throw new CubeLambdaReadError(
|
|
219
|
+
V1_CUBE_LAMBDA_READER_MESSAGE.UNREADABLE(
|
|
220
|
+
'a relation type column without a name',
|
|
221
|
+
),
|
|
222
|
+
);
|
|
223
|
+
}
|
|
224
|
+
const multiplicity = isObject(value.multiplicity)
|
|
225
|
+
? value.multiplicity
|
|
226
|
+
: {};
|
|
227
|
+
return {
|
|
228
|
+
name,
|
|
229
|
+
type: readGenericType(value.genericType),
|
|
230
|
+
nullable: numberOf(multiplicity.lowerBound) === 0,
|
|
231
|
+
};
|
|
232
|
+
}),
|
|
233
|
+
);
|
|
234
|
+
}
|
|
235
|
+
return readGenericType(type);
|
|
236
|
+
};
|
|
237
|
+
|
|
238
|
+
/** A column spec's value: `{name, function1?, function2?}` */
|
|
239
|
+
const readColSpec = (value: unknown): IR => {
|
|
240
|
+
const spec = isObject(value) ? value : {};
|
|
241
|
+
const name = stringOf(spec.name);
|
|
242
|
+
if (name === undefined) {
|
|
243
|
+
throw new CubeLambdaReadError(
|
|
244
|
+
V1_CUBE_LAMBDA_READER_MESSAGE.UNREADABLE('a column without a name'),
|
|
245
|
+
);
|
|
246
|
+
}
|
|
247
|
+
const fn1 = spec.function1 === undefined ? undefined : read(spec.function1);
|
|
248
|
+
const fn2 = spec.function2 === undefined ? undefined : read(spec.function2);
|
|
249
|
+
if (fn2 !== undefined) {
|
|
250
|
+
if (fn1 === undefined) {
|
|
251
|
+
throw new CubeLambdaReadError(
|
|
252
|
+
V1_CUBE_LAMBDA_READER_MESSAGE.UNREADABLE(
|
|
253
|
+
`the column ~${name}'s reduce without its map`,
|
|
254
|
+
),
|
|
255
|
+
);
|
|
256
|
+
}
|
|
257
|
+
return aggregationColSpec(name, fn1, fn2);
|
|
258
|
+
}
|
|
259
|
+
return colSpec(name, fn1);
|
|
260
|
+
};
|
|
261
|
+
|
|
262
|
+
const accessorPath = (value: unknown, type: string): string[] => {
|
|
263
|
+
const path = arrayOf(isObject(value) ? value.path : undefined);
|
|
264
|
+
if (!path.length || path.some((part) => typeof part !== 'string' || !part)) {
|
|
265
|
+
throw new CubeLambdaReadError(
|
|
266
|
+
V1_CUBE_LAMBDA_READER_MESSAGE.ACCESSOR_PATH(type),
|
|
267
|
+
);
|
|
268
|
+
}
|
|
269
|
+
return path as string[];
|
|
270
|
+
};
|
|
271
|
+
|
|
272
|
+
/** A `classInstance`: a column, a column list, or an accessor */
|
|
273
|
+
const readClassInstance = (json: Json): IR => {
|
|
274
|
+
const type = stringOf(json.type) ?? '';
|
|
275
|
+
const { value } = json;
|
|
276
|
+
switch (type) {
|
|
277
|
+
case 'colSpec':
|
|
278
|
+
return readColSpec(value);
|
|
279
|
+
case 'colSpecArray':
|
|
280
|
+
return colSpecArray(
|
|
281
|
+
arrayOf(isObject(value) ? value.colSpecs : undefined).map(readColSpec),
|
|
282
|
+
);
|
|
283
|
+
case '>': {
|
|
284
|
+
const path = accessorPath(value, type);
|
|
285
|
+
// a table of the default schema is `#>{db::Store.T}#`
|
|
286
|
+
if (path.length === 2) {
|
|
287
|
+
return storeAccessor([path[0] as string, 'default', path[1] as string]);
|
|
288
|
+
}
|
|
289
|
+
if (path.length !== 3) {
|
|
290
|
+
throw new CubeLambdaReadError(
|
|
291
|
+
V1_CUBE_LAMBDA_READER_MESSAGE.ACCESSOR_PATH(type),
|
|
292
|
+
);
|
|
293
|
+
}
|
|
294
|
+
return storeAccessor(path as [string, string, string]);
|
|
295
|
+
}
|
|
296
|
+
case 'P': {
|
|
297
|
+
const path = accessorPath(value, type);
|
|
298
|
+
if (path.length !== 2) {
|
|
299
|
+
throw new CubeLambdaReadError(
|
|
300
|
+
V1_CUBE_LAMBDA_READER_MESSAGE.ACCESSOR_PATH(type),
|
|
301
|
+
);
|
|
302
|
+
}
|
|
303
|
+
if (arrayOf(isObject(value) ? value.parameters : undefined).length) {
|
|
304
|
+
throw new CubeLambdaReadError(
|
|
305
|
+
V1_CUBE_LAMBDA_READER_MESSAGE.DATA_PRODUCT_PARAMETERS,
|
|
306
|
+
);
|
|
307
|
+
}
|
|
308
|
+
return dataProductAccessor(path as [string, string]);
|
|
309
|
+
}
|
|
310
|
+
case 'I': {
|
|
311
|
+
const path = accessorPath(value, type);
|
|
312
|
+
if (path.length !== 2) {
|
|
313
|
+
throw new CubeLambdaReadError(
|
|
314
|
+
V1_CUBE_LAMBDA_READER_MESSAGE.ACCESSOR_PATH(type),
|
|
315
|
+
);
|
|
316
|
+
}
|
|
317
|
+
if (isObject(value) && value.metadata === true) {
|
|
318
|
+
throw new CubeLambdaReadError(
|
|
319
|
+
V1_CUBE_LAMBDA_READER_MESSAGE.INGEST_METADATA,
|
|
320
|
+
);
|
|
321
|
+
}
|
|
322
|
+
return ingestAccessor(path as [string, string]);
|
|
323
|
+
}
|
|
324
|
+
default:
|
|
325
|
+
throw new CubeLambdaReadError(
|
|
326
|
+
V1_CUBE_LAMBDA_READER_MESSAGE.ACCESSOR(type),
|
|
327
|
+
);
|
|
328
|
+
}
|
|
329
|
+
};
|
|
330
|
+
|
|
331
|
+
const readFunction = (json: Json): IR => {
|
|
332
|
+
const name = stringOf(json.function);
|
|
333
|
+
if (!name) {
|
|
334
|
+
throw new CubeLambdaReadError(
|
|
335
|
+
V1_CUBE_LAMBDA_READER_MESSAGE.UNREADABLE('a function without a name'),
|
|
336
|
+
);
|
|
337
|
+
}
|
|
338
|
+
const params = arrayOf(json.parameters);
|
|
339
|
+
if (name === 'letFunction' && params.length === 2) {
|
|
340
|
+
const [nameJson, value] = params;
|
|
341
|
+
const letName = isObject(nameJson) ? stringOf(nameJson.value) : undefined;
|
|
342
|
+
if (!letName) {
|
|
343
|
+
throw new CubeLambdaReadError(V1_CUBE_LAMBDA_READER_MESSAGE.LET_NAME);
|
|
344
|
+
}
|
|
345
|
+
return letBinding(letName, read(value));
|
|
346
|
+
}
|
|
347
|
+
const parameters = params.map(read);
|
|
348
|
+
const [only] = parameters;
|
|
349
|
+
if (name === 'minus' && parameters.length === 1 && only?.k !== 'collection') {
|
|
350
|
+
const negative = negated(only as IR);
|
|
351
|
+
if (negative) {
|
|
352
|
+
return negative;
|
|
353
|
+
}
|
|
354
|
+
}
|
|
355
|
+
return func(name, parameters);
|
|
356
|
+
};
|
|
357
|
+
|
|
358
|
+
function read(json: unknown): IR {
|
|
359
|
+
if (!isObject(json)) {
|
|
360
|
+
throw new CubeLambdaReadError(
|
|
361
|
+
V1_CUBE_LAMBDA_READER_MESSAGE.UNREADABLE(
|
|
362
|
+
Array.isArray(json) ? 'a list where a value is expected' : String(json),
|
|
363
|
+
),
|
|
364
|
+
);
|
|
365
|
+
}
|
|
366
|
+
const type = stringOf(json._type) ?? '';
|
|
367
|
+
const literalKind = LITERAL_KINDS[type];
|
|
368
|
+
if (literalKind) {
|
|
369
|
+
return readLiteral(literalKind, json);
|
|
370
|
+
}
|
|
371
|
+
switch (type) {
|
|
372
|
+
case 'lambda':
|
|
373
|
+
return lambda(
|
|
374
|
+
arrayOf(json.parameters).map((parameter) => {
|
|
375
|
+
const name = isObject(parameter)
|
|
376
|
+
? stringOf(parameter.name)
|
|
377
|
+
: undefined;
|
|
378
|
+
if (!name) {
|
|
379
|
+
throw new CubeLambdaReadError(
|
|
380
|
+
V1_CUBE_LAMBDA_READER_MESSAGE.UNREADABLE(
|
|
381
|
+
'a lambda parameter without a name',
|
|
382
|
+
),
|
|
383
|
+
);
|
|
384
|
+
}
|
|
385
|
+
return name;
|
|
386
|
+
}),
|
|
387
|
+
arrayOf(json.body).map(read),
|
|
388
|
+
);
|
|
389
|
+
case 'func':
|
|
390
|
+
return readFunction(json);
|
|
391
|
+
case 'property': {
|
|
392
|
+
const name = stringOf(json.property);
|
|
393
|
+
const [receiver] = arrayOf(json.parameters);
|
|
394
|
+
if (!name || receiver === undefined) {
|
|
395
|
+
throw new CubeLambdaReadError(
|
|
396
|
+
V1_CUBE_LAMBDA_READER_MESSAGE.UNREADABLE(
|
|
397
|
+
'a property without its owner',
|
|
398
|
+
),
|
|
399
|
+
);
|
|
400
|
+
}
|
|
401
|
+
// `JoinKind.INNER`: an enumeration's value
|
|
402
|
+
if (isObject(receiver) && receiver._type === 'packageableElementPtr') {
|
|
403
|
+
const enumPath = stringOf(receiver.fullPath);
|
|
404
|
+
if (enumPath) {
|
|
405
|
+
return enumValue(enumPath, name);
|
|
406
|
+
}
|
|
407
|
+
}
|
|
408
|
+
return property(read(receiver), name);
|
|
409
|
+
}
|
|
410
|
+
case 'enumValue': {
|
|
411
|
+
const enumPath = stringOf(json.fullPath);
|
|
412
|
+
const value = stringOf(json.value);
|
|
413
|
+
if (!enumPath || !value) {
|
|
414
|
+
throw new CubeLambdaReadError(
|
|
415
|
+
V1_CUBE_LAMBDA_READER_MESSAGE.UNREADABLE(
|
|
416
|
+
'an enumeration value without its enumeration',
|
|
417
|
+
),
|
|
418
|
+
);
|
|
419
|
+
}
|
|
420
|
+
return enumValue(enumPath, value);
|
|
421
|
+
}
|
|
422
|
+
case 'var': {
|
|
423
|
+
const name = stringOf(json.name);
|
|
424
|
+
if (!name) {
|
|
425
|
+
throw new CubeLambdaReadError(
|
|
426
|
+
V1_CUBE_LAMBDA_READER_MESSAGE.UNREADABLE('a variable without a name'),
|
|
427
|
+
);
|
|
428
|
+
}
|
|
429
|
+
return variable(name);
|
|
430
|
+
}
|
|
431
|
+
case 'collection':
|
|
432
|
+
return collection(arrayOf(json.values).map(read));
|
|
433
|
+
case 'classInstance':
|
|
434
|
+
return readClassInstance(json);
|
|
435
|
+
case 'packageableElementPtr': {
|
|
436
|
+
const path = stringOf(json.fullPath);
|
|
437
|
+
if (!path) {
|
|
438
|
+
throw new CubeLambdaReadError(
|
|
439
|
+
V1_CUBE_LAMBDA_READER_MESSAGE.UNREADABLE('an element without a path'),
|
|
440
|
+
);
|
|
441
|
+
}
|
|
442
|
+
return elementPtr(path);
|
|
443
|
+
}
|
|
444
|
+
case 'genericTypeInstance':
|
|
445
|
+
return readTypeInstance(json);
|
|
446
|
+
default:
|
|
447
|
+
throw new CubeLambdaReadError(
|
|
448
|
+
V1_CUBE_LAMBDA_READER_MESSAGE.UNREADABLE(
|
|
449
|
+
type ? `a ${type}` : 'a value of no type',
|
|
450
|
+
),
|
|
451
|
+
);
|
|
452
|
+
}
|
|
453
|
+
}
|
|
454
|
+
|
|
455
|
+
/**
|
|
456
|
+
* The IR of a lambda's protocol JSON, as Cube serializes one or as the
|
|
457
|
+
* engine's grammar gives one (Import Pure, PLAN §11.18). Throws a
|
|
458
|
+
* `CubeLambdaReadError` naming what Cube has no IR for.
|
|
459
|
+
*/
|
|
460
|
+
export const V1_readCubeLambda = (json: unknown): IR => {
|
|
461
|
+
const ir = read(json);
|
|
462
|
+
if (ir.k !== 'lambda') {
|
|
463
|
+
throw new CubeLambdaReadError(
|
|
464
|
+
V1_CUBE_LAMBDA_READER_MESSAGE.UNREADABLE('a value that is not a lambda'),
|
|
465
|
+
);
|
|
466
|
+
}
|
|
467
|
+
return ir;
|
|
468
|
+
};
|
|
469
|
+
|
|
470
|
+
/** The IR of any value specification's JSON, e.g. an expression's lambda a step stores */
|
|
471
|
+
export const V1_readCubeValueSpecification = (json: unknown): IR => read(json);
|
|
@@ -19,8 +19,10 @@ import { parseLosslessJSON, type PlainObject } from '@finos/legend-shared';
|
|
|
19
19
|
|
|
20
20
|
// Cube IR → V1 protocol lambda JSON (PLAN §8.3, §8.5), built as plain JSON,
|
|
21
21
|
// never through legend-graph's value-specification classes, whose serializer
|
|
22
|
-
// drops `sourceInformation`.
|
|
23
|
-
// request body must be written with `stringifyLosslessJSON
|
|
22
|
+
// drops `sourceInformation`. Integers and floats are lossless number values,
|
|
23
|
+
// so the request body must be written with `stringifyLosslessJSON`; decimals
|
|
24
|
+
// are strings, which the engine reads as `BigDecimal` with every digit, where
|
|
25
|
+
// a JSON number goes through a double (PLAN §11.10, ISSUES.md).
|
|
24
26
|
|
|
25
27
|
/** The prefix of the source ids Cube stamps, `cube:<nodeId>:<role>` */
|
|
26
28
|
export const V1_CUBE_SOURCE_ID_PREFIX = 'cube:';
|
|
@@ -58,14 +60,26 @@ const stamped = (json: PlainObject, origin: Origin | undefined): PlainObject =>
|
|
|
58
60
|
}
|
|
59
61
|
: json;
|
|
60
62
|
|
|
61
|
-
/** A
|
|
62
|
-
const
|
|
63
|
+
/** A numeric literal's text, checked to be a JSON number */
|
|
64
|
+
const checkNumberText = (text: string): string => {
|
|
63
65
|
if (!NUMBER_TOKEN.test(text)) {
|
|
64
66
|
throw new Error(`"${text}" is not a number Cube can send`);
|
|
65
67
|
}
|
|
66
|
-
return
|
|
68
|
+
return text;
|
|
67
69
|
};
|
|
68
70
|
|
|
71
|
+
/** A lossless JSON number for a numeric literal's text, written digit for digit */
|
|
72
|
+
const numberToken = (text: string): unknown =>
|
|
73
|
+
parseLosslessJSON(checkNumberText(text));
|
|
74
|
+
|
|
75
|
+
/**
|
|
76
|
+
* A numeric literal's value as the engine reads it without loss: a decimal's
|
|
77
|
+
* as its text, which the engine reads as a `BigDecimal` (a JSON number loses
|
|
78
|
+
* the digits past a double's), an integer's or a float's as a JSON number
|
|
79
|
+
*/
|
|
80
|
+
const numberValue = (type: 'integer' | 'float' | 'decimal', text: string) =>
|
|
81
|
+
type === 'decimal' ? checkNumberText(text) : numberToken(text);
|
|
82
|
+
|
|
69
83
|
/** The literal types whose value is a number, which Cube keeps as its digit string in an expression's JSON */
|
|
70
84
|
const NUMBER_LITERAL_TYPES: readonly unknown[] = [
|
|
71
85
|
'integer',
|
|
@@ -99,11 +113,28 @@ const serializeLambdaJson = (
|
|
|
99
113
|
NUMBER_LITERAL_TYPES.includes(object._type) &&
|
|
100
114
|
typeof object.value === 'string'
|
|
101
115
|
) {
|
|
102
|
-
object.value =
|
|
116
|
+
object.value = numberValue(
|
|
117
|
+
object._type as 'integer' | 'float' | 'decimal',
|
|
118
|
+
object.value,
|
|
119
|
+
);
|
|
103
120
|
}
|
|
104
121
|
return typeof object._type === 'string' ? stamped(object, origin) : object;
|
|
105
122
|
};
|
|
106
123
|
|
|
124
|
+
/** A type's JSON: its path, and its parameters as integers, e.g. `Varchar(15)` */
|
|
125
|
+
const genericTypeJson = (
|
|
126
|
+
path: string,
|
|
127
|
+
params: readonly number[] | undefined,
|
|
128
|
+
origin: Origin | undefined,
|
|
129
|
+
): PlainObject => ({
|
|
130
|
+
rawType: { _type: 'packageableType', fullPath: path },
|
|
131
|
+
typeArguments: [],
|
|
132
|
+
multiplicityArguments: [],
|
|
133
|
+
typeVariableValues: (params ?? []).map((param) =>
|
|
134
|
+
stamped({ _type: 'integer', value: numberToken(String(param)) }, origin),
|
|
135
|
+
),
|
|
136
|
+
});
|
|
137
|
+
|
|
107
138
|
const serializeLiteral = (value: LiteralValue): PlainObject => {
|
|
108
139
|
switch (value.kind) {
|
|
109
140
|
case 'string':
|
|
@@ -114,7 +145,7 @@ const serializeLiteral = (value: LiteralValue): PlainObject => {
|
|
|
114
145
|
case 'integer':
|
|
115
146
|
case 'float':
|
|
116
147
|
case 'decimal':
|
|
117
|
-
return { _type: value.kind, value:
|
|
148
|
+
return { _type: value.kind, value: numberValue(value.kind, value.value) };
|
|
118
149
|
case 'enum':
|
|
119
150
|
// enumeration values are emitted as `enumValue`, with their enumeration
|
|
120
151
|
throw new Error(
|
|
@@ -261,19 +292,43 @@ const serialize = (ir: IR, inherited: Origin | undefined): PlainObject => {
|
|
|
261
292
|
inherited,
|
|
262
293
|
);
|
|
263
294
|
case 'genericType':
|
|
295
|
+
return stamped(
|
|
296
|
+
{
|
|
297
|
+
_type: 'genericTypeInstance',
|
|
298
|
+
genericType: genericTypeJson(ir.path, ir.params, inherited),
|
|
299
|
+
},
|
|
300
|
+
inherited,
|
|
301
|
+
);
|
|
302
|
+
case 'relationType':
|
|
264
303
|
return stamped(
|
|
265
304
|
{
|
|
266
305
|
_type: 'genericTypeInstance',
|
|
267
306
|
genericType: {
|
|
268
|
-
rawType: { _type: 'packageableType', fullPath:
|
|
269
|
-
typeArguments: [
|
|
307
|
+
rawType: { _type: 'packageableType', fullPath: 'Relation' },
|
|
308
|
+
typeArguments: [
|
|
309
|
+
{
|
|
310
|
+
rawType: {
|
|
311
|
+
_type: 'relationType',
|
|
312
|
+
columns: ir.columns.map(({ name, type, nullable }) => ({
|
|
313
|
+
name,
|
|
314
|
+
genericType: genericTypeJson(
|
|
315
|
+
type.path,
|
|
316
|
+
type.params,
|
|
317
|
+
inherited,
|
|
318
|
+
),
|
|
319
|
+
multiplicity: {
|
|
320
|
+
lowerBound: nullable ? 0 : 1,
|
|
321
|
+
upperBound: 1,
|
|
322
|
+
},
|
|
323
|
+
})),
|
|
324
|
+
},
|
|
325
|
+
typeArguments: [],
|
|
326
|
+
multiplicityArguments: [],
|
|
327
|
+
typeVariableValues: [],
|
|
328
|
+
},
|
|
329
|
+
],
|
|
270
330
|
multiplicityArguments: [],
|
|
271
|
-
typeVariableValues:
|
|
272
|
-
stamped(
|
|
273
|
-
{ _type: 'integer', value: numberToken(String(param)) },
|
|
274
|
-
inherited,
|
|
275
|
-
),
|
|
276
|
-
),
|
|
331
|
+
typeVariableValues: [],
|
|
277
332
|
},
|
|
278
333
|
},
|
|
279
334
|
inherited,
|
|
@@ -25,6 +25,7 @@ import {
|
|
|
25
25
|
type CubeOutlineSchema,
|
|
26
26
|
type CubeOutlineTable,
|
|
27
27
|
} from '../../../CubeEngine.js';
|
|
28
|
+
import { V1_buildCubeFunctionOutlines } from './V1_CubeFunctionOutlineBuilder.js';
|
|
28
29
|
|
|
29
30
|
// The databases and runtimes of a parsed model (`{_type: 'data', elements}`),
|
|
30
31
|
// for the source picker (PLAN §6.2.3-§6.2.6). Read as plain JSON: only names,
|
|
@@ -212,7 +213,7 @@ const buildRuntime = (
|
|
|
212
213
|
};
|
|
213
214
|
};
|
|
214
215
|
|
|
215
|
-
/** The outline of a parsed model: its Database elements and its
|
|
216
|
+
/** The outline of a parsed model: its Database elements, its readable runtimes and its functions that return a relation, in model order */
|
|
216
217
|
export const V1_buildCubeModelOutline = (
|
|
217
218
|
modelData: PlainObject,
|
|
218
219
|
): CubeModelOutline => {
|
|
@@ -239,5 +240,6 @@ export const V1_buildCubeModelOutline = (
|
|
|
239
240
|
.filter(
|
|
240
241
|
(runtime): runtime is CubeOutlineRuntime => runtime !== undefined,
|
|
241
242
|
),
|
|
243
|
+
functions: V1_buildCubeFunctionOutlines(elements),
|
|
242
244
|
};
|
|
243
245
|
};
|
|
@@ -37,6 +37,7 @@ import {
|
|
|
37
37
|
V1_readExploredTables,
|
|
38
38
|
V1_toCubeExplorationError,
|
|
39
39
|
} from './V1_CubeSchemaExploration.js';
|
|
40
|
+
import type { CubeEngineClientSettings } from '../../../CubeEngineClientSettings.js';
|
|
40
41
|
import type { V1_CubeEngineConfig } from './V1_LegendCubeEngine.js';
|
|
41
42
|
|
|
42
43
|
/** Where the engine puts the Database it reads for the picker: never saved */
|
|
@@ -50,9 +51,14 @@ const EXPLORED_DATABASE = { package: 'cube::explored', name: 'Database' };
|
|
|
50
51
|
export class V1_LegendCubeConnectionExplorer implements CubeConnectionExplorer {
|
|
51
52
|
readonly client: V1_EngineServerClient;
|
|
52
53
|
|
|
53
|
-
constructor(
|
|
54
|
+
constructor(
|
|
55
|
+
config: V1_CubeEngineConfig,
|
|
56
|
+
tracerService: TracerService,
|
|
57
|
+
clientSettings?: CubeEngineClientSettings,
|
|
58
|
+
) {
|
|
54
59
|
this.client = new V1_EngineServerClient(config);
|
|
55
60
|
this.client.setTracerService(tracerService);
|
|
61
|
+
clientSettings?.register(this.client);
|
|
56
62
|
}
|
|
57
63
|
|
|
58
64
|
buildConnection(draft: CubeConnectionDraft): CubeDirectConnection {
|