@lightdash/common 0.1464.2 → 0.1465.0
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/compiler/exploreCompiler.d.ts +1 -1
- package/dist/compiler/exploreCompiler.js +3 -7
- package/dist/compiler/exploreCompiler.mock.js +2 -0
- package/dist/compiler/lightdashProjectConfig.d.ts +19 -0
- package/dist/compiler/lightdashProjectConfig.js +41 -0
- package/dist/compiler/translator.js +9 -11
- package/dist/compiler/translator.mock.js +9 -0
- package/dist/schemas/json/lightdash-dbt-2.0.json +50 -6
- package/dist/schemas/json/lightdash-project-config-1.0.json +33 -1
- package/dist/types/catalog.d.ts +3 -2
- package/dist/types/dbt.d.ts +5 -2
- package/dist/types/dbt.js +7 -9
- package/dist/types/explore.d.ts +2 -1
- package/dist/types/field.d.ts +2 -1
- package/dist/types/lightdashProjectConfig.d.ts +8 -1
- package/dist/types/tags.d.ts +5 -0
- package/dist/utils/item.d.ts +1 -0
- package/package.json +1 -1
| @@ -1,9 +1,9 @@ | |
| 1 1 | 
             
            import { type DbtRawModelNode, type SupportedDbtAdapter } from '../types/dbt';
         | 
| 2 2 | 
             
            import { type CompiledExploreJoin, type CompiledTable, type Explore, type ExploreJoin, type Table } from '../types/explore';
         | 
| 3 3 | 
             
            import { type CompiledCustomDimension, type CompiledCustomSqlDimension, type CompiledDimension, type CompiledMetric, type CustomDimension, type CustomSqlDimension, type Dimension, type Metric } from '../types/field';
         | 
| 4 | 
            -
            import { type WarehouseClient } from '../types/warehouse';
         | 
| 5 4 | 
             
            import { type LightdashProjectConfig } from '../types/lightdashProjectConfig';
         | 
| 6 5 | 
             
            import { type DateGranularity } from '../types/timeFrames';
         | 
| 6 | 
            +
            import { type WarehouseClient } from '../types/warehouse';
         | 
| 7 7 | 
             
            export declare const lightdashVariablePattern: RegExp;
         | 
| 8 8 | 
             
            type Reference = {
         | 
| 9 9 | 
             
                refTable: string;
         | 
| @@ -7,6 +7,7 @@ const timeFrames_1 = require("../types/timeFrames"); | |
| 7 7 | 
             
            const timeFrames_2 = require("../utils/timeFrames");
         | 
| 8 8 | 
             
            const warehouse_1 = require("../utils/warehouse");
         | 
| 9 9 | 
             
            const filtersCompiler_1 = require("./filtersCompiler");
         | 
| 10 | 
            +
            const lightdashProjectConfig_1 = require("./lightdashProjectConfig");
         | 
| 10 11 | 
             
            // exclude lightdash prefix from variable pattern
         | 
| 11 12 | 
             
            exports.lightdashVariablePattern = /\$\{((?!(lightdash|ld)\.)[a-zA-Z0-9_.]+)\}/g;
         | 
| 12 13 | 
             
            const getParsedReference = (ref, currentTable) => {
         | 
| @@ -119,14 +120,8 @@ class ExploreCompiler { | |
| 119 120 | 
             
                    }), {});
         | 
| 120 121 | 
             
                    const compiledJoins = joinedTables.map((j) => this.compileJoin(j, includedTables));
         | 
| 121 122 | 
             
                    const spotlightVisibility = meta.spotlight?.visibility ?? spotlightConfig?.default_visibility;
         | 
| 123 | 
            +
                    const spotlightCategories = (0, lightdashProjectConfig_1.getCategoriesFromResource)('explore', name, spotlightConfig, meta.spotlight?.categories);
         | 
| 122 124 | 
             
                    return {
         | 
| 123 | 
            -
                        ...(spotlightVisibility !== undefined
         | 
| 124 | 
            -
                            ? {
         | 
| 125 | 
            -
                                spotlight: {
         | 
| 126 | 
            -
                                    visibility: spotlightVisibility,
         | 
| 127 | 
            -
                                },
         | 
| 128 | 
            -
                            }
         | 
| 129 | 
            -
                            : {}),
         | 
| 130 125 | 
             
                        name,
         | 
| 131 126 | 
             
                        label,
         | 
| 132 127 | 
             
                        tags,
         | 
| @@ -138,6 +133,7 @@ class ExploreCompiler { | |
| 138 133 | 
             
                        warehouse,
         | 
| 139 134 | 
             
                        ymlPath,
         | 
| 140 135 | 
             
                        sqlPath,
         | 
| 136 | 
            +
                        ...(0, lightdashProjectConfig_1.getSpotlightConfigurationForResource)(spotlightVisibility, spotlightCategories),
         | 
| 141 137 | 
             
                    };
         | 
| 142 138 | 
             
                }
         | 
