@lightdash/common 0.2104.6 → 0.2104.8
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/dist/cjs/.tsbuildinfo +1 -0
- package/dist/cjs/authorization/index.d.ts +1 -4
- package/dist/cjs/authorization/index.d.ts.map +1 -1
- package/dist/cjs/authorization/index.js +0 -4
- package/dist/cjs/authorization/index.js.map +1 -1
- package/dist/cjs/ee/AiAgent/chartConfig/web/getWebAiChartConfig.d.ts +8 -8
- package/dist/cjs/ee/AiAgent/index.d.ts +2 -2
- package/dist/cjs/ee/AiAgent/schemas/parser.d.ts +24 -24
- package/dist/cjs/ee/AiAgent/schemas/tools/toolDashboardV2Args.d.ts +96 -96
- package/dist/cjs/ee/AiAgent/schemas/tools/toolRunQueryArgs.d.ts +48 -48
- package/dist/cjs/ee/AiAgent/utils.d.ts +8 -8
- package/dist/cjs/index.d.ts +23 -449
- package/dist/cjs/index.d.ts.map +1 -1
- package/dist/cjs/index.js +21 -55
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/pivot/index.d.ts +1 -0
- package/dist/cjs/pivot/index.d.ts.map +1 -1
- package/dist/cjs/pivot/index.js +1 -0
- package/dist/cjs/pivot/index.js.map +1 -1
- package/dist/cjs/pivot/pivotConfig.d.ts +7 -0
- package/dist/cjs/pivot/pivotConfig.d.ts.map +1 -0
- package/dist/cjs/pivot/pivotConfig.js +32 -0
- package/dist/cjs/pivot/pivotConfig.js.map +1 -0
- package/dist/cjs/types/api.d.ts +447 -0
- package/dist/cjs/types/api.d.ts.map +1 -1
- package/dist/cjs/types/api.js +50 -1
- package/dist/cjs/types/api.js.map +1 -1
- package/dist/cjs/types/auth.d.ts +2 -1
- package/dist/cjs/types/auth.d.ts.map +1 -1
- package/dist/cjs/types/auth.js +4 -4
- package/dist/cjs/types/auth.js.map +1 -1
- package/dist/cjs/types/changeset.d.ts +10 -10
- package/dist/cjs/types/pivot.d.ts +0 -2
- package/dist/cjs/types/pivot.d.ts.map +1 -1
- package/dist/cjs/types/pivot.js +0 -29
- package/dist/cjs/types/pivot.js.map +1 -1
- package/dist/cjs/types/resourceViewItem.d.ts +1 -1
- package/dist/esm/.tsbuildinfo +1 -0
- package/dist/esm/authorization/index.d.ts +1 -4
- package/dist/esm/authorization/index.d.ts.map +1 -1
- package/dist/esm/authorization/index.js +0 -4
- package/dist/esm/authorization/index.js.map +1 -1
- package/dist/esm/ee/AiAgent/chartConfig/web/getWebAiChartConfig.d.ts +8 -8
- package/dist/esm/ee/AiAgent/index.d.ts +2 -2
- package/dist/esm/ee/AiAgent/schemas/parser.d.ts +24 -24
- package/dist/esm/ee/AiAgent/schemas/tools/toolDashboardV2Args.d.ts +96 -96
- package/dist/esm/ee/AiAgent/schemas/tools/toolRunQueryArgs.d.ts +48 -48
- package/dist/esm/ee/AiAgent/utils.d.ts +8 -8
- package/dist/esm/index.d.ts +23 -449
- package/dist/esm/index.d.ts.map +1 -1
- package/dist/esm/index.js +16 -50
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/pivot/index.d.ts +1 -0
- package/dist/esm/pivot/index.d.ts.map +1 -1
- package/dist/esm/pivot/index.js +1 -0
- package/dist/esm/pivot/index.js.map +1 -1
- package/dist/esm/pivot/pivotConfig.d.ts +7 -0
- package/dist/esm/pivot/pivotConfig.d.ts.map +1 -0
- package/dist/esm/pivot/pivotConfig.js +28 -0
- package/dist/esm/pivot/pivotConfig.js.map +1 -0
- package/dist/esm/types/api.d.ts +447 -0
- package/dist/esm/types/api.d.ts.map +1 -1
- package/dist/esm/types/api.js +46 -0
- package/dist/esm/types/api.js.map +1 -1
- package/dist/esm/types/auth.d.ts +2 -1
- package/dist/esm/types/auth.d.ts.map +1 -1
- package/dist/esm/types/auth.js +2 -2
- package/dist/esm/types/auth.js.map +1 -1
- package/dist/esm/types/changeset.d.ts +10 -10
- package/dist/esm/types/pivot.d.ts +0 -2
- package/dist/esm/types/pivot.d.ts.map +1 -1
- package/dist/esm/types/pivot.js +1 -27
- package/dist/esm/types/pivot.js.map +1 -1
- package/dist/esm/types/resourceViewItem.d.ts +1 -1
- package/dist/types/.tsbuildinfo +1 -0
- package/dist/types/authorization/buildAccountHelpers.js +11 -0
- package/dist/types/authorization/buildAccountHelpers.js.map +1 -0
- package/dist/types/authorization/index.d.ts +1 -4
- package/dist/types/authorization/index.d.ts.map +1 -1
- package/dist/types/authorization/index.js +62 -0
- package/dist/types/authorization/index.js.map +1 -0
- package/dist/types/authorization/index.mock.js +42 -0
- package/dist/types/authorization/index.mock.js.map +1 -0
- package/dist/types/authorization/index.test.js +220 -0
- package/dist/types/authorization/index.test.js.map +1 -0
- package/dist/types/authorization/jwtAbility.js +77 -0
- package/dist/types/authorization/jwtAbility.js.map +1 -0
- package/dist/types/authorization/jwtAbility.test.js +416 -0
- package/dist/types/authorization/jwtAbility.test.js.map +1 -0
- package/dist/types/authorization/organizationMemberAbility.js +318 -0
- package/dist/types/authorization/organizationMemberAbility.js.map +1 -0
- package/dist/types/authorization/organizationMemberAbility.mock.js +34 -0
- package/dist/types/authorization/organizationMemberAbility.mock.js.map +1 -0
- package/dist/types/authorization/organizationMemberAbility.test.js +1265 -0
- package/dist/types/authorization/organizationMemberAbility.test.js.map +1 -0
- package/dist/types/authorization/parseAccount.js +28 -0
- package/dist/types/authorization/parseAccount.js.map +1 -0
- package/dist/types/authorization/parseScopes.js +31 -0
- package/dist/types/authorization/parseScopes.js.map +1 -0
- package/dist/types/authorization/parseScopes.test.js +102 -0
- package/dist/types/authorization/parseScopes.test.js.map +1 -0
- package/dist/types/authorization/projectMemberAbility.js +239 -0
- package/dist/types/authorization/projectMemberAbility.js.map +1 -0
- package/dist/types/authorization/projectMemberAbility.mock.js +27 -0
- package/dist/types/authorization/projectMemberAbility.mock.js.map +1 -0
- package/dist/types/authorization/projectMemberAbility.test.js +1031 -0
- package/dist/types/authorization/projectMemberAbility.test.js.map +1 -0
- package/dist/types/authorization/roleToScopeMapping.js +150 -0
- package/dist/types/authorization/roleToScopeMapping.js.map +1 -0
- package/dist/types/authorization/roleToScopeMapping.test.js +561 -0
- package/dist/types/authorization/roleToScopeMapping.test.js.map +1 -0
- package/dist/types/authorization/roleToScopeMapping.testUtils.js +319 -0
- package/dist/types/authorization/roleToScopeMapping.testUtils.js.map +1 -0
- package/dist/types/authorization/roleToScopeParity.test.js +194 -0
- package/dist/types/authorization/roleToScopeParity.test.js.map +1 -0
- package/dist/types/authorization/scopeAbilityBuilder.js +57 -0
- package/dist/types/authorization/scopeAbilityBuilder.js.map +1 -0
- package/dist/types/authorization/scopeAbilityBuilder.test.js +1348 -0
- package/dist/types/authorization/scopeAbilityBuilder.test.js.map +1 -0
- package/dist/types/authorization/scopes.js +613 -0
- package/dist/types/authorization/scopes.js.map +1 -0
- package/dist/types/authorization/serviceAccountAbility.js +303 -0
- package/dist/types/authorization/serviceAccountAbility.js.map +1 -0
- package/dist/types/authorization/types.js +2 -0
- package/dist/types/authorization/types.js.map +1 -0
- package/dist/types/compiler/exploreCompiler.js +462 -0
- package/dist/types/compiler/exploreCompiler.js.map +1 -0
- package/dist/types/compiler/exploreCompiler.mock.js +2016 -0
- package/dist/types/compiler/exploreCompiler.mock.js.map +1 -0
- package/dist/types/compiler/exploreCompiler.test.js +679 -0
- package/dist/types/compiler/exploreCompiler.test.js.map +1 -0
- package/dist/types/compiler/fieldSetExpander.js +119 -0
- package/dist/types/compiler/fieldSetExpander.js.map +1 -0
- package/dist/types/compiler/fieldSetExpander.test.js +184 -0
- package/dist/types/compiler/fieldSetExpander.test.js.map +1 -0
- package/dist/types/compiler/filtersCompiler.js +337 -0
- package/dist/types/compiler/filtersCompiler.js.map +1 -0
- package/dist/types/compiler/filtersCompiler.mock.js +496 -0
- package/dist/types/compiler/filtersCompiler.mock.js.map +1 -0
- package/dist/types/compiler/filtersCompiler.test.js +570 -0
- package/dist/types/compiler/filtersCompiler.test.js.map +1 -0
- package/dist/types/compiler/lightdashProjectConfig.js +37 -0
- package/dist/types/compiler/lightdashProjectConfig.js.map +1 -0
- package/dist/types/compiler/parameters.js +75 -0
- package/dist/types/compiler/parameters.js.map +1 -0
- package/dist/types/compiler/parameters.test.js +216 -0
- package/dist/types/compiler/parameters.test.js.map +1 -0
- package/dist/types/compiler/translator.js +707 -0
- package/dist/types/compiler/translator.js.map +1 -0
- package/dist/types/compiler/translator.mock.js +1901 -0
- package/dist/types/compiler/translator.mock.js.map +1 -0
- package/dist/types/compiler/translator.test.js +323 -0
- package/dist/types/compiler/translator.test.js.map +1 -0
- package/dist/types/constants/pivot.js +7 -0
- package/dist/types/constants/pivot.js.map +1 -0
- package/dist/types/constants/sessionStorageKeys.js +6 -0
- package/dist/types/constants/sessionStorageKeys.js.map +1 -0
- package/dist/types/constants/sqlRunner.js +3 -0
- package/dist/types/constants/sqlRunner.js.map +1 -0
- package/dist/types/dbt/DbtSchemaEditor/DbtSchemaEditor.js +285 -0
- package/dist/types/dbt/DbtSchemaEditor/DbtSchemaEditor.js.map +1 -0
- package/dist/types/dbt/DbtSchemaEditor/DbtSchemaEditor.mock.js +224 -0
- package/dist/types/dbt/DbtSchemaEditor/DbtSchemaEditor.mock.js.map +1 -0
- package/dist/types/dbt/DbtSchemaEditor/DbtSchemaEditor.test.js +129 -0
- package/dist/types/dbt/DbtSchemaEditor/DbtSchemaEditor.test.js.map +1 -0
- package/dist/types/dbt/schemas/lightdashMetadata.json +385 -0
- package/dist/types/dbt/schemas/lightdashV10.json +72 -0
- package/dist/types/dbt/schemas/lightdashV11.json +72 -0
- package/dist/types/dbt/schemas/lightdashV12.json +63 -0
- package/dist/types/dbt/schemas/lightdashV7.json +72 -0
- package/dist/types/dbt/schemas/lightdashV8.json +76 -0
- package/dist/types/dbt/schemas/lightdashV9.json +72 -0
- package/dist/types/dbt/schemas/manifestV10.json +5545 -0
- package/dist/types/dbt/schemas/manifestV11.json +6041 -0
- package/dist/types/dbt/schemas/manifestV12.json +22567 -0
- package/dist/types/dbt/schemas/manifestV7.json +6481 -0
- package/dist/types/dbt/schemas/manifestV8.json +4358 -0
- package/dist/types/dbt/schemas/manifestV9.json +4879 -0
- package/dist/types/dbt/validation.js +67 -0
- package/dist/types/dbt/validation.js.map +1 -0
- package/dist/types/ee/AiAgent/adminTypes.js +2 -0
- package/dist/types/ee/AiAgent/adminTypes.js.map +1 -0
- package/dist/types/ee/AiAgent/chartConfig/shared/formatFieldLabel.js +10 -0
- package/dist/types/ee/AiAgent/chartConfig/shared/formatFieldLabel.js.map +1 -0
- package/dist/types/ee/AiAgent/chartConfig/slack/generateBarVizConfigTool/getVerticalBarChartEchartsConfig.js +60 -0
- package/dist/types/ee/AiAgent/chartConfig/slack/generateBarVizConfigTool/getVerticalBarChartEchartsConfig.js.map +1 -0
- package/dist/types/ee/AiAgent/chartConfig/slack/generateTimeSeriesVizConfigTool/getTimeSeriesChartEchartsConfig.js +60 -0
- package/dist/types/ee/AiAgent/chartConfig/slack/generateTimeSeriesVizConfigTool/getTimeSeriesChartEchartsConfig.js.map +1 -0
- package/dist/types/ee/AiAgent/chartConfig/slack/getSlackAiEchartsConfig.js +33 -0
- package/dist/types/ee/AiAgent/chartConfig/slack/getSlackAiEchartsConfig.js.map +1 -0
- package/dist/types/ee/AiAgent/chartConfig/slack/index.js +2 -0
- package/dist/types/ee/AiAgent/chartConfig/slack/index.js.map +1 -0
- package/dist/types/ee/AiAgent/chartConfig/slack/runQueryTool/getRunQueryEchartsConfig.js +43 -0
- package/dist/types/ee/AiAgent/chartConfig/slack/runQueryTool/getRunQueryEchartsConfig.js.map +1 -0
- package/dist/types/ee/AiAgent/chartConfig/slack/runQueryTool/viz/bar.js +98 -0
- package/dist/types/ee/AiAgent/chartConfig/slack/runQueryTool/viz/bar.js.map +1 -0
- package/dist/types/ee/AiAgent/chartConfig/slack/runQueryTool/viz/funnel.js +38 -0
- package/dist/types/ee/AiAgent/chartConfig/slack/runQueryTool/viz/funnel.js.map +1 -0
- package/dist/types/ee/AiAgent/chartConfig/slack/runQueryTool/viz/horizontalBar.js +65 -0
- package/dist/types/ee/AiAgent/chartConfig/slack/runQueryTool/viz/horizontalBar.js.map +1 -0
- package/dist/types/ee/AiAgent/chartConfig/slack/runQueryTool/viz/line.js +105 -0
- package/dist/types/ee/AiAgent/chartConfig/slack/runQueryTool/viz/line.js.map +1 -0
- package/dist/types/ee/AiAgent/chartConfig/slack/runQueryTool/viz/pie.js +34 -0
- package/dist/types/ee/AiAgent/chartConfig/slack/runQueryTool/viz/pie.js.map +1 -0
- package/dist/types/ee/AiAgent/chartConfig/slack/runQueryTool/viz/scatter.js +66 -0
- package/dist/types/ee/AiAgent/chartConfig/slack/runQueryTool/viz/scatter.js.map +1 -0
- package/dist/types/ee/AiAgent/chartConfig/slack/shared/getCommonEChartsConfig.js +104 -0
- package/dist/types/ee/AiAgent/chartConfig/slack/shared/getCommonEChartsConfig.js.map +1 -0
- package/dist/types/ee/AiAgent/chartConfig/slack/types.js +2 -0
- package/dist/types/ee/AiAgent/chartConfig/slack/types.js.map +1 -0
- package/dist/types/ee/AiAgent/chartConfig/web/generateBarVizConfigTool/getVerticalBarChartConfig.js +65 -0
- package/dist/types/ee/AiAgent/chartConfig/web/generateBarVizConfigTool/getVerticalBarChartConfig.js.map +1 -0
- package/dist/types/ee/AiAgent/chartConfig/web/generateTableVizConfigTool/getTableChartConfig.js +5 -0
- package/dist/types/ee/AiAgent/chartConfig/web/generateTableVizConfigTool/getTableChartConfig.js.map +1 -0
- package/dist/types/ee/AiAgent/chartConfig/web/generateTimeSeriesVizConfigTool/getTimeSeriesChartConfig.js +63 -0
- package/dist/types/ee/AiAgent/chartConfig/web/generateTimeSeriesVizConfigTool/getTimeSeriesChartConfig.js.map +1 -0
- package/dist/types/ee/AiAgent/chartConfig/web/getWebAiChartConfig.d.ts +8 -8
- package/dist/types/ee/AiAgent/chartConfig/web/getWebAiChartConfig.js +51 -0
- package/dist/types/ee/AiAgent/chartConfig/web/getWebAiChartConfig.js.map +1 -0
- package/dist/types/ee/AiAgent/chartConfig/web/index.js +6 -0
- package/dist/types/ee/AiAgent/chartConfig/web/index.js.map +1 -0
- package/dist/types/ee/AiAgent/chartConfig/web/runQueryTool/getRunQueryChartConfig.js +73 -0
- package/dist/types/ee/AiAgent/chartConfig/web/runQueryTool/getRunQueryChartConfig.js.map +1 -0
- package/dist/types/ee/AiAgent/chartConfig/web/runQueryTool/viz/bar.js +91 -0
- package/dist/types/ee/AiAgent/chartConfig/web/runQueryTool/viz/bar.js.map +1 -0
- package/dist/types/ee/AiAgent/chartConfig/web/runQueryTool/viz/funnel.js +17 -0
- package/dist/types/ee/AiAgent/chartConfig/web/runQueryTool/viz/funnel.js.map +1 -0
- package/dist/types/ee/AiAgent/chartConfig/web/runQueryTool/viz/horizontalBar.js +52 -0
- package/dist/types/ee/AiAgent/chartConfig/web/runQueryTool/viz/horizontalBar.js.map +1 -0
- package/dist/types/ee/AiAgent/chartConfig/web/runQueryTool/viz/line.js +96 -0
- package/dist/types/ee/AiAgent/chartConfig/web/runQueryTool/viz/line.js.map +1 -0
- package/dist/types/ee/AiAgent/chartConfig/web/runQueryTool/viz/pie.js +15 -0
- package/dist/types/ee/AiAgent/chartConfig/web/runQueryTool/viz/pie.js.map +1 -0
- package/dist/types/ee/AiAgent/chartConfig/web/runQueryTool/viz/scatter.js +66 -0
- package/dist/types/ee/AiAgent/chartConfig/web/runQueryTool/viz/scatter.js.map +1 -0
- package/dist/types/ee/AiAgent/chartConfig/web/shared/canRenderAsChart.js +24 -0
- package/dist/types/ee/AiAgent/chartConfig/web/shared/canRenderAsChart.js.map +1 -0
- package/dist/types/ee/AiAgent/chartConfig/web/shared/formatPivotValueLabel.js +15 -0
- package/dist/types/ee/AiAgent/chartConfig/web/shared/formatPivotValueLabel.js.map +1 -0
- package/dist/types/ee/AiAgent/chartConfig/web/shared/getAvailableChartTypes.js +11 -0
- package/dist/types/ee/AiAgent/chartConfig/web/shared/getAvailableChartTypes.js.map +1 -0
- package/dist/types/ee/AiAgent/chartConfig/web/shared/getGroupByDimensions.js +15 -0
- package/dist/types/ee/AiAgent/chartConfig/web/shared/getGroupByDimensions.js.map +1 -0
- package/dist/types/ee/AiAgent/chartConfig/web/types.js +2 -0
- package/dist/types/ee/AiAgent/chartConfig/web/types.js.map +1 -0
- package/dist/types/ee/AiAgent/constants.js +2 -0
- package/dist/types/ee/AiAgent/constants.js.map +1 -0
- package/dist/types/ee/AiAgent/filterExploreByTags.js +94 -0
- package/dist/types/ee/AiAgent/filterExploreByTags.js.map +1 -0
- package/dist/types/ee/AiAgent/filterExploreByTags.test.js +634 -0
- package/dist/types/ee/AiAgent/filterExploreByTags.test.js.map +1 -0
- package/dist/types/ee/AiAgent/followUpTools.js +33 -0
- package/dist/types/ee/AiAgent/followUpTools.js.map +1 -0
- package/dist/types/ee/AiAgent/index.d.ts +2 -2
- package/dist/types/ee/AiAgent/index.js +43 -0
- package/dist/types/ee/AiAgent/index.js.map +1 -0
- package/dist/types/ee/AiAgent/requestTypes.js +2 -0
- package/dist/types/ee/AiAgent/requestTypes.js.map +1 -0
- package/dist/types/ee/AiAgent/schemas/customMetrics.js +50 -0
- package/dist/types/ee/AiAgent/schemas/customMetrics.js.map +1 -0
- package/dist/types/ee/AiAgent/schemas/fieldId.js +11 -0
- package/dist/types/ee/AiAgent/schemas/fieldId.js.map +1 -0
- package/dist/types/ee/AiAgent/schemas/filters/booleanFilters.js +29 -0
- package/dist/types/ee/AiAgent/schemas/filters/booleanFilters.js.map +1 -0
- package/dist/types/ee/AiAgent/schemas/filters/dateFilters.js +84 -0
- package/dist/types/ee/AiAgent/schemas/filters/dateFilters.js.map +1 -0
- package/dist/types/ee/AiAgent/schemas/filters/index.js +98 -0
- package/dist/types/ee/AiAgent/schemas/filters/index.js.map +1 -0
- package/dist/types/ee/AiAgent/schemas/filters/numberFilters.js +53 -0
- package/dist/types/ee/AiAgent/schemas/filters/numberFilters.js.map +1 -0
- package/dist/types/ee/AiAgent/schemas/filters/stringFilters.js +33 -0
- package/dist/types/ee/AiAgent/schemas/filters/stringFilters.js.map +1 -0
- package/dist/types/ee/AiAgent/schemas/index.js +9 -0
- package/dist/types/ee/AiAgent/schemas/index.js.map +1 -0
- package/dist/types/ee/AiAgent/schemas/outputMetadata.js +5 -0
- package/dist/types/ee/AiAgent/schemas/outputMetadata.js.map +1 -0
- package/dist/types/ee/AiAgent/schemas/parser.d.ts +24 -24
- package/dist/types/ee/AiAgent/schemas/parser.js +43 -0
- package/dist/types/ee/AiAgent/schemas/parser.js.map +1 -0
- package/dist/types/ee/AiAgent/schemas/sortField.js +14 -0
- package/dist/types/ee/AiAgent/schemas/sortField.js.map +1 -0
- package/dist/types/ee/AiAgent/schemas/tableCalcs/tableCalcBaseSchemas.js +28 -0
- package/dist/types/ee/AiAgent/schemas/tableCalcs/tableCalcBaseSchemas.js.map +1 -0
- package/dist/types/ee/AiAgent/schemas/tableCalcs/tableCalcPercentChangeFromPrevious.js +14 -0
- package/dist/types/ee/AiAgent/schemas/tableCalcs/tableCalcPercentChangeFromPrevious.js.map +1 -0
- package/dist/types/ee/AiAgent/schemas/tableCalcs/tableCalcPercentOfColumnTotal.js +14 -0
- package/dist/types/ee/AiAgent/schemas/tableCalcs/tableCalcPercentOfColumnTotal.js.map +1 -0
- package/dist/types/ee/AiAgent/schemas/tableCalcs/tableCalcPercentOfPreviousValue.js +14 -0
- package/dist/types/ee/AiAgent/schemas/tableCalcs/tableCalcPercentOfPreviousValue.js.map +1 -0
- package/dist/types/ee/AiAgent/schemas/tableCalcs/tableCalcRankInColumn.js +10 -0
- package/dist/types/ee/AiAgent/schemas/tableCalcs/tableCalcRankInColumn.js.map +1 -0
- package/dist/types/ee/AiAgent/schemas/tableCalcs/tableCalcRunningTotal.js +10 -0
- package/dist/types/ee/AiAgent/schemas/tableCalcs/tableCalcRunningTotal.js.map +1 -0
- package/dist/types/ee/AiAgent/schemas/tableCalcs/tableCalcWindowFunction.js +105 -0
- package/dist/types/ee/AiAgent/schemas/tableCalcs/tableCalcWindowFunction.js.map +1 -0
- package/dist/types/ee/AiAgent/schemas/tableCalcs/tableCalcs.js +168 -0
- package/dist/types/ee/AiAgent/schemas/tableCalcs/tableCalcs.js.map +1 -0
- package/dist/types/ee/AiAgent/schemas/toolSchemaBuilder.js +37 -0
- package/dist/types/ee/AiAgent/schemas/toolSchemaBuilder.js.map +1 -0
- package/dist/types/ee/AiAgent/schemas/tools/index.js +16 -0
- package/dist/types/ee/AiAgent/schemas/tools/index.js.map +1 -0
- package/dist/types/ee/AiAgent/schemas/tools/toolDashboardArgs.js +103 -0
- package/dist/types/ee/AiAgent/schemas/tools/toolDashboardArgs.js.map +1 -0
- package/dist/types/ee/AiAgent/schemas/tools/toolDashboardV2Args.d.ts +96 -96
- package/dist/types/ee/AiAgent/schemas/tools/toolDashboardV2Args.js +50 -0
- package/dist/types/ee/AiAgent/schemas/tools/toolDashboardV2Args.js.map +1 -0
- package/dist/types/ee/AiAgent/schemas/tools/toolFindChartsArgs.js +34 -0
- package/dist/types/ee/AiAgent/schemas/tools/toolFindChartsArgs.js.map +1 -0
- package/dist/types/ee/AiAgent/schemas/tools/toolFindContentArgs.js +33 -0
- package/dist/types/ee/AiAgent/schemas/tools/toolFindContentArgs.js.map +1 -0
- package/dist/types/ee/AiAgent/schemas/tools/toolFindDashboardsArgs.js +36 -0
- package/dist/types/ee/AiAgent/schemas/tools/toolFindDashboardsArgs.js.map +1 -0
- package/dist/types/ee/AiAgent/schemas/tools/toolFindExploresArgs.js +45 -0
- package/dist/types/ee/AiAgent/schemas/tools/toolFindExploresArgs.js.map +1 -0
- package/dist/types/ee/AiAgent/schemas/tools/toolFindFieldsArgs.js +34 -0
- package/dist/types/ee/AiAgent/schemas/tools/toolFindFieldsArgs.js.map +1 -0
- package/dist/types/ee/AiAgent/schemas/tools/toolImproveContextArgs.js +60 -0
- package/dist/types/ee/AiAgent/schemas/tools/toolImproveContextArgs.js.map +1 -0
- package/dist/types/ee/AiAgent/schemas/tools/toolProposeChangeArgs.js +157 -0
- package/dist/types/ee/AiAgent/schemas/tools/toolProposeChangeArgs.js.map +1 -0
- package/dist/types/ee/AiAgent/schemas/tools/toolRunMetricQueryArgs.js +41 -0
- package/dist/types/ee/AiAgent/schemas/tools/toolRunMetricQueryArgs.js.map +1 -0
- package/dist/types/ee/AiAgent/schemas/tools/toolRunQueryArgs.d.ts +48 -48
- package/dist/types/ee/AiAgent/schemas/tools/toolRunQueryArgs.js +151 -0
- package/dist/types/ee/AiAgent/schemas/tools/toolRunQueryArgs.js.map +1 -0
- package/dist/types/ee/AiAgent/schemas/tools/toolSearchFieldValuesArgs.js +46 -0
- package/dist/types/ee/AiAgent/schemas/tools/toolSearchFieldValuesArgs.js.map +1 -0
- package/dist/types/ee/AiAgent/schemas/tools/toolTableVizArgs.js +53 -0
- package/dist/types/ee/AiAgent/schemas/tools/toolTableVizArgs.js.map +1 -0
- package/dist/types/ee/AiAgent/schemas/tools/toolTimeSeriesArgs.js +58 -0
- package/dist/types/ee/AiAgent/schemas/tools/toolTimeSeriesArgs.js.map +1 -0
- package/dist/types/ee/AiAgent/schemas/tools/toolVerticalBarArgs.js +53 -0
- package/dist/types/ee/AiAgent/schemas/tools/toolVerticalBarArgs.js.map +1 -0
- package/dist/types/ee/AiAgent/schemas/visualizationMetadata.js +9 -0
- package/dist/types/ee/AiAgent/schemas/visualizationMetadata.js.map +1 -0
- package/dist/types/ee/AiAgent/schemas/visualizations/index.js +58 -0
- package/dist/types/ee/AiAgent/schemas/visualizations/index.js.map +1 -0
- package/dist/types/ee/AiAgent/schemas/visualizations/tableViz.js +38 -0
- package/dist/types/ee/AiAgent/schemas/visualizations/tableViz.js.map +1 -0
- package/dist/types/ee/AiAgent/schemas/visualizations/timeSeriesViz.js +63 -0
- package/dist/types/ee/AiAgent/schemas/visualizations/timeSeriesViz.js.map +1 -0
- package/dist/types/ee/AiAgent/schemas/visualizations/verticalBarViz.js +68 -0
- package/dist/types/ee/AiAgent/schemas/visualizations/verticalBarViz.js.map +1 -0
- package/dist/types/ee/AiAgent/types.js +12 -0
- package/dist/types/ee/AiAgent/types.js.map +1 -0
- package/dist/types/ee/AiAgent/utils.d.ts +8 -8
- package/dist/types/ee/AiAgent/utils.js +82 -0
- package/dist/types/ee/AiAgent/utils.js.map +1 -0
- package/dist/types/ee/AiAgent/validators.js +10 -0
- package/dist/types/ee/AiAgent/validators.js.map +1 -0
- package/dist/types/ee/commercialFeatureFlags.js +10 -0
- package/dist/types/ee/commercialFeatureFlags.js.map +1 -0
- package/dist/types/ee/embed/index.js +90 -0
- package/dist/types/ee/embed/index.js.map +1 -0
- package/dist/types/ee/index.js +19 -0
- package/dist/types/ee/index.js.map +1 -0
- package/dist/types/ee/scim/errors.js +22 -0
- package/dist/types/ee/scim/errors.js.map +1 -0
- package/dist/types/ee/scim/types.js +2 -0
- package/dist/types/ee/scim/types.js.map +1 -0
- package/dist/types/ee/serviceAccounts/types.js +8 -0
- package/dist/types/ee/serviceAccounts/types.js.map +1 -0
- package/dist/types/index.d.ts +23 -449
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js +652 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/index.mock.js +44 -0
- package/dist/types/index.mock.js.map +1 -0
- package/dist/types/index.test.js +123 -0
- package/dist/types/index.test.js.map +1 -0
- package/dist/types/pivot/derivePivotConfigFromChart.js +206 -0
- package/dist/types/pivot/derivePivotConfigFromChart.js.map +1 -0
- package/dist/types/pivot/derivePivotConfigFromChart.mock.js +112 -0
- package/dist/types/pivot/derivePivotConfigFromChart.mock.js.map +1 -0
- package/dist/types/pivot/derivePivotConfigFromChart.test.js +418 -0
- package/dist/types/pivot/derivePivotConfigFromChart.test.js.map +1 -0
- package/dist/types/pivot/index.d.ts +1 -0
- package/dist/types/pivot/index.d.ts.map +1 -1
- package/dist/types/pivot/index.js +5 -0
- package/dist/types/pivot/index.js.map +1 -0
- package/dist/types/pivot/pivotConfig.d.ts +7 -0
- package/dist/types/pivot/pivotConfig.d.ts.map +1 -0
- package/dist/types/pivot/pivotConfig.js +28 -0
- package/dist/types/pivot/pivotConfig.js.map +1 -0
- package/dist/types/pivot/pivotQueryResults.js +1034 -0
- package/dist/types/pivot/pivotQueryResults.js.map +1 -0
- package/dist/types/pivot/pivotQueryResults.mock.js +2412 -0
- package/dist/types/pivot/pivotQueryResults.mock.js.map +1 -0
- package/dist/types/pivot/pivotQueryResults.test.js +1222 -0
- package/dist/types/pivot/pivotQueryResults.test.js.map +1 -0
- package/dist/types/pivot/utils.js +14 -0
- package/dist/types/pivot/utils.js.map +1 -0
- package/dist/types/schemas/json/chart-as-code-1.0.json +436 -0
- package/dist/types/schemas/json/dashboard-as-code-1.0.json +349 -0
- package/dist/types/schemas/json/lightdash-dbt-2.0.json +1417 -0
- package/dist/types/schemas/json/lightdash-project-config-1.0.json +138 -0
- package/dist/types/templating/template.js +30 -0
- package/dist/types/templating/template.js.map +1 -0
- package/dist/types/templating/template.mock.js +45 -0
- package/dist/types/templating/template.mock.js.map +1 -0
- package/dist/types/templating/template.test.js +21 -0
- package/dist/types/templating/template.test.js.map +1 -0
- package/dist/types/types/SshKeyPair.js +2 -0
- package/dist/types/types/SshKeyPair.js.map +1 -0
- package/dist/types/types/account.js +2 -0
- package/dist/types/types/account.js.map +1 -0
- package/dist/types/types/analytics.js +29 -0
- package/dist/types/types/analytics.js.map +1 -0
- package/dist/types/types/any.js +2 -0
- package/dist/types/types/any.js.map +1 -0
- package/dist/types/types/api/comments.js +2 -0
- package/dist/types/types/api/comments.js.map +1 -0
- package/dist/types/types/api/email.js +2 -0
- package/dist/types/types/api/email.js.map +1 -0
- package/dist/types/types/api/errors.js +2 -0
- package/dist/types/types/api/errors.js.map +1 -0
- package/dist/types/types/api/notifications.js +5 -0
- package/dist/types/types/api/notifications.js.map +1 -0
- package/dist/types/types/api/paginatedQuery.js +3 -0
- package/dist/types/types/api/paginatedQuery.js.map +1 -0
- package/dist/types/types/api/parameters.js +2 -0
- package/dist/types/types/api/parameters.js.map +1 -0
- package/dist/types/types/api/share.js +2 -0
- package/dist/types/types/api/share.js.map +1 -0
- package/dist/types/types/api/sort.js +2 -0
- package/dist/types/types/api/sort.js.map +1 -0
- package/dist/types/types/api/spotlight.js +2 -0
- package/dist/types/types/api/spotlight.js.map +1 -0
- package/dist/types/types/api/success.js +2 -0
- package/dist/types/types/api/success.js.map +1 -0
- package/dist/types/types/api/uuid.js +2 -0
- package/dist/types/types/api/uuid.js.map +1 -0
- package/dist/types/types/api.d.ts +447 -0
- package/dist/types/types/api.d.ts.map +1 -1
- package/dist/types/types/api.js +57 -0
- package/dist/types/types/api.js.map +1 -0
- package/dist/types/types/applyDimensionOverrides.test.js +338 -0
- package/dist/types/types/applyDimensionOverrides.test.js.map +1 -0
- package/dist/types/types/auth.d.ts +2 -1
- package/dist/types/types/auth.d.ts.map +1 -1
- package/dist/types/types/auth.js +42 -0
- package/dist/types/types/auth.js.map +1 -0
- package/dist/types/types/bigQuerySSO.js +2 -0
- package/dist/types/types/bigQuerySSO.js.map +1 -0
- package/dist/types/types/catalog.js +50 -0
- package/dist/types/types/catalog.js.map +1 -0
- package/dist/types/types/changeset.d.ts +10 -10
- package/dist/types/types/changeset.js +72 -0
- package/dist/types/types/changeset.js.map +1 -0
- package/dist/types/types/coder.js +2 -0
- package/dist/types/types/coder.js.map +1 -0
- package/dist/types/types/comments.js +2 -0
- package/dist/types/types/comments.js.map +1 -0
- package/dist/types/types/conditionalFormatting.js +25 -0
- package/dist/types/types/conditionalFormatting.js.map +1 -0
- package/dist/types/types/content.js +19 -0
- package/dist/types/types/content.js.map +1 -0
- package/dist/types/types/csv.js +2 -0
- package/dist/types/types/csv.js.map +1 -0
- package/dist/types/types/dashboard.js +46 -0
- package/dist/types/types/dashboard.js.map +1 -0
- package/dist/types/types/dbt.js +262 -0
- package/dist/types/types/dbt.js.map +1 -0
- package/dist/types/types/dbtFromSchema.js +2 -0
- package/dist/types/types/dbtFromSchema.js.map +1 -0
- package/dist/types/types/deepPartial.js +7 -0
- package/dist/types/types/deepPartial.js.map +1 -0
- package/dist/types/types/downloadFile.js +9 -0
- package/dist/types/types/downloadFile.js.map +1 -0
- package/dist/types/types/email.js +2 -0
- package/dist/types/types/email.js.map +1 -0
- package/dist/types/types/errors.js +496 -0
- package/dist/types/types/errors.js.map +1 -0
- package/dist/types/types/explore.js +24 -0
- package/dist/types/types/explore.js.map +1 -0
- package/dist/types/types/featureFlags.js +62 -0
- package/dist/types/types/featureFlags.js.map +1 -0
- package/dist/types/types/field.js +473 -0
- package/dist/types/types/field.js.map +1 -0
- package/dist/types/types/field.test.js +90 -0
- package/dist/types/types/field.test.js.map +1 -0
- package/dist/types/types/fieldMatch.js +2 -0
- package/dist/types/types/fieldMatch.js.map +1 -0
- package/dist/types/types/filter.js +287 -0
- package/dist/types/types/filter.js.map +1 -0
- package/dist/types/types/filter.test.js +372 -0
- package/dist/types/types/filter.test.js.map +1 -0
- package/dist/types/types/filterGrammar.js +358 -0
- package/dist/types/types/filterGrammar.js.map +1 -0
- package/dist/types/types/filterGrammar.test.js +549 -0
- package/dist/types/types/filterGrammar.test.js.map +1 -0
- package/dist/types/types/filterGrammarConversion.js +94 -0
- package/dist/types/types/filterGrammarConversion.js.map +1 -0
- package/dist/types/types/filterGrammarConversion.test.js +260 -0
- package/dist/types/types/filterGrammarConversion.test.js.map +1 -0
- package/dist/types/types/gdrive.js +2 -0
- package/dist/types/types/gdrive.js.map +1 -0
- package/dist/types/types/gitIntegration.js +2 -0
- package/dist/types/types/gitIntegration.js.map +1 -0
- package/dist/types/types/groups.js +4 -0
- package/dist/types/types/groups.js.map +1 -0
- package/dist/types/types/job.js +67 -0
- package/dist/types/types/job.js.map +1 -0
- package/dist/types/types/knex-paginate.js +2 -0
- package/dist/types/types/knex-paginate.js.map +1 -0
- package/dist/types/types/lightdashProjectConfig.js +4 -0
- package/dist/types/types/lightdashProjectConfig.js.map +1 -0
- package/dist/types/types/metricQuery.js +20 -0
- package/dist/types/types/metricQuery.js.map +1 -0
- package/dist/types/types/metricsExplorer.js +12 -0
- package/dist/types/types/metricsExplorer.js.map +1 -0
- package/dist/types/types/notifications.js +2 -0
- package/dist/types/types/notifications.js.map +1 -0
- package/dist/types/types/oauth.js +2 -0
- package/dist/types/types/oauth.js.map +1 -0
- package/dist/types/types/openIdIdentity.js +12 -0
- package/dist/types/types/openIdIdentity.js.map +1 -0
- package/dist/types/types/organization.js +20 -0
- package/dist/types/types/organization.js.map +1 -0
- package/dist/types/types/organizationMemberProfile.js +30 -0
- package/dist/types/types/organizationMemberProfile.js.map +1 -0
- package/dist/types/types/organizationWarehouseCredentials.js +2 -0
- package/dist/types/types/organizationWarehouseCredentials.js.map +1 -0
- package/dist/types/types/paginateResults.js +2 -0
- package/dist/types/types/paginateResults.js.map +1 -0
- package/dist/types/types/parameters.js +2 -0
- package/dist/types/types/parameters.js.map +1 -0
- package/dist/types/types/personalAccessToken.js +2 -0
- package/dist/types/types/personalAccessToken.js.map +1 -0
- package/dist/types/types/pinning.js +5 -0
- package/dist/types/types/pinning.js.map +1 -0
- package/dist/types/types/pivot.d.ts +0 -2
- package/dist/types/types/pivot.d.ts.map +1 -1
- package/dist/types/types/pivot.js +2 -0
- package/dist/types/types/pivot.js.map +1 -0
- package/dist/types/types/projectGroupAccess.js +2 -0
- package/dist/types/types/projectGroupAccess.js.map +1 -0
- package/dist/types/types/projectMemberProfile.js +2 -0
- package/dist/types/types/projectMemberProfile.js.map +1 -0
- package/dist/types/types/projectMemberRole.js +30 -0
- package/dist/types/types/projectMemberRole.js.map +1 -0
- package/dist/types/types/projects.js +149 -0
- package/dist/types/types/projects.js.map +1 -0
- package/dist/types/types/promotion.js +8 -0
- package/dist/types/types/promotion.js.map +1 -0
- package/dist/types/types/queryHistory.js +8 -0
- package/dist/types/types/queryHistory.js.map +1 -0
- package/dist/types/types/rename.js +6 -0
- package/dist/types/types/rename.js.map +1 -0
- package/dist/types/types/resourceViewItem.d.ts +1 -1
- package/dist/types/types/resourceViewItem.js +103 -0
- package/dist/types/types/resourceViewItem.js.map +1 -0
- package/dist/types/types/results.js +51 -0
- package/dist/types/types/results.js.map +1 -0
- package/dist/types/types/roles.js +2 -0
- package/dist/types/types/roles.js.map +1 -0
- package/dist/types/types/savedCharts.js +225 -0
- package/dist/types/types/savedCharts.js.map +1 -0
- package/dist/types/types/scheduler.js +87 -0
- package/dist/types/types/scheduler.js.map +1 -0
- package/dist/types/types/schedulerLog.js +2 -0
- package/dist/types/types/schedulerLog.js.map +1 -0
- package/dist/types/types/schedulerTaskList.js +31 -0
- package/dist/types/types/schedulerTaskList.js.map +1 -0
- package/dist/types/types/scopes.js +14 -0
- package/dist/types/types/scopes.js.map +1 -0
- package/dist/types/types/search.js +53 -0
- package/dist/types/types/search.js.map +1 -0
- package/dist/types/types/share.js +2 -0
- package/dist/types/types/share.js.map +1 -0
- package/dist/types/types/slack.js +2 -0
- package/dist/types/types/slack.js.map +1 -0
- package/dist/types/types/slackSettings.js +2 -0
- package/dist/types/types/slackSettings.js.map +1 -0
- package/dist/types/types/space.js +7 -0
- package/dist/types/types/space.js.map +1 -0
- package/dist/types/types/spotlightTableConfig.js +17 -0
- package/dist/types/types/spotlightTableConfig.js.map +1 -0
- package/dist/types/types/sqlRunner.js +41 -0
- package/dist/types/types/sqlRunner.js.map +1 -0
- package/dist/types/types/table.js +6 -0
- package/dist/types/types/table.js.map +1 -0
- package/dist/types/types/tags.js +2 -0
- package/dist/types/types/tags.js.map +1 -0
- package/dist/types/types/timeFrames.js +42 -0
- package/dist/types/types/timeFrames.js.map +1 -0
- package/dist/types/types/timezone.js +33 -0
- package/dist/types/types/timezone.js.map +1 -0
- package/dist/types/types/user.js +23 -0
- package/dist/types/types/user.js.map +1 -0
- package/dist/types/types/userAttributes.js +2 -0
- package/dist/types/types/userAttributes.js.map +1 -0
- package/dist/types/types/userWarehouseCredentials.js +2 -0
- package/dist/types/types/userWarehouseCredentials.js.map +1 -0
- package/dist/types/types/validation.js +29 -0
- package/dist/types/types/validation.js.map +1 -0
- package/dist/types/types/warehouse.js +6 -0
- package/dist/types/types/warehouse.js.map +1 -0
- package/dist/types/types/yamlSchema.js +2 -0
- package/dist/types/types/yamlSchema.js.map +1 -0
- package/dist/types/utils/accessors.js +27 -0
- package/dist/types/utils/accessors.js.map +1 -0
- package/dist/types/utils/accessors.test.js +45 -0
- package/dist/types/utils/accessors.test.js.map +1 -0
- package/dist/types/utils/additionalMetrics.js +54 -0
- package/dist/types/utils/additionalMetrics.js.map +1 -0
- package/dist/types/utils/api.js +5 -0
- package/dist/types/utils/api.js.map +1 -0
- package/dist/types/utils/assertUnreachable.js +10 -0
- package/dist/types/utils/assertUnreachable.js.map +1 -0
- package/dist/types/utils/booleanConverter.js +27 -0
- package/dist/types/utils/booleanConverter.js.map +1 -0
- package/dist/types/utils/booleanConverter.test.js +59 -0
- package/dist/types/utils/booleanConverter.test.js.map +1 -0
- package/dist/types/utils/catalogMetricsTree.js +2 -0
- package/dist/types/utils/catalogMetricsTree.js.map +1 -0
- package/dist/types/utils/changeset.js +132 -0
- package/dist/types/utils/changeset.js.map +1 -0
- package/dist/types/utils/changeset.mock.js +146 -0
- package/dist/types/utils/changeset.mock.js.map +1 -0
- package/dist/types/utils/changeset.test.js +248 -0
- package/dist/types/utils/changeset.test.js.map +1 -0
- package/dist/types/utils/charts.js +74 -0
- package/dist/types/utils/charts.js.map +1 -0
- package/dist/types/utils/colors.js +15 -0
- package/dist/types/utils/colors.js.map +1 -0
- package/dist/types/utils/colors.test.js +85 -0
- package/dist/types/utils/colors.test.js.map +1 -0
- package/dist/types/utils/conditionalFormatting.js +436 -0
- package/dist/types/utils/conditionalFormatting.js.map +1 -0
- package/dist/types/utils/conditionalFormatting.test.js +105 -0
- package/dist/types/utils/conditionalFormatting.test.js.map +1 -0
- package/dist/types/utils/convertCustomDimensionsToYaml.js +115 -0
- package/dist/types/utils/convertCustomDimensionsToYaml.js.map +1 -0
- package/dist/types/utils/convertCustomMetricsToYaml.js +15 -0
- package/dist/types/utils/convertCustomMetricsToYaml.js.map +1 -0
- package/dist/types/utils/customDimensions.js +27 -0
- package/dist/types/utils/customDimensions.js.map +1 -0
- package/dist/types/utils/dashboard.js +35 -0
- package/dist/types/utils/dashboard.js.map +1 -0
- package/dist/types/utils/dashboard.test.js +36 -0
- package/dist/types/utils/dashboard.test.js.map +1 -0
- package/dist/types/utils/dbt.js +4 -0
- package/dist/types/utils/dbt.js.map +1 -0
- package/dist/types/utils/dbt.test.js +39 -0
- package/dist/types/utils/dbt.test.js.map +1 -0
- package/dist/types/utils/dependencyGraph.js +51 -0
- package/dist/types/utils/dependencyGraph.js.map +1 -0
- package/dist/types/utils/dependencyGraph.test.js +113 -0
- package/dist/types/utils/dependencyGraph.test.js.map +1 -0
- package/dist/types/utils/email.js +76 -0
- package/dist/types/utils/email.js.map +1 -0
- package/dist/types/utils/email.test.js +49 -0
- package/dist/types/utils/email.test.js.map +1 -0
- package/dist/types/utils/fields.js +183 -0
- package/dist/types/utils/fields.js.map +1 -0
- package/dist/types/utils/fields.mock.js +150 -0
- package/dist/types/utils/fields.mock.js.map +1 -0
- package/dist/types/utils/fields.test.js +259 -0
- package/dist/types/utils/fields.test.js.map +1 -0
- package/dist/types/utils/filters.js +763 -0
- package/dist/types/utils/filters.js.map +1 -0
- package/dist/types/utils/filters.mock.js +450 -0
- package/dist/types/utils/filters.mock.js.map +1 -0
- package/dist/types/utils/filters.test.js +360 -0
- package/dist/types/utils/filters.test.js.map +1 -0
- package/dist/types/utils/formatting.js +552 -0
- package/dist/types/utils/formatting.js.map +1 -0
- package/dist/types/utils/formatting.mock.js +28 -0
- package/dist/types/utils/formatting.mock.js.map +1 -0
- package/dist/types/utils/formatting.test.js +1047 -0
- package/dist/types/utils/formatting.test.js.map +1 -0
- package/dist/types/utils/github.js +11 -0
- package/dist/types/utils/github.js.map +1 -0
- package/dist/types/utils/i18n/abstract.js +3 -0
- package/dist/types/utils/i18n/abstract.js.map +1 -0
- package/dist/types/utils/i18n/chartAsCode.js +132 -0
- package/dist/types/utils/i18n/chartAsCode.js.map +1 -0
- package/dist/types/utils/i18n/chartAsCode.test.js +350 -0
- package/dist/types/utils/i18n/chartAsCode.test.js.map +1 -0
- package/dist/types/utils/i18n/dashboardAsCode.js +58 -0
- package/dist/types/utils/i18n/dashboardAsCode.js.map +1 -0
- package/dist/types/utils/i18n/index.js +5 -0
- package/dist/types/utils/i18n/index.js.map +1 -0
- package/dist/types/utils/i18n/merge.js +20 -0
- package/dist/types/utils/i18n/merge.js.map +1 -0
- package/dist/types/utils/i18n/types.js +2 -0
- package/dist/types/utils/i18n/types.js.map +1 -0
- package/dist/types/utils/item.js +154 -0
- package/dist/types/utils/item.js.map +1 -0
- package/dist/types/utils/loadLightdashProjectConfig.js +49 -0
- package/dist/types/utils/loadLightdashProjectConfig.js.map +1 -0
- package/dist/types/utils/loadLightdashProjectConfig.mock.js +127 -0
- package/dist/types/utils/loadLightdashProjectConfig.mock.js.map +1 -0
- package/dist/types/utils/loadLightdashProjectConfig.test.js +137 -0
- package/dist/types/utils/loadLightdashProjectConfig.test.js.map +1 -0
- package/dist/types/utils/metricsExplorer.js +365 -0
- package/dist/types/utils/metricsExplorer.js.map +1 -0
- package/dist/types/utils/oauth.js +242 -0
- package/dist/types/utils/oauth.js.map +1 -0
- package/dist/types/utils/organization.js +23 -0
- package/dist/types/utils/organization.js.map +1 -0
- package/dist/types/utils/projectMemberRole.js +85 -0
- package/dist/types/utils/projectMemberRole.js.map +1 -0
- package/dist/types/utils/projectMemberRole.test.js +36 -0
- package/dist/types/utils/projectMemberRole.test.js.map +1 -0
- package/dist/types/utils/promises.js +5 -0
- package/dist/types/utils/promises.js.map +1 -0
- package/dist/types/utils/sanitizeHtml.js +111 -0
- package/dist/types/utils/sanitizeHtml.js.map +1 -0
- package/dist/types/utils/sanitizeHtml.test.js +101 -0
- package/dist/types/utils/sanitizeHtml.test.js.map +1 -0
- package/dist/types/utils/scheduler.js +85 -0
- package/dist/types/utils/scheduler.js.map +1 -0
- package/dist/types/utils/scheduler.test.js +41 -0
- package/dist/types/utils/scheduler.test.js.map +1 -0
- package/dist/types/utils/searchParams.js +8 -0
- package/dist/types/utils/searchParams.js.map +1 -0
- package/dist/types/utils/sleep.js +6 -0
- package/dist/types/utils/sleep.js.map +1 -0
- package/dist/types/utils/slug.test.js +129 -0
- package/dist/types/utils/slug.test.js.map +1 -0
- package/dist/types/utils/slugs.js +55 -0
- package/dist/types/utils/slugs.js.map +1 -0
- package/dist/types/utils/subtotals.js +4 -0
- package/dist/types/utils/subtotals.js.map +1 -0
- package/dist/types/utils/time.js +25 -0
- package/dist/types/utils/time.js.map +1 -0
- package/dist/types/utils/timeFrames.js +529 -0
- package/dist/types/utils/timeFrames.js.map +1 -0
- package/dist/types/utils/timeFrames.test.js +50 -0
- package/dist/types/utils/timeFrames.test.js.map +1 -0
- package/dist/types/utils/virtualView.js +98 -0
- package/dist/types/utils/virtualView.js.map +1 -0
- package/dist/types/utils/warehouse.js +57 -0
- package/dist/types/utils/warehouse.js.map +1 -0
- package/dist/types/visualizations/CartesianChartDataModel.js +515 -0
- package/dist/types/visualizations/CartesianChartDataModel.js.map +1 -0
- package/dist/types/visualizations/PieChartDataModel.js +258 -0
- package/dist/types/visualizations/PieChartDataModel.js.map +1 -0
- package/dist/types/visualizations/TableDataModel.js +96 -0
- package/dist/types/visualizations/TableDataModel.js.map +1 -0
- package/dist/types/visualizations/chartTransformations.js +107 -0
- package/dist/types/visualizations/chartTransformations.js.map +1 -0
- package/dist/types/visualizations/helpers/getCartesianAxisFormatterConfig.js +142 -0
- package/dist/types/visualizations/helpers/getCartesianAxisFormatterConfig.js.map +1 -0
- package/dist/types/visualizations/types/IResultsRunner.js +2 -0
- package/dist/types/visualizations/types/IResultsRunner.js.map +1 -0
- package/dist/types/visualizations/types/index.js +78 -0
- package/dist/types/visualizations/types/index.js.map +1 -0
- package/package.json +1 -1
- package/dist/tsconfig.types.tsbuildinfo +0 -1
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
import { NotImplementedError } from '../types/errors';
|
|
2
|
+
import { BinType, DimensionType, friendlyName, isCustomBinDimension, } from '../types/field';
|
|
3
|
+
import { getCustomRangeSelectSql, getFixedWidthBinSelectSql, } from './customDimensions';
|
|
4
|
+
export const convertCustomSqlDimensionToDbt = (field) => ({
|
|
5
|
+
label: friendlyName(field.name),
|
|
6
|
+
type: field.dimensionType,
|
|
7
|
+
sql: field.sql,
|
|
8
|
+
});
|
|
9
|
+
export const convertCustomBinDimensionToDbt = ({ customDimension, baseDimensionSql, warehouseSqlBuilder, }) => {
|
|
10
|
+
switch (customDimension.binType) {
|
|
11
|
+
case BinType.CUSTOM_RANGE:
|
|
12
|
+
return {
|
|
13
|
+
label: friendlyName(customDimension.name),
|
|
14
|
+
type: DimensionType.STRING,
|
|
15
|
+
sql: getCustomRangeSelectSql({
|
|
16
|
+
binRanges: customDimension.customRange || [],
|
|
17
|
+
baseDimensionSql,
|
|
18
|
+
warehouseSqlBuilder,
|
|
19
|
+
}),
|
|
20
|
+
};
|
|
21
|
+
case BinType.FIXED_WIDTH:
|
|
22
|
+
return {
|
|
23
|
+
label: friendlyName(customDimension.name),
|
|
24
|
+
type: DimensionType.STRING,
|
|
25
|
+
sql: getFixedWidthBinSelectSql({
|
|
26
|
+
binWidth: customDimension.binWidth || 1,
|
|
27
|
+
baseDimensionSql,
|
|
28
|
+
warehouseSqlBuilder,
|
|
29
|
+
}),
|
|
30
|
+
};
|
|
31
|
+
case BinType.FIXED_NUMBER:
|
|
32
|
+
throw new NotImplementedError('Bin with fixed number of bins can not be converted to dbt as it requires a CTE');
|
|
33
|
+
default:
|
|
34
|
+
const never = customDimension.binType;
|
|
35
|
+
throw new Error(`Unknown bin type ${never}`);
|
|
36
|
+
}
|
|
37
|
+
};
|
|
38
|
+
// Mock Bigquery warehouse client for preview
|
|
39
|
+
const warehouseClientMock = {
|
|
40
|
+
credentials: undefined,
|
|
41
|
+
getCatalog() {
|
|
42
|
+
throw new NotImplementedError('getCatalog not implemented');
|
|
43
|
+
},
|
|
44
|
+
getAsyncQueryResults() {
|
|
45
|
+
throw new NotImplementedError('getAsyncQueryResults not implemented');
|
|
46
|
+
},
|
|
47
|
+
getAdapterType() {
|
|
48
|
+
throw new NotImplementedError('getCatalog not implemented');
|
|
49
|
+
},
|
|
50
|
+
getAllTables() {
|
|
51
|
+
throw new NotImplementedError('getCatalog not implemented');
|
|
52
|
+
},
|
|
53
|
+
getFields() {
|
|
54
|
+
throw new NotImplementedError('getCatalog not implemented');
|
|
55
|
+
},
|
|
56
|
+
getMetricSql() {
|
|
57
|
+
throw new NotImplementedError('getCatalog not implemented');
|
|
58
|
+
},
|
|
59
|
+
getStartOfWeek() {
|
|
60
|
+
throw new NotImplementedError('getCatalog not implemented');
|
|
61
|
+
},
|
|
62
|
+
parseError() {
|
|
63
|
+
throw new NotImplementedError('getCatalog not implemented');
|
|
64
|
+
},
|
|
65
|
+
parseWarehouseCatalog() {
|
|
66
|
+
throw new NotImplementedError('getCatalog not implemented');
|
|
67
|
+
},
|
|
68
|
+
runQuery() {
|
|
69
|
+
throw new NotImplementedError('getCatalog not implemented');
|
|
70
|
+
},
|
|
71
|
+
streamQuery() {
|
|
72
|
+
throw new NotImplementedError('getCatalog not implemented');
|
|
73
|
+
},
|
|
74
|
+
executeAsyncQuery() {
|
|
75
|
+
throw new NotImplementedError('getCatalog not implemented');
|
|
76
|
+
},
|
|
77
|
+
test() {
|
|
78
|
+
throw new NotImplementedError('getCatalog not implemented');
|
|
79
|
+
},
|
|
80
|
+
concatString(...args) {
|
|
81
|
+
return `CONCAT(${args.join(', ')})`;
|
|
82
|
+
},
|
|
83
|
+
getStringQuoteChar() {
|
|
84
|
+
return "'";
|
|
85
|
+
},
|
|
86
|
+
getEscapeStringQuoteChar() {
|
|
87
|
+
return '\\';
|
|
88
|
+
},
|
|
89
|
+
getFieldQuoteChar() {
|
|
90
|
+
return '"';
|
|
91
|
+
},
|
|
92
|
+
getFloatingType() {
|
|
93
|
+
return 'FLOAT';
|
|
94
|
+
},
|
|
95
|
+
escapeString(value) {
|
|
96
|
+
return value;
|
|
97
|
+
},
|
|
98
|
+
};
|
|
99
|
+
export const previewConvertCustomDimensionToDbt = (field) => {
|
|
100
|
+
if (isCustomBinDimension(field)) {
|
|
101
|
+
// Mock base dimension SQL and warehouse client for preview
|
|
102
|
+
const preview = convertCustomBinDimensionToDbt({
|
|
103
|
+
customDimension: field,
|
|
104
|
+
baseDimensionSql: '${reference_column}',
|
|
105
|
+
warehouseSqlBuilder: warehouseClientMock,
|
|
106
|
+
});
|
|
107
|
+
return {
|
|
108
|
+
...preview,
|
|
109
|
+
// Add a comment at the top of the multiline string to indicate that this is a preview
|
|
110
|
+
sql: `/* This is a preview! Replace column references and confirm SQL before using in production. */\n${preview.sql}`,
|
|
111
|
+
};
|
|
112
|
+
}
|
|
113
|
+
return convertCustomSqlDimensionToDbt(field);
|
|
114
|
+
};
|
|
115
|
+
//# sourceMappingURL=convertCustomDimensionsToYaml.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"convertCustomDimensionsToYaml.js","sourceRoot":"","sources":["../../../src/utils/convertCustomDimensionsToYaml.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { friendlyName } from '../types/field';
|
|
2
|
+
import { convertMetricFilterToDbt } from '../types/filterGrammarConversion';
|
|
3
|
+
import { getFormatExpression } from './formatting';
|
|
4
|
+
export function convertCustomMetricToDbt(field) {
|
|
5
|
+
const filters = convertMetricFilterToDbt(field.filters);
|
|
6
|
+
return {
|
|
7
|
+
label: field.label || friendlyName(field.name),
|
|
8
|
+
description: field.description,
|
|
9
|
+
type: field.type,
|
|
10
|
+
format: getFormatExpression(field),
|
|
11
|
+
percentile: field.percentile,
|
|
12
|
+
filters,
|
|
13
|
+
};
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=convertCustomMetricsToYaml.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"convertCustomMetricsToYaml.js","sourceRoot":"","sources":["../../../src/utils/convertCustomMetricsToYaml.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,wBAAwB,EAAE,MAAM,kCAAkC,CAAC;AAE5E,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AAEnD,MAAM,UAAU,wBAAwB,CACpC,KAAuB;IAEvB,MAAM,OAAO,GAAG,wBAAwB,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IACxD,OAAO;QACH,KAAK,EAAE,KAAK,CAAC,KAAK,IAAI,YAAY,CAAC,KAAK,CAAC,IAAI,CAAC;QAC9C,WAAW,EAAE,KAAK,CAAC,WAAW;QAC9B,IAAI,EAAE,KAAK,CAAC,IAAI;QAChB,MAAM,EAAE,mBAAmB,CAAC,KAAK,CAAC;QAClC,UAAU,EAAE,KAAK,CAAC,UAAU;QAC5B,OAAO;KACV,CAAC;AACN,CAAC"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
export const getFixedWidthBinSelectSql = ({ binWidth, baseDimensionSql, warehouseSqlBuilder, }) => {
|
|
2
|
+
const quoteChar = warehouseSqlBuilder.getStringQuoteChar();
|
|
3
|
+
return `${warehouseSqlBuilder.concatString(`FLOOR(${baseDimensionSql} / ${binWidth}) * ${binWidth}`, `${quoteChar} - ${quoteChar}`, `(FLOOR(${baseDimensionSql} / ${binWidth}) + 1) * ${binWidth} - 1`)}`;
|
|
4
|
+
};
|
|
5
|
+
export const getCustomRangeSelectSql = ({ binRanges, baseDimensionSql, warehouseSqlBuilder, }) => {
|
|
6
|
+
const quoteChar = warehouseSqlBuilder.getStringQuoteChar();
|
|
7
|
+
const binRangeWhens = binRanges.map((range) => {
|
|
8
|
+
if (range.from === undefined) {
|
|
9
|
+
// First range
|
|
10
|
+
return `WHEN ${baseDimensionSql} < ${range.to} THEN ${warehouseSqlBuilder.concatString(`${quoteChar}<${quoteChar}`, `${range.to}`)}`;
|
|
11
|
+
}
|
|
12
|
+
if (range.to === undefined) {
|
|
13
|
+
// Last range
|
|
14
|
+
return `ELSE ${warehouseSqlBuilder.concatString(`${quoteChar}≥${quoteChar}`, `${range.from}`)}`;
|
|
15
|
+
}
|
|
16
|
+
return `WHEN ${baseDimensionSql} >= ${range.from} AND ${baseDimensionSql} < ${range.to} THEN ${warehouseSqlBuilder.concatString(`${range.from}`, "'-'", `${range.to}`)}`;
|
|
17
|
+
});
|
|
18
|
+
// Add a NULL case for when the dimension is NULL, returning null as the value so it get's correctly formated with the symbol ∅
|
|
19
|
+
const rangeWhens = [
|
|
20
|
+
`WHEN ${baseDimensionSql} IS NULL THEN NULL`,
|
|
21
|
+
...binRangeWhens,
|
|
22
|
+
];
|
|
23
|
+
return `CASE
|
|
24
|
+
${rangeWhens.join('\n')}
|
|
25
|
+
END`;
|
|
26
|
+
};
|
|
27
|
+
//# sourceMappingURL=customDimensions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"customDimensions.js","sourceRoot":"","sources":["../../../src/utils/customDimensions.ts"],"names":[],"mappings":"AAGA,MAAM,CAAC,MAAM,yBAAyB,GAAG,CAAC,EACtC,QAAQ,EACR,gBAAgB,EAChB,mBAAmB,GAKtB,EAAE,EAAE;IACD,MAAM,SAAS,GAAG,mBAAmB,CAAC,kBAAkB,EAAE,CAAC;IAC3D,OAAO,GAAG,mBAAmB,CAAC,YAAY,CACtC,SAAS,gBAAgB,MAAM,QAAQ,OAAO,QAAQ,EAAE,EACxD,GAAG,SAAS,MAAM,SAAS,EAAE,EAC7B,UAAU,gBAAgB,MAAM,QAAQ,YAAY,QAAQ,MAAM,CACrE,EAAE,CAAC;AACR,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,EACpC,SAAS,EACT,gBAAgB,EAChB,mBAAmB,GAKtB,EAAE,EAAE;IACD,MAAM,SAAS,GAAG,mBAAmB,CAAC,kBAAkB,EAAE,CAAC;IAC3D,MAAM,aAAa,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;QAC1C,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;YAC3B,cAAc;YACd,OAAO,QAAQ,gBAAgB,MAC3B,KAAK,CAAC,EACV,SAAS,mBAAmB,CAAC,YAAY,CACrC,GAAG,SAAS,IAAI,SAAS,EAAE,EAC3B,GAAG,KAAK,CAAC,EAAE,EAAE,CAChB,EAAE,CAAC;QACR,CAAC;QACD,IAAI,KAAK,CAAC,EAAE,KAAK,SAAS,EAAE,CAAC;YACzB,aAAa;YACb,OAAO,QAAQ,mBAAmB,CAAC,YAAY,CAC3C,GAAG,SAAS,IAAI,SAAS,EAAE,EAC3B,GAAG,KAAK,CAAC,IAAI,EAAE,CAClB,EAAE,CAAC;QACR,CAAC;QAED,OAAO,QAAQ,gBAAgB,OAC3B,KAAK,CAAC,IACV,QAAQ,gBAAgB,MACpB,KAAK,CAAC,EACV,SAAS,mBAAmB,CAAC,YAAY,CACrC,GAAG,KAAK,CAAC,IAAI,EAAE,EACf,KAAK,EACL,GAAG,KAAK,CAAC,EAAE,EAAE,CAChB,EAAE,CAAC;IACR,CAAC,CAAC,CAAC;IAEH,+HAA+H;IAC/H,MAAM,UAAU,GAAG;QACf,QAAQ,gBAAgB,oBAAoB;QAC5C,GAAG,aAAa;KACnB,CAAC;IAEF,OAAO;cACG,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC;gBACnB,CAAC;AACjB,CAAC,CAAC"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { ChartSourceType } from '../types/content';
|
|
2
|
+
import { DashboardTileTypes } from '../types/dashboard';
|
|
3
|
+
import { ParameterError } from '../types/errors';
|
|
4
|
+
import assertUnreachable from './assertUnreachable';
|
|
5
|
+
export const convertChartSourceTypeToDashboardTileType = (sourceType) => {
|
|
6
|
+
switch (sourceType) {
|
|
7
|
+
case ChartSourceType.DBT_EXPLORE:
|
|
8
|
+
return DashboardTileTypes.SAVED_CHART;
|
|
9
|
+
case ChartSourceType.SQL:
|
|
10
|
+
return DashboardTileTypes.SQL_CHART;
|
|
11
|
+
default:
|
|
12
|
+
return assertUnreachable(sourceType, `Unknown source type: ${sourceType}`);
|
|
13
|
+
}
|
|
14
|
+
};
|
|
15
|
+
/**
|
|
16
|
+
* Validates that selected tabs exist in the dashboard tiles.
|
|
17
|
+
* If selectedTabs is provided and not empty, ensures at least one selected tab exists in dashboard tabs.
|
|
18
|
+
* @param selectedTabs - Array of selected tab UUIDs or null
|
|
19
|
+
* @param dashboardTiles - Array of dashboard tiles
|
|
20
|
+
* @throws ParameterError if none of the selected tabs exist in the dashboard
|
|
21
|
+
*/
|
|
22
|
+
export const validateSelectedTabs = (selectedTabs, dashboardTiles) => {
|
|
23
|
+
// If selectedTabs is provided and not empty, validate that at least one exists in dashboard tabs
|
|
24
|
+
if (selectedTabs && selectedTabs.length > 0) {
|
|
25
|
+
const availableTabs = dashboardTiles
|
|
26
|
+
.map((tile) => tile.tabUuid)
|
|
27
|
+
.filter((tabUuid) => !!tabUuid)
|
|
28
|
+
.filter((tabUuid, index, self) => self.indexOf(tabUuid) === index);
|
|
29
|
+
const validSelectedTabs = selectedTabs.filter((tabUuid) => availableTabs.includes(tabUuid));
|
|
30
|
+
if (validSelectedTabs.length === 0) {
|
|
31
|
+
throw new ParameterError(`None of the selected tabs exist in the dashboard`);
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
};
|
|
35
|
+
//# sourceMappingURL=dashboard.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dashboard.js","sourceRoot":"","sources":["../../../src/utils/dashboard.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,EAAsB,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAC5E,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,iBAAiB,MAAM,qBAAqB,CAAC;AAEpD,MAAM,CAAC,MAAM,yCAAyC,GAAG,CACrD,UAA2B,EACT,EAAE;IACpB,QAAQ,UAAU,EAAE,CAAC;QACjB,KAAK,eAAe,CAAC,WAAW;YAC5B,OAAO,kBAAkB,CAAC,WAAW,CAAC;QAC1C,KAAK,eAAe,CAAC,GAAG;YACpB,OAAO,kBAAkB,CAAC,SAAS,CAAC;QACxC;YACI,OAAO,iBAAiB,CACpB,UAAU,EACV,wBAAwB,UAAU,EAAE,CACvC,CAAC;IACV,CAAC;AACL,CAAC,CAAC;AAEF;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAChC,YAA6B,EAC7B,cAA+B,EAC3B,EAAE;IACN,iGAAiG;IACjG,IAAI,YAAY,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC1C,MAAM,aAAa,GAAG,cAAc;aAC/B,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC;aAC3B,MAAM,CAAC,CAAC,OAAO,EAAqB,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC;aACjD,MAAM,CAAC,CAAC,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,KAAK,CAAC,CAAC;QAEvE,MAAM,iBAAiB,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE,CACtD,aAAa,CAAC,QAAQ,CAAC,OAAO,CAAC,CAClC,CAAC;QACF,IAAI,iBAAiB,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACjC,MAAM,IAAI,cAAc,CACpB,kDAAkD,CACrD,CAAC;QACN,CAAC;IACL,CAAC;AACL,CAAC,CAAC"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { ParameterError } from '../types/errors';
|
|
2
|
+
import { validateSelectedTabs } from './dashboard';
|
|
3
|
+
describe('validateSelectedTabs', () => {
|
|
4
|
+
// Simple mock that focuses on just the tabUuid property
|
|
5
|
+
const mockTiles = [
|
|
6
|
+
{ tabUuid: 'tab1' },
|
|
7
|
+
{ tabUuid: 'tab2' },
|
|
8
|
+
{ tabUuid: null },
|
|
9
|
+
{ tabUuid: undefined },
|
|
10
|
+
];
|
|
11
|
+
it('should not throw when selectedTabs is null', () => {
|
|
12
|
+
expect(() => validateSelectedTabs(null, mockTiles)).not.toThrow();
|
|
13
|
+
});
|
|
14
|
+
it('should not throw when selectedTabs is empty array', () => {
|
|
15
|
+
expect(() => validateSelectedTabs([], mockTiles)).not.toThrow();
|
|
16
|
+
});
|
|
17
|
+
it('should not throw when selectedTabs contains valid tab UUIDs', () => {
|
|
18
|
+
expect(() => validateSelectedTabs(['tab1'], mockTiles)).not.toThrow();
|
|
19
|
+
expect(() => validateSelectedTabs(['tab1', 'tab2'], mockTiles)).not.toThrow();
|
|
20
|
+
});
|
|
21
|
+
it('should throw ParameterError when none of selectedTabs exist in dashboard', () => {
|
|
22
|
+
expect(() => validateSelectedTabs(['nonexistent-tab'], mockTiles)).toThrow(ParameterError);
|
|
23
|
+
expect(() => validateSelectedTabs(['tab1', 'nonexistent-tab'], mockTiles)).not.toThrow(); // Should pass because tab1 exists
|
|
24
|
+
});
|
|
25
|
+
it('should throw ParameterError with informative message', () => {
|
|
26
|
+
expect(() => validateSelectedTabs(['nonexistent-tab'], mockTiles)).toThrow('None of the selected tabs exist in the dashboard');
|
|
27
|
+
});
|
|
28
|
+
it('should handle tiles without tabUuid', () => {
|
|
29
|
+
const tilesWithoutTabUuid = [
|
|
30
|
+
{ tabUuid: undefined },
|
|
31
|
+
{ tabUuid: null },
|
|
32
|
+
];
|
|
33
|
+
expect(() => validateSelectedTabs(['any-tab'], tilesWithoutTabUuid)).toThrow('None of the selected tabs exist in the dashboard');
|
|
34
|
+
});
|
|
35
|
+
});
|
|
36
|
+
//# sourceMappingURL=dashboard.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dashboard.test.js","sourceRoot":"","sources":["../../../src/utils/dashboard.test.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAEnD,QAAQ,CAAC,sBAAsB,EAAE,GAAG,EAAE;IAClC,wDAAwD;IACxD,MAAM,SAAS,GAAG;QACd,EAAE,OAAO,EAAE,MAAM,EAAE;QACnB,EAAE,OAAO,EAAE,MAAM,EAAE;QACnB,EAAE,OAAO,EAAE,IAAI,EAAE;QACjB,EAAE,OAAO,EAAE,SAAS,EAAE;KACN,CAAC;IAErB,EAAE,CAAC,4CAA4C,EAAE,GAAG,EAAE;QAClD,MAAM,CAAC,GAAG,EAAE,CAAC,oBAAoB,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;IACtE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mDAAmD,EAAE,GAAG,EAAE;QACzD,MAAM,CAAC,GAAG,EAAE,CAAC,oBAAoB,CAAC,EAAE,EAAE,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;IACpE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6DAA6D,EAAE,GAAG,EAAE;QACnE,MAAM,CAAC,GAAG,EAAE,CAAC,oBAAoB,CAAC,CAAC,MAAM,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;QACtE,MAAM,CAAC,GAAG,EAAE,CACR,oBAAoB,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,SAAS,CAAC,CACpD,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;IACpB,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0EAA0E,EAAE,GAAG,EAAE;QAChF,MAAM,CAAC,GAAG,EAAE,CACR,oBAAoB,CAAC,CAAC,iBAAiB,CAAC,EAAE,SAAS,CAAC,CACvD,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;QAC1B,MAAM,CAAC,GAAG,EAAE,CACR,oBAAoB,CAAC,CAAC,MAAM,EAAE,iBAAiB,CAAC,EAAE,SAAS,CAAC,CAC/D,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC,kCAAkC;IACvD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sDAAsD,EAAE,GAAG,EAAE;QAC5D,MAAM,CAAC,GAAG,EAAE,CACR,oBAAoB,CAAC,CAAC,iBAAiB,CAAC,EAAE,SAAS,CAAC,CACvD,CAAC,OAAO,CAAC,kDAAkD,CAAC,CAAC;IAClE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,qCAAqC,EAAE,GAAG,EAAE;QAC3C,MAAM,mBAAmB,GAAG;YACxB,EAAE,OAAO,EAAE,SAAS,EAAE;YACtB,EAAE,OAAO,EAAE,IAAI,EAAE;SACD,CAAC;QAErB,MAAM,CAAC,GAAG,EAAE,CACR,oBAAoB,CAAC,CAAC,SAAS,CAAC,EAAE,mBAAmB,CAAC,CACzD,CAAC,OAAO,CAAC,kDAAkD,CAAC,CAAC;IAClE,CAAC,CAAC,CAAC;AACP,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dbt.js","sourceRoot":"","sources":["../../../src/utils/dbt.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,QAAgB,EAAW,EAAE;AAC7D,6CAA6C;AAC7C,gCAAgC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { validateDbtSelector } from './dbt';
|
|
2
|
+
describe('validateDbtSelector', () => {
|
|
3
|
+
it('should allow valid selectors', () => {
|
|
4
|
+
const validSelectors = [
|
|
5
|
+
'model_name',
|
|
6
|
+
'tag:daily',
|
|
7
|
+
'my_model+', // select my_model and all descendants
|
|
8
|
+
'+my_model', // select my_model and all ancestors
|
|
9
|
+
'folder.model',
|
|
10
|
+
'model_123',
|
|
11
|
+
'model-name',
|
|
12
|
+
'model:staging',
|
|
13
|
+
'model_name_with_underscore',
|
|
14
|
+
'*_wildcard_*',
|
|
15
|
+
'middle_wild*card',
|
|
16
|
+
'@my_model', // select my_model, its descendants, and the ancestors of its descendants
|
|
17
|
+
'events +customers tag:lightdash', // Complex selector with multiple parts
|
|
18
|
+
'model/name', // forward slash
|
|
19
|
+
];
|
|
20
|
+
validSelectors.forEach((selector) => {
|
|
21
|
+
expect(validateDbtSelector(selector)).toBe(true);
|
|
22
|
+
});
|
|
23
|
+
});
|
|
24
|
+
it('should reject invalid selectors', () => {
|
|
25
|
+
const invalidSelectors = [
|
|
26
|
+
'model\\name', // backslash
|
|
27
|
+
'model$name', // special character
|
|
28
|
+
'model@name', // @ in the middle
|
|
29
|
+
'model@', // @ in the end
|
|
30
|
+
'model;name', // semicolon
|
|
31
|
+
'model`name', // backtick
|
|
32
|
+
'model"name', // quotes
|
|
33
|
+
];
|
|
34
|
+
invalidSelectors.forEach((selector) => {
|
|
35
|
+
expect(validateDbtSelector(selector)).toBe(false);
|
|
36
|
+
});
|
|
37
|
+
});
|
|
38
|
+
});
|
|
39
|
+
//# sourceMappingURL=dbt.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dbt.test.js","sourceRoot":"","sources":["../../../src/utils/dbt.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,OAAO,CAAC;AAE5C,QAAQ,CAAC,qBAAqB,EAAE,GAAG,EAAE;IACjC,EAAE,CAAC,8BAA8B,EAAE,GAAG,EAAE;QACpC,MAAM,cAAc,GAAG;YACnB,YAAY;YACZ,WAAW;YACX,WAAW,EAAE,sCAAsC;YACnD,WAAW,EAAE,oCAAoC;YACjD,cAAc;YACd,WAAW;YACX,YAAY;YACZ,eAAe;YACf,4BAA4B;YAC5B,cAAc;YACd,kBAAkB;YAClB,WAAW,EAAE,yEAAyE;YACtF,iCAAiC,EAAE,uCAAuC;YAC1E,YAAY,EAAE,gBAAgB;SACjC,CAAC;QAEF,cAAc,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,EAAE;YAChC,MAAM,CAAC,mBAAmB,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACrD,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iCAAiC,EAAE,GAAG,EAAE;QACvC,MAAM,gBAAgB,GAAG;YACrB,aAAa,EAAE,YAAY;YAC3B,YAAY,EAAE,oBAAoB;YAClC,YAAY,EAAE,kBAAkB;YAChC,QAAQ,EAAE,eAAe;YACzB,YAAY,EAAE,YAAY;YAC1B,YAAY,EAAE,WAAW;YACzB,YAAY,EAAE,SAAS;SAC1B,CAAC;QAEF,gBAAgB,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,EAAE;YAClC,MAAM,CAAC,mBAAmB,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACtD,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;AACP,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Detects circular dependencies in a dependency graph using depth-first search.
|
|
3
|
+
* Throws an error if a circular dependency is found.
|
|
4
|
+
*
|
|
5
|
+
* @param dependencies - Array of nodes with their dependencies
|
|
6
|
+
* @param errorPrefix - Prefix for the error message (e.g., "table calculations", "metrics")
|
|
7
|
+
* @throws Error if a circular dependency is detected, with the full cycle path
|
|
8
|
+
*
|
|
9
|
+
* @example
|
|
10
|
+
* ```typescript
|
|
11
|
+
* const dependencies = [
|
|
12
|
+
* { name: 'A', dependencies: ['B'] },
|
|
13
|
+
* { name: 'B', dependencies: ['C'] },
|
|
14
|
+
* { name: 'C', dependencies: ['A'] } // Creates a cycle: A -> B -> C -> A
|
|
15
|
+
* ];
|
|
16
|
+
* detectCircularDependencies(dependencies, 'table calculations');
|
|
17
|
+
* // Throws: "Circular dependency detected in table calculations: A -> B -> C -> A"
|
|
18
|
+
* ```
|
|
19
|
+
*/
|
|
20
|
+
export function detectCircularDependencies(dependencies, errorPrefix = 'items') {
|
|
21
|
+
const visited = new Set();
|
|
22
|
+
const recursionStack = new Set();
|
|
23
|
+
const dfs = (nodeName, path) => {
|
|
24
|
+
if (recursionStack.has(nodeName)) {
|
|
25
|
+
const cycle = [...path, nodeName].join(' -> ');
|
|
26
|
+
throw new Error(`Circular dependency detected in ${errorPrefix}: ${cycle}`);
|
|
27
|
+
}
|
|
28
|
+
if (visited.has(nodeName)) {
|
|
29
|
+
return;
|
|
30
|
+
}
|
|
31
|
+
visited.add(nodeName);
|
|
32
|
+
recursionStack.add(nodeName);
|
|
33
|
+
const node = dependencies.find((d) => d.name === nodeName);
|
|
34
|
+
if (node) {
|
|
35
|
+
for (const dep of node.dependencies) {
|
|
36
|
+
// Only follow dependencies that are nodes in the graph
|
|
37
|
+
if (dependencies.some((d) => d.name === dep)) {
|
|
38
|
+
dfs(dep, [...path, nodeName]);
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
recursionStack.delete(nodeName);
|
|
43
|
+
};
|
|
44
|
+
// Check all nodes for cycles
|
|
45
|
+
for (const dep of dependencies) {
|
|
46
|
+
if (!visited.has(dep.name)) {
|
|
47
|
+
dfs(dep.name, []);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
//# sourceMappingURL=dependencyGraph.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dependencyGraph.js","sourceRoot":"","sources":["../../../src/utils/dependencyGraph.ts"],"names":[],"mappings":"AAQA;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,UAAU,0BAA0B,CACtC,YAA8B,EAC9B,cAAsB,OAAO;IAE7B,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU,CAAC;IAClC,MAAM,cAAc,GAAG,IAAI,GAAG,EAAU,CAAC;IAEzC,MAAM,GAAG,GAAG,CAAC,QAAgB,EAAE,IAAc,EAAQ,EAAE;QACnD,IAAI,cAAc,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC/B,MAAM,KAAK,GAAG,CAAC,GAAG,IAAI,EAAE,QAAQ,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YAC/C,MAAM,IAAI,KAAK,CACX,mCAAmC,WAAW,KAAK,KAAK,EAAE,CAC7D,CAAC;QACN,CAAC;QAED,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;YACxB,OAAO;QACX,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QACtB,cAAc,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAE7B,MAAM,IAAI,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC;QAC3D,IAAI,IAAI,EAAE,CAAC;YACP,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;gBAClC,uDAAuD;gBACvD,IAAI,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;oBAC3C,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC;gBAClC,CAAC;YACL,CAAC;QACL,CAAC;QAED,cAAc,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IACpC,CAAC,CAAC;IAEF,6BAA6B;IAC7B,KAAK,MAAM,GAAG,IAAI,YAAY,EAAE,CAAC;QAC7B,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;YACzB,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QACtB,CAAC;IACL,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
import { detectCircularDependencies, } from './dependencyGraph';
|
|
2
|
+
describe('detectCircularDependencies', () => {
|
|
3
|
+
it('should not throw for valid dependency graph with no cycles', () => {
|
|
4
|
+
const dependencies = [
|
|
5
|
+
{ name: 'A', dependencies: ['B', 'C'] },
|
|
6
|
+
{ name: 'B', dependencies: ['D'] },
|
|
7
|
+
{ name: 'C', dependencies: ['D'] },
|
|
8
|
+
{ name: 'D', dependencies: [] },
|
|
9
|
+
];
|
|
10
|
+
expect(() => detectCircularDependencies(dependencies, 'test items')).not.toThrow();
|
|
11
|
+
});
|
|
12
|
+
it('should not throw for empty dependency array', () => {
|
|
13
|
+
expect(() => detectCircularDependencies([], 'test items')).not.toThrow();
|
|
14
|
+
});
|
|
15
|
+
it('should not throw for single node with no dependencies', () => {
|
|
16
|
+
const dependencies = [
|
|
17
|
+
{ name: 'A', dependencies: [] },
|
|
18
|
+
];
|
|
19
|
+
expect(() => detectCircularDependencies(dependencies, 'test items')).not.toThrow();
|
|
20
|
+
});
|
|
21
|
+
it('should not throw when dependencies reference non-existent nodes', () => {
|
|
22
|
+
const dependencies = [
|
|
23
|
+
{ name: 'A', dependencies: ['B', 'nonexistent'] },
|
|
24
|
+
{ name: 'B', dependencies: ['C'] },
|
|
25
|
+
{ name: 'C', dependencies: [] },
|
|
26
|
+
];
|
|
27
|
+
expect(() => detectCircularDependencies(dependencies, 'test items')).not.toThrow();
|
|
28
|
+
});
|
|
29
|
+
it('should not throw for multiple disconnected components', () => {
|
|
30
|
+
const dependencies = [
|
|
31
|
+
{ name: 'A', dependencies: ['B'] },
|
|
32
|
+
{ name: 'B', dependencies: [] },
|
|
33
|
+
{ name: 'C', dependencies: ['D'] },
|
|
34
|
+
{ name: 'D', dependencies: [] },
|
|
35
|
+
];
|
|
36
|
+
expect(() => detectCircularDependencies(dependencies, 'test items')).not.toThrow();
|
|
37
|
+
});
|
|
38
|
+
it('should detect simple circular dependency (A -> B -> A)', () => {
|
|
39
|
+
const dependencies = [
|
|
40
|
+
{ name: 'A', dependencies: ['B'] },
|
|
41
|
+
{ name: 'B', dependencies: ['A'] },
|
|
42
|
+
];
|
|
43
|
+
expect(() => detectCircularDependencies(dependencies, 'table calculations')).toThrow('Circular dependency detected in table calculations: A -> B -> A');
|
|
44
|
+
});
|
|
45
|
+
it('should detect self-referencing circular dependency (A -> A)', () => {
|
|
46
|
+
const dependencies = [
|
|
47
|
+
{ name: 'A', dependencies: ['A'] },
|
|
48
|
+
];
|
|
49
|
+
expect(() => detectCircularDependencies(dependencies, 'metrics')).toThrow('Circular dependency detected in metrics: A -> A');
|
|
50
|
+
});
|
|
51
|
+
it('should detect longer circular dependency chain (A -> B -> C -> A)', () => {
|
|
52
|
+
const dependencies = [
|
|
53
|
+
{ name: 'A', dependencies: ['B'] },
|
|
54
|
+
{ name: 'B', dependencies: ['C'] },
|
|
55
|
+
{ name: 'C', dependencies: ['A'] },
|
|
56
|
+
];
|
|
57
|
+
expect(() => detectCircularDependencies(dependencies, 'calculations')).toThrow('Circular dependency detected in calculations: A -> B -> C -> A');
|
|
58
|
+
});
|
|
59
|
+
it('should detect circular dependency in complex graph (A -> B -> C -> D -> B)', () => {
|
|
60
|
+
const dependencies = [
|
|
61
|
+
{ name: 'A', dependencies: ['B'] },
|
|
62
|
+
{ name: 'B', dependencies: ['C'] },
|
|
63
|
+
{ name: 'C', dependencies: ['D'] },
|
|
64
|
+
{ name: 'D', dependencies: ['B'] },
|
|
65
|
+
];
|
|
66
|
+
expect(() => detectCircularDependencies(dependencies, 'fields')).toThrow('Circular dependency detected in fields: A -> B -> C -> D -> B');
|
|
67
|
+
});
|
|
68
|
+
it('should detect circular dependency with multiple paths', () => {
|
|
69
|
+
const dependencies = [
|
|
70
|
+
{ name: 'A', dependencies: ['B', 'C'] },
|
|
71
|
+
{ name: 'B', dependencies: ['D'] },
|
|
72
|
+
{ name: 'C', dependencies: ['D'] },
|
|
73
|
+
{ name: 'D', dependencies: ['A'] },
|
|
74
|
+
];
|
|
75
|
+
expect(() => detectCircularDependencies(dependencies, 'nodes')).toThrow('Circular dependency detected in nodes');
|
|
76
|
+
});
|
|
77
|
+
it('should use default error prefix when not provided', () => {
|
|
78
|
+
const dependencies = [
|
|
79
|
+
{ name: 'A', dependencies: ['B'] },
|
|
80
|
+
{ name: 'B', dependencies: ['A'] },
|
|
81
|
+
];
|
|
82
|
+
expect(() => detectCircularDependencies(dependencies)).toThrow('Circular dependency detected in items: A -> B -> A');
|
|
83
|
+
});
|
|
84
|
+
it('should handle graph with cycle not starting from first node', () => {
|
|
85
|
+
const dependencies = [
|
|
86
|
+
{ name: 'A', dependencies: ['B'] },
|
|
87
|
+
{ name: 'B', dependencies: [] },
|
|
88
|
+
{ name: 'C', dependencies: ['D'] },
|
|
89
|
+
{ name: 'D', dependencies: ['C'] },
|
|
90
|
+
];
|
|
91
|
+
expect(() => detectCircularDependencies(dependencies, 'test')).toThrow('Circular dependency detected in test: C -> D -> C');
|
|
92
|
+
});
|
|
93
|
+
it('should handle complex valid graph with shared dependencies', () => {
|
|
94
|
+
const dependencies = [
|
|
95
|
+
{ name: 'A', dependencies: ['D'] },
|
|
96
|
+
{ name: 'B', dependencies: ['D'] },
|
|
97
|
+
{ name: 'C', dependencies: ['D'] },
|
|
98
|
+
{ name: 'D', dependencies: ['E'] },
|
|
99
|
+
{ name: 'E', dependencies: [] },
|
|
100
|
+
];
|
|
101
|
+
expect(() => detectCircularDependencies(dependencies, 'test')).not.toThrow();
|
|
102
|
+
});
|
|
103
|
+
it('should handle node with multiple dependencies including a cycle', () => {
|
|
104
|
+
const dependencies = [
|
|
105
|
+
{ name: 'A', dependencies: ['B', 'C', 'D'] },
|
|
106
|
+
{ name: 'B', dependencies: [] },
|
|
107
|
+
{ name: 'C', dependencies: ['A'] },
|
|
108
|
+
{ name: 'D', dependencies: [] },
|
|
109
|
+
];
|
|
110
|
+
expect(() => detectCircularDependencies(dependencies, 'test')).toThrow('Circular dependency detected in test: A -> C -> A');
|
|
111
|
+
});
|
|
112
|
+
});
|
|
113
|
+
//# sourceMappingURL=dependencyGraph.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dependencyGraph.test.js","sourceRoot":"","sources":["../../../src/utils/dependencyGraph.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
export const getEmailDomain = (email) => {
|
|
2
|
+
if (/\s/.test(email)) {
|
|
3
|
+
throw new Error(`Invalid email, contains whitespace: ${email}`);
|
|
4
|
+
}
|
|
5
|
+
const domains = email.split('@');
|
|
6
|
+
if (domains.length !== 2 || !domains[1]) {
|
|
7
|
+
throw new Error(`Invalid email: ${email}`);
|
|
8
|
+
}
|
|
9
|
+
return domains[1].toLowerCase();
|
|
10
|
+
};
|
|
11
|
+
const EMAIL_PROVIDER_LIST = [
|
|
12
|
+
'gmail.com',
|
|
13
|
+
'yahoo.com',
|
|
14
|
+
'hotmail.com',
|
|
15
|
+
'aol.com',
|
|
16
|
+
'hotmail.co.uk',
|
|
17
|
+
'hotmail.fr',
|
|
18
|
+
'msn.com',
|
|
19
|
+
'yahoo.fr',
|
|
20
|
+
'wanadoo.fr',
|
|
21
|
+
'orange.fr',
|
|
22
|
+
'comcast.net',
|
|
23
|
+
'yahoo.co.uk',
|
|
24
|
+
'yahoo.com.br',
|
|
25
|
+
'yahoo.co.in',
|
|
26
|
+
'live.com',
|
|
27
|
+
'rediffmail.com',
|
|
28
|
+
'free.fr',
|
|
29
|
+
'gmx.de',
|
|
30
|
+
'web.de',
|
|
31
|
+
'yandex.ru',
|
|
32
|
+
'outlook.com',
|
|
33
|
+
'uol.com.br',
|
|
34
|
+
'bol.com.br',
|
|
35
|
+
'mail.ru',
|
|
36
|
+
'cox.net',
|
|
37
|
+
'hotmail.it',
|
|
38
|
+
'sbcglobal.net',
|
|
39
|
+
'sfr.fr',
|
|
40
|
+
'live.fr',
|
|
41
|
+
'verizon.net',
|
|
42
|
+
'live.co.uk',
|
|
43
|
+
'googlemail.com',
|
|
44
|
+
'yahoo.es',
|
|
45
|
+
'ig.com.br',
|
|
46
|
+
'live.nl',
|
|
47
|
+
'bigpond.com',
|
|
48
|
+
'terra.com.br',
|
|
49
|
+
'yahoo.it',
|
|
50
|
+
'yahoo.de',
|
|
51
|
+
'rocketmail.com',
|
|
52
|
+
'yahoo.in',
|
|
53
|
+
'hotmail.es',
|
|
54
|
+
'hotmail.de',
|
|
55
|
+
'shaw.ca',
|
|
56
|
+
'yahoo.co.jp',
|
|
57
|
+
'sky.com',
|
|
58
|
+
'blueyonder.co.uk',
|
|
59
|
+
'icloud.com',
|
|
60
|
+
];
|
|
61
|
+
const isEmailProviderDomain = (domain) => EMAIL_PROVIDER_LIST.includes(domain);
|
|
62
|
+
const VALID_EMAIL_DOMAIN_REGEX = /^[a-zA-Z0-9][\w.-]+\.\w{2,4}/g;
|
|
63
|
+
export const isValidEmailDomain = (value) => value.match(VALID_EMAIL_DOMAIN_REGEX);
|
|
64
|
+
export const validateOrganizationEmailDomains = (domains) => {
|
|
65
|
+
const invalidDomains = domains.filter((domain) => isEmailProviderDomain(domain));
|
|
66
|
+
if (!invalidDomains.length) {
|
|
67
|
+
return undefined;
|
|
68
|
+
}
|
|
69
|
+
const readableDomainList = new Intl.ListFormat('en-US', {
|
|
70
|
+
style: 'long',
|
|
71
|
+
type: 'conjunction',
|
|
72
|
+
}).format(invalidDomains);
|
|
73
|
+
return `${readableDomainList} ${invalidDomains.length === 1 ? 'is' : 'are'} not allowed as organization email(s)`;
|
|
74
|
+
};
|
|
75
|
+
export const isValidEmailAddress = (email) => /^[\w.+-]+@[\w-]+\.[A-Za-z]{2,}(?:\.[A-Za-z]{2,})*$/.test(email);
|
|
76
|
+
//# sourceMappingURL=email.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"email.js","sourceRoot":"","sources":["../../../src/utils/email.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,KAAa,EAAU,EAAE;IACpD,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QACnB,MAAM,IAAI,KAAK,CAAC,uCAAuC,KAAK,EAAE,CAAC,CAAC;IACpE,CAAC;IAED,MAAM,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACjC,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;QACtC,MAAM,IAAI,KAAK,CAAC,kBAAkB,KAAK,EAAE,CAAC,CAAC;IAC/C,CAAC;IACD,OAAO,OAAO,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;AACpC,CAAC,CAAC;AAEF,MAAM,mBAAmB,GAAG;IACxB,WAAW;IACX,WAAW;IACX,aAAa;IACb,SAAS;IACT,eAAe;IACf,YAAY;IACZ,SAAS;IACT,UAAU;IACV,YAAY;IACZ,WAAW;IACX,aAAa;IACb,aAAa;IACb,cAAc;IACd,aAAa;IACb,UAAU;IACV,gBAAgB;IAChB,SAAS;IACT,QAAQ;IACR,QAAQ;IACR,WAAW;IACX,aAAa;IACb,YAAY;IACZ,YAAY;IACZ,SAAS;IACT,SAAS;IACT,YAAY;IACZ,eAAe;IACf,QAAQ;IACR,SAAS;IACT,aAAa;IACb,YAAY;IACZ,gBAAgB;IAChB,UAAU;IACV,WAAW;IACX,SAAS;IACT,aAAa;IACb,cAAc;IACd,UAAU;IACV,UAAU;IACV,gBAAgB;IAChB,UAAU;IACV,YAAY;IACZ,YAAY;IACZ,SAAS;IACT,aAAa;IACb,SAAS;IACT,kBAAkB;IAClB,YAAY;CACf,CAAC;AAEF,MAAM,qBAAqB,GAAG,CAAC,MAAc,EAAW,EAAE,CACtD,mBAAmB,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;AAEzC,MAAM,wBAAwB,GAAG,+BAA+B,CAAC;AACjE,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,KAAa,EAAE,EAAE,CAChD,KAAK,CAAC,KAAK,CAAC,wBAAwB,CAAC,CAAC;AAE1C,MAAM,CAAC,MAAM,gCAAgC,GAAG,CAAC,OAAiB,EAAE,EAAE;IAClE,MAAM,cAAc,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAC7C,qBAAqB,CAAC,MAAM,CAAC,CAChC,CAAC;IAEF,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,CAAC;QACzB,OAAO,SAAS,CAAC;IACrB,CAAC;IAED,MAAM,kBAAkB,GAAG,IAAI,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE;QACpD,KAAK,EAAE,MAAM;QACb,IAAI,EAAE,aAAa;KACtB,CAAC,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;IAE1B,OAAO,GAAG,kBAAkB,IACxB,cAAc,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KACzC,uCAAuC,CAAC;AAC5C,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,KAAa,EAAW,EAAE,CAC1D,oDAAoD,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/* eslint-disable no-useless-escape */
|
|
2
|
+
import { getEmailDomain } from './email';
|
|
3
|
+
describe('getEmailDomain', () => {
|
|
4
|
+
it('should return the correct domain for a valid email', () => {
|
|
5
|
+
expect(getEmailDomain('user@example.com')).toBe('example.com');
|
|
6
|
+
expect(getEmailDomain('another.user@sub.domain.co.uk')).toBe('sub.domain.co.uk');
|
|
7
|
+
});
|
|
8
|
+
it('should convert the domain to lowercase', () => {
|
|
9
|
+
expect(getEmailDomain('user@EXAMPLE.COM')).toBe('example.com');
|
|
10
|
+
expect(getEmailDomain('user@Example.Com')).toBe('example.com');
|
|
11
|
+
});
|
|
12
|
+
it('should throw an error for emails containing whitespace', () => {
|
|
13
|
+
expect(() => getEmailDomain('user @example.com')).toThrow('Invalid email, contains whitespace');
|
|
14
|
+
expect(() => getEmailDomain(' user@example.com')).toThrow('Invalid email, contains whitespace');
|
|
15
|
+
expect(() => getEmailDomain('user@example.com ')).toThrow('Invalid email, contains whitespace');
|
|
16
|
+
});
|
|
17
|
+
it('should throw an error for emails without exactly one @ symbol', () => {
|
|
18
|
+
expect(() => getEmailDomain('userexample.com')).toThrow('Invalid email');
|
|
19
|
+
expect(() => getEmailDomain('user@example@com')).toThrow('Invalid email');
|
|
20
|
+
});
|
|
21
|
+
it('should handle email addresses with special characters in the local part', () => {
|
|
22
|
+
expect(getEmailDomain('user+tag@example.com')).toBe('example.com');
|
|
23
|
+
expect(getEmailDomain('user.name@example.com')).toBe('example.com');
|
|
24
|
+
expect(getEmailDomain('user-name@example.com')).toBe('example.com');
|
|
25
|
+
});
|
|
26
|
+
it('should correctly handle email addresses with multiple @ symbols', () => {
|
|
27
|
+
expect(() => getEmailDomain('user@domain.com@example.com')).toThrow('Invalid email');
|
|
28
|
+
expect(() => getEmailDomain('"user@domain.com"@example.com')).toThrow('Invalid email');
|
|
29
|
+
expect(() => getEmailDomain('"@domain.com@"@example.com')).toThrow('Invalid email');
|
|
30
|
+
});
|
|
31
|
+
it('should not be fooled by attempts to manipulate the domain extraction', () => {
|
|
32
|
+
expect(() => getEmailDomain('user@malicious.com@legitimate.org')).toThrow('Invalid email');
|
|
33
|
+
expect(() => getEmailDomain('"@organization.com@"@attacker.com')).toThrow('Invalid email');
|
|
34
|
+
expect(() => getEmailDomain('user+@company.com@personal.email')).toThrow('Invalid email');
|
|
35
|
+
});
|
|
36
|
+
it('should throw an error for invalid email constructions', () => {
|
|
37
|
+
expect(() => getEmailDomain('user@@domain.com')).toThrow('Invalid email');
|
|
38
|
+
expect(() => getEmailDomain('@domain.com@')).toThrow('Invalid email');
|
|
39
|
+
expect(() => getEmailDomain('user@')).toThrow('Invalid email');
|
|
40
|
+
});
|
|
41
|
+
it('should handle complex but valid email addresses', () => {
|
|
42
|
+
// Unusual email without extra @
|
|
43
|
+
expect(getEmailDomain('"very.(),:;<>[]".VERY."very\\"very".unusual"@strange.example.com')).toBe('strange.example.com');
|
|
44
|
+
// Unusual email with extra @
|
|
45
|
+
expect(() => getEmailDomain('"very.(),:;<>[]".VERY."very@\\"very".unusual"@strange.example.com')).toThrow('Invalid email');
|
|
46
|
+
expect(getEmailDomain("!#$%&'*+-/=?^_`{}|~@example.org")).toBe('example.org');
|
|
47
|
+
});
|
|
48
|
+
});
|
|
49
|
+
//# sourceMappingURL=email.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"email.test.js","sourceRoot":"","sources":["../../../src/utils/email.test.ts"],"names":[],"mappings":"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"}
|