@finos/legend-cube-builder 0.0.3 → 0.0.4
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 +52 -19
- package/docs/adding-an-operation.md +102 -13
- package/docs/hosting.md +82 -4
- package/docs/testing.md +114 -9
- package/lib/__lib__/LegendCubeCommand.d.ts +2 -1
- package/lib/__lib__/LegendCubeCommand.d.ts.map +1 -1
- package/lib/__lib__/LegendCubeCommand.js +5 -0
- package/lib/__lib__/LegendCubeCommand.js.map +1 -1
- package/lib/__lib__/LegendCubeDataProductLabels.d.ts +45 -0
- package/lib/__lib__/LegendCubeDataProductLabels.d.ts.map +1 -0
- package/lib/__lib__/LegendCubeDataProductLabels.js +60 -0
- package/lib/__lib__/LegendCubeDataProductLabels.js.map +1 -0
- package/lib/__lib__/LegendCubeDirectConnectionLabels.d.ts +56 -0
- package/lib/__lib__/LegendCubeDirectConnectionLabels.d.ts.map +1 -0
- package/lib/__lib__/LegendCubeDirectConnectionLabels.js +76 -0
- package/lib/__lib__/LegendCubeDirectConnectionLabels.js.map +1 -0
- package/lib/__lib__/LegendCubeHelpText.d.ts.map +1 -1
- package/lib/__lib__/LegendCubeHelpText.js +12 -2
- package/lib/__lib__/LegendCubeHelpText.js.map +1 -1
- package/lib/__lib__/LegendCubeIngestLabels.d.ts +25 -0
- package/lib/__lib__/LegendCubeIngestLabels.d.ts.map +1 -0
- package/lib/__lib__/LegendCubeIngestLabels.js +29 -0
- package/lib/__lib__/LegendCubeIngestLabels.js.map +1 -0
- package/lib/__lib__/LegendCubeLabels.d.ts +76 -3
- package/lib/__lib__/LegendCubeLabels.d.ts.map +1 -1
- package/lib/__lib__/LegendCubeLabels.js +102 -4
- package/lib/__lib__/LegendCubeLabels.js.map +1 -1
- package/lib/__lib__/LegendCubeProjectLabels.d.ts +22 -0
- package/lib/__lib__/LegendCubeProjectLabels.d.ts.map +1 -0
- package/lib/__lib__/LegendCubeProjectLabels.js +23 -0
- package/lib/__lib__/LegendCubeProjectLabels.js.map +1 -0
- package/lib/__lib__/LegendCubeTesting.d.ts +1 -0
- package/lib/__lib__/LegendCubeTesting.d.ts.map +1 -1
- package/lib/__lib__/LegendCubeTesting.js +1 -0
- package/lib/__lib__/LegendCubeTesting.js.map +1 -1
- package/lib/__test-utils__/CubeCanvasTestUtils.d.ts.map +1 -1
- package/lib/__test-utils__/CubeCanvasTestUtils.js +1 -1
- package/lib/__test-utils__/CubeCanvasTestUtils.js.map +1 -1
- package/lib/__test-utils__/CubeConnectionTestSupport.d.ts +22 -0
- package/lib/__test-utils__/CubeConnectionTestSupport.d.ts.map +1 -0
- package/lib/__test-utils__/CubeConnectionTestSupport.js +30 -0
- package/lib/__test-utils__/CubeConnectionTestSupport.js.map +1 -0
- package/lib/__test-utils__/CubeDirectConnectionFixtures.d.ts +31 -0
- package/lib/__test-utils__/CubeDirectConnectionFixtures.d.ts.map +1 -0
- package/lib/__test-utils__/CubeDirectConnectionFixtures.js +63 -0
- package/lib/__test-utils__/CubeDirectConnectionFixtures.js.map +1 -0
- package/lib/__test-utils__/CubeEngineTestSupport.d.ts +12 -0
- package/lib/__test-utils__/CubeEngineTestSupport.d.ts.map +1 -1
- package/lib/__test-utils__/CubeEngineTestSupport.js +21 -0
- package/lib/__test-utils__/CubeEngineTestSupport.js.map +1 -1
- package/lib/__test-utils__/CubeExpressionTestUtils.d.ts +37 -0
- package/lib/__test-utils__/CubeExpressionTestUtils.d.ts.map +1 -0
- package/lib/__test-utils__/CubeExpressionTestUtils.js +83 -0
- package/lib/__test-utils__/CubeExpressionTestUtils.js.map +1 -0
- package/lib/__test-utils__/CubeOperationsTestUtils.d.ts +25 -0
- package/lib/__test-utils__/CubeOperationsTestUtils.d.ts.map +1 -1
- package/lib/__test-utils__/CubeOperationsTestUtils.js +56 -10
- package/lib/__test-utils__/CubeOperationsTestUtils.js.map +1 -1
- package/lib/__test-utils__/CubePageTestUtils.d.ts +12 -0
- package/lib/__test-utils__/CubePageTestUtils.d.ts.map +1 -1
- package/lib/__test-utils__/CubePageTestUtils.js +25 -1
- package/lib/__test-utils__/CubePageTestUtils.js.map +1 -1
- package/lib/__test-utils__/CubeTestApplication.d.ts +5 -1
- package/lib/__test-utils__/CubeTestApplication.d.ts.map +1 -1
- package/lib/__test-utils__/CubeTestApplication.js +9 -1
- package/lib/__test-utils__/CubeTestApplication.js.map +1 -1
- package/lib/__test-utils__/FakeCubeConnectionExplorer.d.ts +33 -0
- package/lib/__test-utils__/FakeCubeConnectionExplorer.d.ts.map +1 -0
- package/lib/__test-utils__/FakeCubeConnectionExplorer.js +67 -0
- package/lib/__test-utils__/FakeCubeConnectionExplorer.js.map +1 -0
- package/lib/__test-utils__/FakeCubeDataProductCatalog.d.ts +45 -0
- package/lib/__test-utils__/FakeCubeDataProductCatalog.d.ts.map +1 -0
- package/lib/__test-utils__/FakeCubeDataProductCatalog.js +137 -0
- package/lib/__test-utils__/FakeCubeDataProductCatalog.js.map +1 -0
- package/lib/__test-utils__/FakeCubeEngine.d.ts +2 -0
- package/lib/__test-utils__/FakeCubeEngine.d.ts.map +1 -1
- package/lib/__test-utils__/FakeCubeEngine.js +14 -1
- package/lib/__test-utils__/FakeCubeEngine.js.map +1 -1
- package/lib/__test-utils__/FakeCubeIngestCatalog.d.ts +35 -0
- package/lib/__test-utils__/FakeCubeIngestCatalog.d.ts.map +1 -0
- package/lib/__test-utils__/FakeCubeIngestCatalog.js +107 -0
- package/lib/__test-utils__/FakeCubeIngestCatalog.js.map +1 -0
- package/lib/__test-utils__/FakeCubeProjectCatalog.d.ts +30 -0
- package/lib/__test-utils__/FakeCubeProjectCatalog.d.ts.map +1 -0
- package/lib/__test-utils__/FakeCubeProjectCatalog.js +64 -0
- package/lib/__test-utils__/FakeCubeProjectCatalog.js.map +1 -0
- package/lib/components/CubeAddItems.d.ts +35 -0
- package/lib/components/CubeAddItems.d.ts.map +1 -0
- package/lib/components/CubeAddItems.js +82 -0
- package/lib/components/CubeAddItems.js.map +1 -0
- package/lib/components/CubeEditor.d.ts +5 -1
- package/lib/components/CubeEditor.d.ts.map +1 -1
- package/lib/components/CubeEditor.js +33 -13
- package/lib/components/CubeEditor.js.map +1 -1
- package/lib/components/CubeEntrySourceBanner.d.ts +23 -0
- package/lib/components/CubeEntrySourceBanner.d.ts.map +1 -0
- package/lib/components/CubeEntrySourceBanner.js +32 -0
- package/lib/components/CubeEntrySourceBanner.js.map +1 -0
- package/lib/components/CubeNodeIcon.d.ts.map +1 -1
- package/lib/components/CubeNodeIcon.js +8 -1
- package/lib/components/CubeNodeIcon.js.map +1 -1
- package/lib/components/CubeSchemaColumnsTable.d.ts +21 -0
- package/lib/components/CubeSchemaColumnsTable.d.ts.map +1 -0
- package/lib/components/CubeSchemaColumnsTable.js +6 -0
- package/lib/components/CubeSchemaColumnsTable.js.map +1 -0
- package/lib/components/canvas/CubeCanvas.d.ts +4 -3
- package/lib/components/canvas/CubeCanvas.d.ts.map +1 -1
- package/lib/components/canvas/CubeCanvas.js +31 -12
- package/lib/components/canvas/CubeCanvas.js.map +1 -1
- package/lib/components/canvas/CubeCanvasContextMenu.d.ts +8 -4
- package/lib/components/canvas/CubeCanvasContextMenu.d.ts.map +1 -1
- package/lib/components/canvas/CubeCanvasContextMenu.js +19 -9
- package/lib/components/canvas/CubeCanvasContextMenu.js.map +1 -1
- package/lib/components/canvas/CubeCanvasDnd.d.ts +7 -5
- package/lib/components/canvas/CubeCanvasDnd.d.ts.map +1 -1
- package/lib/components/canvas/CubeCanvasDnd.js +14 -9
- package/lib/components/canvas/CubeCanvasDnd.js.map +1 -1
- package/lib/components/canvas/CubeCanvasElements.d.ts.map +1 -1
- package/lib/components/canvas/CubeCanvasElements.js +6 -3
- package/lib/components/canvas/CubeCanvasElements.js.map +1 -1
- package/lib/components/canvas/CubeCanvasNode.d.ts.map +1 -1
- package/lib/components/canvas/CubeCanvasNode.js +30 -20
- package/lib/components/canvas/CubeCanvasNode.js.map +1 -1
- package/lib/components/canvas/CubeCanvasNodeFocus.d.ts +22 -0
- package/lib/components/canvas/CubeCanvasNodeFocus.d.ts.map +1 -0
- package/lib/components/canvas/CubeCanvasNodeFocus.js +31 -0
- package/lib/components/canvas/CubeCanvasNodeFocus.js.map +1 -0
- package/lib/components/canvas/CubeNodeEditorAnchor.d.ts +44 -0
- package/lib/components/canvas/CubeNodeEditorAnchor.d.ts.map +1 -0
- package/lib/components/canvas/CubeNodeEditorAnchor.js +51 -0
- package/lib/components/canvas/CubeNodeEditorAnchor.js.map +1 -0
- package/lib/components/editors/CubeAggregationRowEditor.d.ts +48 -0
- package/lib/components/editors/CubeAggregationRowEditor.d.ts.map +1 -0
- package/lib/components/editors/CubeAggregationRowEditor.js +72 -0
- package/lib/components/editors/CubeAggregationRowEditor.js.map +1 -0
- package/lib/components/editors/CubeColumnChecklist.d.ts +42 -0
- package/lib/components/editors/CubeColumnChecklist.d.ts.map +1 -0
- package/lib/components/editors/CubeColumnChecklist.js +41 -0
- package/lib/components/editors/CubeColumnChecklist.js.map +1 -0
- package/lib/components/editors/CubeConcatEditor.d.ts +33 -0
- package/lib/components/editors/CubeConcatEditor.d.ts.map +1 -0
- package/lib/components/editors/CubeConcatEditor.js +147 -0
- package/lib/components/editors/CubeConcatEditor.js.map +1 -0
- package/lib/components/editors/CubeDataProductSourceEditor.d.ts +25 -0
- package/lib/components/editors/CubeDataProductSourceEditor.d.ts.map +1 -0
- package/lib/components/editors/CubeDataProductSourceEditor.js +53 -0
- package/lib/components/editors/CubeDataProductSourceEditor.js.map +1 -0
- package/lib/components/editors/CubeDifferenceEditor.d.ts +25 -0
- package/lib/components/editors/CubeDifferenceEditor.d.ts.map +1 -0
- package/lib/components/editors/CubeDifferenceEditor.js +29 -0
- package/lib/components/editors/CubeDifferenceEditor.js.map +1 -0
- package/lib/components/editors/CubeExtendEditor.d.ts +25 -0
- package/lib/components/editors/CubeExtendEditor.d.ts.map +1 -0
- package/lib/components/editors/CubeExtendEditor.js +86 -0
- package/lib/components/editors/CubeExtendEditor.js.map +1 -0
- package/lib/components/editors/CubeFilterEditor.d.ts.map +1 -1
- package/lib/components/editors/CubeFilterEditor.js +3 -3
- package/lib/components/editors/CubeFilterEditor.js.map +1 -1
- package/lib/components/editors/CubeGroupEditor.d.ts +28 -0
- package/lib/components/editors/CubeGroupEditor.d.ts.map +1 -0
- package/lib/components/editors/CubeGroupEditor.js +70 -0
- package/lib/components/editors/CubeGroupEditor.js.map +1 -0
- package/lib/components/editors/CubeIngestSourceEditor.d.ts +26 -0
- package/lib/components/editors/CubeIngestSourceEditor.d.ts.map +1 -0
- package/lib/components/editors/CubeIngestSourceEditor.js +47 -0
- package/lib/components/editors/CubeIngestSourceEditor.js.map +1 -0
- package/lib/components/editors/CubeJoinEditor.d.ts +2 -4
- package/lib/components/editors/CubeJoinEditor.d.ts.map +1 -1
- package/lib/components/editors/CubeJoinEditor.js +7 -37
- package/lib/components/editors/CubeJoinEditor.js.map +1 -1
- package/lib/components/editors/CubeJoinKeyRows.d.ts +34 -0
- package/lib/components/editors/CubeJoinKeyRows.d.ts.map +1 -0
- package/lib/components/editors/CubeJoinKeyRows.js +65 -0
- package/lib/components/editors/CubeJoinKeyRows.js.map +1 -0
- package/lib/components/editors/CubeNodeEditorPanel.d.ts +7 -5
- package/lib/components/editors/CubeNodeEditorPanel.d.ts.map +1 -1
- package/lib/components/editors/CubeNodeEditorPanel.js +51 -13
- package/lib/components/editors/CubeNodeEditorPanel.js.map +1 -1
- package/lib/components/editors/CubeNodeEditorPopper.d.ts +40 -0
- package/lib/components/editors/CubeNodeEditorPopper.d.ts.map +1 -0
- package/lib/components/editors/CubeNodeEditorPopper.js +125 -0
- package/lib/components/editors/CubeNodeEditorPopper.js.map +1 -0
- package/lib/components/editors/CubeNodeEditorRegistry.d.ts.map +1 -1
- package/lib/components/editors/CubeNodeEditorRegistry.js +15 -1
- package/lib/components/editors/CubeNodeEditorRegistry.js.map +1 -1
- package/lib/components/editors/CubePartitionEditor.d.ts +30 -0
- package/lib/components/editors/CubePartitionEditor.d.ts.map +1 -0
- package/lib/components/editors/CubePartitionEditor.js +93 -0
- package/lib/components/editors/CubePartitionEditor.js.map +1 -0
- package/lib/components/editors/CubeRenameEditor.d.ts.map +1 -1
- package/lib/components/editors/CubeRenameEditor.js +6 -4
- package/lib/components/editors/CubeRenameEditor.js.map +1 -1
- package/lib/components/editors/CubeRestrictEditor.js +1 -1
- package/lib/components/editors/CubeRestrictEditor.js.map +1 -1
- package/lib/components/editors/CubeSortEditor.d.ts.map +1 -1
- package/lib/components/editors/CubeSortEditor.js +10 -37
- package/lib/components/editors/CubeSortEditor.js.map +1 -1
- package/lib/components/editors/CubeSortRowEditor.d.ts +47 -0
- package/lib/components/editors/CubeSortRowEditor.d.ts.map +1 -0
- package/lib/components/editors/CubeSortRowEditor.js +62 -0
- package/lib/components/editors/CubeSortRowEditor.js.map +1 -0
- package/lib/components/editors/CubeSourceEditor.d.ts.map +1 -1
- package/lib/components/editors/CubeSourceEditor.js +18 -5
- package/lib/components/editors/CubeSourceEditor.js.map +1 -1
- package/lib/components/editors/CubeWarehouseControl.d.ts +30 -0
- package/lib/components/editors/CubeWarehouseControl.d.ts.map +1 -0
- package/lib/components/editors/CubeWarehouseControl.js +44 -0
- package/lib/components/editors/CubeWarehouseControl.js.map +1 -0
- package/lib/components/editors/useCubeNodeEditorDismiss.d.ts +31 -0
- package/lib/components/editors/useCubeNodeEditorDismiss.d.ts.map +1 -0
- package/lib/components/editors/useCubeNodeEditorDismiss.js +83 -0
- package/lib/components/editors/useCubeNodeEditorDismiss.js.map +1 -0
- package/lib/components/examples/CubeExamplesDialog.d.ts +26 -0
- package/lib/components/examples/CubeExamplesDialog.d.ts.map +1 -0
- package/lib/components/examples/CubeExamplesDialog.js +68 -0
- package/lib/components/examples/CubeExamplesDialog.js.map +1 -0
- package/lib/components/grid/CubeGridRegion.d.ts.map +1 -1
- package/lib/components/grid/CubeGridRegion.js +19 -8
- package/lib/components/grid/CubeGridRegion.js.map +1 -1
- package/lib/components/grid/CubeGridValues.d.ts +16 -0
- package/lib/components/grid/CubeGridValues.d.ts.map +1 -1
- package/lib/components/grid/CubeGridValues.js +44 -0
- package/lib/components/grid/CubeGridValues.js.map +1 -1
- package/lib/components/grid/CubeResultGrid.d.ts.map +1 -1
- package/lib/components/grid/CubeResultGrid.js +14 -2
- package/lib/components/grid/CubeResultGrid.js.map +1 -1
- package/lib/components/palette/CubePalette.d.ts.map +1 -1
- package/lib/components/palette/CubePalette.js +23 -12
- package/lib/components/palette/CubePalette.js.map +1 -1
- package/lib/components/source-picker/CubeDataProductTab.d.ts +27 -0
- package/lib/components/source-picker/CubeDataProductTab.d.ts.map +1 -0
- package/lib/components/source-picker/CubeDataProductTab.js +102 -0
- package/lib/components/source-picker/CubeDataProductTab.js.map +1 -0
- package/lib/components/source-picker/CubeDirectConnectionTab.d.ts +27 -0
- package/lib/components/source-picker/CubeDirectConnectionTab.d.ts.map +1 -0
- package/lib/components/source-picker/CubeDirectConnectionTab.js +87 -0
- package/lib/components/source-picker/CubeDirectConnectionTab.js.map +1 -0
- package/lib/components/source-picker/CubeIngestTab.d.ts +28 -0
- package/lib/components/source-picker/CubeIngestTab.d.ts.map +1 -0
- package/lib/components/source-picker/CubeIngestTab.js +66 -0
- package/lib/components/source-picker/CubeIngestTab.js.map +1 -0
- package/lib/components/source-picker/CubeInlineModelTab.d.ts +37 -0
- package/lib/components/source-picker/CubeInlineModelTab.d.ts.map +1 -0
- package/lib/components/source-picker/CubeInlineModelTab.js +71 -0
- package/lib/components/source-picker/CubeInlineModelTab.js.map +1 -0
- package/lib/components/source-picker/CubePickerStep.d.ts +27 -0
- package/lib/components/source-picker/CubePickerStep.d.ts.map +1 -0
- package/lib/components/source-picker/CubePickerStep.js +23 -0
- package/lib/components/source-picker/CubePickerStep.js.map +1 -0
- package/lib/components/source-picker/CubeProjectTab.d.ts +27 -0
- package/lib/components/source-picker/CubeProjectTab.d.ts.map +1 -0
- package/lib/components/source-picker/CubeProjectTab.js +50 -0
- package/lib/components/source-picker/CubeProjectTab.js.map +1 -0
- package/lib/components/source-picker/CubeSourcePicker.d.ts +6 -0
- package/lib/components/source-picker/CubeSourcePicker.d.ts.map +1 -1
- package/lib/components/source-picker/CubeSourcePicker.js +20 -58
- package/lib/components/source-picker/CubeSourcePicker.js.map +1 -1
- package/lib/components/spec-transfer/CubeSpecTransferDialog.js +1 -1
- package/lib/components/spec-transfer/CubeSpecTransferDialog.js.map +1 -1
- package/lib/graph-manager/CubeConnectionExplorer.d.ts +90 -0
- package/lib/graph-manager/CubeConnectionExplorer.d.ts.map +1 -0
- package/lib/graph-manager/CubeConnectionExplorer.js +34 -0
- package/lib/graph-manager/CubeConnectionExplorer.js.map +1 -0
- package/lib/graph-manager/CubeDataProduct.d.ts +66 -0
- package/lib/graph-manager/CubeDataProduct.d.ts.map +1 -0
- package/lib/graph-manager/CubeDataProduct.js +102 -0
- package/lib/graph-manager/CubeDataProduct.js.map +1 -0
- package/lib/graph-manager/CubeDataProductCatalog.d.ts +167 -0
- package/lib/graph-manager/CubeDataProductCatalog.d.ts.map +1 -0
- package/lib/graph-manager/CubeDataProductCatalog.js +116 -0
- package/lib/graph-manager/CubeDataProductCatalog.js.map +1 -0
- package/lib/graph-manager/CubeDirectConnection.d.ts +38 -0
- package/lib/graph-manager/CubeDirectConnection.d.ts.map +1 -0
- package/lib/graph-manager/CubeDirectConnection.js +48 -0
- package/lib/graph-manager/CubeDirectConnection.js.map +1 -0
- package/lib/graph-manager/CubeEngine.d.ts +37 -2
- package/lib/graph-manager/CubeEngine.d.ts.map +1 -1
- package/lib/graph-manager/CubeEngine.js +4 -1
- package/lib/graph-manager/CubeEngine.js.map +1 -1
- package/lib/graph-manager/CubeIngest.d.ts +50 -0
- package/lib/graph-manager/CubeIngest.d.ts.map +1 -0
- package/lib/graph-manager/CubeIngest.js +88 -0
- package/lib/graph-manager/CubeIngest.js.map +1 -0
- package/lib/graph-manager/CubeIngestCatalog.d.ts +116 -0
- package/lib/graph-manager/CubeIngestCatalog.d.ts.map +1 -0
- package/lib/graph-manager/CubeIngestCatalog.js +80 -0
- package/lib/graph-manager/CubeIngestCatalog.js.map +1 -0
- package/lib/graph-manager/CubeLakehouseEnvironment.d.ts +26 -0
- package/lib/graph-manager/CubeLakehouseEnvironment.d.ts.map +1 -0
- package/lib/graph-manager/CubeLakehouseEnvironment.js +17 -0
- package/lib/graph-manager/CubeLakehouseEnvironment.js.map +1 -0
- package/lib/graph-manager/CubeProject.d.ts +41 -0
- package/lib/graph-manager/CubeProject.d.ts.map +1 -0
- package/lib/graph-manager/CubeProject.js +84 -0
- package/lib/graph-manager/CubeProject.js.map +1 -0
- package/lib/graph-manager/CubeProjectCatalog.d.ts +35 -0
- package/lib/graph-manager/CubeProjectCatalog.d.ts.map +1 -0
- package/lib/graph-manager/CubeProjectCatalog.js +17 -0
- package/lib/graph-manager/CubeProjectCatalog.js.map +1 -0
- package/lib/graph-manager/protocol/pure/CubeEngineBuilder.d.ts +63 -1
- package/lib/graph-manager/protocol/pure/CubeEngineBuilder.d.ts.map +1 -1
- package/lib/graph-manager/protocol/pure/CubeEngineBuilder.js +50 -1
- package/lib/graph-manager/protocol/pure/CubeEngineBuilder.js.map +1 -1
- package/lib/graph-manager/protocol/pure/v1/V1_CubeDataProductArtifact.d.ts +44 -0
- package/lib/graph-manager/protocol/pure/v1/V1_CubeDataProductArtifact.d.ts.map +1 -0
- package/lib/graph-manager/protocol/pure/v1/V1_CubeDataProductArtifact.js +192 -0
- package/lib/graph-manager/protocol/pure/v1/V1_CubeDataProductArtifact.js.map +1 -0
- package/lib/graph-manager/protocol/pure/v1/V1_CubeDataProductModel.d.ts +29 -0
- package/lib/graph-manager/protocol/pure/v1/V1_CubeDataProductModel.d.ts.map +1 -0
- package/lib/graph-manager/protocol/pure/v1/V1_CubeDataProductModel.js +84 -0
- package/lib/graph-manager/protocol/pure/v1/V1_CubeDataProductModel.js.map +1 -0
- package/lib/graph-manager/protocol/pure/v1/V1_CubeDirectConnection.d.ts +41 -0
- package/lib/graph-manager/protocol/pure/v1/V1_CubeDirectConnection.d.ts.map +1 -0
- package/lib/graph-manager/protocol/pure/v1/V1_CubeDirectConnection.js +246 -0
- package/lib/graph-manager/protocol/pure/v1/V1_CubeDirectConnection.js.map +1 -0
- package/lib/graph-manager/protocol/pure/v1/V1_CubeDirectModel.d.ts +43 -0
- package/lib/graph-manager/protocol/pure/v1/V1_CubeDirectModel.d.ts.map +1 -0
- package/lib/graph-manager/protocol/pure/v1/V1_CubeDirectModel.js +112 -0
- package/lib/graph-manager/protocol/pure/v1/V1_CubeDirectModel.js.map +1 -0
- package/lib/graph-manager/protocol/pure/v1/V1_CubeEngineErrors.d.ts.map +1 -1
- package/lib/graph-manager/protocol/pure/v1/V1_CubeEngineErrors.js +30 -4
- package/lib/graph-manager/protocol/pure/v1/V1_CubeEngineErrors.js.map +1 -1
- package/lib/graph-manager/protocol/pure/v1/V1_CubeExpression.d.ts +23 -0
- package/lib/graph-manager/protocol/pure/v1/V1_CubeExpression.d.ts.map +1 -0
- package/lib/graph-manager/protocol/pure/v1/V1_CubeExpression.js +68 -0
- package/lib/graph-manager/protocol/pure/v1/V1_CubeExpression.js.map +1 -0
- package/lib/graph-manager/protocol/pure/v1/V1_CubeIngestDefinition.d.ts +30 -0
- package/lib/graph-manager/protocol/pure/v1/V1_CubeIngestDefinition.d.ts.map +1 -0
- package/lib/graph-manager/protocol/pure/v1/V1_CubeIngestDefinition.js +140 -0
- package/lib/graph-manager/protocol/pure/v1/V1_CubeIngestDefinition.js.map +1 -0
- package/lib/graph-manager/protocol/pure/v1/V1_CubeIngestModel.d.ts +62 -0
- package/lib/graph-manager/protocol/pure/v1/V1_CubeIngestModel.d.ts.map +1 -0
- package/lib/graph-manager/protocol/pure/v1/V1_CubeIngestModel.js +119 -0
- package/lib/graph-manager/protocol/pure/v1/V1_CubeIngestModel.js.map +1 -0
- package/lib/graph-manager/protocol/pure/v1/V1_CubeLakehouseEnvironmentResolver.d.ts +33 -0
- package/lib/graph-manager/protocol/pure/v1/V1_CubeLakehouseEnvironmentResolver.d.ts.map +1 -0
- package/lib/graph-manager/protocol/pure/v1/V1_CubeLakehouseEnvironmentResolver.js +94 -0
- package/lib/graph-manager/protocol/pure/v1/V1_CubeLakehouseEnvironmentResolver.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 +63 -4
- package/lib/graph-manager/protocol/pure/v1/V1_CubeLambdaSerializer.js.map +1 -1
- package/lib/graph-manager/protocol/pure/v1/V1_CubeSchemaExploration.d.ts +67 -0
- package/lib/graph-manager/protocol/pure/v1/V1_CubeSchemaExploration.d.ts.map +1 -0
- package/lib/graph-manager/protocol/pure/v1/V1_CubeSchemaExploration.js +238 -0
- package/lib/graph-manager/protocol/pure/v1/V1_CubeSchemaExploration.js.map +1 -0
- package/lib/graph-manager/protocol/pure/v1/V1_LegendCubeConnectionExplorer.d.ts +34 -0
- package/lib/graph-manager/protocol/pure/v1/V1_LegendCubeConnectionExplorer.d.ts.map +1 -0
- package/lib/graph-manager/protocol/pure/v1/V1_LegendCubeConnectionExplorer.js +64 -0
- package/lib/graph-manager/protocol/pure/v1/V1_LegendCubeConnectionExplorer.js.map +1 -0
- package/lib/graph-manager/protocol/pure/v1/V1_LegendCubeDataProductCatalog.d.ts +104 -0
- package/lib/graph-manager/protocol/pure/v1/V1_LegendCubeDataProductCatalog.d.ts.map +1 -0
- package/lib/graph-manager/protocol/pure/v1/V1_LegendCubeDataProductCatalog.js +484 -0
- package/lib/graph-manager/protocol/pure/v1/V1_LegendCubeDataProductCatalog.js.map +1 -0
- package/lib/graph-manager/protocol/pure/v1/V1_LegendCubeEngine.d.ts +97 -3
- package/lib/graph-manager/protocol/pure/v1/V1_LegendCubeEngine.d.ts.map +1 -1
- package/lib/graph-manager/protocol/pure/v1/V1_LegendCubeEngine.js +585 -20
- package/lib/graph-manager/protocol/pure/v1/V1_LegendCubeEngine.js.map +1 -1
- package/lib/graph-manager/protocol/pure/v1/V1_LegendCubeIngestCatalog.d.ts +69 -0
- package/lib/graph-manager/protocol/pure/v1/V1_LegendCubeIngestCatalog.d.ts.map +1 -0
- package/lib/graph-manager/protocol/pure/v1/V1_LegendCubeIngestCatalog.js +270 -0
- package/lib/graph-manager/protocol/pure/v1/V1_LegendCubeIngestCatalog.js.map +1 -0
- package/lib/graph-manager/protocol/pure/v1/V1_LegendCubeProjectCatalog.d.ts +35 -0
- package/lib/graph-manager/protocol/pure/v1/V1_LegendCubeProjectCatalog.d.ts.map +1 -0
- package/lib/graph-manager/protocol/pure/v1/V1_LegendCubeProjectCatalog.js +91 -0
- package/lib/graph-manager/protocol/pure/v1/V1_LegendCubeProjectCatalog.js.map +1 -0
- package/lib/graph-manager/protocol/pure/v1/__test-utils__/V1_CubeConnectionExplorerTestUtils.d.ts +25 -0
- package/lib/graph-manager/protocol/pure/v1/__test-utils__/V1_CubeConnectionExplorerTestUtils.d.ts.map +1 -0
- package/lib/graph-manager/protocol/pure/v1/__test-utils__/V1_CubeConnectionExplorerTestUtils.js +47 -0
- package/lib/graph-manager/protocol/pure/v1/__test-utils__/V1_CubeConnectionExplorerTestUtils.js.map +1 -0
- package/lib/graph-manager/protocol/pure/v1/__test-utils__/V1_CubeDataProductFixtures.d.ts +28 -0
- package/lib/graph-manager/protocol/pure/v1/__test-utils__/V1_CubeDataProductFixtures.d.ts.map +1 -0
- package/lib/graph-manager/protocol/pure/v1/__test-utils__/V1_CubeDataProductFixtures.js +310 -0
- package/lib/graph-manager/protocol/pure/v1/__test-utils__/V1_CubeDataProductFixtures.js.map +1 -0
- package/lib/graph-manager/protocol/pure/v1/__test-utils__/V1_CubeDataProductSearchFixtures.d.ts +33 -0
- package/lib/graph-manager/protocol/pure/v1/__test-utils__/V1_CubeDataProductSearchFixtures.d.ts.map +1 -0
- package/lib/graph-manager/protocol/pure/v1/__test-utils__/V1_CubeDataProductSearchFixtures.js +188 -0
- package/lib/graph-manager/protocol/pure/v1/__test-utils__/V1_CubeDataProductSearchFixtures.js.map +1 -0
- package/lib/graph-manager/protocol/pure/v1/__test-utils__/V1_CubeEngineTestUtils.d.ts +1 -1
- 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 +27 -1
- 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 +11 -1
- 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 +32 -0
- package/lib/stores/CubeAddPlacement.d.ts.map +1 -0
- package/lib/stores/CubeAddPlacement.js +40 -0
- package/lib/stores/CubeAddPlacement.js.map +1 -0
- package/lib/stores/CubeDataProductRecheck.d.ts +27 -0
- package/lib/stores/CubeDataProductRecheck.d.ts.map +1 -0
- package/lib/stores/CubeDataProductRecheck.js +54 -0
- package/lib/stores/CubeDataProductRecheck.js.map +1 -0
- package/lib/stores/CubeDataProductRuntimeState.d.ts +88 -0
- package/lib/stores/CubeDataProductRuntimeState.d.ts.map +1 -0
- package/lib/stores/CubeDataProductRuntimeState.js +190 -0
- package/lib/stores/CubeDataProductRuntimeState.js.map +1 -0
- package/lib/stores/CubeDataProductWarehouse.d.ts +19 -0
- package/lib/stores/CubeDataProductWarehouse.d.ts.map +1 -0
- package/lib/stores/CubeDataProductWarehouse.js +25 -0
- package/lib/stores/CubeDataProductWarehouse.js.map +1 -0
- package/lib/stores/CubeEditorState.d.ts +100 -16
- package/lib/stores/CubeEditorState.d.ts.map +1 -1
- package/lib/stores/CubeEditorState.js +347 -47
- package/lib/stores/CubeEditorState.js.map +1 -1
- package/lib/stores/CubeEntrySource.d.ts +78 -0
- package/lib/stores/CubeEntrySource.d.ts.map +1 -0
- package/lib/stores/CubeEntrySource.js +200 -0
- package/lib/stores/CubeEntrySource.js.map +1 -0
- package/lib/stores/CubeExamples.d.ts +43 -0
- package/lib/stores/CubeExamples.d.ts.map +1 -0
- package/lib/stores/CubeExamples.js +296 -0
- package/lib/stores/CubeExamples.js.map +1 -0
- package/lib/stores/CubeExamplesState.d.ts +45 -0
- package/lib/stores/CubeExamplesState.d.ts.map +1 -0
- package/lib/stores/CubeExamplesState.js +81 -0
- package/lib/stores/CubeExamplesState.js.map +1 -0
- package/lib/stores/CubeExecutionState.d.ts +6 -2
- package/lib/stores/CubeExecutionState.d.ts.map +1 -1
- package/lib/stores/CubeExecutionState.js +15 -5
- package/lib/stores/CubeExecutionState.js.map +1 -1
- package/lib/stores/CubeExtendTyping.d.ts +72 -0
- package/lib/stores/CubeExtendTyping.d.ts.map +1 -0
- package/lib/stores/CubeExtendTyping.js +176 -0
- package/lib/stores/CubeExtendTyping.js.map +1 -0
- package/lib/stores/CubeGridQuickActions.d.ts +14 -6
- package/lib/stores/CubeGridQuickActions.d.ts.map +1 -1
- package/lib/stores/CubeGridQuickActions.js +53 -15
- package/lib/stores/CubeGridQuickActions.js.map +1 -1
- package/lib/stores/CubeHost.d.ts +32 -1
- package/lib/stores/CubeHost.d.ts.map +1 -1
- package/lib/stores/CubeHost.js +21 -1
- package/lib/stores/CubeHost.js.map +1 -1
- package/lib/stores/CubeIngestRecheck.d.ts +26 -0
- package/lib/stores/CubeIngestRecheck.d.ts.map +1 -0
- package/lib/stores/CubeIngestRecheck.js +53 -0
- package/lib/stores/CubeIngestRecheck.js.map +1 -0
- package/lib/stores/CubeNodeEditorState.d.ts +101 -5
- package/lib/stores/CubeNodeEditorState.d.ts.map +1 -1
- package/lib/stores/CubeNodeEditorState.js +221 -10
- package/lib/stores/CubeNodeEditorState.js.map +1 -1
- package/lib/stores/CubeShowPureState.d.ts +5 -2
- package/lib/stores/CubeShowPureState.d.ts.map +1 -1
- package/lib/stores/CubeShowPureState.js +7 -4
- package/lib/stores/CubeShowPureState.js.map +1 -1
- package/lib/stores/CubeSourcePickerState.d.ts +54 -65
- package/lib/stores/CubeSourcePickerState.d.ts.map +1 -1
- package/lib/stores/CubeSourcePickerState.js +155 -276
- package/lib/stores/CubeSourcePickerState.js.map +1 -1
- package/lib/stores/CubeSpecTransferState.d.ts +2 -2
- package/lib/stores/CubeSpecTransferState.js +2 -2
- package/lib/stores/LocalModelCatalog.d.ts +2 -0
- package/lib/stores/LocalModelCatalog.d.ts.map +1 -1
- package/lib/stores/LocalModelCatalog.js +17 -3
- package/lib/stores/LocalModelCatalog.js.map +1 -1
- package/lib/stores/editors/CubeAggregationRows.d.ts +80 -0
- package/lib/stores/editors/CubeAggregationRows.d.ts.map +1 -0
- package/lib/stores/editors/CubeAggregationRows.js +164 -0
- package/lib/stores/editors/CubeAggregationRows.js.map +1 -0
- package/lib/stores/editors/CubeConcatDraft.d.ts +30 -0
- package/lib/stores/editors/CubeConcatDraft.d.ts.map +1 -0
- package/lib/stores/editors/CubeConcatDraft.js +44 -0
- package/lib/stores/editors/CubeConcatDraft.js.map +1 -0
- package/lib/stores/editors/CubeDifferenceDraft.d.ts +49 -0
- package/lib/stores/editors/CubeDifferenceDraft.d.ts.map +1 -0
- package/lib/stores/editors/CubeDifferenceDraft.js +111 -0
- package/lib/stores/editors/CubeDifferenceDraft.js.map +1 -0
- package/lib/stores/editors/CubeExtendDraft.d.ts +110 -0
- package/lib/stores/editors/CubeExtendDraft.d.ts.map +1 -0
- package/lib/stores/editors/CubeExtendDraft.js +359 -0
- package/lib/stores/editors/CubeExtendDraft.js.map +1 -0
- package/lib/stores/editors/CubeGroupDraft.d.ts +61 -0
- package/lib/stores/editors/CubeGroupDraft.d.ts.map +1 -0
- package/lib/stores/editors/CubeGroupDraft.js +106 -0
- package/lib/stores/editors/CubeGroupDraft.js.map +1 -0
- package/lib/stores/editors/CubeJoinDraft.d.ts +9 -10
- package/lib/stores/editors/CubeJoinDraft.d.ts.map +1 -1
- package/lib/stores/editors/CubeJoinDraft.js +92 -21
- package/lib/stores/editors/CubeJoinDraft.js.map +1 -1
- package/lib/stores/editors/CubeJoinKeyPairs.d.ts +38 -0
- package/lib/stores/editors/CubeJoinKeyPairs.d.ts.map +1 -0
- package/lib/stores/editors/CubeJoinKeyPairs.js +33 -0
- package/lib/stores/editors/CubeJoinKeyPairs.js.map +1 -0
- package/lib/stores/editors/CubeNodeDraft.d.ts +20 -6
- package/lib/stores/editors/CubeNodeDraft.d.ts.map +1 -1
- package/lib/stores/editors/CubeNodeDraft.js +23 -5
- package/lib/stores/editors/CubeNodeDraft.js.map +1 -1
- package/lib/stores/editors/CubeNodeDraftRegistry.d.ts.map +1 -1
- package/lib/stores/editors/CubeNodeDraftRegistry.js +20 -1
- package/lib/stores/editors/CubeNodeDraftRegistry.js.map +1 -1
- package/lib/stores/editors/CubePartitionDraft.d.ts +70 -0
- package/lib/stores/editors/CubePartitionDraft.d.ts.map +1 -0
- package/lib/stores/editors/CubePartitionDraft.js +154 -0
- package/lib/stores/editors/CubePartitionDraft.js.map +1 -0
- package/lib/stores/editors/CubeSortDraft.d.ts +2 -10
- package/lib/stores/editors/CubeSortDraft.d.ts.map +1 -1
- package/lib/stores/editors/CubeSortDraft.js +9 -35
- package/lib/stores/editors/CubeSortDraft.js.map +1 -1
- package/lib/stores/editors/CubeSortRows.d.ts +34 -0
- package/lib/stores/editors/CubeSortRows.d.ts.map +1 -0
- package/lib/stores/editors/CubeSortRows.js +50 -0
- package/lib/stores/editors/CubeSortRows.js.map +1 -0
- package/lib/stores/fixtures/CubeNorthwindModel.d.ts +7 -0
- package/lib/stores/fixtures/CubeNorthwindModel.d.ts.map +1 -1
- package/lib/stores/fixtures/CubeNorthwindModel.js +99 -87
- package/lib/stores/fixtures/CubeNorthwindModel.js.map +1 -1
- package/lib/stores/fixtures/CubeSampleSql.d.ts +34 -0
- package/lib/stores/fixtures/CubeSampleSql.d.ts.map +1 -0
- package/lib/stores/fixtures/CubeSampleSql.js +64 -0
- package/lib/stores/fixtures/CubeSampleSql.js.map +1 -0
- package/lib/stores/fixtures/CubeSportsModel.d.ts +27 -0
- package/lib/stores/fixtures/CubeSportsModel.d.ts.map +1 -0
- package/lib/stores/fixtures/CubeSportsModel.js +158 -0
- package/lib/stores/fixtures/CubeSportsModel.js.map +1 -0
- package/lib/stores/fixtures/CubeTradesModel.d.ts +29 -0
- package/lib/stores/fixtures/CubeTradesModel.d.ts.map +1 -0
- package/lib/stores/fixtures/CubeTradesModel.js +197 -0
- package/lib/stores/fixtures/CubeTradesModel.js.map +1 -0
- package/lib/stores/source-picker/CubeCsvSetupSql.d.ts +71 -0
- package/lib/stores/source-picker/CubeCsvSetupSql.d.ts.map +1 -0
- package/lib/stores/source-picker/CubeCsvSetupSql.js +392 -0
- package/lib/stores/source-picker/CubeCsvSetupSql.js.map +1 -0
- package/lib/stores/source-picker/CubeDataProductTabState.d.ts +186 -0
- package/lib/stores/source-picker/CubeDataProductTabState.d.ts.map +1 -0
- package/lib/stores/source-picker/CubeDataProductTabState.js +681 -0
- package/lib/stores/source-picker/CubeDataProductTabState.js.map +1 -0
- package/lib/stores/source-picker/CubeDirectConnectionTabState.d.ts +140 -0
- package/lib/stores/source-picker/CubeDirectConnectionTabState.d.ts.map +1 -0
- package/lib/stores/source-picker/CubeDirectConnectionTabState.js +516 -0
- package/lib/stores/source-picker/CubeDirectConnectionTabState.js.map +1 -0
- package/lib/stores/source-picker/CubeIngestTabState.d.ts +114 -0
- package/lib/stores/source-picker/CubeIngestTabState.d.ts.map +1 -0
- package/lib/stores/source-picker/CubeIngestTabState.js +455 -0
- package/lib/stores/source-picker/CubeIngestTabState.js.map +1 -0
- package/lib/stores/source-picker/CubeInlineModelTabState.d.ts +107 -0
- package/lib/stores/source-picker/CubeInlineModelTabState.d.ts.map +1 -0
- package/lib/stores/source-picker/CubeInlineModelTabState.js +347 -0
- package/lib/stores/source-picker/CubeInlineModelTabState.js.map +1 -0
- package/lib/stores/source-picker/CubeProjectTabState.d.ts +62 -0
- package/lib/stores/source-picker/CubeProjectTabState.d.ts.map +1 -0
- package/lib/stores/source-picker/CubeProjectTabState.js +181 -0
- package/lib/stores/source-picker/CubeProjectTabState.js.map +1 -0
- package/lib/stores/source-picker/CubeSourcePickerTab.d.ts +48 -0
- package/lib/stores/source-picker/CubeSourcePickerTab.d.ts.map +1 -0
- package/lib/stores/source-picker/CubeSourcePickerTab.js +24 -0
- package/lib/stores/source-picker/CubeSourcePickerTab.js.map +1 -0
- package/package.json +10 -6
- package/src/__lib__/LegendCubeCommand.ts +5 -0
- package/src/__lib__/LegendCubeDataProductLabels.ts +91 -0
- package/src/__lib__/LegendCubeDirectConnectionLabels.ts +111 -0
- package/src/__lib__/LegendCubeHelpText.ts +25 -1
- package/src/__lib__/LegendCubeIngestLabels.ts +40 -0
- package/src/__lib__/LegendCubeLabels.ts +162 -4
- package/src/__lib__/LegendCubeProjectLabels.ts +25 -0
- package/src/__lib__/LegendCubeTesting.ts +1 -0
- package/src/__test-utils__/CubeCanvasTestUtils.ts +1 -1
- package/src/__test-utils__/CubeConnectionTestSupport.ts +45 -0
- package/src/__test-utils__/CubeDirectConnectionFixtures.ts +70 -0
- package/src/__test-utils__/CubeEngineTestSupport.ts +38 -0
- package/src/__test-utils__/CubeExpressionTestUtils.ts +119 -0
- package/src/__test-utils__/CubeOperationsTestUtils.ts +93 -18
- package/src/__test-utils__/CubePageTestUtils.tsx +35 -0
- package/src/__test-utils__/CubeTestApplication.ts +21 -2
- package/src/__test-utils__/FakeCubeConnectionExplorer.ts +111 -0
- package/src/__test-utils__/FakeCubeDataProductCatalog.ts +227 -0
- package/src/__test-utils__/FakeCubeEngine.ts +25 -1
- package/src/__test-utils__/FakeCubeIngestCatalog.ts +180 -0
- package/src/__test-utils__/FakeCubeProjectCatalog.ts +89 -0
- package/src/components/CubeAddItems.tsx +179 -0
- package/src/components/CubeEditor.tsx +73 -44
- package/src/components/CubeEntrySourceBanner.tsx +64 -0
- package/src/components/CubeNodeIcon.tsx +13 -0
- package/src/components/CubeSchemaColumnsTable.tsx +49 -0
- package/src/components/canvas/CubeCanvas.tsx +49 -14
- package/src/components/canvas/CubeCanvasContextMenu.tsx +31 -30
- package/src/components/canvas/CubeCanvasDnd.ts +16 -9
- package/src/components/canvas/CubeCanvasElements.ts +8 -2
- package/src/components/canvas/CubeCanvasNode.tsx +61 -43
- package/src/components/canvas/CubeCanvasNodeFocus.ts +37 -0
- package/src/components/canvas/CubeNodeEditorAnchor.ts +82 -0
- package/src/components/editors/CubeAggregationRowEditor.tsx +224 -0
- package/src/components/editors/CubeColumnChecklist.tsx +130 -0
- package/src/components/editors/CubeConcatEditor.tsx +374 -0
- package/src/components/editors/CubeDataProductSourceEditor.tsx +134 -0
- package/src/components/editors/CubeDifferenceEditor.tsx +87 -0
- package/src/components/editors/CubeExtendEditor.tsx +271 -0
- package/src/components/editors/CubeFilterEditor.tsx +7 -0
- package/src/components/editors/CubeGroupEditor.tsx +135 -0
- package/src/components/editors/CubeIngestSourceEditor.tsx +104 -0
- package/src/components/editors/CubeJoinEditor.tsx +12 -132
- package/src/components/editors/CubeJoinKeyRows.tsx +183 -0
- package/src/components/editors/CubeNodeEditorPanel.tsx +91 -28
- package/src/components/editors/CubeNodeEditorPopper.tsx +183 -0
- package/src/components/editors/CubeNodeEditorRegistry.ts +21 -0
- package/src/components/editors/CubePartitionEditor.tsx +208 -0
- package/src/components/editors/CubeRenameEditor.tsx +10 -5
- package/src/components/editors/CubeRestrictEditor.tsx +1 -1
- package/src/components/editors/CubeSortEditor.tsx +20 -142
- package/src/components/editors/CubeSortRowEditor.tsx +176 -0
- package/src/components/editors/CubeSourceEditor.tsx +42 -30
- package/src/components/editors/CubeWarehouseControl.tsx +113 -0
- package/src/components/editors/useCubeNodeEditorDismiss.ts +103 -0
- package/src/components/examples/CubeExamplesDialog.tsx +199 -0
- package/src/components/grid/CubeGridRegion.tsx +48 -10
- package/src/components/grid/CubeGridValues.ts +55 -0
- package/src/components/grid/CubeResultGrid.tsx +24 -8
- package/src/components/palette/CubePalette.tsx +33 -15
- package/src/components/source-picker/CubeDataProductTab.tsx +392 -0
- package/src/components/source-picker/CubeDirectConnectionTab.tsx +340 -0
- package/src/components/source-picker/CubeIngestTab.tsx +232 -0
- package/src/components/source-picker/CubeInlineModelTab.tsx +191 -0
- package/src/components/source-picker/CubePickerStep.tsx +49 -0
- package/src/components/source-picker/CubeProjectTab.tsx +114 -0
- package/src/components/source-picker/CubeSourcePicker.tsx +62 -227
- package/src/components/spec-transfer/CubeSpecTransferDialog.tsx +1 -1
- package/src/graph-manager/CubeConnectionExplorer.ts +106 -0
- package/src/graph-manager/CubeDataProduct.ts +150 -0
- package/src/graph-manager/CubeDataProductCatalog.ts +245 -0
- package/src/graph-manager/CubeDirectConnection.ts +67 -0
- package/src/graph-manager/CubeEngine.ts +43 -1
- package/src/graph-manager/CubeIngest.ts +144 -0
- package/src/graph-manager/CubeIngestCatalog.ts +169 -0
- package/src/graph-manager/CubeLakehouseEnvironment.ts +27 -0
- package/src/graph-manager/CubeProject.ts +117 -0
- package/src/graph-manager/CubeProjectCatalog.ts +40 -0
- package/src/graph-manager/protocol/pure/CubeEngineBuilder.ts +145 -1
- package/src/graph-manager/protocol/pure/v1/V1_CubeDataProductArtifact.ts +251 -0
- package/src/graph-manager/protocol/pure/v1/V1_CubeDataProductModel.ts +101 -0
- package/src/graph-manager/protocol/pure/v1/V1_CubeDirectConnection.ts +339 -0
- package/src/graph-manager/protocol/pure/v1/V1_CubeDirectModel.ts +151 -0
- package/src/graph-manager/protocol/pure/v1/V1_CubeEngineErrors.ts +45 -4
- package/src/graph-manager/protocol/pure/v1/V1_CubeExpression.ts +89 -0
- package/src/graph-manager/protocol/pure/v1/V1_CubeIngestDefinition.ts +201 -0
- package/src/graph-manager/protocol/pure/v1/V1_CubeIngestModel.ts +183 -0
- package/src/graph-manager/protocol/pure/v1/V1_CubeLakehouseEnvironmentResolver.ts +141 -0
- package/src/graph-manager/protocol/pure/v1/V1_CubeLambdaSerializer.ts +84 -4
- package/src/graph-manager/protocol/pure/v1/V1_CubeSchemaExploration.ts +361 -0
- package/src/graph-manager/protocol/pure/v1/V1_LegendCubeConnectionExplorer.ts +116 -0
- package/src/graph-manager/protocol/pure/v1/V1_LegendCubeDataProductCatalog.ts +744 -0
- package/src/graph-manager/protocol/pure/v1/V1_LegendCubeEngine.ts +967 -24
- package/src/graph-manager/protocol/pure/v1/V1_LegendCubeIngestCatalog.ts +459 -0
- package/src/graph-manager/protocol/pure/v1/V1_LegendCubeProjectCatalog.ts +147 -0
- package/src/graph-manager/protocol/pure/v1/__test-utils__/V1_CubeConnectionExplorerTestUtils.ts +61 -0
- package/src/graph-manager/protocol/pure/v1/__test-utils__/V1_CubeDataProductFixtures.ts +337 -0
- package/src/graph-manager/protocol/pure/v1/__test-utils__/V1_CubeDataProductSearchFixtures.ts +206 -0
- package/src/graph-manager/protocol/pure/v1/__test-utils__/V1_CubeEngineTestUtils.ts +42 -1
- package/src/index.ts +20 -0
- package/src/stores/CubeAddPlacement.ts +67 -0
- package/src/stores/CubeDataProductRecheck.ts +93 -0
- package/src/stores/CubeDataProductRuntimeState.ts +256 -0
- package/src/stores/CubeDataProductWarehouse.ts +40 -0
- package/src/stores/CubeEditorState.ts +511 -63
- package/src/stores/CubeEntrySource.ts +278 -0
- package/src/stores/CubeExamples.ts +457 -0
- package/src/stores/CubeExamplesState.ts +108 -0
- package/src/stores/CubeExecutionState.ts +24 -5
- package/src/stores/CubeExtendTyping.ts +291 -0
- package/src/stores/CubeGridQuickActions.ts +69 -14
- package/src/stores/CubeHost.ts +71 -1
- package/src/stores/CubeIngestRecheck.ts +92 -0
- package/src/stores/CubeNodeEditorState.ts +278 -9
- package/src/stores/CubeShowPureState.ts +7 -4
- package/src/stores/CubeSourcePickerState.ts +160 -330
- package/src/stores/CubeSpecTransferState.ts +2 -2
- package/src/stores/LocalModelCatalog.ts +22 -3
- package/src/stores/editors/CubeAggregationRows.ts +299 -0
- package/src/stores/editors/CubeConcatDraft.ts +49 -0
- package/src/stores/editors/CubeDifferenceDraft.ts +147 -0
- package/src/stores/editors/CubeExtendDraft.ts +532 -0
- package/src/stores/editors/CubeGroupDraft.ts +145 -0
- package/src/stores/editors/CubeJoinDraft.ts +130 -41
- package/src/stores/editors/CubeJoinKeyPairs.ts +68 -0
- package/src/stores/editors/CubeNodeDraft.ts +26 -6
- package/src/stores/editors/CubeNodeDraftRegistry.ts +25 -0
- package/src/stores/editors/CubePartitionDraft.ts +214 -0
- package/src/stores/editors/CubeSortDraft.ts +17 -54
- package/src/stores/editors/CubeSortRows.ts +84 -0
- package/src/stores/fixtures/CubeNorthwindModel.ts +103 -88
- package/src/stores/fixtures/CubeSampleSql.ts +85 -0
- package/src/stores/fixtures/CubeSportsModel.ts +182 -0
- package/src/stores/fixtures/CubeTradesModel.ts +241 -0
- package/src/stores/source-picker/CubeCsvSetupSql.ts +444 -0
- package/src/stores/source-picker/CubeDataProductTabState.ts +839 -0
- package/src/stores/source-picker/CubeDirectConnectionTabState.ts +647 -0
- package/src/stores/source-picker/CubeIngestTabState.ts +551 -0
- package/src/stores/source-picker/CubeInlineModelTabState.ts +448 -0
- package/src/stores/source-picker/CubeProjectTabState.ts +218 -0
- package/src/stores/source-picker/CubeSourcePickerTab.ts +50 -0
- package/tsconfig.json +89 -0
|
@@ -0,0 +1,197 @@
|
|
|
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
|
+
import { addSampleDays, createSampleRandom, pickSample, sampleInsert, toPureSetupSqls, } from './CubeSampleSql.js';
|
|
17
|
+
// The trades sample: made-up trades of the first half of 2026 by six desks in
|
|
18
|
+
// made-up instruments, in an in-memory H2 database the engine fills from the
|
|
19
|
+
// model's setup SQL
|
|
20
|
+
export const CUBE_TRADES_DATABASE = 'cube::samples::trades::TradesDatabase';
|
|
21
|
+
export const CUBE_TRADES_CONNECTION = 'cube::samples::trades::TradesConnection';
|
|
22
|
+
export const CUBE_TRADES_RUNTIME = 'cube::samples::trades::TradesRuntime';
|
|
23
|
+
export const CUBE_TRADES_SCHEMA = 'TRADES_SAMPLE';
|
|
24
|
+
export const CUBE_TRADES_TRADE_COUNT = 400;
|
|
25
|
+
/** Each desk, its region, and the asset classes it trades */
|
|
26
|
+
const DESKS = [
|
|
27
|
+
['Equities Cash', 'Americas', ['Equity']],
|
|
28
|
+
['Equity Derivatives', 'Europe', ['Equity', 'Commodity']],
|
|
29
|
+
['Rates', 'Americas', ['Bond', 'FX']],
|
|
30
|
+
['Credit', 'Europe', ['Bond']],
|
|
31
|
+
['FX', 'Asia', ['FX']],
|
|
32
|
+
['Commodities', 'Americas', ['Commodity', 'FX']],
|
|
33
|
+
];
|
|
34
|
+
/** Each instrument: symbol, name, asset class, currency and a typical price */
|
|
35
|
+
const INSTRUMENTS = [
|
|
36
|
+
['ACME', 'Acme Industries', 'Equity', 'USD', 182.5],
|
|
37
|
+
['GLBX', 'Globex Corp', 'Equity', 'USD', 64.2],
|
|
38
|
+
['INIT', 'Initech', 'Equity', 'USD', 23.75],
|
|
39
|
+
['UMBR', 'Umbrella Holdings', 'Equity', 'EUR', 96.4],
|
|
40
|
+
['STRK', 'Stark Works', 'Equity', 'EUR', 310.1],
|
|
41
|
+
['UST10', 'Treasury 10Y', 'Bond', 'USD', 98.6],
|
|
42
|
+
['UST2', 'Treasury 2Y', 'Bond', 'USD', 99.8],
|
|
43
|
+
['BUND10', 'Bund 10Y', 'Bond', 'EUR', 101.3],
|
|
44
|
+
['ACME28', 'Acme 4.5% 2028', 'Bond', 'USD', 97.2],
|
|
45
|
+
['EURUSD', 'Euro / Dollar', 'FX', 'USD', 1.0875],
|
|
46
|
+
['USDJPY', 'Dollar / Yen', 'FX', 'JPY', 148.35],
|
|
47
|
+
['GBPUSD', 'Pound / Dollar', 'FX', 'USD', 1.265],
|
|
48
|
+
['GOLD', 'Gold', 'Commodity', 'USD', 2350.0],
|
|
49
|
+
['BRENT', 'Brent Crude', 'Commodity', 'USD', 82.4],
|
|
50
|
+
['COPPER', 'Copper', 'Commodity', 'USD', 4.15],
|
|
51
|
+
];
|
|
52
|
+
/** What a unit of each currency is worth in dollars, fixed for the sample */
|
|
53
|
+
export const CUBE_TRADES_USD_RATES = new Map([
|
|
54
|
+
['USD', 1],
|
|
55
|
+
['EUR', 1.08],
|
|
56
|
+
['JPY', 0.0067],
|
|
57
|
+
]);
|
|
58
|
+
/** How many units a trade of an asset class is for, at most */
|
|
59
|
+
const MAX_QUANTITY = new Map([
|
|
60
|
+
['Equity', 5_000],
|
|
61
|
+
['Bond', 2_000],
|
|
62
|
+
['FX', 1_000_000],
|
|
63
|
+
['Commodity', 1_000],
|
|
64
|
+
]);
|
|
65
|
+
/** A whole number of ten-thousandths as a decimal text, e.g. 12345 is 1.2345 */
|
|
66
|
+
const fromTenThousandths = (value, scale) => {
|
|
67
|
+
const text = String(value).padStart(5, '0');
|
|
68
|
+
const whole = text.slice(0, -4);
|
|
69
|
+
const fraction = text.slice(-4).slice(0, scale);
|
|
70
|
+
return scale === 0 ? whole : `${whole}.${fraction}`;
|
|
71
|
+
};
|
|
72
|
+
const createTrades = () => {
|
|
73
|
+
const random = createSampleRandom(20260102);
|
|
74
|
+
const trades = [];
|
|
75
|
+
for (let id = 1; id <= CUBE_TRADES_TRADE_COUNT; id++) {
|
|
76
|
+
const deskIndex = Math.floor(random() * DESKS.length);
|
|
77
|
+
const [, , assetClasses] = pickSample(DESKS, deskIndex / DESKS.length);
|
|
78
|
+
const assetClass = pickSample(assetClasses, random());
|
|
79
|
+
const choices = INSTRUMENTS.flatMap((instrument, index) => instrument[2] === assetClass ? [index] : []);
|
|
80
|
+
const instrumentIndex = pickSample(choices, random());
|
|
81
|
+
const [, , , currency, price] = pickSample(INSTRUMENTS, instrumentIndex / INSTRUMENTS.length);
|
|
82
|
+
const quantity = Math.max(1, Math.round(random() * (MAX_QUANTITY.get(assetClass) ?? 1_000)));
|
|
83
|
+
// prices move up to 5% either way, kept to four decimals
|
|
84
|
+
const priceInTenThousandths = Math.round(price * (0.95 + random() * 0.1) * 10_000);
|
|
85
|
+
// the notional in dollars, at a fixed rate, kept to cents
|
|
86
|
+
const notionalInTenThousandths = Math.round((quantity *
|
|
87
|
+
priceInTenThousandths *
|
|
88
|
+
(CUBE_TRADES_USD_RATES.get(currency) ?? 1)) /
|
|
89
|
+
100) * 100;
|
|
90
|
+
// trading days: Monday to Friday
|
|
91
|
+
let day = Math.floor(random() * 181);
|
|
92
|
+
while ([0, 6].includes(new Date(Date.UTC(2026, 0, 1 + day)).getUTCDay())) {
|
|
93
|
+
day = (day + 1) % 181;
|
|
94
|
+
}
|
|
95
|
+
trades.push([
|
|
96
|
+
id,
|
|
97
|
+
{ date: addSampleDays('2026-01-01', day) },
|
|
98
|
+
deskIndex + 1,
|
|
99
|
+
instrumentIndex + 1,
|
|
100
|
+
random() < 0.5 ? 'BUY' : 'SELL',
|
|
101
|
+
quantity,
|
|
102
|
+
{ decimal: fromTenThousandths(priceInTenThousandths, 4) },
|
|
103
|
+
{ decimal: fromTenThousandths(notionalInTenThousandths, 2) },
|
|
104
|
+
]);
|
|
105
|
+
}
|
|
106
|
+
return trades;
|
|
107
|
+
};
|
|
108
|
+
/** The SQL that makes and fills the tables, run on every connection checkout */
|
|
109
|
+
export const CUBE_TRADES_SETUP_SQLS = [
|
|
110
|
+
`drop schema if exists ${CUBE_TRADES_SCHEMA} cascade`,
|
|
111
|
+
`create schema ${CUBE_TRADES_SCHEMA}`,
|
|
112
|
+
`create table ${CUBE_TRADES_SCHEMA}.DESKS (ID INTEGER PRIMARY KEY, DESK VARCHAR(20) NOT NULL, REGION VARCHAR(10) NOT NULL)`,
|
|
113
|
+
sampleInsert(`${CUBE_TRADES_SCHEMA}.DESKS`, DESKS.map(([desk, region], index) => [index + 1, desk, region])),
|
|
114
|
+
`create table ${CUBE_TRADES_SCHEMA}.INSTRUMENTS (ID INTEGER PRIMARY KEY, SYMBOL VARCHAR(10) NOT NULL, INSTRUMENT VARCHAR(30) NOT NULL, ASSET_CLASS VARCHAR(10) NOT NULL, CURRENCY VARCHAR(3) NOT NULL)`,
|
|
115
|
+
sampleInsert(`${CUBE_TRADES_SCHEMA}.INSTRUMENTS`, INSTRUMENTS.map(([symbol, name, assetClass, currency], index) => [
|
|
116
|
+
index + 1,
|
|
117
|
+
symbol,
|
|
118
|
+
name,
|
|
119
|
+
assetClass,
|
|
120
|
+
currency,
|
|
121
|
+
])),
|
|
122
|
+
`create table ${CUBE_TRADES_SCHEMA}.TRADES (TRADE_ID INTEGER PRIMARY KEY, TRADE_DATE DATE NOT NULL, DESK_ID INTEGER NOT NULL, INSTRUMENT_ID INTEGER NOT NULL, SIDE VARCHAR(4) NOT NULL, QUANTITY INTEGER NOT NULL, PRICE DECIMAL(14,4) NOT NULL, NOTIONAL_USD DECIMAL(18,2) NOT NULL)`,
|
|
123
|
+
sampleInsert(`${CUBE_TRADES_SCHEMA}.TRADES`, createTrades()),
|
|
124
|
+
];
|
|
125
|
+
export const CUBE_TRADES_MODEL_CODE = `###Relational
|
|
126
|
+
Database ${CUBE_TRADES_DATABASE}
|
|
127
|
+
(
|
|
128
|
+
Schema ${CUBE_TRADES_SCHEMA}
|
|
129
|
+
(
|
|
130
|
+
Table DESKS
|
|
131
|
+
(
|
|
132
|
+
ID INTEGER PRIMARY KEY,
|
|
133
|
+
DESK VARCHAR(20) NOT NULL,
|
|
134
|
+
REGION VARCHAR(10) NOT NULL
|
|
135
|
+
)
|
|
136
|
+
Table INSTRUMENTS
|
|
137
|
+
(
|
|
138
|
+
ID INTEGER PRIMARY KEY,
|
|
139
|
+
SYMBOL VARCHAR(10) NOT NULL,
|
|
140
|
+
INSTRUMENT VARCHAR(30) NOT NULL,
|
|
141
|
+
ASSET_CLASS VARCHAR(10) NOT NULL,
|
|
142
|
+
CURRENCY VARCHAR(3) NOT NULL
|
|
143
|
+
)
|
|
144
|
+
Table TRADES
|
|
145
|
+
(
|
|
146
|
+
TRADE_ID INTEGER PRIMARY KEY,
|
|
147
|
+
TRADE_DATE DATE NOT NULL,
|
|
148
|
+
DESK_ID INTEGER NOT NULL,
|
|
149
|
+
INSTRUMENT_ID INTEGER NOT NULL,
|
|
150
|
+
SIDE VARCHAR(4) NOT NULL,
|
|
151
|
+
QUANTITY INTEGER NOT NULL,
|
|
152
|
+
PRICE DECIMAL(14,4) NOT NULL,
|
|
153
|
+
NOTIONAL_USD DECIMAL(18,2) NOT NULL
|
|
154
|
+
)
|
|
155
|
+
)
|
|
156
|
+
|
|
157
|
+
Join TRADE_DESK(${CUBE_TRADES_SCHEMA}.TRADES.DESK_ID = ${CUBE_TRADES_SCHEMA}.DESKS.ID)
|
|
158
|
+
Join TRADE_INSTRUMENT(${CUBE_TRADES_SCHEMA}.TRADES.INSTRUMENT_ID = ${CUBE_TRADES_SCHEMA}.INSTRUMENTS.ID)
|
|
159
|
+
)
|
|
160
|
+
|
|
161
|
+
|
|
162
|
+
###Connection
|
|
163
|
+
RelationalDatabaseConnection ${CUBE_TRADES_CONNECTION}
|
|
164
|
+
{
|
|
165
|
+
store: ${CUBE_TRADES_DATABASE};
|
|
166
|
+
type: H2;
|
|
167
|
+
specification: LocalH2
|
|
168
|
+
{
|
|
169
|
+
testDataSetupSqls: [
|
|
170
|
+
${toPureSetupSqls(CUBE_TRADES_SETUP_SQLS)}
|
|
171
|
+
];
|
|
172
|
+
};
|
|
173
|
+
auth: DefaultH2;
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
|
|
177
|
+
###Runtime
|
|
178
|
+
Runtime ${CUBE_TRADES_RUNTIME}
|
|
179
|
+
{
|
|
180
|
+
mappings:
|
|
181
|
+
[
|
|
182
|
+
];
|
|
183
|
+
connections:
|
|
184
|
+
[
|
|
185
|
+
${CUBE_TRADES_DATABASE}:
|
|
186
|
+
[
|
|
187
|
+
connection_1: ${CUBE_TRADES_CONNECTION}
|
|
188
|
+
]
|
|
189
|
+
];
|
|
190
|
+
}
|
|
191
|
+
`;
|
|
192
|
+
/** The trades sample as a cube saves it (PLAN §6.2.2) */
|
|
193
|
+
export const CUBE_TRADES_MODEL = Object.freeze({
|
|
194
|
+
_type: 'text',
|
|
195
|
+
code: CUBE_TRADES_MODEL_CODE,
|
|
196
|
+
});
|
|
197
|
+
//# sourceMappingURL=CubeTradesModel.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CubeTradesModel.js","sourceRoot":"","sources":["../../../src/stores/fixtures/CubeTradesModel.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,71 @@
|
|
|
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
|
+
/** The most rows a CSV may have: the cube saves them, and every connection inserts them again */
|
|
17
|
+
export declare const CUBE_CSV_MAX_ROWS = 10000;
|
|
18
|
+
/** The most characters a CSV may have */
|
|
19
|
+
export declare const CUBE_CSV_MAX_LENGTH = 5000000;
|
|
20
|
+
/** The schema a CSV's table is created in */
|
|
21
|
+
export declare const CUBE_CSV_SCHEMA = "csv";
|
|
22
|
+
/** The DuckDB types a CSV's columns are given, from their values */
|
|
23
|
+
export declare enum CubeCsvColumnType {
|
|
24
|
+
INTEGER = "INTEGER",
|
|
25
|
+
BIGINT = "BIGINT",
|
|
26
|
+
DOUBLE = "DOUBLE",
|
|
27
|
+
BOOLEAN = "BOOLEAN",
|
|
28
|
+
DATE = "DATE",
|
|
29
|
+
TIMESTAMP = "TIMESTAMP",
|
|
30
|
+
VARCHAR = "VARCHAR"
|
|
31
|
+
}
|
|
32
|
+
export declare class CubeCsvError extends Error {
|
|
33
|
+
}
|
|
34
|
+
/** A CSV loaded as a table: its name, its columns and their types, and the setup SQL that creates it */
|
|
35
|
+
export interface CubeCsvTable {
|
|
36
|
+
readonly table: string;
|
|
37
|
+
readonly columns: readonly {
|
|
38
|
+
readonly name: string;
|
|
39
|
+
readonly type: CubeCsvColumnType;
|
|
40
|
+
}[];
|
|
41
|
+
readonly rowCount: number;
|
|
42
|
+
/** Statements in the form's setup SQL text: each ends on a line ending in ';' */
|
|
43
|
+
readonly sql: string;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* The records of a CSV (RFC 4180): fields split on commas, a field in double
|
|
47
|
+
* quotes may hold commas, line breaks and doubled quotes; blank lines are
|
|
48
|
+
* skipped
|
|
49
|
+
*/
|
|
50
|
+
export declare const parseCubeCsv: (text: string) => string[][];
|
|
51
|
+
/**
|
|
52
|
+
* A column's type from its values, empty ones left out: the narrowest type
|
|
53
|
+
* every value fits. Whole numbers with a leading zero (codes, such as
|
|
54
|
+
* `007`) and ones past 64 bits stay text, so no digit is lost; numbers
|
|
55
|
+
* with a fraction are DOUBLE. A column of empty values is text.
|
|
56
|
+
*/
|
|
57
|
+
export declare const inferCubeCsvColumnType: (values: readonly string[]) => CubeCsvColumnType;
|
|
58
|
+
/**
|
|
59
|
+
* A name the database takes unquoted: letters, digits and underscores, not
|
|
60
|
+
* starting with a digit, and no reserved word (one gets a trailing
|
|
61
|
+
* underscore)
|
|
62
|
+
*/
|
|
63
|
+
export declare const toCubeCsvName: (text: string, fallback: string) => string;
|
|
64
|
+
/**
|
|
65
|
+
* A CSV, with a header row, as a table of the `csv` schema: setup SQL that
|
|
66
|
+
* creates the schema if needed, drops and creates the table, then inserts
|
|
67
|
+
* the rows. Refuses an empty CSV, a record whose values don't match the
|
|
68
|
+
* header, and one past the limits.
|
|
69
|
+
*/
|
|
70
|
+
export declare const buildCubeCsvTable: (text: string, tableName: string) => CubeCsvTable;
|
|
71
|
+
//# sourceMappingURL=CubeCsvSetupSql.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CubeCsvSetupSql.d.ts","sourceRoot":"","sources":["../../../src/stores/source-picker/CubeCsvSetupSql.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AASH,iGAAiG;AACjG,eAAO,MAAM,iBAAiB,QAAS,CAAC;AAExC,yCAAyC;AACzC,eAAO,MAAM,mBAAmB,UAAY,CAAC;AAE7C,6CAA6C;AAC7C,eAAO,MAAM,eAAe,QAAQ,CAAC;AAKrC,oEAAoE;AACpE,oBAAY,iBAAiB;IAC3B,OAAO,YAAY;IACnB,MAAM,WAAW;IACjB,MAAM,WAAW;IACjB,OAAO,YAAY;IACnB,IAAI,SAAS;IACb,SAAS,cAAc;IACvB,OAAO,YAAY;CACpB;AAED,qBAAa,YAAa,SAAQ,KAAK;CAAG;AAE1C,wGAAwG;AACxG,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,OAAO,EAAE,SAAS;QACzB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;QACtB,QAAQ,CAAC,IAAI,EAAE,iBAAiB,CAAC;KAClC,EAAE,CAAC;IACJ,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,iFAAiF;IACjF,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;CACtB;AAED;;;;GAIG;AACH,eAAO,MAAM,YAAY,GAAI,MAAM,MAAM,KAAG,MAAM,EAAE,EA8DnD,CAAC;AA2CF;;;;;GAKG;AACH,eAAO,MAAM,sBAAsB,GACjC,QAAQ,SAAS,MAAM,EAAE,KACxB,iBA8BF,CAAC;AAuHF;;;;GAIG;AACH,eAAO,MAAM,aAAa,GAAI,MAAM,MAAM,EAAE,UAAU,MAAM,KAAG,MAK9D,CAAC;AA2CF;;;;;GAKG;AACH,eAAO,MAAM,iBAAiB,GAC5B,MAAM,MAAM,EACZ,WAAW,MAAM,KAChB,YAsDF,CAAC"}
|
|
@@ -0,0 +1,392 @@
|
|
|
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
|
+
import { CUBE_CSV_MESSAGE } from '../../__lib__/LegendCubeDirectConnectionLabels.js';
|
|
17
|
+
// A CSV loaded into an in-memory DuckDB connection: the CSV becomes setup SQL
|
|
18
|
+
// (a table, then its rows as inserts), which the engine runs on every
|
|
19
|
+
// connection and the cube saves with its connection. No file reaches the
|
|
20
|
+
// engine's host
|
|
21
|
+
/** The most rows a CSV may have: the cube saves them, and every connection inserts them again */
|
|
22
|
+
export const CUBE_CSV_MAX_ROWS = 10_000;
|
|
23
|
+
/** The most characters a CSV may have */
|
|
24
|
+
export const CUBE_CSV_MAX_LENGTH = 5_000_000;
|
|
25
|
+
/** The schema a CSV's table is created in */
|
|
26
|
+
export const CUBE_CSV_SCHEMA = 'csv';
|
|
27
|
+
/** How many rows one insert statement holds */
|
|
28
|
+
const ROWS_PER_INSERT = 1000;
|
|
29
|
+
/** The DuckDB types a CSV's columns are given, from their values */
|
|
30
|
+
export var CubeCsvColumnType;
|
|
31
|
+
(function (CubeCsvColumnType) {
|
|
32
|
+
CubeCsvColumnType["INTEGER"] = "INTEGER";
|
|
33
|
+
CubeCsvColumnType["BIGINT"] = "BIGINT";
|
|
34
|
+
CubeCsvColumnType["DOUBLE"] = "DOUBLE";
|
|
35
|
+
CubeCsvColumnType["BOOLEAN"] = "BOOLEAN";
|
|
36
|
+
CubeCsvColumnType["DATE"] = "DATE";
|
|
37
|
+
CubeCsvColumnType["TIMESTAMP"] = "TIMESTAMP";
|
|
38
|
+
CubeCsvColumnType["VARCHAR"] = "VARCHAR";
|
|
39
|
+
})(CubeCsvColumnType || (CubeCsvColumnType = {}));
|
|
40
|
+
export class CubeCsvError extends Error {
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* The records of a CSV (RFC 4180): fields split on commas, a field in double
|
|
44
|
+
* quotes may hold commas, line breaks and doubled quotes; blank lines are
|
|
45
|
+
* skipped
|
|
46
|
+
*/
|
|
47
|
+
export const parseCubeCsv = (text) => {
|
|
48
|
+
const source = text.startsWith('') ? text.slice(1) : text;
|
|
49
|
+
const records = [];
|
|
50
|
+
let record = [];
|
|
51
|
+
let field = '';
|
|
52
|
+
let quoted = false;
|
|
53
|
+
let wasQuoted = false;
|
|
54
|
+
let line = 1;
|
|
55
|
+
let quoteLine = 1;
|
|
56
|
+
const endField = () => {
|
|
57
|
+
record.push(field);
|
|
58
|
+
field = '';
|
|
59
|
+
wasQuoted = false;
|
|
60
|
+
};
|
|
61
|
+
const endRecord = () => {
|
|
62
|
+
const lastWasQuoted = wasQuoted;
|
|
63
|
+
endField();
|
|
64
|
+
// a blank line is one empty field, never quoted
|
|
65
|
+
if (record.length > 1 || record[0] !== '' || lastWasQuoted) {
|
|
66
|
+
records.push(record);
|
|
67
|
+
}
|
|
68
|
+
record = [];
|
|
69
|
+
};
|
|
70
|
+
for (let index = 0; index < source.length; index++) {
|
|
71
|
+
const char = source.charAt(index);
|
|
72
|
+
if (quoted) {
|
|
73
|
+
if (char === '"') {
|
|
74
|
+
if (source.charAt(index + 1) === '"') {
|
|
75
|
+
field += '"';
|
|
76
|
+
index++;
|
|
77
|
+
}
|
|
78
|
+
else {
|
|
79
|
+
quoted = false;
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
else {
|
|
83
|
+
if (char === '\n') {
|
|
84
|
+
line++;
|
|
85
|
+
}
|
|
86
|
+
field += char;
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
else if (char === '"' && field === '') {
|
|
90
|
+
quoted = true;
|
|
91
|
+
wasQuoted = true;
|
|
92
|
+
quoteLine = line;
|
|
93
|
+
}
|
|
94
|
+
else if (char === ',') {
|
|
95
|
+
endField();
|
|
96
|
+
}
|
|
97
|
+
else if (char === '\r' || char === '\n') {
|
|
98
|
+
if (char === '\r' && source.charAt(index + 1) === '\n') {
|
|
99
|
+
index++;
|
|
100
|
+
}
|
|
101
|
+
line++;
|
|
102
|
+
endRecord();
|
|
103
|
+
}
|
|
104
|
+
else {
|
|
105
|
+
field += char;
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
if (quoted) {
|
|
109
|
+
throw new CubeCsvError(CUBE_CSV_MESSAGE.UNCLOSED_QUOTE(quoteLine));
|
|
110
|
+
}
|
|
111
|
+
if (field !== '' || record.length || wasQuoted) {
|
|
112
|
+
endRecord();
|
|
113
|
+
}
|
|
114
|
+
return records;
|
|
115
|
+
};
|
|
116
|
+
const INTEGER_TEXT = /^[+-]?(?:0|[1-9]\d*)$/u;
|
|
117
|
+
const NUMBER_TEXT = /^[+-]?(?:\d+(?:\.\d*)?|\.\d+)(?:[eE][+-]?\d+)?$/u;
|
|
118
|
+
const BOOLEAN_TEXT = /^(?:true|false)$/iu;
|
|
119
|
+
const DATE_TEXT = /^(?<year>\d{4})-(?<month>\d{2})-(?<day>\d{2})$/u;
|
|
120
|
+
const TIMESTAMP_TEXT = /^(?<year>\d{4})-(?<month>\d{2})-(?<day>\d{2})[ T](?<hour>\d{2}):(?<minute>\d{2})(?::(?<second>\d{2})(?:\.\d{1,9})?)?$/u;
|
|
121
|
+
const INT32 = { min: -(2n ** 31n), max: 2n ** 31n - 1n };
|
|
122
|
+
const INT64 = { min: -(2n ** 63n), max: 2n ** 63n - 1n };
|
|
123
|
+
const fits = (text, range) => {
|
|
124
|
+
const value = BigInt(text);
|
|
125
|
+
return value >= range.min && value <= range.max;
|
|
126
|
+
};
|
|
127
|
+
/** Whether year, month and day name a real day */
|
|
128
|
+
const isDay = (year, month, day) => {
|
|
129
|
+
const date = new Date(Date.UTC(Number(year), Number(month) - 1, Number(day)));
|
|
130
|
+
return (date.getUTCFullYear() === Number(year) &&
|
|
131
|
+
date.getUTCMonth() === Number(month) - 1 &&
|
|
132
|
+
date.getUTCDate() === Number(day));
|
|
133
|
+
};
|
|
134
|
+
const isDate = (text) => {
|
|
135
|
+
const day = DATE_TEXT.exec(text)?.groups;
|
|
136
|
+
return Boolean(day && isDay(day.year ?? '', day.month ?? '', day.day ?? ''));
|
|
137
|
+
};
|
|
138
|
+
const isTimestamp = (text) => {
|
|
139
|
+
const at = TIMESTAMP_TEXT.exec(text)?.groups;
|
|
140
|
+
return Boolean(at &&
|
|
141
|
+
isDay(at.year ?? '', at.month ?? '', at.day ?? '') &&
|
|
142
|
+
Number(at.hour) < 24 &&
|
|
143
|
+
Number(at.minute) < 60 &&
|
|
144
|
+
Number(at.second ?? '0') < 60);
|
|
145
|
+
};
|
|
146
|
+
/**
|
|
147
|
+
* A column's type from its values, empty ones left out: the narrowest type
|
|
148
|
+
* every value fits. Whole numbers with a leading zero (codes, such as
|
|
149
|
+
* `007`) and ones past 64 bits stay text, so no digit is lost; numbers
|
|
150
|
+
* with a fraction are DOUBLE. A column of empty values is text.
|
|
151
|
+
*/
|
|
152
|
+
export const inferCubeCsvColumnType = (values) => {
|
|
153
|
+
const present = values.filter((value) => value !== '');
|
|
154
|
+
if (!present.length) {
|
|
155
|
+
return CubeCsvColumnType.VARCHAR;
|
|
156
|
+
}
|
|
157
|
+
if (present.every((value) => INTEGER_TEXT.test(value))) {
|
|
158
|
+
if (present.every((value) => fits(value, INT32))) {
|
|
159
|
+
return CubeCsvColumnType.INTEGER;
|
|
160
|
+
}
|
|
161
|
+
return present.every((value) => fits(value, INT64))
|
|
162
|
+
? CubeCsvColumnType.BIGINT
|
|
163
|
+
: CubeCsvColumnType.VARCHAR;
|
|
164
|
+
}
|
|
165
|
+
if (present.every((value) => NUMBER_TEXT.test(value)) &&
|
|
166
|
+
// a whole number with a leading zero is a code, not a number
|
|
167
|
+
!present.some((value) => /^[+-]?0\d/u.test(value))) {
|
|
168
|
+
return CubeCsvColumnType.DOUBLE;
|
|
169
|
+
}
|
|
170
|
+
if (present.every((value) => BOOLEAN_TEXT.test(value))) {
|
|
171
|
+
return CubeCsvColumnType.BOOLEAN;
|
|
172
|
+
}
|
|
173
|
+
if (present.every(isDate)) {
|
|
174
|
+
return CubeCsvColumnType.DATE;
|
|
175
|
+
}
|
|
176
|
+
if (present.every((value) => isDate(value) || isTimestamp(value))) {
|
|
177
|
+
return CubeCsvColumnType.TIMESTAMP;
|
|
178
|
+
}
|
|
179
|
+
return CubeCsvColumnType.VARCHAR;
|
|
180
|
+
};
|
|
181
|
+
/**
|
|
182
|
+
* The keywords that can't name a column or table unquoted: DuckDB's
|
|
183
|
+
* `reserved` and `type_function` ones, as `duckdb_keywords()` lists them on
|
|
184
|
+
* the engine's DuckDB (1.3)
|
|
185
|
+
*/
|
|
186
|
+
const RESERVED_WORDS = new Set([
|
|
187
|
+
'all',
|
|
188
|
+
'analyse',
|
|
189
|
+
'analyze',
|
|
190
|
+
'and',
|
|
191
|
+
'anti',
|
|
192
|
+
'any',
|
|
193
|
+
'array',
|
|
194
|
+
'as',
|
|
195
|
+
'asc',
|
|
196
|
+
'asof',
|
|
197
|
+
'asymmetric',
|
|
198
|
+
'at',
|
|
199
|
+
'authorization',
|
|
200
|
+
'binary',
|
|
201
|
+
'both',
|
|
202
|
+
'case',
|
|
203
|
+
'cast',
|
|
204
|
+
'check',
|
|
205
|
+
'collate',
|
|
206
|
+
'collation',
|
|
207
|
+
'column',
|
|
208
|
+
'columns',
|
|
209
|
+
'concurrently',
|
|
210
|
+
'constraint',
|
|
211
|
+
'create',
|
|
212
|
+
'cross',
|
|
213
|
+
'default',
|
|
214
|
+
'deferrable',
|
|
215
|
+
'desc',
|
|
216
|
+
'describe',
|
|
217
|
+
'distinct',
|
|
218
|
+
'do',
|
|
219
|
+
'else',
|
|
220
|
+
'end',
|
|
221
|
+
'except',
|
|
222
|
+
'false',
|
|
223
|
+
'fetch',
|
|
224
|
+
'for',
|
|
225
|
+
'foreign',
|
|
226
|
+
'freeze',
|
|
227
|
+
'from',
|
|
228
|
+
'full',
|
|
229
|
+
'generated',
|
|
230
|
+
'glob',
|
|
231
|
+
'group',
|
|
232
|
+
'having',
|
|
233
|
+
'ilike',
|
|
234
|
+
'in',
|
|
235
|
+
'initially',
|
|
236
|
+
'inner',
|
|
237
|
+
'intersect',
|
|
238
|
+
'into',
|
|
239
|
+
'is',
|
|
240
|
+
'isnull',
|
|
241
|
+
'join',
|
|
242
|
+
'lambda',
|
|
243
|
+
'lateral',
|
|
244
|
+
'leading',
|
|
245
|
+
'left',
|
|
246
|
+
'like',
|
|
247
|
+
'limit',
|
|
248
|
+
'map',
|
|
249
|
+
'natural',
|
|
250
|
+
'not',
|
|
251
|
+
'notnull',
|
|
252
|
+
'null',
|
|
253
|
+
'offset',
|
|
254
|
+
'on',
|
|
255
|
+
'only',
|
|
256
|
+
'or',
|
|
257
|
+
'order',
|
|
258
|
+
'outer',
|
|
259
|
+
'overlaps',
|
|
260
|
+
'pivot',
|
|
261
|
+
'pivot_longer',
|
|
262
|
+
'pivot_wider',
|
|
263
|
+
'placing',
|
|
264
|
+
'positional',
|
|
265
|
+
'primary',
|
|
266
|
+
'qualify',
|
|
267
|
+
'references',
|
|
268
|
+
'returning',
|
|
269
|
+
'right',
|
|
270
|
+
'select',
|
|
271
|
+
'semi',
|
|
272
|
+
'show',
|
|
273
|
+
'similar',
|
|
274
|
+
'some',
|
|
275
|
+
'struct',
|
|
276
|
+
'summarize',
|
|
277
|
+
'symmetric',
|
|
278
|
+
'table',
|
|
279
|
+
'tablesample',
|
|
280
|
+
'then',
|
|
281
|
+
'to',
|
|
282
|
+
'trailing',
|
|
283
|
+
'true',
|
|
284
|
+
'try_cast',
|
|
285
|
+
'union',
|
|
286
|
+
'unique',
|
|
287
|
+
'unpack',
|
|
288
|
+
'unpivot',
|
|
289
|
+
'using',
|
|
290
|
+
'variadic',
|
|
291
|
+
'verbose',
|
|
292
|
+
'when',
|
|
293
|
+
'where',
|
|
294
|
+
'window',
|
|
295
|
+
'with',
|
|
296
|
+
]);
|
|
297
|
+
/**
|
|
298
|
+
* A name the database takes unquoted: letters, digits and underscores, not
|
|
299
|
+
* starting with a digit, and no reserved word (one gets a trailing
|
|
300
|
+
* underscore)
|
|
301
|
+
*/
|
|
302
|
+
export const toCubeCsvName = (text, fallback) => {
|
|
303
|
+
const name = text.trim().replace(/[^A-Za-z0-9_]+/gu, '_');
|
|
304
|
+
const safe = !name || /^_*$/u.test(name) ? fallback : name;
|
|
305
|
+
const start = /^[0-9]/u.test(safe) ? `_${safe}` : safe;
|
|
306
|
+
return RESERVED_WORDS.has(start.toLowerCase()) ? `${start}_` : start;
|
|
307
|
+
};
|
|
308
|
+
/** The header's names made safe, and distinct whatever their case */
|
|
309
|
+
const toColumnNames = (header) => {
|
|
310
|
+
const used = new Set();
|
|
311
|
+
return header.map((text, index) => {
|
|
312
|
+
const base = toCubeCsvName(text, `column_${index + 1}`);
|
|
313
|
+
let name = base;
|
|
314
|
+
for (let suffix = 2; used.has(name.toLowerCase()); suffix++) {
|
|
315
|
+
name = `${base}_${suffix}`;
|
|
316
|
+
}
|
|
317
|
+
used.add(name.toLowerCase());
|
|
318
|
+
return name;
|
|
319
|
+
});
|
|
320
|
+
};
|
|
321
|
+
/** A string literal: quotes doubled, line breaks as chr(10), so no line of the setup SQL ends inside it */
|
|
322
|
+
const quote = (value) => `'${value
|
|
323
|
+
.replace(/'/gu, "''")
|
|
324
|
+
.split(/\r\n|\r|\n/u)
|
|
325
|
+
.join("' || chr(10) || '")}'`;
|
|
326
|
+
const toLiteral = (value, type) => {
|
|
327
|
+
if (value === '') {
|
|
328
|
+
return 'NULL';
|
|
329
|
+
}
|
|
330
|
+
switch (type) {
|
|
331
|
+
case CubeCsvColumnType.INTEGER:
|
|
332
|
+
case CubeCsvColumnType.BIGINT:
|
|
333
|
+
case CubeCsvColumnType.DOUBLE:
|
|
334
|
+
return value;
|
|
335
|
+
case CubeCsvColumnType.BOOLEAN:
|
|
336
|
+
return value.toLowerCase();
|
|
337
|
+
case CubeCsvColumnType.DATE:
|
|
338
|
+
return `DATE '${value}'`;
|
|
339
|
+
case CubeCsvColumnType.TIMESTAMP:
|
|
340
|
+
return `TIMESTAMP '${value.replace('T', ' ')}'`;
|
|
341
|
+
default:
|
|
342
|
+
return quote(value);
|
|
343
|
+
}
|
|
344
|
+
};
|
|
345
|
+
/**
|
|
346
|
+
* A CSV, with a header row, as a table of the `csv` schema: setup SQL that
|
|
347
|
+
* creates the schema if needed, drops and creates the table, then inserts
|
|
348
|
+
* the rows. Refuses an empty CSV, a record whose values don't match the
|
|
349
|
+
* header, and one past the limits.
|
|
350
|
+
*/
|
|
351
|
+
export const buildCubeCsvTable = (text, tableName) => {
|
|
352
|
+
if (text.length > CUBE_CSV_MAX_LENGTH) {
|
|
353
|
+
throw new CubeCsvError(CUBE_CSV_MESSAGE.TOO_LONG(CUBE_CSV_MAX_LENGTH));
|
|
354
|
+
}
|
|
355
|
+
const [header, ...rows] = parseCubeCsv(text);
|
|
356
|
+
if (!header) {
|
|
357
|
+
throw new CubeCsvError(CUBE_CSV_MESSAGE.EMPTY);
|
|
358
|
+
}
|
|
359
|
+
if (rows.length > CUBE_CSV_MAX_ROWS) {
|
|
360
|
+
throw new CubeCsvError(CUBE_CSV_MESSAGE.TOO_MANY_ROWS(rows.length, CUBE_CSV_MAX_ROWS));
|
|
361
|
+
}
|
|
362
|
+
rows.forEach((row, index) => {
|
|
363
|
+
if (row.length !== header.length) {
|
|
364
|
+
throw new CubeCsvError(CUBE_CSV_MESSAGE.RAGGED_ROW(index + 1, row.length, header.length));
|
|
365
|
+
}
|
|
366
|
+
});
|
|
367
|
+
const table = toCubeCsvName(tableName, 'csv_data');
|
|
368
|
+
const names = toColumnNames(header);
|
|
369
|
+
const columns = names.map((name, index) => ({
|
|
370
|
+
name,
|
|
371
|
+
type: inferCubeCsvColumnType(rows.map((row) => row[index] ?? '')),
|
|
372
|
+
}));
|
|
373
|
+
const qualified = `${CUBE_CSV_SCHEMA}.${table}`;
|
|
374
|
+
const statements = [
|
|
375
|
+
`create schema if not exists ${CUBE_CSV_SCHEMA};`,
|
|
376
|
+
`drop table if exists ${qualified};`,
|
|
377
|
+
`create table ${qualified} (${columns
|
|
378
|
+
.map((column) => `${column.name} ${column.type}`)
|
|
379
|
+
.join(', ')});`,
|
|
380
|
+
];
|
|
381
|
+
for (let start = 0; start < rows.length; start += ROWS_PER_INSERT) {
|
|
382
|
+
const chunk = rows.slice(start, start + ROWS_PER_INSERT);
|
|
383
|
+
statements.push([
|
|
384
|
+
`insert into ${qualified} values`,
|
|
385
|
+
...chunk.map((row, index) => `(${row
|
|
386
|
+
.map((value, column) => toLiteral(value, columns[column]?.type ?? CubeCsvColumnType.VARCHAR))
|
|
387
|
+
.join(', ')})${index === chunk.length - 1 ? ';' : ','}`),
|
|
388
|
+
].join('\n'));
|
|
389
|
+
}
|
|
390
|
+
return { table, columns, rowCount: rows.length, sql: statements.join('\n') };
|
|
391
|
+
};
|
|
392
|
+
//# sourceMappingURL=CubeCsvSetupSql.js.map
|