| 143 139 | 
             
                compileTable(table, tables) {
         | 
| @@ -81,6 +81,7 @@ exports.exploreBase = { | |
| 81 81 | 
             
                tags: [],
         | 
| 82 82 | 
             
                spotlight: {
         | 
| 83 83 | 
             
                    visibility: 'show',
         | 
| 84 | 
            +
                    categories: [],
         | 
| 84 85 | 
             
                },
         | 
| 85 86 | 
             
                baseTable: 'a',
         | 
| 86 87 | 
             
                joinedTables: [],
         | 
| @@ -1423,6 +1424,7 @@ exports.exploreWithMetricNumberCompiled = { | |
| 1423 1424 | 
             
                groupLabel: exports.exploreWithMetricNumber.groupLabel,
         | 
| 1424 1425 | 
             
                spotlight: {
         | 
| 1425 1426 | 
             
                    visibility: 'show',
         | 
| 1427 | 
            +
                    categories: [],
         | 
| 1426 1428 | 
             
                },
         | 
| 1427 1429 | 
             
                joinedTables: [],
         | 
| 1428 1430 | 
             
                tables: {
         | 
| @@ -0,0 +1,19 @@ | |
| 1 | 
            +
            import type { Explore } from '../types/explore';
         | 
| 2 | 
            +
            import type { Metric } from '../types/field';
         | 
| 3 | 
            +
            import type { LightdashProjectConfig } from '../types/lightdashProjectConfig';
         | 
| 4 | 
            +
            /**
         | 
| 5 | 
            +
             * Get the spotlight configuration for a resource
         | 
| 6 | 
            +
             * @param visibility - The visibility of the resource
         | 
| 7 | 
            +
             * @param categories - The categories of the resource
         | 
| 8 | 
            +
             * @returns The spotlight configuration for the resource
         | 
| 9 | 
            +
             */
         | 
| 10 | 
            +
            export declare const getSpotlightConfigurationForResource: (visibility?: LightdashProjectConfig['spotlight']['default_visibility'], categories?: string[]) => Pick<Explore, 'spotlight'> | Pick<Metric, 'spotlight'>;
         | 
| 11 | 
            +
            /**
         | 
| 12 | 
            +
             * Get the categories from the resource and validate them against the project config
         | 
| 13 | 
            +
             * @param resourceType - The type of the resource
         | 
| 14 | 
            +
             * @param resourceName - The name of the resource
         | 
| 15 | 
            +
             * @param spotlightConfig - The spotlight config
         | 
| 16 | 
            +
             * @param resourceCategories - The categories from the resource
         | 
| 17 | 
            +
             * @returns The categories from the resource
         | 
| 18 | 
            +
             */
         | 
| 19 | 
            +
            export declare const getCategoriesFromResource: (resourceType: 'metric' | 'explore', resourceName: string, spotlightConfig: LightdashProjectConfig['spotlight'] | undefined, resourceCategories?: string[] | undefined) => string[];
         | 
| @@ -0,0 +1,41 @@ | |
| 1 | 
            +
            "use strict";
         | 
| 2 | 
            +
            Object.defineProperty(exports, "__esModule", { value: true });
         | 
| 3 | 
            +
            exports.getCategoriesFromResource = exports.getSpotlightConfigurationForResource = void 0;
         | 
| 4 | 
            +
            const errors_1 = require("../types/errors");
         | 
| 5 | 
            +
            /**
         | 
| 6 | 
            +
             * Get the spotlight configuration for a resource
         | 
| 7 | 
            +
             * @param visibility - The visibility of the resource
         | 
| 8 | 
            +
             * @param categories - The categories of the resource
         | 
| 9 | 
            +
             * @returns The spotlight configuration for the resource
         | 
| 10 | 
            +
             */
         | 
| 11 | 
            +
            const getSpotlightConfigurationForResource = (visibility, categories) => {
         | 
| 12 | 
            +
                if (visibility === undefined) {
         | 
| 13 | 
            +
                    return {};
         | 
| 14 | 
            +
                }
         | 
| 15 | 
            +
                return {
         | 
| 16 | 
            +
                    spotlight: {
         | 
| 17 | 
            +
                        visibility,
         | 
| 18 | 
            +
                        categories,
         | 
| 19 | 
            +
                    },
         | 
| 20 | 
            +
                };
         | 
| 21 | 
            +
            };
         | 
| 22 | 
            +
            exports.getSpotlightConfigurationForResource = getSpotlightConfigurationForResource;
         | 
| 23 | 
            +
            /**
         | 
| 24 | 
            +
             * Get the categories from the resource and validate them against the project config
         | 
| 25 | 
            +
             * @param resourceType - The type of the resource
         | 
| 26 | 
            +
             * @param resourceName - The name of the resource
         | 
| 27 | 
            +
             * @param spotlightConfig - The spotlight config
         | 
| 28 | 
            +
             * @param resourceCategories - The categories from the resource
         | 
| 29 | 
            +
             * @returns The categories from the resource
         | 
| 30 | 
            +
             */
         | 
| 31 | 
            +
            const getCategoriesFromResource = (resourceType, resourceName, spotlightConfig, resourceCategories = []) => {
         | 
| 32 | 
            +
                // Get all valid category references from the global spotlight config
         | 
| 33 | 
            +
                const categoriesDefinedInProjectConfig = Object.keys(spotlightConfig?.categories || {}) || [];
         | 
| 34 | 
            +
                // Check if any metric categories aren't defined in the global config
         | 
| 35 | 
            +
                const invalidCategories = resourceCategories.filter((category) => !categoriesDefinedInProjectConfig.includes(category));
         | 
| 36 | 
            +
                if (invalidCategories.length > 0) {
         | 
| 37 | 
            +
                    throw new errors_1.ParseError(`Invalid spotlight categories found in ${resourceType} '${resourceName}': ${invalidCategories.join(', ')}. Categories must be defined in project config.`);
         | 
| 38 | 
            +
                }
         | 
| 39 | 
            +
                return resourceCategories;
         | 
| 40 | 
            +
            };
         | 
| 41 | 
            +
            exports.getCategoriesFromResource = getCategoriesFromResource;
         | 
| @@ -11,6 +11,7 @@ const table_1 = require("../types/table"); | |
| 11 11 | 
             
            const assertUnreachable_1 = tslib_1.__importDefault(require("../utils/assertUnreachable"));
         | 
| 12 12 | 
             
            const timeFrames_1 = require("../utils/timeFrames");
         | 
| 13 13 | 
             
            const exploreCompiler_1 = require("./exploreCompiler");
         | 
| 14 | 
            +
            const lightdashProjectConfig_1 = require("./lightdashProjectConfig");
         | 
| 14 15 | 
             
            const convertTimezone = (timestampSql, default_source_tz, target_tz, adapterType) => {
         | 
| 15 16 | 
             
                // todo: implement default_source_tz
         | 
| 16 17 | 
             
                // todo: implement target_tz
         | 
| @@ -118,7 +119,7 @@ const generateTableLineage = (model, depGraph) => { | |
| 118 119 | 
             
                        .map((d) => depGraph.getNodeData(d)),
         | 
| 119 120 | 
             
                }), {});
         | 
| 120 121 | 
             
            };
         | 
| 121 | 
            -
            const convertDbtMetricToLightdashMetric = (metric, tableName, tableLabel, spotlightConfig) => {
         | 
| 122 | 
            +
            const convertDbtMetricToLightdashMetric = (metric, tableName, tableLabel, spotlightConfig, modelCategories) => {
         | 
| 122 123 | 
             
                let sql;
         | 
| 123 124 | 
             
                let type;
         | 
| 124 125 | 
             
                if (metric.calculation_method === 'derived') {
         | 
| @@ -161,7 +162,8 @@ const convertDbtMetricToLightdashMetric = (metric, tableName, tableLabel, spotli | |
| 161 162 | 
             
                    sql = `CASE WHEN ${filterSql} THEN ${sql} ELSE NULL END`;
         | 
| 162 163 | 
             
                }
         | 
| 163 164 | 
             
                const groups = (0, dbt_1.convertToGroups)(metric.meta?.groups, metric.meta?.group_label);
         | 
| 164 | 
            -
                const spotlightVisibility = spotlightConfig | 
| 165 | 
            +
                const spotlightVisibility = spotlightConfig.default_visibility;
         | 
| 166 | 
            +
                const spotlightCategories = (0, lightdashProjectConfig_1.getCategoriesFromResource)('metric', metric.name, spotlightConfig, Array.from(new Set([...(modelCategories || [])])));
         | 
| 165 167 | 
             
                return {
         | 
| 166 168 | 
             
                    fieldType: field_1.FieldType.METRIC,
         | 
| 167 169 | 
             
                    type,
         | 
| @@ -189,13 +191,7 @@ const convertDbtMetricToLightdashMetric = (metric, tableName, tableLabel, spotli | |
| 189 191 | 
             
                                : [metric.meta.tags],
         | 
| 190 192 | 
             
                        }
         | 
| 191 193 | 
             
                        : {}),
         | 
| 192 | 
            -
                    ...(spotlightVisibility  | 
| 193 | 
            -
                        ? {
         | 
| 194 | 
            -
                            spotlight: {
         | 
| 195 | 
            -
                                visibility: spotlightVisibility,
         | 
| 196 | 
            -
                            },
         | 
| 197 | 
            -
                        }
         | 
| 198 | 
            -
                        : {}),
         | 
| 194 | 
            +
                    ...(0, lightdashProjectConfig_1.getSpotlightConfigurationForResource)(spotlightVisibility, spotlightCategories),
         | 
| 199 195 | 
             
                };
         | 
| 200 196 | 
             
            };
         | 
| 201 197 | 
             
            const convertTable = (adapterType, model, dbtMetrics, spotlightConfig, startOfWeek) => {
         | 
| @@ -278,6 +274,7 @@ const convertTable = (adapterType, model, dbtMetrics, spotlightConfig, startOfWe | |
| 278 274 | 
             
                                default_visibility: model.meta.spotlight?.visibility ??
         | 
| 279 275 | 
             
                                    spotlightConfig.default_visibility,
         | 
| 280 276 | 
             
                            },
         | 
| 277 | 
            +
                            modelCategories: model.meta.spotlight?.categories,
         | 
| 281 278 | 
             
                        }),
         | 
| 282 279 | 
             
                    ]));
         | 
