@lightdash/common 0.1462.2 → 0.1464.0
Sign up to get free protection for your applications and to get access to all the features.
- package/dist/compiler/exploreCompiler.d.ts +5 -2
- package/dist/compiler/exploreCompiler.js +9 -1
- package/dist/compiler/exploreCompiler.mock.js +40 -1
- package/dist/compiler/translator.d.ts +3 -2
- package/dist/compiler/translator.js +26 -6
- package/dist/compiler/translator.mock.js +27 -0
- package/dist/compiler/translator.test.js +19 -20
- package/dist/dbt/schemas/lightdashMetadata.json +1 -1
- package/dist/dbt/validation.d.ts +2 -1
- package/dist/index.d.ts +12 -7
- package/dist/index.js +8 -3
- package/dist/schemas/json/lightdash-dbt-2.0.json +63 -0
- package/dist/schemas/json/lightdash-project-config-1.0.json +17 -0
- package/dist/types/any.d.ts +7 -0
- package/dist/types/any.js +2 -0
- package/dist/types/api/errors.d.ts +2 -1
- package/dist/types/dbt.d.ts +21 -11
- package/dist/types/dbt.js +14 -3
- package/dist/types/errors.d.ts +18 -17
- package/dist/types/explore.d.ts +4 -0
- package/dist/types/field.d.ts +11 -6
- package/dist/types/field.js +3 -1
- package/dist/types/field.test.js +1 -0
- package/dist/types/filter.d.ts +4 -3
- package/dist/types/filterGrammar.d.ts +3 -2
- package/dist/types/lightdashProjectConfig.d.ts +8 -0
- package/dist/types/lightdashProjectConfig.js +6 -0
- package/dist/types/metricQuery.d.ts +8 -7
- package/dist/types/scheduler.d.ts +3 -2
- package/dist/types/user.d.ts +3 -2
- package/dist/types/warehouse.d.ts +5 -4
- package/dist/utils/filters.d.ts +6 -5
- package/dist/utils/formatting.js +2 -1
- package/dist/utils/formatting.test.js +5 -1
- package/dist/utils/item.d.ts +3 -0
- package/dist/utils/loadLightdashProjectConfig.d.ts +2 -0
- package/dist/utils/loadLightdashProjectConfig.js +26 -0
- package/dist/utils/metricsExplorer.d.ts +3 -2
- package/dist/utils/virtualView.js +1 -0
- package/dist/visualizations/CartesianChartDataModel.d.ts +4 -3
- package/dist/visualizations/PieChartDataModel.d.ts +2 -1
- package/dist/visualizations/TableDataModel.d.ts +2 -1
- package/package.json +4 -1
@@ -1,7 +1,8 @@
|
|
1
|
-
import { type SupportedDbtAdapter } from '../types/dbt';
|
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
4
|
import { type WarehouseClient } from '../types/warehouse';
|
5
|
+
import { type LightdashProjectConfig } from '../types/lightdashProjectConfig';
|
5
6
|
import { type DateGranularity } from '../types/timeFrames';
|
6
7
|
export declare const lightdashVariablePattern: RegExp;
|
7
8
|
type Reference = {
|
@@ -24,11 +25,13 @@ export type UncompiledExplore = {
|
|
24
25
|
ymlPath?: string;
|
25
26
|
sqlPath?: string;
|
26
27
|
joinAliases?: Record<string, Record<string, string>>;
|
28
|
+
spotlightConfig?: LightdashProjectConfig['spotlight'];
|
29
|
+
meta: DbtRawModelNode['meta'];
|
27
30
|
};
|
28
31
|
export declare class ExploreCompiler {
|
29
32
|
private readonly warehouseClient;
|
30
33
|
constructor(warehouseClient: WarehouseClient);
|
31
|
-
compileExplore({ name, label, tags, baseTable, joinedTables, tables, targetDatabase, groupLabel, warehouse, ymlPath, sqlPath, }: UncompiledExplore): Explore;
|
34
|
+
compileExplore({ name, label, tags, baseTable, joinedTables, tables, targetDatabase, groupLabel, warehouse, ymlPath, sqlPath, spotlightConfig, meta, }: UncompiledExplore): Explore;
|
32
35
|
compileTable(table: Table, tables: Record<string, Table>): CompiledTable;
|
33
36
|
compileMetric(metric: Metric, tables: Record<string, Table>): CompiledMetric;
|
34
37
|
compileMetricSql(metric: Metric, tables: Record<string, Table>): {
|
@@ -33,7 +33,7 @@ class ExploreCompiler {
|
|
33
33
|
constructor(warehouseClient) {
|
34
34
|
this.warehouseClient = warehouseClient;
|
35
35
|
}
|
36
|
-
compileExplore({ name, label, tags, baseTable, joinedTables, tables, targetDatabase, groupLabel, warehouse, ymlPath, sqlPath, }) {
|
36
|
+
compileExplore({ name, label, tags, baseTable, joinedTables, tables, targetDatabase, groupLabel, warehouse, ymlPath, sqlPath, spotlightConfig, meta, }) {
|
37
37
|
// Check that base table and joined tables exist
|
38
38
|
if (!tables[baseTable]) {
|
39
39
|
throw new errors_1.CompileError(`Failed to compile explore "${name}". Tried to find base table but cannot find table with name "${baseTable}"`, {});
|
@@ -118,7 +118,15 @@ class ExploreCompiler {
|
|
118
118
|
[tableName]: this.compileTable(includedTables[tableName], includedTables),
|
119
119
|
}), {});
|
120
120
|
const compiledJoins = joinedTables.map((j) => this.compileJoin(j, includedTables));
|
121
|
+
const spotlightVisibility = meta.spotlight?.visibility ?? spotlightConfig?.default_visibility;
|
121
122
|
return {
|
123
|
+
...(spotlightVisibility !== undefined
|
124
|
+
? {
|
125
|
+
spotlight: {
|
126
|
+
visibility: spotlightVisibility,
|
127
|
+
},
|
128
|
+
}
|
129
|
+
: {}),
|
122
130
|
name,
|
123
131
|
label,
|
124
132
|
tags,
|
@@ -5,6 +5,7 @@ exports.expectedCompiledCustomSqlDimensionWithReferences = void 0;
|
|
5
5
|
const dbt_1 = require("../types/dbt");
|
6
6
|
const field_1 = require("../types/field");
|
7
7
|
const filter_1 = require("../types/filter");
|
8
|
+
const lightdashProjectConfig_1 = require("../types/lightdashProjectConfig");
|
8
9
|
const timeFrames_1 = require("../types/timeFrames");
|
9
10
|
exports.warehouseClientMock = {
|
10
11
|
credentials: {},
|
@@ -78,6 +79,9 @@ exports.exploreBase = {
|
|
78
79
|
name: '',
|
79
80
|
label: '',
|
80
81
|
tags: [],
|
82
|
+
spotlight: {
|
83
|
+
visibility: 'show',
|
84
|
+
},
|
81
85
|
baseTable: 'a',
|
82
86
|
joinedTables: [],
|
83
87
|
tables: {},
|
@@ -88,6 +92,8 @@ exports.exploreBase = {
|
|
88
92
|
};
|
89
93
|
exports.exploreOneEmptyTable = {
|
90
94
|
...exports.exploreBase,
|
95
|
+
spotlightConfig: lightdashProjectConfig_1.DEFAULT_SPOTLIGHT_CONFIG,
|
96
|
+
meta: {},
|
91
97
|
tables: {
|
92
98
|
a: {
|
93
99
|
name: 'a',
|
@@ -125,9 +131,13 @@ exports.exploreOneEmptyTableCompiled = {
|
|
125
131
|
};
|
126
132
|
exports.exploreMissingBaseTable = {
|
127
133
|
...exports.exploreBase,
|
134
|
+
spotlightConfig: lightdashProjectConfig_1.DEFAULT_SPOTLIGHT_CONFIG,
|
135
|
+
meta: {},
|
128
136
|
};
|
129
137
|
exports.exploreMissingJoinTable = {
|
130
138
|
...exports.exploreBase,
|
139
|
+
spotlightConfig: lightdashProjectConfig_1.DEFAULT_SPOTLIGHT_CONFIG,
|
140
|
+
meta: {},
|
131
141
|
joinedTables: [
|
132
142
|
{
|
133
143
|
table: 'b',
|
@@ -152,6 +162,8 @@ exports.exploreMissingJoinTable = {
|
|
152
162
|
};
|
153
163
|
exports.exploreCircularDimensionReference = {
|
154
164
|
...exports.exploreBase,
|
165
|
+
spotlightConfig: lightdashProjectConfig_1.DEFAULT_SPOTLIGHT_CONFIG,
|
166
|
+
meta: {},
|
155
167
|
tables: {
|
156
168
|
a: {
|
157
169
|
name: 'a',
|
@@ -197,6 +209,8 @@ exports.exploreCircularDimensionShortReference = {
|
|
197
209
|
};
|
198
210
|
exports.exploreCircularMetricReference = {
|
199
211
|
...exports.exploreBase,
|
212
|
+
spotlightConfig: lightdashProjectConfig_1.DEFAULT_SPOTLIGHT_CONFIG,
|
213
|
+
meta: {},
|
200
214
|
tables: {
|
201
215
|
a: {
|
202
216
|
name: 'a',
|
@@ -254,6 +268,8 @@ exports.exploreCircularMetricShortReference = {
|
|
254
268
|
};
|
255
269
|
exports.exploreTableSelfReference = {
|
256
270
|
...exports.exploreBase,
|
271
|
+
spotlightConfig: lightdashProjectConfig_1.DEFAULT_SPOTLIGHT_CONFIG,
|
272
|
+
meta: {},
|
257
273
|
tables: {
|
258
274
|
a: {
|
259
275
|
name: 'a',
|
@@ -284,6 +300,8 @@ exports.exploreTableSelfReference = {
|
|
284
300
|
};
|
285
301
|
exports.exploreTableSelfReferenceSqlWhere = {
|
286
302
|
...exports.exploreBase,
|
303
|
+
spotlightConfig: lightdashProjectConfig_1.DEFAULT_SPOTLIGHT_CONFIG,
|
304
|
+
meta: {},
|
287
305
|
tables: {
|
288
306
|
a: {
|
289
307
|
name: 'a',
|
@@ -380,6 +398,8 @@ exports.exploreTableSelfReferenceCompiledSqlWhere = {
|
|
380
398
|
};
|
381
399
|
exports.exploreReferenceDimension = {
|
382
400
|
...exports.exploreBase,
|
401
|
+
spotlightConfig: lightdashProjectConfig_1.DEFAULT_SPOTLIGHT_CONFIG,
|
402
|
+
meta: {},
|
383
403
|
tables: {
|
384
404
|
a: {
|
385
405
|
name: 'a',
|
@@ -467,6 +487,8 @@ exports.exploreReferenceDimensionCompiled = {
|
|
467
487
|
};
|
468
488
|
exports.exploreComplexReference = {
|
469
489
|
...exports.exploreBase,
|
490
|
+
spotlightConfig: lightdashProjectConfig_1.DEFAULT_SPOTLIGHT_CONFIG,
|
491
|
+
meta: {},
|
470
492
|
tables: {
|
471
493
|
a: {
|
472
494
|
name: 'a',
|
@@ -606,6 +628,8 @@ exports.exploreComplexReferenceCompiled = {
|
|
606
628
|
};
|
607
629
|
exports.simpleJoinedExplore = {
|
608
630
|
...exports.exploreBase,
|
631
|
+
spotlightConfig: lightdashProjectConfig_1.DEFAULT_SPOTLIGHT_CONFIG,
|
632
|
+
meta: {},
|
609
633
|
joinedTables: [
|
610
634
|
{
|
611
635
|
table: 'b',
|
@@ -1332,6 +1356,8 @@ exports.compiledJoinedExploreWithJoinAliasAndSubsetOfFieldsThatDontIncludeSqlFie
|
|
1332
1356
|
};
|
1333
1357
|
exports.exploreWithMetricNumber = {
|
1334
1358
|
...exports.exploreBase,
|
1359
|
+
spotlightConfig: lightdashProjectConfig_1.DEFAULT_SPOTLIGHT_CONFIG,
|
1360
|
+
meta: {},
|
1335
1361
|
tables: {
|
1336
1362
|
a: {
|
1337
1363
|
name: 'a',
|
@@ -1386,7 +1412,18 @@ exports.exploreWithMetricNumber = {
|
|
1386
1412
|
},
|
1387
1413
|
};
|
1388
1414
|
exports.exploreWithMetricNumberCompiled = {
|
1389
|
-
|
1415
|
+
name: exports.exploreWithMetricNumber.name,
|
1416
|
+
label: exports.exploreWithMetricNumber.label,
|
1417
|
+
baseTable: exports.exploreWithMetricNumber.baseTable,
|
1418
|
+
tags: exports.exploreWithMetricNumber.tags,
|
1419
|
+
targetDatabase: exports.exploreWithMetricNumber.targetDatabase,
|
1420
|
+
warehouse: exports.exploreWithMetricNumber.warehouse,
|
1421
|
+
ymlPath: exports.exploreWithMetricNumber.ymlPath,
|
1422
|
+
sqlPath: exports.exploreWithMetricNumber.sqlPath,
|
1423
|
+
groupLabel: exports.exploreWithMetricNumber.groupLabel,
|
1424
|
+
spotlight: {
|
1425
|
+
visibility: 'show',
|
1426
|
+
},
|
1390
1427
|
joinedTables: [],
|
1391
1428
|
tables: {
|
1392
1429
|
a: {
|
@@ -1567,6 +1604,8 @@ exports.tablesWithMetricsWithFilters = {
|
|
1567
1604
|
};
|
1568
1605
|
exports.exploreWithRequiredAttributes = {
|
1569
1606
|
...exports.exploreBase,
|
1607
|
+
spotlightConfig: lightdashProjectConfig_1.DEFAULT_SPOTLIGHT_CONFIG,
|
1608
|
+
meta: {},
|
1570
1609
|
joinedTables: [
|
1571
1610
|
{
|
1572
1611
|
table: 'b',
|
@@ -1,10 +1,11 @@
|
|
1
1
|
import { SupportedDbtAdapter, type DbtMetric, type DbtModelNode } from '../types/dbt';
|
2
2
|
import { type Explore, type ExploreError, type Table } from '../types/explore';
|
3
3
|
import { DimensionType } from '../types/field';
|
4
|
+
import { type LightdashProjectConfig } from '../types/lightdashProjectConfig';
|
4
5
|
import { type WarehouseClient } from '../types/warehouse';
|
5
6
|
import { type WeekDay } from '../utils/timeFrames';
|
6
|
-
export declare const convertTable: (adapterType: SupportedDbtAdapter, model: DbtModelNode, dbtMetrics: DbtMetric[], startOfWeek?: WeekDay | null) => Omit<Table, 'lineageGraph'>;
|
7
|
-
export declare const convertExplores: (models: DbtModelNode[], loadSources: boolean, adapterType: SupportedDbtAdapter, metrics: DbtMetric[], warehouseClient: WarehouseClient) => Promise<(Explore | ExploreError)[]>;
|
7
|
+
export declare const convertTable: (adapterType: SupportedDbtAdapter, model: DbtModelNode, dbtMetrics: DbtMetric[], spotlightConfig: LightdashProjectConfig['spotlight'], startOfWeek?: WeekDay | null) => Omit<Table, 'lineageGraph'>;
|
8
|
+
export declare const convertExplores: (models: DbtModelNode[], loadSources: boolean, adapterType: SupportedDbtAdapter, metrics: DbtMetric[], warehouseClient: WarehouseClient, lightdashProjectConfig: LightdashProjectConfig) => Promise<(Explore | ExploreError)[]>;
|
8
9
|
export declare const attachTypesToModels: (models: DbtModelNode[], warehouseCatalog: {
|
9
10
|
[database: string]: {
|
10
11
|
[schema: string]: {
|
@@ -118,7 +118,7 @@ const generateTableLineage = (model, depGraph) => {
|
|
118
118
|
.map((d) => depGraph.getNodeData(d)),
|
119
119
|
}), {});
|
120
120
|
};
|
121
|
-
const convertDbtMetricToLightdashMetric = (metric, tableName, tableLabel) => {
|
121
|
+
const convertDbtMetricToLightdashMetric = (metric, tableName, tableLabel, spotlightConfig) => {
|
122
122
|
let sql;
|
123
123
|
let type;
|
124
124
|
if (metric.calculation_method === 'derived') {
|
@@ -161,6 +161,7 @@ const convertDbtMetricToLightdashMetric = (metric, tableName, tableLabel) => {
|
|
161
161
|
sql = `CASE WHEN ${filterSql} THEN ${sql} ELSE NULL END`;
|
162
162
|
}
|
163
163
|
const groups = (0, dbt_1.convertToGroups)(metric.meta?.groups, metric.meta?.group_label);
|
164
|
+
const spotlightVisibility = spotlightConfig?.default_visibility;
|
164
165
|
return {
|
165
166
|
fieldType: field_1.FieldType.METRIC,
|
166
167
|
type,
|
@@ -188,9 +189,16 @@ const convertDbtMetricToLightdashMetric = (metric, tableName, tableLabel) => {
|
|
188
189
|
: [metric.meta.tags],
|
189
190
|
}
|
190
191
|
: {}),
|
192
|
+
...(spotlightVisibility !== undefined
|
193
|
+
? {
|
194
|
+
spotlight: {
|
195
|
+
visibility: spotlightVisibility,
|
196
|
+
},
|
197
|
+
}
|
198
|
+
: {}),
|
191
199
|
};
|
192
200
|
};
|
193
|
-
const convertTable = (adapterType, model, dbtMetrics, startOfWeek) => {
|
201
|
+
const convertTable = (adapterType, model, dbtMetrics, spotlightConfig, startOfWeek) => {
|
194
202
|
const meta = model.config?.meta || model.meta; // Config block takes priority, then meta block
|
195
203
|
const tableLabel = meta.label || (0, field_1.friendlyName)(model.name);
|
196
204
|
const [dimensions, metrics] = Object.values(model.columns).reduce(([prevDimensions, prevMetrics], column, index) => {
|
@@ -264,7 +272,12 @@ const convertTable = (adapterType, model, dbtMetrics, startOfWeek) => {
|
|
264
272
|
name,
|
265
273
|
metric,
|
266
274
|
tableLabel,
|
267
|
-
requiredAttributes: dimension.requiredAttributes,
|
275
|
+
requiredAttributes: dimension.requiredAttributes,
|
276
|
+
spotlightConfig: {
|
277
|
+
...spotlightConfig,
|
278
|
+
default_visibility: model.meta.spotlight?.visibility ??
|
279
|
+
spotlightConfig.default_visibility,
|
280
|
+
},
|
268
281
|
}),
|
269
282
|
]));
|
270
283
|
return [
|
@@ -283,11 +296,16 @@ const convertTable = (adapterType, model, dbtMetrics, startOfWeek) => {
|
|
283
296
|
name,
|
284
297
|
metric,
|
285
298
|
tableLabel,
|
299
|
+
spotlightConfig: {
|
300
|
+
...spotlightConfig,
|
301
|
+
default_visibility: model.meta.spotlight?.visibility ??
|
302
|
+
spotlightConfig?.default_visibility,
|
303
|
+
},
|
286
304
|
}),
|
287
305
|
]));
|
288
306
|
const convertedDbtMetrics = Object.fromEntries(dbtMetrics.map((metric) => [
|
289
307
|
metric.name,
|
290
|
-
convertDbtMetricToLightdashMetric(metric, model.name, tableLabel),
|
308
|
+
convertDbtMetricToLightdashMetric(metric, model.name, tableLabel, spotlightConfig),
|
291
309
|
]));
|
292
310
|
const allMetrics = Object.values({
|
293
311
|
...convertedDbtMetrics,
|
@@ -374,7 +392,7 @@ const modelCanUseMetric = (metricName, modelName, metrics) => {
|
|
374
392
|
}
|
375
393
|
return false;
|
376
394
|
};
|
377
|
-
const convertExplores = async (models, loadSources, adapterType, metrics, warehouseClient) => {
|
395
|
+
const convertExplores = async (models, loadSources, adapterType, metrics, warehouseClient, lightdashProjectConfig) => {
|
378
396
|
const tableLineage = translateDbtModelsToTableLineage(models);
|
379
397
|
const [tables, exploreErrors] = models.reduce(([accTables, accErrors], model) => {
|
380
398
|
const meta = model.config?.meta || model.meta; // Config block takes priority, then meta block
|
@@ -382,7 +400,7 @@ const convertExplores = async (models, loadSources, adapterType, metrics, wareho
|
|
382
400
|
try {
|
383
401
|
// base dimensions and metrics
|
384
402
|
const tableMetrics = metrics.filter((metric) => modelCanUseMetric(metric.name, model.name, metrics));
|
385
|
-
const table = (0, exports.convertTable)(adapterType, model, tableMetrics, warehouseClient.getStartOfWeek());
|
403
|
+
const table = (0, exports.convertTable)(adapterType, model, tableMetrics, lightdashProjectConfig.spotlight, warehouseClient.getStartOfWeek());
|
386
404
|
// add sources
|
387
405
|
if (loadSources && model.patch_path !== null) {
|
388
406
|
throw new Error('Not Implemented');
|
@@ -441,6 +459,8 @@ const convertExplores = async (models, loadSources, adapterType, metrics, wareho
|
|
441
459
|
warehouse: model.config?.snowflake_warehouse,
|
442
460
|
ymlPath: model.patch_path?.split('://')?.[1],
|
443
461
|
sqlPath: model.path,
|
462
|
+
spotlightConfig: lightdashProjectConfig.spotlight,
|
463
|
+
meta,
|
444
464
|
});
|
445
465
|
}
|
446
466
|
catch (e) {
|
@@ -317,6 +317,9 @@ exports.LIGHTDASH_TABLE_WITH_GROUP_BLOCK = {
|
|
317
317
|
table: 'myTable',
|
318
318
|
tableLabel: 'My table',
|
319
319
|
type: field_1.MetricType.COUNT_DISTINCT,
|
320
|
+
spotlight: {
|
321
|
+
visibility: 'show',
|
322
|
+
},
|
320
323
|
},
|
321
324
|
},
|
322
325
|
groupDetails: {
|
@@ -394,6 +397,9 @@ exports.LIGHTDASH_TABLE_WITH_DBT_METRICS = {
|
|
394
397
|
groups: [],
|
395
398
|
filters: [],
|
396
399
|
index: 0,
|
400
|
+
spotlight: {
|
401
|
+
visibility: 'show',
|
402
|
+
},
|
397
403
|
},
|
398
404
|
dbt_metric_2: {
|
399
405
|
description: 'Description',
|
@@ -415,6 +421,9 @@ exports.LIGHTDASH_TABLE_WITH_DBT_METRICS = {
|
|
415
421
|
groups: [],
|
416
422
|
filters: [],
|
417
423
|
index: 1,
|
424
|
+
spotlight: {
|
425
|
+
visibility: 'show',
|
426
|
+
},
|
418
427
|
},
|
419
428
|
dbt_metric_3: {
|
420
429
|
description: 'Description',
|
@@ -436,6 +445,9 @@ exports.LIGHTDASH_TABLE_WITH_DBT_METRICS = {
|
|
436
445
|
groups: [],
|
437
446
|
filters: [],
|
438
447
|
index: 2,
|
448
|
+
spotlight: {
|
449
|
+
visibility: 'show',
|
450
|
+
},
|
439
451
|
},
|
440
452
|
dbt_metric_4: {
|
441
453
|
description: 'Description',
|
@@ -457,6 +469,9 @@ exports.LIGHTDASH_TABLE_WITH_DBT_METRICS = {
|
|
457
469
|
groups: [],
|
458
470
|
filters: [],
|
459
471
|
index: 3,
|
472
|
+
spotlight: {
|
473
|
+
visibility: 'show',
|
474
|
+
},
|
460
475
|
},
|
461
476
|
dbt_metric_5: {
|
462
477
|
description: 'Description',
|
@@ -478,6 +493,9 @@ exports.LIGHTDASH_TABLE_WITH_DBT_METRICS = {
|
|
478
493
|
groups: [],
|
479
494
|
filters: [],
|
480
495
|
index: 4,
|
496
|
+
spotlight: {
|
497
|
+
visibility: 'show',
|
498
|
+
},
|
481
499
|
},
|
482
500
|
},
|
483
501
|
};
|
@@ -504,6 +522,9 @@ exports.LIGHTDASH_TABLE_WITH_DBT_V9_METRICS = {
|
|
504
522
|
groups: [],
|
505
523
|
filters: [],
|
506
524
|
index: 0,
|
525
|
+
spotlight: {
|
526
|
+
visibility: 'show',
|
527
|
+
},
|
507
528
|
},
|
508
529
|
},
|
509
530
|
};
|
@@ -626,6 +647,9 @@ exports.LIGHTDASH_TABLE_WITH_METRICS = {
|
|
626
647
|
index: 0,
|
627
648
|
dimensionReference: 'myTable_user_id',
|
628
649
|
requiredAttributes: undefined,
|
650
|
+
spotlight: {
|
651
|
+
visibility: 'show',
|
652
|
+
},
|
629
653
|
},
|
630
654
|
total_num_participating_athletes: {
|
631
655
|
fieldType: field_1.FieldType.METRIC,
|
@@ -649,6 +673,9 @@ exports.LIGHTDASH_TABLE_WITH_METRICS = {
|
|
649
673
|
index: 1,
|
650
674
|
dimensionReference: 'myTable_num_participating_athletes',
|
651
675
|
requiredAttributes: undefined,
|
676
|
+
spotlight: {
|
677
|
+
visibility: 'show',
|
678
|
+
},
|
652
679
|
},
|
653
680
|
},
|
654
681
|
};
|
@@ -1,6 +1,7 @@
|
|
1
1
|
"use strict";
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
3
3
|
const dbt_1 = require("../types/dbt");
|
4
|
+
const lightdashProjectConfig_1 = require("../types/lightdashProjectConfig");
|
4
5
|
const translator_1 = require("./translator");
|
5
6
|
const translator_mock_1 = require("./translator.mock");
|
6
7
|
describe('attachTypesToModels', () => {
|
@@ -26,7 +27,7 @@ describe('attachTypesToModels', () => {
|
|
26
27
|
});
|
27
28
|
describe('convert tables from dbt models', () => {
|
28
29
|
it('should convert dbt model without metrics to Lightdash table without autogenerated metrics', () => {
|
29
|
-
expect((0, translator_1.convertTable)(dbt_1.SupportedDbtAdapter.BIGQUERY, translator_mock_1.MODEL_WITH_NO_METRICS, [])).toStrictEqual(translator_mock_1.LIGHTDASH_TABLE_WITHOUT_AUTO_METRICS);
|
30
|
+
expect((0, translator_1.convertTable)(dbt_1.SupportedDbtAdapter.BIGQUERY, translator_mock_1.MODEL_WITH_NO_METRICS, [], lightdashProjectConfig_1.DEFAULT_SPOTLIGHT_CONFIG)).toStrictEqual(translator_mock_1.LIGHTDASH_TABLE_WITHOUT_AUTO_METRICS);
|
30
31
|
});
|
31
32
|
it('should convert dbt model with dbt metrics', () => {
|
32
33
|
expect((0, translator_1.convertTable)(dbt_1.SupportedDbtAdapter.BIGQUERY, translator_mock_1.MODEL_WITH_NO_METRICS, [
|
@@ -35,56 +36,54 @@ describe('convert tables from dbt models', () => {
|
|
35
36
|
translator_mock_1.DBT_METRIC_WITH_CUSTOM_SQL,
|
36
37
|
translator_mock_1.DBT_METRIC_WITH_FILTER,
|
37
38
|
translator_mock_1.DBT_METRIC_DERIVED,
|
38
|
-
])).toStrictEqual(translator_mock_1.LIGHTDASH_TABLE_WITH_DBT_METRICS);
|
39
|
+
], lightdashProjectConfig_1.DEFAULT_SPOTLIGHT_CONFIG)).toStrictEqual(translator_mock_1.LIGHTDASH_TABLE_WITH_DBT_METRICS);
|
39
40
|
// dbt 1.5 metrics
|
40
|
-
expect((0, translator_1.convertTable)(dbt_1.SupportedDbtAdapter.BIGQUERY, translator_mock_1.MODEL_WITH_NO_METRICS, [
|
41
|
-
translator_mock_1.DBT_V9_METRIC,
|
42
|
-
])).toStrictEqual(translator_mock_1.LIGHTDASH_TABLE_WITH_DBT_V9_METRICS);
|
41
|
+
expect((0, translator_1.convertTable)(dbt_1.SupportedDbtAdapter.BIGQUERY, translator_mock_1.MODEL_WITH_NO_METRICS, [translator_mock_1.DBT_V9_METRIC], lightdashProjectConfig_1.DEFAULT_SPOTLIGHT_CONFIG)).toStrictEqual(translator_mock_1.LIGHTDASH_TABLE_WITH_DBT_V9_METRICS);
|
43
42
|
});
|
44
43
|
it('should convert dbt model with metrics in meta', () => {
|
45
|
-
expect((0, translator_1.convertTable)(dbt_1.SupportedDbtAdapter.BIGQUERY, translator_mock_1.MODEL_WITH_METRIC, [])).toStrictEqual(translator_mock_1.LIGHTDASH_TABLE_WITH_METRICS);
|
44
|
+
expect((0, translator_1.convertTable)(dbt_1.SupportedDbtAdapter.BIGQUERY, translator_mock_1.MODEL_WITH_METRIC, [], lightdashProjectConfig_1.DEFAULT_SPOTLIGHT_CONFIG)).toStrictEqual(translator_mock_1.LIGHTDASH_TABLE_WITH_METRICS);
|
46
45
|
});
|
47
46
|
it('should convert dbt model with dimension with default time intervals bigquery', () => {
|
48
|
-
expect((0, translator_1.convertTable)(dbt_1.SupportedDbtAdapter.BIGQUERY, translator_mock_1.MODEL_WITH_DEFAULT_TIME_INTERVAL_DIMENSIONS, [])).toStrictEqual(translator_mock_1.LIGHTDASH_TABLE_WITH_DEFAULT_TIME_INTERVAL_DIMENSIONS_BIGQUERY);
|
47
|
+
expect((0, translator_1.convertTable)(dbt_1.SupportedDbtAdapter.BIGQUERY, translator_mock_1.MODEL_WITH_DEFAULT_TIME_INTERVAL_DIMENSIONS, [], lightdashProjectConfig_1.DEFAULT_SPOTLIGHT_CONFIG)).toStrictEqual(translator_mock_1.LIGHTDASH_TABLE_WITH_DEFAULT_TIME_INTERVAL_DIMENSIONS_BIGQUERY);
|
49
48
|
});
|
50
49
|
it('should convert dbt model with dimension with no time intervals bigquery', () => {
|
51
|
-
expect((0, translator_1.convertTable)(dbt_1.SupportedDbtAdapter.BIGQUERY, translator_mock_1.MODEL_WITH_NO_TIME_INTERVAL_DIMENSIONS, [])).toStrictEqual(translator_mock_1.LIGHTDASH_TABLE_WITH_DEFAULT_TIME_INTERVAL_DIMENSIONS_BIGQUERY);
|
50
|
+
expect((0, translator_1.convertTable)(dbt_1.SupportedDbtAdapter.BIGQUERY, translator_mock_1.MODEL_WITH_NO_TIME_INTERVAL_DIMENSIONS, [], lightdashProjectConfig_1.DEFAULT_SPOTLIGHT_CONFIG)).toStrictEqual(translator_mock_1.LIGHTDASH_TABLE_WITH_DEFAULT_TIME_INTERVAL_DIMENSIONS_BIGQUERY);
|
52
51
|
});
|
53
52
|
it('should convert dbt model with dimension with default time intervals snowflake', () => {
|
54
|
-
expect((0, translator_1.convertTable)(dbt_1.SupportedDbtAdapter.SNOWFLAKE, translator_mock_1.MODEL_WITH_DEFAULT_TIME_INTERVAL_DIMENSIONS, [])).toStrictEqual(translator_mock_1.LIGHTDASH_TABLE_WITH_DEFAULT_TIME_INTERVAL_DIMENSIONS_SNOWFLAKE);
|
53
|
+
expect((0, translator_1.convertTable)(dbt_1.SupportedDbtAdapter.SNOWFLAKE, translator_mock_1.MODEL_WITH_DEFAULT_TIME_INTERVAL_DIMENSIONS, [], lightdashProjectConfig_1.DEFAULT_SPOTLIGHT_CONFIG)).toStrictEqual(translator_mock_1.LIGHTDASH_TABLE_WITH_DEFAULT_TIME_INTERVAL_DIMENSIONS_SNOWFLAKE);
|
55
54
|
});
|
56
55
|
it('should convert dbt model with dimension with no time intervals snowflake', () => {
|
57
|
-
expect((0, translator_1.convertTable)(dbt_1.SupportedDbtAdapter.SNOWFLAKE, translator_mock_1.MODEL_WITH_NO_TIME_INTERVAL_DIMENSIONS, [])).toStrictEqual(translator_mock_1.LIGHTDASH_TABLE_WITH_DEFAULT_TIME_INTERVAL_DIMENSIONS_SNOWFLAKE);
|
56
|
+
expect((0, translator_1.convertTable)(dbt_1.SupportedDbtAdapter.SNOWFLAKE, translator_mock_1.MODEL_WITH_NO_TIME_INTERVAL_DIMENSIONS, [], lightdashProjectConfig_1.DEFAULT_SPOTLIGHT_CONFIG)).toStrictEqual(translator_mock_1.LIGHTDASH_TABLE_WITH_DEFAULT_TIME_INTERVAL_DIMENSIONS_SNOWFLAKE);
|
58
57
|
});
|
59
58
|
it('should convert dbt model with dimension with off time intervals', () => {
|
60
|
-
expect((0, translator_1.convertTable)(dbt_1.SupportedDbtAdapter.BIGQUERY, translator_mock_1.MODEL_WITH_OFF_TIME_INTERVAL_DIMENSIONS, [])).toStrictEqual(translator_mock_1.LIGHTDASH_TABLE_WITH_OFF_TIME_INTERVAL_DIMENSIONS);
|
59
|
+
expect((0, translator_1.convertTable)(dbt_1.SupportedDbtAdapter.BIGQUERY, translator_mock_1.MODEL_WITH_OFF_TIME_INTERVAL_DIMENSIONS, [], lightdashProjectConfig_1.DEFAULT_SPOTLIGHT_CONFIG)).toStrictEqual(translator_mock_1.LIGHTDASH_TABLE_WITH_OFF_TIME_INTERVAL_DIMENSIONS);
|
61
60
|
});
|
62
61
|
it('should convert dbt model with dimension with off boolean time intervals', () => {
|
63
|
-
expect((0, translator_1.convertTable)(dbt_1.SupportedDbtAdapter.BIGQUERY, translator_mock_1.MODEL_WITH_OFF_BOOLEAN_TIME_INTERVAL_DIMENSIONS, [])).toStrictEqual(translator_mock_1.LIGHTDASH_TABLE_WITH_OFF_TIME_INTERVAL_DIMENSIONS);
|
62
|
+
expect((0, translator_1.convertTable)(dbt_1.SupportedDbtAdapter.BIGQUERY, translator_mock_1.MODEL_WITH_OFF_BOOLEAN_TIME_INTERVAL_DIMENSIONS, [], lightdashProjectConfig_1.DEFAULT_SPOTLIGHT_CONFIG)).toStrictEqual(translator_mock_1.LIGHTDASH_TABLE_WITH_OFF_TIME_INTERVAL_DIMENSIONS);
|
64
63
|
});
|
65
64
|
it('should convert dbt model with dimension with custom time intervals', () => {
|
66
|
-
expect((0, translator_1.convertTable)(dbt_1.SupportedDbtAdapter.BIGQUERY, translator_mock_1.MODEL_WITH_CUSTOM_TIME_INTERVAL_DIMENSIONS, [])).toStrictEqual(translator_mock_1.LIGHTDASH_TABLE_WITH_CUSTOM_TIME_INTERVAL_DIMENSIONS);
|
65
|
+
expect((0, translator_1.convertTable)(dbt_1.SupportedDbtAdapter.BIGQUERY, translator_mock_1.MODEL_WITH_CUSTOM_TIME_INTERVAL_DIMENSIONS, [], lightdashProjectConfig_1.DEFAULT_SPOTLIGHT_CONFIG)).toStrictEqual(translator_mock_1.LIGHTDASH_TABLE_WITH_CUSTOM_TIME_INTERVAL_DIMENSIONS);
|
67
66
|
});
|
68
67
|
it('should throw an error when metric and dimension have the same name', async () => {
|
69
|
-
expect(() => (0, translator_1.convertTable)(dbt_1.SupportedDbtAdapter.BIGQUERY, translator_mock_1.MODEL_WITH_WRONG_METRIC, [])).toThrowError('Found a metric and a dimension with the same name: user_id');
|
68
|
+
expect(() => (0, translator_1.convertTable)(dbt_1.SupportedDbtAdapter.BIGQUERY, translator_mock_1.MODEL_WITH_WRONG_METRIC, [], lightdashProjectConfig_1.DEFAULT_SPOTLIGHT_CONFIG)).toThrowError('Found a metric and a dimension with the same name: user_id');
|
70
69
|
});
|
71
70
|
it('should throw an error when multiple metrics and dimensions have the same name', async () => {
|
72
|
-
expect(() => (0, translator_1.convertTable)(dbt_1.SupportedDbtAdapter.BIGQUERY, translator_mock_1.MODEL_WITH_WRONG_METRICS, [])).toThrowError('Found multiple metrics and a dimensions with the same name: user_id,user_id2');
|
71
|
+
expect(() => (0, translator_1.convertTable)(dbt_1.SupportedDbtAdapter.BIGQUERY, translator_mock_1.MODEL_WITH_WRONG_METRICS, [], lightdashProjectConfig_1.DEFAULT_SPOTLIGHT_CONFIG)).toThrowError('Found multiple metrics and a dimensions with the same name: user_id,user_id2');
|
73
72
|
});
|
74
73
|
it('should convert dbt model with group label', async () => {
|
75
|
-
expect((0, translator_1.convertTable)(dbt_1.SupportedDbtAdapter.BIGQUERY, translator_mock_1.MODEL_WITH_GROUP_LABEL, [])).toStrictEqual(translator_mock_1.LIGHTDASH_TABLE_WITH_GROUP_LABEL);
|
74
|
+
expect((0, translator_1.convertTable)(dbt_1.SupportedDbtAdapter.BIGQUERY, translator_mock_1.MODEL_WITH_GROUP_LABEL, [], lightdashProjectConfig_1.DEFAULT_SPOTLIGHT_CONFIG)).toStrictEqual(translator_mock_1.LIGHTDASH_TABLE_WITH_GROUP_LABEL);
|
76
75
|
});
|
77
76
|
// `sql_where` is an alias of `sql_filter`
|
78
77
|
it('should convert dbt model with sql where', async () => {
|
79
|
-
expect((0, translator_1.convertTable)(dbt_1.SupportedDbtAdapter.BIGQUERY, translator_mock_1.MODEL_WITH_SQL_WHERE, [])).toStrictEqual(translator_mock_1.LIGHTDASH_TABLE_SQL_WHERE);
|
78
|
+
expect((0, translator_1.convertTable)(dbt_1.SupportedDbtAdapter.BIGQUERY, translator_mock_1.MODEL_WITH_SQL_WHERE, [], lightdashProjectConfig_1.DEFAULT_SPOTLIGHT_CONFIG)).toStrictEqual(translator_mock_1.LIGHTDASH_TABLE_SQL_WHERE);
|
80
79
|
});
|
81
80
|
it('should convert dbt model with sql filter', async () => {
|
82
|
-
expect((0, translator_1.convertTable)(dbt_1.SupportedDbtAdapter.BIGQUERY, translator_mock_1.MODEL_WITH_SQL_FILTER, [])).toStrictEqual(translator_mock_1.LIGHTDASH_TABLE_SQL_WHERE);
|
81
|
+
expect((0, translator_1.convertTable)(dbt_1.SupportedDbtAdapter.BIGQUERY, translator_mock_1.MODEL_WITH_SQL_FILTER, [], lightdashProjectConfig_1.DEFAULT_SPOTLIGHT_CONFIG)).toStrictEqual(translator_mock_1.LIGHTDASH_TABLE_SQL_WHERE);
|
83
82
|
});
|
84
83
|
it('should convert dbt model with dimension and additional dimensions', () => {
|
85
|
-
expect((0, translator_1.convertTable)(dbt_1.SupportedDbtAdapter.POSTGRES, translator_mock_1.MODEL_WITH_ADDITIONAL_DIMENSIONS, [])).toStrictEqual(translator_mock_1.LIGHTDASH_TABLE_WITH_ADDITIONAL_DIMENSIONS);
|
84
|
+
expect((0, translator_1.convertTable)(dbt_1.SupportedDbtAdapter.POSTGRES, translator_mock_1.MODEL_WITH_ADDITIONAL_DIMENSIONS, [], lightdashProjectConfig_1.DEFAULT_SPOTLIGHT_CONFIG)).toStrictEqual(translator_mock_1.LIGHTDASH_TABLE_WITH_ADDITIONAL_DIMENSIONS);
|
86
85
|
});
|
87
86
|
it('should convert dbt model with groups meta block', async () => {
|
88
|
-
expect((0, translator_1.convertTable)(dbt_1.SupportedDbtAdapter.BIGQUERY, translator_mock_1.MODEL_WITH_GROUPS_BLOCK, [])).toStrictEqual(translator_mock_1.LIGHTDASH_TABLE_WITH_GROUP_BLOCK);
|
87
|
+
expect((0, translator_1.convertTable)(dbt_1.SupportedDbtAdapter.BIGQUERY, translator_mock_1.MODEL_WITH_GROUPS_BLOCK, [], lightdashProjectConfig_1.DEFAULT_SPOTLIGHT_CONFIG)).toStrictEqual(translator_mock_1.LIGHTDASH_TABLE_WITH_GROUP_BLOCK);
|
89
88
|
});
|
90
89
|
});
|
package/dist/dbt/validation.d.ts
CHANGED
@@ -1,11 +1,12 @@
|
|
1
1
|
import { type ValidateFunction } from 'ajv';
|
2
2
|
import { type AnyValidateFunction } from 'ajv/dist/types';
|
3
|
+
import { type AnyType } from '../types/any';
|
3
4
|
import { type DbtManifestVersion, type DbtMetric, type DbtRawModelNode } from '../types/dbt';
|
4
5
|
export declare class ManifestValidator {
|
5
6
|
private readonly lightdashSchemaId;
|
6
7
|
private readonly dbtSchemaId;
|
7
8
|
constructor(manifestVersion: DbtManifestVersion);
|
8
|
-
static isValid: (validator: ValidateFunction<
|
9
|
+
static isValid: (validator: ValidateFunction<AnyType>, data: AnyType) => [true, undefined] | [false, string];
|
9
10
|
static formatAjvErrors: (validator: AnyValidateFunction) => string;
|
10
11
|
static getValidator: <T>(schemaRef: string) => AnyValidateFunction<T>;
|
11
12
|
isModelValid: (model: DbtRawModelNode) => [true, undefined] | [false, string];
|
package/dist/index.d.ts
CHANGED
@@ -36,6 +36,8 @@ import { type TableBase } from './types/table';
|
|
36
36
|
import { type LightdashUser, type LoginOptions, type UserAllowedOrganization } from './types/user';
|
37
37
|
import { type UserWarehouseCredentials } from './types/userWarehouseCredentials';
|
38
38
|
import { type ValidationResponse } from './types/validation';
|
39
|
+
import { type AnyType } from './types/any';
|
40
|
+
import { type ApiGetSpotlightTableConfig } from './types/api/spotlight';
|
39
41
|
import { type ApiCatalogAnalyticsResults, type ApiCatalogMetadataResults, type ApiGetMetricsTree, type ApiMetricsCatalog } from './types/catalog';
|
40
42
|
import { type ApiChartAsCodeListResponse, type ApiChartAsCodeUpsertResponse, type ApiDashboardAsCodeListResponse } from './types/coder';
|
41
43
|
import { type ApiChartContentResponse, type ApiContentResponse } from './types/content';
|
@@ -45,7 +47,6 @@ import { type ApiPromotionChangesResponse } from './types/promotion';
|
|
45
47
|
import { type ApiSemanticLayerClientInfo, type ApiSemanticViewerChartCreate, type ApiSemanticViewerChartGet, type ApiSemanticViewerChartUpdate } from './types/semanticLayer';
|
46
48
|
import { type ApiCreateSqlChart, type ApiCreateVirtualView, type ApiGithubDbtWritePreview, type ApiSqlChart, type ApiSqlRunnerJobStatusResponse, type ApiUpdateSqlChart } from './types/sqlRunner';
|
47
49
|
import { type ApiWarehouseTableFields } from './types/warehouse';
|
48
|
-
import { type ApiGetSpotlightTableConfig } from './types/api/spotlight';
|
49
50
|
export * from './authorization/index';
|
50
51
|
export * from './authorization/types';
|
51
52
|
export * from './compiler/exploreCompiler';
|
@@ -54,17 +55,19 @@ export * from './compiler/translator';
|
|
54
55
|
export * from './dbt/validation';
|
55
56
|
export * from './pivotTable/pivotQueryResults';
|
56
57
|
export { default as lightdashDbtYamlSchema } from './schemas/json/lightdash-dbt-2.0.json';
|
58
|
+
export { default as lightdashProjectConfigSchema } from './schemas/json/lightdash-project-config-1.0.json';
|
57
59
|
export * from './templating/template';
|
58
60
|
export * from './types/analytics';
|
61
|
+
export * from './types/any';
|
59
62
|
export * from './types/api';
|
60
63
|
export * from './types/api/comments';
|
61
64
|
export * from './types/api/errors';
|
62
65
|
export * from './types/api/notifications';
|
63
66
|
export * from './types/api/share';
|
64
67
|
export * from './types/api/sort';
|
68
|
+
export * from './types/api/spotlight';
|
65
69
|
export * from './types/api/success';
|
66
70
|
export * from './types/api/uuid';
|
67
|
-
export * from './types/api/spotlight';
|
68
71
|
export * from './types/catalog';
|
69
72
|
export * from './types/coder';
|
70
73
|
export * from './types/comments';
|
@@ -88,6 +91,7 @@ export * from './types/gitIntegration';
|
|
88
91
|
export * from './types/groups';
|
89
92
|
export * from './types/job';
|
90
93
|
export * from './types/knex-paginate';
|
94
|
+
export * from './types/lightdashProjectConfig';
|
91
95
|
export * from './types/metricQuery';
|
92
96
|
export * from './types/metricsExplorer';
|
93
97
|
export * from './types/notifications';
|
@@ -112,6 +116,7 @@ export * from './types/share';
|
|
112
116
|
export * from './types/slack';
|
113
117
|
export * from './types/slackSettings';
|
114
118
|
export * from './types/space';
|
119
|
+
export * from './types/spotlightTableConfig';
|
115
120
|
export * from './types/sqlRunner';
|
116
121
|
export * from './types/SshKeyPair';
|
117
122
|
export * from './types/table';
|
@@ -136,6 +141,7 @@ export * from './utils/filters';
|
|
136
141
|
export * from './utils/formatting';
|
137
142
|
export * from './utils/github';
|
138
143
|
export * from './utils/item';
|
144
|
+
export * from './utils/loadLightdashProjectConfig';
|
139
145
|
export * from './utils/metricsExplorer';
|
140
146
|
export * from './utils/projectMemberRole';
|
141
147
|
export * from './utils/sanitizeHtml';
|
@@ -151,7 +157,6 @@ export * from './visualizations/PieChartDataModel';
|
|
151
157
|
export * from './visualizations/TableDataModel';
|
152
158
|
export * from './visualizations/types';
|
153
159
|
export * from './visualizations/types/IResultsRunner';
|
154
|
-
export * from './types/spotlightTableConfig';
|
155
160
|
export declare const validateEmail: (email: string) => boolean;
|
156
161
|
export declare const getEmailSchema: () => z.ZodEffects<z.ZodEffects<z.ZodString, string, string>, string, string>;
|
157
162
|
export declare const getPasswordSchema: () => z.ZodString;
|
@@ -226,7 +231,7 @@ export declare const SEED_GROUP: {
|
|
226
231
|
groupUuid: string;
|
227
232
|
name: string;
|
228
233
|
};
|
229
|
-
export type ArgumentsOf<F extends Function> = F extends (...args: infer A) =>
|
234
|
+
export type ArgumentsOf<F extends Function> = F extends (...args: infer A) => AnyType ? A : never;
|
230
235
|
export declare const getVisibleFields: (explore: Explore) => CompiledField[];
|
231
236
|
export declare const findFieldByIdInExplore: (explore: Explore, id: FieldId) => Field | undefined;
|
232
237
|
export declare const snakeCaseName: (text: string) => string;
|
@@ -549,8 +554,8 @@ export declare const getMetricsFromItemsMap: (itemsMap: ItemsMap, filter?: (valu
|
|
549
554
|
export declare const getTableCalculationsFromItemsMap: (itemsMap?: ItemsMap) => Record<string, TableCalculation>;
|
550
555
|
export declare function itemsInMetricQuery(metricQuery: MetricQuery | undefined): string[];
|
551
556
|
export declare function formatRows(rows: {
|
552
|
-
[col: string]:
|
557
|
+
[col: string]: AnyType;
|
553
558
|
}[], itemsMap: ItemsMap): ResultRow[];
|
554
|
-
export declare const removeEmptyProperties: (object: Record<string,
|
555
|
-
export declare const deepEqual: (object1: Record<string,
|
559
|
+
export declare const removeEmptyProperties: (object: Record<string, AnyType>) => Record<string, any>;
|
560
|
+
export declare const deepEqual: (object1: Record<string, AnyType>, object2: Record<string, AnyType>) => boolean;
|
556
561
|
export declare const getProjectDirectory: (dbtConnection?: DbtProjectConfig) => string | undefined;
|