| 283 280 | 
             
                    return [
         | 
| @@ -299,13 +296,14 @@ const convertTable = (adapterType, model, dbtMetrics, spotlightConfig, startOfWe | |
| 299 296 | 
             
                        spotlightConfig: {
         | 
| 300 297 | 
             
                            ...spotlightConfig,
         | 
| 301 298 | 
             
                            default_visibility: model.meta.spotlight?.visibility ??
         | 
| 302 | 
            -
                                spotlightConfig | 
| 299 | 
            +
                                spotlightConfig.default_visibility,
         | 
| 303 300 | 
             
                        },
         | 
| 301 | 
            +
                        modelCategories: model.meta.spotlight?.categories,
         | 
| 304 302 | 
             
                    }),
         | 
| 305 303 | 
             
                ]));
         | 
| 306 304 | 
             
                const convertedDbtMetrics = Object.fromEntries(dbtMetrics.map((metric) => [
         | 
| 307 305 | 
             
                    metric.name,
         | 
| 308 | 
            -
                    convertDbtMetricToLightdashMetric(metric, model.name, tableLabel, spotlightConfig),
         | 
| 306 | 
            +
                    convertDbtMetricToLightdashMetric(metric, model.name, tableLabel, spotlightConfig, model.meta.spotlight?.categories),
         | 
| 309 307 | 
             
                ]));
         | 
| 310 308 | 
             
                const allMetrics = Object.values({
         | 
| 311 309 | 
             
                    ...convertedDbtMetrics,
         | 
| @@ -319,6 +319,7 @@ exports.LIGHTDASH_TABLE_WITH_GROUP_BLOCK = { | |
| 319 319 | 
             
                        type: field_1.MetricType.COUNT_DISTINCT,
         | 
| 320 320 | 
             
                        spotlight: {
         | 
| 321 321 | 
             
                            visibility: 'show',
         | 
| 322 | 
            +
                            categories: [],
         | 
| 322 323 | 
             
                        },
         | 
| 323 324 | 
             
                    },
         | 
| 324 325 | 
             
                },
         | 
| @@ -399,6 +400,7 @@ exports.LIGHTDASH_TABLE_WITH_DBT_METRICS = { | |
| 399 400 | 
             
                        index: 0,
         | 
| 400 401 | 
             
                        spotlight: {
         | 
| 401 402 | 
             
                            visibility: 'show',
         | 
| 403 | 
            +
                            categories: [],
         | 
| 402 404 | 
             
                        },
         | 
| 403 405 | 
             
                    },
         | 
| 404 406 | 
             
                    dbt_metric_2: {
         | 
| @@ -423,6 +425,7 @@ exports.LIGHTDASH_TABLE_WITH_DBT_METRICS = { | |
| 423 425 | 
             
                        index: 1,
         | 
| 424 426 | 
             
                        spotlight: {
         | 
| 425 427 | 
             
                            visibility: 'show',
         | 
| 428 | 
            +
                            categories: [],
         | 
| 426 429 | 
             
                        },
         | 
| 427 430 | 
             
                    },
         | 
| 428 431 | 
             
                    dbt_metric_3: {
         | 
| @@ -447,6 +450,7 @@ exports.LIGHTDASH_TABLE_WITH_DBT_METRICS = { | |
| 447 450 | 
             
                        index: 2,
         | 
| 448 451 | 
             
                        spotlight: {
         | 
| 449 452 | 
             
                            visibility: 'show',
         | 
| 453 | 
            +
                            categories: [],
         | 
| 450 454 | 
             
                        },
         | 
| 451 455 | 
             
                    },
         | 
| 452 456 | 
             
                    dbt_metric_4: {
         | 
| @@ -471,6 +475,7 @@ exports.LIGHTDASH_TABLE_WITH_DBT_METRICS = { | |
| 471 475 | 
             
                        index: 3,
         | 
| 472 476 | 
             
                        spotlight: {
         | 
| 473 477 | 
             
                            visibility: 'show',
         | 
| 478 | 
            +
                            categories: [],
         | 
| 474 479 | 
             
                        },
         | 
| 475 480 | 
             
                    },
         | 
| 476 481 | 
             
                    dbt_metric_5: {
         | 
| @@ -495,6 +500,7 @@ exports.LIGHTDASH_TABLE_WITH_DBT_METRICS = { | |
| 495 500 | 
             
                        index: 4,
         | 
| 496 501 | 
             
                        spotlight: {
         | 
| 497 502 | 
             
                            visibility: 'show',
         | 
| 503 | 
            +
                            categories: [],
         | 
| 498 504 | 
             
                        },
         | 
| 499 505 | 
             
                    },
         | 
| 500 506 | 
             
                },
         | 
| @@ -524,6 +530,7 @@ exports.LIGHTDASH_TABLE_WITH_DBT_V9_METRICS = { | |
| 524 530 | 
             
                        index: 0,
         | 
| 525 531 | 
             
                        spotlight: {
         | 
| 526 532 | 
             
                            visibility: 'show',
         | 
| 533 | 
            +
                            categories: [],
         | 
| 527 534 | 
             
                        },
         | 
| 528 535 | 
             
                    },
         | 
| 529 536 | 
             
                },
         | 
| @@ -649,6 +656,7 @@ exports.LIGHTDASH_TABLE_WITH_METRICS = { | |
| 649 656 | 
             
                        requiredAttributes: undefined,
         | 
| 650 657 | 
             
                        spotlight: {
         | 
| 651 658 | 
             
                            visibility: 'show',
         | 
| 659 | 
            +
                            categories: [],
         | 
| 652 660 | 
             
                        },
         | 
| 653 661 | 
             
                    },
         | 
| 654 662 | 
             
                    total_num_participating_athletes: {
         | 
| @@ -675,6 +683,7 @@ exports.LIGHTDASH_TABLE_WITH_METRICS = { | |
| 675 683 | 
             
                        requiredAttributes: undefined,
         | 
| 676 684 | 
             
                        spotlight: {
         | 
| 677 685 | 
             
                            visibility: 'show',
         | 
| 686 | 
            +
                            categories: [],
         | 
| 678 687 | 
             
                        },
         | 
| 679 688 | 
             
                    },
         | 
| 680 689 | 
             
                },
         | 
| @@ -190,11 +190,18 @@ | |
| 190 190 | 
             
                                                        },
         | 
| 191 191 | 
             
                                                        "spotlight": {
         | 
| 192 192 | 
             
                                                            "type": "object",
         | 
| 193 | 
            -
                                                            "description": "Set the visibility of a metric in Spotlight",
         | 
| 193 | 
            +
                                                            "description": "Set the visibility and/or categories of a metric in Spotlight",
         | 
| 194 194 | 
             
                                                            "properties": {
         | 
| 195 195 | 
             
                                                                "visibility": {
         | 
| 196 196 | 
             
                                                                    "type": "string",
         | 
| 197 197 | 
             
                                                                    "enum": ["show", "hide"]
         | 
| 198 | 
            +
                                                                },
         | 
| 199 | 
            +
                                                                "categories": {
         | 
| 200 | 
            +
                                                                    "type": "array",
         | 
| 201 | 
            +
                                                                    "items": {
         | 
| 202 | 
            +
                                                                        "type": "string"
         | 
| 203 | 
            +
                                                                    },
         | 
| 204 | 
            +
                                                                    "description": "An array of categories for the metric in Spotlight"
         | 
| 198 205 | 
             
                                                                }
         | 
| 199 206 | 
             
                                                            },
         | 
| 200 207 | 
             
                                                            "anyOf": [
         | 
| @@ -202,6 +209,11 @@ | |
| 202 209 | 
             
                                                                    "required": [
         | 
| 203 210 | 
             
                                                                        "visibility"
         | 
| 204 211 | 
             
                                                                    ]
         | 
| 212 | 
            +
                                                                },
         | 
| 213 | 
            +
                                                                {
         | 
| 214 | 
            +
                                                                    "required": [
         | 
| 215 | 
            +
                                                                        "categories"
         | 
| 216 | 
            +
                                                                    ]
         | 
| 205 217 | 
             
                                                                }
         | 
| 206 218 | 
             
                                                            ]
         | 
| 207 219 | 
             
                                                        }
         | 
| @@ -233,14 +245,24 @@ | |
| 233 245 | 
             
                                        },
         | 
| 234 246 | 
             
                                        "spotlight": {
         | 
| 235 247 | 
             
                                            "type": "object",
         | 
| 236 | 
            -
                                            "description": "Set the visibility  | 
| 248 | 
            +
                                            "description": "Set the visibility and/or categories of a metric in Spotlight",
         | 
| 237 249 | 
             
                                            "properties": {
         | 
| 238 250 | 
             
                                                "visibility": {
         | 
| 239 251 | 
             
                                                    "type": "string",
         | 
| 240 252 | 
             
                                                    "enum": ["show", "hide"]
         | 
| 253 | 
            +
                                                },
         | 
| 254 | 
            +
                                                "categories": {
         | 
| 255 | 
            +
                                                    "type": "array",
         | 
| 256 | 
            +
                                                    "items": {
         | 
| 257 | 
            +
                                                        "type": "string"
         | 
| 258 | 
            +
                                                    },
         | 
| 259 | 
            +
                                                    "description": "An optional array of categories for all metrics in this model in Spotlight"
         | 
| 241 260 | 
             
                                                }
         | 
| 242 261 | 
             
                                            },
         | 
| 243 | 
            -
                                            "anyOf": [ | 
| 262 | 
            +
                                            "anyOf": [
         | 
| 263 | 
            +
                                                { "required": ["visibility"] },
         | 
| 264 | 
            +
                                                { "required": ["categories"] }
         | 
| 265 | 
            +
                                            ]
         | 
| 244 266 | 
             
                                        }
         | 
| 245 267 | 
             
                                    }
         | 
| 246 268 | 
             
                                },
         | 
| @@ -387,7 +409,7 @@ | |
| 387 409 | 
             
                                                                    },
         | 
| 388 410 | 
             
                                                                    "spotlight": {
         | 
| 389 411 | 
             
                                                                        "type": "object",
         | 
| 390 | 
            -
                                                                        "description": "Set the visibility of a metric in Spotlight",
         | 
| 412 | 
            +
                                                                        "description": "Set the visibility and/or categories of a metric in Spotlight",
         | 
| 391 413 | 
             
                                                                        "properties": {
         | 
| 392 414 | 
             
                                                                            "visibility": {
         | 
| 393 415 | 
             
                                                                                "type": "string",
         | 
| @@ -395,6 +417,13 @@ | |
| 395 417 | 
             
                                                                                    "show",
         | 
| 396 418 | 
             
                                                                                    "hide"
         | 
| 397 419 | 
             
                                                                                ]
         | 
| 420 | 
            +
                                                                            },
         | 
| 421 | 
            +
                                                                            "categories": {
         | 
| 422 | 
            +
                                                                                "type": "array",
         | 
| 423 | 
            +
                                                                                "items": {
         | 
| 424 | 
            +
                                                                                    "type": "string"
         | 
| 425 | 
            +
                                                                                },
         | 
| 426 | 
            +
                                                                                "description": "An array of categories for the metric in Spotlight"
         | 
| 398 427 | 
             
                                                                            }
         | 
| 399 428 | 
             
                                                                        },
         | 
| 400 429 | 
             
                                                                        "anyOf": [
         | 
| @@ -402,6 +431,11 @@ | |
| 402 431 | 
             
                                                                                "required": [
         | 
| 403 432 | 
             
                                                                                    "visibility"
         | 
| 404 433 | 
             
                                                                                ]
         | 
| 434 | 
            +
                                                                            },
         | 
| 435 | 
            +
                                                                            {
         | 
| 436 | 
            +
                                                                                "required": [
         | 
| 437 | 
            +
                                                                                    "categories"
         | 
| 438 | 
            +
                                                                                ]
         | 
| 405 439 | 
             
                                                                            }
         | 
| 406 440 | 
             
                                                                        ]
         | 
| 407 441 | 
             
                                                                    }
         | 
| @@ -681,14 +715,24 @@ | |
| 681 715 | 
             
                                        },
         | 
| 682 716 | 
             
                                        "spotlight": {
         | 
| 683 717 | 
             
                                            "type": "object",
         | 
| 684 | 
            -
                                            "description": "Set the visibility of a metric in Spotlight",
         | 
| 718 | 
            +
                                            "description": "Set the visibility and/or categories of a metric in Spotlight",
         | 
| 685 719 | 
             
                                            "properties": {
         | 
| 686 720 | 
             
                                                "visibility": {
         | 
| 687 721 | 
             
                                                    "type": "string",
         | 
| 688 722 | 
             
                                                    "enum": ["show", "hide"]
         | 
| 723 | 
            +
                                                },
         | 
| 724 | 
            +
                                                "categories": {
         | 
| 725 | 
            +
                                                    "type": "array",
         | 
| 726 | 
            +
                                                    "items": {
         | 
| 727 | 
            +
                                                        "type": "string"
         | 
| 728 | 
            +
                                                    },
         | 
| 729 | 
            +
                                                    "description": "An array of categories for the metric in Spotlight"
         | 
| 689 730 | 
             
                                                }
         | 
| 690 731 | 
             
                                            },
         | 
| 691 | 
            -
                                            "anyOf": [ | 
| 732 | 
            +
                                            "anyOf": [
         | 
| 733 | 
            +
                                                { "required": ["visibility"] },
         | 
| 734 | 
            +
                                                { "required": ["categories"] }
         | 
| 735 | 
            +
                                            ]
         | 
| 692 736 | 
             
                                        }
         | 
| 693 737 | 
             
                                    }
         | 
| 694 738 | 
             
                                }
         | 
| @@ -9,7 +9,39 @@ | |
| 9 9 | 
             
                            "default_visibility": {
         | 
| 10 10 | 
             
                                "type": "string",
         | 
| 11 11 | 
             
                                "enum": ["show", "hide"],
         | 
| 12 | 
            -
                                "default": "show"
         | 
| 12 | 
            +
                                "default": "show",
         | 
| 13 | 
            +
                                "description": "The visibility of Spotlight metrics by default - if not provided, it will be set to 'show'"
         | 
| 14 | 
            +
                            },
         | 
| 15 | 
            +
                            "categories": {
         | 
| 16 | 
            +
                                "type": "object",
         | 
| 17 | 
            +
                                "description": "Define the categories that can be used in Spotlight on your model yml files",
         | 
| 18 | 
            +
                                "patternProperties": {
         | 
| 19 | 
            +
                                    "^[a-zA-Z0-9_-]+$": {
         | 
| 20 | 
            +
                                        "type": "object",
         | 
| 21 | 
            +
                                        "properties": {
         | 
| 22 | 
            +
                                            "label": {
         | 
| 23 | 
            +
                                                "description": "The label of the category as it will be displayed in Spotlight",
         | 
| 24 | 
            +
                                                "type": "string"
         | 
| 25 | 
            +
                                            },
         | 
| 26 | 
            +
                                            "color": {
         | 
| 27 | 
            +
                                                "description": "The color of the category, if not provided, it will be set to gray",
         | 
| 28 | 
            +
                                                "type": "string",
         | 
| 29 | 
            +
                                                "enum": [
         | 
| 30 | 
            +
                                                    "gray",
         | 
| 31 | 
            +
                                                    "violet",
         | 
| 32 | 
            +
                                                    "red",
         | 
| 33 | 
            +
                                                    "orange",
         | 
| 34 | 
            +
                                                    "green",
         | 
| 35 | 
            +
                                                    "blue",
         | 
| 36 | 
            +
                                                    "indigo",
         | 
| 37 | 
            +
                                                    "pink",
         | 
| 38 | 
            +
                                                    "yellow"
         | 
| 39 | 
            +
                                                ]
         | 
| 40 | 
            +
                                            }
         | 
| 41 | 
            +
                                        },
         | 
| 42 | 
            +
                                        "required": ["label"]
         | 
| 43 | 
            +
                                    }
         | 
| 44 | 
            +
                                }
         | 
| 13 45 | 
             
                            }
         | 
| 14 46 | 
             
                        }
         | 
| 15 47 | 
             
                    }
         | 
    
        package/dist/types/catalog.d.ts
    CHANGED
    
    | @@ -41,7 +41,7 @@ export type CatalogField = Pick<Field, 'name' | 'label' | 'fieldType' | 'tableLa | |
| 41 41 | 
             
                tableName: string;
         | 
| 42 42 | 
             
                tableGroupLabel?: string;
         | 
| 43 43 | 
             
                tags?: string[];
         | 
| 44 | 
            -
                categories: Pick<Tag, 'name' | 'color' | 'tagUuid'>[];
         | 
| 44 | 
            +
                categories: Pick<Tag, 'name' | 'color' | 'tagUuid' | 'yamlReference'>[];
         | 
| 45 45 | 
             
                chartUsage: number | undefined;
         | 
| 46 46 | 
             
                icon: CatalogItemIcon | null;
         | 
| 47 47 | 
             
            };
         | 
| @@ -51,7 +51,7 @@ export type CatalogTable = Pick<TableBase, 'name' | 'label' | 'groupLabel' | 'de | |
| 51 51 | 
             
                type: CatalogType.Table;
         | 
| 52 52 | 
             
                groupLabel?: string;
         | 
| 53 53 | 
             
                tags?: string[];
         | 
| 54 | 
            -
                categories: Pick<Tag, 'name' | 'color' | 'tagUuid'>[];
         | 
| 54 | 
            +
                categories: Pick<Tag, 'name' | 'color' | 'tagUuid' | 'yamlReference'>[];
         | 
| 55 55 | 
             
                joinedTables?: CompiledExploreJoin[];
         | 
| 56 56 | 
             
                chartUsage: number | undefined;
         | 
| 57 57 | 
             
                icon: CatalogItemIcon | null;
         | 
| @@ -129,6 +129,7 @@ export type CatalogItemWithTagUuids = CatalogItemSummary & { | |
| 129 129 | 
             
                    tagUuid: string;
         | 
| 130 130 | 
             
                    createdByUserUuid: string | null;
         | 
| 131 131 | 
             
                    createdAt: Date;
         | 
| 132 | 
            +
                    taggedViaYaml: boolean;
         | 
| 132 133 | 
             
                }[];
         | 
| 133 134 | 
             
            };
         | 
| 134 135 | 
             
            export type CatalogItemsWithIcons = CatalogItemSummary & Pick<CatalogItem, 'icon'>;
         | 
    
        package/dist/types/dbt.d.ts
    CHANGED
    
    | @@ -68,6 +68,7 @@ type DbtModelLightdashConfig = { | |
| 68 68 | 
             
                };
         | 
| 69 69 | 
             
                spotlight?: {
         | 
| 70 70 | 
             
                    visibility?: NonNullable<LightdashProjectConfig['spotlight']>['default_visibility'];
         | 
| 71 | 
            +
                    categories?: string[];
         | 
| 71 72 | 
             
                };
         | 
| 72 73 | 
             
            };
         | 
| 73 74 | 
             
            export type DbtModelGroup = {
         | 
| @@ -133,6 +134,7 @@ export type DbtColumnLightdashMetric = { | |
| 133 134 | 
             
                default_time_dimension?: DefaultTimeDimension;
         | 
| 134 135 | 
             
                spotlight?: {
         | 
| 135 136 | 
             
                    visibility?: NonNullable<LightdashProjectConfig['spotlight']>['default_visibility'];
         | 
| 137 | 
            +
                    categories?: string[];
         | 
| 136 138 | 
             
                };
         | 
| 137 139 | 
             
            } & DbtLightdashFieldTags;
         | 
| 138 140 | 
             
            export type DbtModelLightdashMetric = DbtColumnLightdashMetric & Required<Pick<DbtColumnLightdashMetric, 'sql'>>;
         | 
| @@ -248,8 +250,9 @@ type ConvertModelMetricArgs = { | |
| 248 250 | 
             
                dimensionReference?: string;
         | 
| 249 251 | 
             
                requiredAttributes?: Record<string, string | string[]>;
         | 
| 250 252 | 
             
                spotlightConfig?: LightdashProjectConfig['spotlight'];
         | 
| 253 | 
            +
                modelCategories?: string[];
         | 
| 251 254 | 
             
            };
         | 
| 252 | 
            -
            export declare const convertModelMetric: ({ modelName, name, metric, source, tableLabel, dimensionReference, requiredAttributes, spotlightConfig, }: ConvertModelMetricArgs) => Metric;
         | 
| 255 | 
            +
            export declare const convertModelMetric: ({ modelName, name, metric, source, tableLabel, dimensionReference, requiredAttributes, spotlightConfig, modelCategories, }: ConvertModelMetricArgs) => Metric;
         | 
| 253 256 | 
             
            type ConvertColumnMetricArgs = Omit<ConvertModelMetricArgs, 'metric'> & {
         | 
| 254 257 | 
             
                metric: DbtColumnLightdashMetric;
         | 
| 255 258 | 
             
                dimensionName?: string;
         | 
| @@ -257,7 +260,7 @@ type ConvertColumnMetricArgs = Omit<ConvertModelMetricArgs, 'metric'> & { | |
| 257 260 | 
             
                requiredAttributes?: Record<string, string | string[]>;
         | 
| 258 261 | 
             
                modelCategories?: string[];
         | 
| 259 262 | 
             
            };
         | 
| 260 | 
            -
            export declare const convertColumnMetric: ({ modelName, dimensionName, dimensionSql, name, metric, source, tableLabel, requiredAttributes, spotlightConfig, }: ConvertColumnMetricArgs) => Metric;
         | 
| 263 | 
            +
            export declare const convertColumnMetric: ({ modelName, dimensionName, dimensionSql, name, metric, source, tableLabel, requiredAttributes, spotlightConfig, modelCategories, }: ConvertColumnMetricArgs) => Metric;
         | 
| 261 264 | 
             
            export declare enum DbtManifestVersion {
         | 
| 262 265 | 
             
                V7 = "v7",
         | 
| 263 266 | 
             
                V8 = "v8",
         | 
    
        package/dist/types/dbt.js
    CHANGED
    
    | @@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true }); | |
| 3 3 | 
             
            exports.getCompiledModels = exports.getModelsFromManifest = exports.DbtExposureType = exports.getLatestSupportedDbtManifestVersion = exports.getDbtManifestVersion = exports.DbtManifestVersion = exports.convertColumnMetric = exports.convertModelMetric = exports.isDbtRpcRunSqlResults = exports.convertToGroups = exports.isDbtRpcCompileResults = exports.isDbtRpcManifestResults = exports.isSupportedDbtAdapterType = exports.isSupportedDbtAdapter = exports.isV9MetricRef = exports.isDbtPackages = exports.isDbtRpcDocsGenerateResults = exports.buildModelGraph = exports.patchPathParts = exports.normaliseModelDatabase = exports.SupportedDbtAdapter = void 0;
         | 
| 4 4 | 
             
            const tslib_1 = require("tslib");
         | 
| 5 5 | 
             
            const dependency_graph_1 = require("dependency-graph");
         | 
| 6 | 
            +
            const lightdashProjectConfig_1 = require("../compiler/lightdashProjectConfig");
         | 
| 6 7 | 
             
            const assertUnreachable_1 = tslib_1.__importDefault(require("../utils/assertUnreachable"));
         | 
| 7 8 | 
             
            const item_1 = require("../utils/item");
         | 
| 8 9 | 
             
            const errors_1 = require("./errors");
         | 
| @@ -136,9 +137,11 @@ results) => 'results' in results && | |
| 136 137 | 
             
                    'rows' in result.table &&
         | 
| 137 138 | 
             
                    Array.isArray(result.table.rows));
         | 
| 138 139 | 
             
            exports.isDbtRpcRunSqlResults = isDbtRpcRunSqlResults;
         | 
| 139 | 
            -
            const convertModelMetric = ({ modelName, name, metric, source, tableLabel, dimensionReference, requiredAttributes, spotlightConfig, }) => {
         | 
| 140 | 
            +
            const convertModelMetric = ({ modelName, name, metric, source, tableLabel, dimensionReference, requiredAttributes, spotlightConfig, modelCategories = [], }) => {
         | 
| 140 141 | 
             
                const groups = (0, exports.convertToGroups)(metric.groups, metric.group_label);
         | 
| 141 142 | 
             
                const spotlightVisibility = metric.spotlight?.visibility ?? spotlightConfig?.default_visibility;
         | 
| 143 | 
            +
                const metricCategories = Array.from(new Set([...modelCategories, ...(metric.spotlight?.categories || [])]));
         | 
| 144 | 
            +
                const spotlightCategories = (0, lightdashProjectConfig_1.getCategoriesFromResource)('metric', name, spotlightConfig, metricCategories);
         | 
| 142 145 | 
             
                return {
         | 
| 143 146 | 
             
                    fieldType: field_1.FieldType.METRIC,
         | 
| 144 147 | 
             
                    name,
         | 
| @@ -176,17 +179,11 @@ const convertModelMetric = ({ modelName, name, metric, source, tableLabel, dimen | |
| 176 179 | 
             
                            },
         | 
| 177 180 | 
             
                        }
         | 
| 178 181 | 
             
                        : null),
         | 
| 179 | 
            -
                    ...(spotlightVisibility  | 
| 180 | 
            -
                        ? {
         | 
| 181 | 
            -
                            spotlight: {
         | 
| 182 | 
            -
                                visibility: spotlightVisibility,
         | 
| 183 | 
            -
                            },
         | 
| 184 | 
            -
                        }
         | 
| 185 | 
            -
                        : {}),
         | 
| 182 | 
            +
                    ...(0, lightdashProjectConfig_1.getSpotlightConfigurationForResource)(spotlightVisibility, spotlightCategories),
         | 
| 186 183 | 
             
                };
         | 
| 187 184 | 
             
            };
         | 
| 188 185 | 
             
            exports.convertModelMetric = convertModelMetric;
         | 
| 189 | 
            -
            const convertColumnMetric = ({ modelName, dimensionName, dimensionSql, name, metric, source, tableLabel, requiredAttributes, spotlightConfig, }) => (0, exports.convertModelMetric)({
         | 
| 186 | 
            +
            const convertColumnMetric = ({ modelName, dimensionName, dimensionSql, name, metric, source, tableLabel, requiredAttributes, spotlightConfig, modelCategories = [], }) => (0, exports.convertModelMetric)({
         | 
| 190 187 | 
             
                modelName,
         | 
| 191 188 | 
             
                name,
         | 
| 192 189 | 
             
                metric: {
         | 
| @@ -212,6 +209,7 @@ const convertColumnMetric = ({ modelName, dimensionName, dimensionSql, name, met | |
| 212 209 | 
             
                    }
         | 
| 213 210 | 
             
                    : null),
         | 
| 214 211 | 
             
                spotlightConfig,
         | 
| 212 | 
            +
                modelCategories,
         | 
| 215 213 | 
             
            });
         | 
| 216 214 | 
             
            exports.convertColumnMetric = convertColumnMetric;
         | 
| 217 215 | 
             
            var DbtManifestVersion;
         | 
    
        package/dist/types/explore.d.ts
    CHANGED
    
    | @@ -45,7 +45,8 @@ export type Explore = { | |
| 45 45 | 
             
                sqlPath?: string;
         | 
| 46 46 | 
             
                type?: ExploreType;
         | 
| 47 47 | 
             
                spotlight?: {
         | 
| 48 | 
            -
                    visibility:  | 
| 48 | 
            +
                    visibility: LightdashProjectConfig['spotlight']['default_visibility'];
         | 
| 49 | 
            +
                    categories?: string[];
         | 
| 49 50 | 
             
                };
         | 
| 50 51 | 
             
            };
         | 
| 51 52 | 
             
            export declare enum InlineErrorType {
         | 
    
        package/dist/types/field.d.ts
    CHANGED
    
    | @@ -243,7 +243,8 @@ export interface Metric extends Field { | |
| 243 243 | 
             
                requiredAttributes?: Record<string, string | string[]>;
         | 
| 244 244 | 
             
                defaultTimeDimension?: DefaultTimeDimension;
         | 
| 245 245 | 
             
                spotlight?: {
         | 
| 246 | 
            -
                    visibility:  | 
| 246 | 
            +
                    visibility: LightdashProjectConfig['spotlight']['default_visibility'];
         | 
| 247 | 
            +
                    categories?: string[];
         | 
| 247 248 | 
             
                };
         | 
| 248 249 | 
             
            }
         | 
| 249 250 | 
             
            export declare const isFilterableDimension: (dimension: Dimension) => dimension is FilterableDimension;
         | 
| @@ -1,8 +1,15 @@ | |
| 1 | 
            +
            type SpotlightCategory = {
         | 
| 2 | 
            +
                label: string;
         | 
| 3 | 
            +
                color?: string;
         | 
| 4 | 
            +
            };
         | 
| 1 5 | 
             
            type SpotlightConfig = {
         | 
| 2 6 | 
             
                default_visibility: 'show' | 'hide';
         | 
| 7 | 
            +
                categories?: {
         | 
| 8 | 
            +
                    [yaml_reference: string]: SpotlightCategory;
         | 
| 9 | 
            +
                };
         | 
| 3 10 | 
             
            };
         | 
| 4 11 | 
             
            export type LightdashProjectConfig = {
         | 
| 5 12 | 
             
                spotlight: SpotlightConfig;
         | 
| 6 13 | 
             
            };
         | 
| 7 | 
            -
            export declare const DEFAULT_SPOTLIGHT_CONFIG:  | 
| 14 | 
            +
            export declare const DEFAULT_SPOTLIGHT_CONFIG: SpotlightConfig;
         | 
| 8 15 | 
             
            export {};
         | 
    
        package/dist/types/tags.d.ts
    CHANGED
    
    | @@ -5,6 +5,7 @@ export type Tag = { | |
| 5 5 | 
             
                name: string;
         | 
| 6 6 | 
             
                color: string;
         | 
| 7 7 | 
             
                createdAt: Date;
         | 
| 8 | 
            +
                yamlReference: string | null;
         | 
| 8 9 | 
             
                createdBy: Pick<LightdashUser, 'userUuid' | 'firstName' | 'lastName'> | null;
         | 
| 9 10 | 
             
            };
         | 
| 10 11 | 
             
            export type ApiGetTagsResponse = {
         | 
| @@ -17,3 +18,7 @@ export type ApiCreateTagResponse = { | |
| 17 18 | 
             
                    tagUuid: string;
         | 
| 18 19 | 
             
                };
         | 
| 19 20 | 
             
            };
         | 
| 21 | 
            +
            export type ApiReplaceYamlTagsResponse = {
         | 
| 22 | 
            +
                status: 'ok';
         | 
| 23 | 
            +
                results: undefined;
         | 
| 24 | 
            +
            };
         | 
    
        package/dist/utils/item.d.ts
    CHANGED
    
    | @@ -53,6 +53,7 @@ export declare const replaceDimensionInExplore: (explore: Explore, dimension: Co | |
| 53 53 | 
             
                type?: import("../types/explore").ExploreType | undefined;
         | 
| 54 54 | 
             
                spotlight?: {
         | 
| 55 55 | 
             
                    visibility: "show" | "hide";
         | 
| 56 | 
            +
                    categories?: string[] | undefined;
         | 
| 56 57 | 
             
                } | undefined;
         | 
| 57 58 | 
             
            };
         | 
| 58 59 | 
             
            export declare const canApplyFormattingToCustomMetric: (item: Dimension, customMetricType: MetricType) => boolean;
         |