@lightdash/common 0.1769.7 → 0.1771.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.
Files changed (37) hide show
  1. package/dist/cjs/compiler/translator.d.ts.map +1 -1
  2. package/dist/cjs/compiler/translator.js +72 -46
  3. package/dist/cjs/compiler/translator.js.map +1 -1
  4. package/dist/cjs/types/dbt.d.ts +4 -1
  5. package/dist/cjs/types/dbt.d.ts.map +1 -1
  6. package/dist/cjs/types/dbt.js.map +1 -1
  7. package/dist/cjs/utils/i18n/chartAsCode.d.ts +184 -80
  8. package/dist/cjs/utils/i18n/chartAsCode.d.ts.map +1 -1
  9. package/dist/cjs/utils/i18n/chartAsCode.js +13 -2
  10. package/dist/cjs/utils/i18n/chartAsCode.js.map +1 -1
  11. package/dist/cjs/utils/i18n/chartAsCode.test.d.ts +2 -0
  12. package/dist/cjs/utils/i18n/chartAsCode.test.d.ts.map +1 -0
  13. package/dist/cjs/utils/i18n/chartAsCode.test.js +351 -0
  14. package/dist/cjs/utils/i18n/chartAsCode.test.js.map +1 -0
  15. package/dist/esm/compiler/translator.d.ts.map +1 -1
  16. package/dist/esm/compiler/translator.js +72 -46
  17. package/dist/esm/compiler/translator.js.map +1 -1
  18. package/dist/esm/types/dbt.d.ts +4 -1
  19. package/dist/esm/types/dbt.d.ts.map +1 -1
  20. package/dist/esm/types/dbt.js.map +1 -1
  21. package/dist/esm/utils/i18n/chartAsCode.d.ts +184 -80
  22. package/dist/esm/utils/i18n/chartAsCode.d.ts.map +1 -1
  23. package/dist/esm/utils/i18n/chartAsCode.js +13 -2
  24. package/dist/esm/utils/i18n/chartAsCode.js.map +1 -1
  25. package/dist/esm/utils/i18n/chartAsCode.test.d.ts +2 -0
  26. package/dist/esm/utils/i18n/chartAsCode.test.d.ts.map +1 -0
  27. package/dist/esm/utils/i18n/chartAsCode.test.js +349 -0
  28. package/dist/esm/utils/i18n/chartAsCode.test.js.map +1 -0
  29. package/dist/tsconfig.types.tsbuildinfo +1 -1
  30. package/dist/types/compiler/translator.d.ts.map +1 -1
  31. package/dist/types/types/dbt.d.ts +4 -1
  32. package/dist/types/types/dbt.d.ts.map +1 -1
  33. package/dist/types/utils/i18n/chartAsCode.d.ts +184 -80
  34. package/dist/types/utils/i18n/chartAsCode.d.ts.map +1 -1
  35. package/dist/types/utils/i18n/chartAsCode.test.d.ts +2 -0
  36. package/dist/types/utils/i18n/chartAsCode.test.d.ts.map +1 -0
  37. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"chartAsCode.js","sourceRoot":"","sources":["../../../../src/utils/i18n/chartAsCode.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"chartAsCode.js","sourceRoot":"","sources":["../../../../src/utils/i18n/chartAsCode.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=chartAsCode.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chartAsCode.test.d.ts","sourceRoot":"","sources":["../../../../src/utils/i18n/chartAsCode.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,351 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const savedCharts_1 = require("../../types/savedCharts");
4
+ const chartAsCode_1 = require("./chartAsCode");
5
+ describe('ChartAsCodeInternalization', () => {
6
+ describe('getLanguageMap', () => {
7
+ it('should handle chart with empty yAxis entry', () => {
8
+ // Create a chart with cartesian type but empty yAxis entry
9
+ const chartAsCode = {
10
+ dashboardSlug: undefined,
11
+ pivotConfig: { columns: [] },
12
+ name: 'Test Chart',
13
+ description: '',
14
+ tableName: 'test_table',
15
+ slug: 'test-chart',
16
+ spaceSlug: 'test-space',
17
+ chartConfig: {
18
+ type: savedCharts_1.ChartType.CARTESIAN,
19
+ config: {
20
+ eChartsConfig: {
21
+ yAxis: [
22
+ {
23
+ name: 'top axis',
24
+ },
25
+ {}, // empty bottom axis
26
+ ],
27
+ },
28
+ },
29
+ },
30
+ metricQuery: {
31
+ exploreName: 'test_explore',
32
+ dimensions: [],
33
+ metrics: [],
34
+ filters: {},
35
+ sorts: [],
36
+ limit: 500,
37
+ tableCalculations: [],
38
+ additionalMetrics: [],
39
+ customDimensions: [],
40
+ },
41
+ tableConfig: {
42
+ columnOrder: [],
43
+ },
44
+ updatedAt: new Date(),
45
+ version: 1,
46
+ };
47
+ const chartAsCodeInternalization = new chartAsCode_1.ChartAsCodeInternalization();
48
+ const languageMap = chartAsCodeInternalization.getLanguageMap(chartAsCode);
49
+ expect(languageMap).toBeDefined();
50
+ expect(languageMap.chart).toBeDefined();
51
+ expect(languageMap.chart[chartAsCode.slug]).toBeDefined();
52
+ expect(languageMap.chart[chartAsCode.slug].chartConfig).toBeDefined();
53
+ expect(languageMap.chart[chartAsCode.slug].chartConfig?.type).toBe(savedCharts_1.ChartType.CARTESIAN);
54
+ });
55
+ it('should throw error for chart with missing eChartsConfig for cartesian type', () => {
56
+ // Create a chart with cartesian type but missing eChartsConfig
57
+ const chartAsCode = {
58
+ dashboardSlug: undefined,
59
+ pivotConfig: { columns: [] },
60
+ name: 'Test Chart',
61
+ description: '',
62
+ tableName: 'test_table',
63
+ slug: 'test-chart',
64
+ spaceSlug: 'test-space',
65
+ chartConfig: {
66
+ type: savedCharts_1.ChartType.CARTESIAN,
67
+ config: {
68
+ // Missing eChartsConfig
69
+ },
70
+ },
71
+ metricQuery: {
72
+ exploreName: 'test_explore',
73
+ dimensions: [],
74
+ metrics: [],
75
+ filters: {},
76
+ sorts: [],
77
+ limit: 500,
78
+ tableCalculations: [],
79
+ additionalMetrics: [],
80
+ customDimensions: [],
81
+ },
82
+ tableConfig: {
83
+ columnOrder: [],
84
+ },
85
+ updatedAt: new Date(),
86
+ version: 1,
87
+ };
88
+ const chartAsCodeInternalization = new chartAsCode_1.ChartAsCodeInternalization();
89
+ expect(() => {
90
+ chartAsCodeInternalization.getLanguageMap(chartAsCode);
91
+ }).toThrow();
92
+ });
93
+ it('should handle valid pie chart', () => {
94
+ // Create a valid pie chart
95
+ const chartAsCode = {
96
+ dashboardSlug: undefined,
97
+ pivotConfig: { columns: [] },
98
+ name: 'Test Pie Chart',
99
+ description: '',
100
+ tableName: 'test_table',
101
+ slug: 'test-pie-chart',
102
+ spaceSlug: 'test-space',
103
+ chartConfig: {
104
+ type: savedCharts_1.ChartType.PIE,
105
+ config: {
106
+ groupLabelOverrides: {
107
+ label1: 'Override 1',
108
+ },
109
+ },
110
+ },
111
+ metricQuery: {
112
+ exploreName: 'test_explore',
113
+ dimensions: [],
114
+ metrics: [],
115
+ filters: {},
116
+ sorts: [],
117
+ limit: 500,
118
+ tableCalculations: [],
119
+ additionalMetrics: [],
120
+ customDimensions: [],
121
+ },
122
+ tableConfig: {
123
+ columnOrder: [],
124
+ },
125
+ updatedAt: new Date(),
126
+ version: 1,
127
+ };
128
+ const chartAsCodeInternalization = new chartAsCode_1.ChartAsCodeInternalization();
129
+ const languageMap = chartAsCodeInternalization.getLanguageMap(chartAsCode);
130
+ expect(languageMap).toBeDefined();
131
+ expect(languageMap.chart).toBeDefined();
132
+ expect(languageMap.chart[chartAsCode.slug]).toBeDefined();
133
+ expect(languageMap.chart[chartAsCode.slug].chartConfig).toBeDefined();
134
+ expect(languageMap.chart[chartAsCode.slug].chartConfig?.type).toBe(savedCharts_1.ChartType.PIE);
135
+ });
136
+ it('should handle valid funnel chart', () => {
137
+ // Create a valid funnel chart
138
+ const chartAsCode = {
139
+ dashboardSlug: undefined,
140
+ pivotConfig: { columns: [] },
141
+ name: 'Test Funnel Chart',
142
+ description: '',
143
+ tableName: 'test_table',
144
+ slug: 'test-funnel-chart',
145
+ spaceSlug: 'test-space',
146
+ chartConfig: {
147
+ type: savedCharts_1.ChartType.FUNNEL,
148
+ config: {
149
+ labelOverrides: {
150
+ label1: 'Override 1',
151
+ },
152
+ },
153
+ },
154
+ metricQuery: {
155
+ exploreName: 'test_explore',
156
+ dimensions: [],
157
+ metrics: [],
158
+ filters: {},
159
+ sorts: [],
160
+ limit: 500,
161
+ tableCalculations: [],
162
+ additionalMetrics: [],
163
+ customDimensions: [],
164
+ },
165
+ tableConfig: {
166
+ columnOrder: [],
167
+ },
168
+ updatedAt: new Date(),
169
+ version: 1,
170
+ };
171
+ const chartAsCodeInternalization = new chartAsCode_1.ChartAsCodeInternalization();
172
+ const languageMap = chartAsCodeInternalization.getLanguageMap(chartAsCode);
173
+ expect(languageMap).toBeDefined();
174
+ expect(languageMap.chart).toBeDefined();
175
+ expect(languageMap.chart[chartAsCode.slug]).toBeDefined();
176
+ expect(languageMap.chart[chartAsCode.slug].chartConfig).toBeDefined();
177
+ expect(languageMap.chart[chartAsCode.slug].chartConfig?.type).toBe(savedCharts_1.ChartType.FUNNEL);
178
+ });
179
+ it('should handle valid big number chart', () => {
180
+ // Create a valid big number chart
181
+ const chartAsCode = {
182
+ dashboardSlug: undefined,
183
+ pivotConfig: { columns: [] },
184
+ name: 'Test Big Number Chart',
185
+ description: '',
186
+ tableName: 'test_table',
187
+ slug: 'test-big-number-chart',
188
+ spaceSlug: 'test-space',
189
+ chartConfig: {
190
+ type: savedCharts_1.ChartType.BIG_NUMBER,
191
+ config: {
192
+ label: 'Test Label',
193
+ comparisonLabel: 'Comparison Label',
194
+ },
195
+ },
196
+ metricQuery: {
197
+ exploreName: 'test_explore',
198
+ dimensions: [],
199
+ metrics: [],
200
+ filters: {},
201
+ sorts: [],
202
+ limit: 500,
203
+ tableCalculations: [],
204
+ additionalMetrics: [],
205
+ customDimensions: [],
206
+ },
207
+ tableConfig: {
208
+ columnOrder: [],
209
+ },
210
+ updatedAt: new Date(),
211
+ version: 1,
212
+ };
213
+ const chartAsCodeInternalization = new chartAsCode_1.ChartAsCodeInternalization();
214
+ const languageMap = chartAsCodeInternalization.getLanguageMap(chartAsCode);
215
+ expect(languageMap).toBeDefined();
216
+ expect(languageMap.chart).toBeDefined();
217
+ expect(languageMap.chart[chartAsCode.slug]).toBeDefined();
218
+ expect(languageMap.chart[chartAsCode.slug].chartConfig).toBeDefined();
219
+ expect(languageMap.chart[chartAsCode.slug].chartConfig?.type).toBe(savedCharts_1.ChartType.BIG_NUMBER);
220
+ });
221
+ it('should handle valid table chart', () => {
222
+ // Create a valid table chart
223
+ const chartAsCode = {
224
+ dashboardSlug: undefined,
225
+ pivotConfig: { columns: [] },
226
+ name: 'Test Table Chart',
227
+ description: '',
228
+ tableName: 'test_table',
229
+ slug: 'test-table-chart',
230
+ spaceSlug: 'test-space',
231
+ chartConfig: {
232
+ type: savedCharts_1.ChartType.TABLE,
233
+ config: {
234
+ columns: {
235
+ column1: {
236
+ name: 'Column 1',
237
+ },
238
+ },
239
+ },
240
+ },
241
+ metricQuery: {
242
+ exploreName: 'test_explore',
243
+ dimensions: [],
244
+ metrics: [],
245
+ filters: {},
246
+ sorts: [],
247
+ limit: 500,
248
+ tableCalculations: [],
249
+ additionalMetrics: [],
250
+ customDimensions: [],
251
+ },
252
+ tableConfig: {
253
+ columnOrder: [],
254
+ },
255
+ updatedAt: new Date(),
256
+ version: 1,
257
+ };
258
+ const chartAsCodeInternalization = new chartAsCode_1.ChartAsCodeInternalization();
259
+ const languageMap = chartAsCodeInternalization.getLanguageMap(chartAsCode);
260
+ expect(languageMap).toBeDefined();
261
+ expect(languageMap.chart).toBeDefined();
262
+ expect(languageMap.chart[chartAsCode.slug]).toBeDefined();
263
+ expect(languageMap.chart[chartAsCode.slug].chartConfig).toBeDefined();
264
+ expect(languageMap.chart[chartAsCode.slug].chartConfig?.type).toBe(savedCharts_1.ChartType.TABLE);
265
+ });
266
+ it('should handle custom chart', () => {
267
+ const chartAsCode = {
268
+ name: 'Average Order Per Payment Method',
269
+ description: '',
270
+ tableName: 'payments',
271
+ slug: 'average-order-per-payment-method',
272
+ spaceSlug: 'parent-space-5',
273
+ dashboardSlug: undefined,
274
+ pivotConfig: { columns: [] },
275
+ chartConfig: {
276
+ type: savedCharts_1.ChartType.CUSTOM,
277
+ config: {
278
+ spec: {
279
+ mark: 'bar',
280
+ encoding: {
281
+ x: {
282
+ axis: {
283
+ labelAngle: 0,
284
+ },
285
+ type: 'nominal',
286
+ field: 'payments_payment_method',
287
+ title: 'Payment Method',
288
+ },
289
+ y: {
290
+ type: 'quantitative',
291
+ field: 'orders_average_order_size',
292
+ title: 'Average Order Size',
293
+ },
294
+ color: {
295
+ type: 'nominal',
296
+ field: 'payments_payment_method',
297
+ legend: null,
298
+ },
299
+ tooltip: [
300
+ {
301
+ type: 'nominal',
302
+ field: 'payments_payment_method',
303
+ title: 'Payment Method',
304
+ },
305
+ {
306
+ type: 'quantitative',
307
+ field: 'orders_average_order_size',
308
+ title: 'Average Order Size',
309
+ format: '.2f',
310
+ },
311
+ ],
312
+ },
313
+ },
314
+ },
315
+ },
316
+ metricQuery: {
317
+ exploreName: 'payments',
318
+ dimensions: ['payments_payment_method'],
319
+ metrics: ['orders_average_order_size'],
320
+ filters: {},
321
+ sorts: [
322
+ {
323
+ fieldId: 'orders_average_order_size',
324
+ descending: true,
325
+ },
326
+ ],
327
+ limit: 500,
328
+ tableCalculations: [],
329
+ additionalMetrics: [],
330
+ customDimensions: [],
331
+ },
332
+ tableConfig: {
333
+ columnOrder: [
334
+ 'payments_payment_method',
335
+ 'orders_average_order_size',
336
+ ],
337
+ },
338
+ updatedAt: new Date(),
339
+ version: 1,
340
+ };
341
+ const chartAsCodeInternalization = new chartAsCode_1.ChartAsCodeInternalization();
342
+ const languageMap = chartAsCodeInternalization.getLanguageMap(chartAsCode);
343
+ expect(languageMap).toBeDefined();
344
+ expect(languageMap.chart).toBeDefined();
345
+ expect(languageMap.chart[chartAsCode.slug]).toBeDefined();
346
+ expect(languageMap.chart[chartAsCode.slug].chartConfig).toBeDefined();
347
+ expect(languageMap.chart[chartAsCode.slug].chartConfig?.type).toBe(savedCharts_1.ChartType.CUSTOM);
348
+ });
349
+ });
350
+ });
351
+ //# sourceMappingURL=chartAsCode.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chartAsCode.test.js","sourceRoot":"","sources":["../../../../src/utils/i18n/chartAsCode.test.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"translator.d.ts","sourceRoot":"","sources":["../../../src/compiler/translator.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,mBAAmB,EAOnB,KAAK,SAAS,EAEd,KAAK,YAAY,EAEpB,MAAM,cAAc,CAAC;AAEtB,OAAO,EAEH,KAAK,OAAO,EACZ,KAAK,YAAY,EACjB,KAAK,KAAK,EACb,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACH,aAAa,EAShB,MAAM,gBAAgB,CAAC;AAKxB,OAAO,EAAE,KAAK,sBAAsB,EAAE,MAAM,iCAAiC,CAAC;AAG9E,OAAO,EAAE,KAAK,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAE9D,OAAO,EAIH,KAAK,OAAO,EACf,MAAM,qBAAqB,CAAC;AA0R7B,eAAO,MAAM,YAAY,gBACR,mBAAmB,SACzB,YAAY,cACP,SAAS,EAAE,mBACN,sBAAsB,CAAC,WAAW,CAAC,gBACtC,OAAO,GAAG,IAAI,KAC7B,IAAI,CAAC,KAAK,EAAE,cAAc,CA2Q5B,CAAC;AA6CF,eAAO,MAAM,eAAe,WAChB,YAAY,EAAE,eACT,OAAO,eACP,mBAAmB,WACvB,SAAS,EAAE,uBACC,mBAAmB,0BAChB,sBAAsB,KAC/C,OAAO,CAAC,CAAC,OAAO,GAAG,YAAY,CAAC,EAAE,CAsHpC,CAAC;AAEF,eAAO,MAAM,mBAAmB,WACpB,YAAY,EAAE,oBACJ;IACd,CAAC,QAAQ,EAAE,MAAM,GAAG;QAChB,CAAC,MAAM,EAAE,MAAM,GAAG;YACd,CAAC,KAAK,EAAE,MAAM,GAAG;gBAAE,CAAC,MAAM,EAAE,MAAM,GAAG,aAAa,CAAA;aAAE,CAAC;SACxD,CAAC;KACL,CAAC;CACL,+BAC2B,OAAO,0BACZ,OAAO,KAC/B,YAAY,EA6Fd,CAAC;AAEF,eAAO,MAAM,+BAA+B,cAC7B,YAAY,EAAE,KAC1B;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,EAK/C,CAAC"}
1
+ {"version":3,"file":"translator.d.ts","sourceRoot":"","sources":["../../../src/compiler/translator.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,mBAAmB,EAQnB,KAAK,SAAS,EAEd,KAAK,YAAY,EAEpB,MAAM,cAAc,CAAC;AAEtB,OAAO,EAEH,KAAK,OAAO,EACZ,KAAK,YAAY,EACjB,KAAK,KAAK,EACb,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACH,aAAa,EAShB,MAAM,gBAAgB,CAAC;AAKxB,OAAO,EAAE,KAAK,sBAAsB,EAAE,MAAM,iCAAiC,CAAC;AAG9E,OAAO,EAAE,KAAK,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAE9D,OAAO,EAIH,KAAK,OAAO,EACf,MAAM,qBAAqB,CAAC;AA6R7B,eAAO,MAAM,YAAY,gBACR,mBAAmB,SACzB,YAAY,cACP,SAAS,EAAE,mBACN,sBAAsB,CAAC,WAAW,CAAC,gBACtC,OAAO,GAAG,IAAI,KAC7B,IAAI,CAAC,KAAK,EAAE,cAAc,CAiR5B,CAAC;AA6CF,eAAO,MAAM,eAAe,WAChB,YAAY,EAAE,eACT,OAAO,eACP,mBAAmB,WACvB,SAAS,EAAE,uBACC,mBAAmB,0BAChB,sBAAsB,KAC/C,OAAO,CAAC,CAAC,OAAO,GAAG,YAAY,CAAC,EAAE,CA6IpC,CAAC;AAEF,eAAO,MAAM,mBAAmB,WACpB,YAAY,EAAE,oBACJ;IACd,CAAC,QAAQ,EAAE,MAAM,GAAG;QAChB,CAAC,MAAM,EAAE,MAAM,GAAG;YACd,CAAC,KAAK,EAAE,MAAM,GAAG;gBAAE,CAAC,MAAM,EAAE,MAAM,GAAG,aAAa,CAAA;aAAE,CAAC;SACxD,CAAC;KACL,CAAC;CACL,+BAC2B,OAAO,0BACZ,OAAO,KAC/B,YAAY,EA6Fd,CAAC;AAEF,eAAO,MAAM,+BAA+B,cAC7B,YAAY,EAAE,KAC1B;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,EAK/C,CAAC"}
@@ -38,25 +38,28 @@ const convertTimezone = (timestampSql, default_source_tz, target_tz, adapterType
38
38
  return assertUnreachable(adapterType, new ParseError(`Cannot recognise warehouse ${adapterType}`));
39
39
  }
40
40
  };
41
- const isInterval = (dimensionType, { meta }) => [DimensionType.DATE, DimensionType.TIMESTAMP].includes(dimensionType) &&
42
- meta.dimension?.time_intervals !== false &&
43
- ((meta.dimension?.time_intervals &&
44
- meta.dimension.time_intervals !== 'OFF') ||
45
- !meta?.dimension?.time_intervals);
41
+ const isInterval = (dimensionType, dimension) => [DimensionType.DATE, DimensionType.TIMESTAMP].includes(dimensionType) &&
42
+ dimension?.time_intervals !== false &&
43
+ ((dimension?.time_intervals && dimension.time_intervals !== 'OFF') ||
44
+ !dimension?.time_intervals);
46
45
  const convertDimension = (index, targetWarehouse, model, tableLabel, column, source, timeInterval, startOfWeek, isAdditionalDimension) => {
47
- let type = column.meta.dimension?.type || column.data_type || DimensionType.STRING;
46
+ const meta = {
47
+ ...(column.meta || {}),
48
+ ...(column.config?.meta || {}),
49
+ };
50
+ let type = meta.dimension?.type || column.data_type || DimensionType.STRING;
48
51
  if (!Object.values(DimensionType).includes(type)) {
49
52
  throw new MissingCatalogEntryError(`Could not recognise type "${type}" for dimension "${column.name}" in dbt model "${model.name}". Valid types are: ${Object.values(DimensionType).join(', ')}`, {});
50
53
  }
51
- let name = column.meta.dimension?.name || column.name;
52
- let sql = column.meta.dimension?.sql || defaultSql(column.name);
53
- let label = column.meta.dimension?.label || friendlyName(name);
54
+ let name = meta.dimension?.name || column.name;
55
+ let sql = meta.dimension?.sql || defaultSql(column.name);
56
+ let label = meta.dimension?.label || friendlyName(name);
54
57
  if (type === DimensionType.TIMESTAMP) {
55
58
  sql = convertTimezone(sql, 'UTC', 'UTC', targetWarehouse);
56
59
  }
57
- const isIntervalBase = timeInterval === undefined && isInterval(type, column);
60
+ const isIntervalBase = timeInterval === undefined && isInterval(type, meta.dimension);
58
61
  let timeIntervalBaseDimensionName;
59
- const groups = convertToGroups(column.meta.dimension?.groups, column.meta.dimension?.group_label);
62
+ const groups = convertToGroups(meta.dimension?.groups, meta.dimension?.group_label);
60
63
  if (timeInterval) {
61
64
  timeIntervalBaseDimensionName = name;
62
65
  sql = timeFrameConfigs[timeInterval].getSql(targetWarehouse, timeInterval, sql, type, startOfWeek);
@@ -64,7 +67,7 @@ const convertDimension = (index, targetWarehouse, model, tableLabel, column, sou
64
67
  label = `${label} ${timeFrameConfigs[timeInterval]
65
68
  .getLabel()
66
69
  .toLowerCase()}`;
67
- groups.push(column.meta.dimension?.label ??
70
+ groups.push(meta.dimension?.label ??
68
71
  friendlyName(timeIntervalBaseDimensionName));
69
72
  type = timeFrameConfigs[timeInterval].getDimensionType(type);
70
73
  }
@@ -77,27 +80,25 @@ const convertDimension = (index, targetWarehouse, model, tableLabel, column, sou
77
80
  table: model.name,
78
81
  tableLabel,
79
82
  type,
80
- description: column.meta.dimension?.description || column.description,
83
+ description: meta.dimension?.description || column.description,
81
84
  source,
82
85
  timeInterval,
83
86
  timeIntervalBaseDimensionName,
84
- hidden: !!column.meta.dimension?.hidden,
85
- format: column.meta.dimension?.format,
86
- round: column.meta.dimension?.round,
87
- compact: column.meta.dimension?.compact,
88
- requiredAttributes: column.meta.dimension?.required_attributes,
89
- colors: column.meta.dimension?.colors,
90
- ...(column.meta.dimension?.urls
91
- ? { urls: column.meta.dimension.urls }
92
- : {}),
87
+ hidden: !!meta.dimension?.hidden,
88
+ format: meta.dimension?.format,
89
+ round: meta.dimension?.round,
90
+ compact: meta.dimension?.compact,
91
+ requiredAttributes: meta.dimension?.required_attributes,
92
+ colors: meta.dimension?.colors,
93
+ ...(meta.dimension?.urls ? { urls: meta.dimension.urls } : {}),
93
94
  ...(isAdditionalDimension ? { isAdditionalDimension } : {}),
94
95
  groups,
95
96
  isIntervalBase,
96
- ...(column.meta.dimension && column.meta.dimension.tags
97
+ ...(meta.dimension && meta.dimension.tags
97
98
  ? {
98
- tags: Array.isArray(column.meta.dimension.tags)
99
- ? column.meta.dimension.tags
100
- : [column.meta.dimension.tags],
99
+ tags: Array.isArray(meta.dimension.tags)
100
+ ? meta.dimension.tags
101
+ : [meta.dimension.tags],
101
102
  }
102
103
  : {}),
103
104
  };
@@ -115,6 +116,9 @@ const generateTableLineage = (model, depGraph) => {
115
116
  .map((d) => depGraph.getNodeData(d)),
116
117
  }), {});
117
118
  };
119
+ /**
120
+ * @deprecated This function uses the old dbt metrics format.
121
+ */
118
122
  const convertDbtMetricToLightdashMetric = (metric, tableName, tableLabel, spotlightConfig, modelCategories) => {
119
123
  let sql;
120
124
  let type;
@@ -196,17 +200,24 @@ function normalizePrimaryKey(primaryKey) {
196
200
  return undefined;
197
201
  }
198
202
  export const convertTable = (adapterType, model, dbtMetrics, spotlightConfig, startOfWeek) => {
199
- const meta = model.config?.meta || model.meta; // Config block takes priority, then meta block
203
+ const meta = {
204
+ ...(model.meta || {}),
205
+ ...(model.config?.meta || {}),
206
+ }; // Config block takes priority, then meta block
200
207
  const tableLabel = meta.label || friendlyName(model.name);
201
208
  const [dimensions, metrics] = Object.values(model.columns).reduce(([prevDimensions, prevMetrics], column, index) => {
202
209
  const dimension = convertDimension(index, adapterType, model, tableLabel, column, undefined, undefined, startOfWeek);
210
+ const columnMeta = {
211
+ ...(column.meta || {}),
212
+ ...(column.config?.meta || {}),
213
+ };
203
214
  const processIntervalDimension = (dim, overrideTimeIntervals) => {
204
215
  if (dim.isIntervalBase) {
205
216
  let intervals = [];
206
217
  if (!dim.isAdditionalDimension &&
207
- column.meta.dimension?.time_intervals &&
208
- Array.isArray(column.meta.dimension.time_intervals)) {
209
- intervals = validateTimeFrames(column.meta.dimension.time_intervals);
218
+ columnMeta.dimension?.time_intervals &&
219
+ Array.isArray(columnMeta?.dimension.time_intervals)) {
220
+ intervals = validateTimeFrames(columnMeta.dimension.time_intervals);
210
221
  }
211
222
  else if (dim.isAdditionalDimension &&
212
223
  Array.isArray(overrideTimeIntervals)) {
@@ -225,8 +236,7 @@ export const convertTable = (adapterType, model, dbtMetrics, spotlightConfig, st
225
236
  name: dim.name,
226
237
  meta: {
227
238
  dimension: {
228
- ...column.meta
229
- .dimension,
239
+ ...columnMeta.dimension,
230
240
  type: dim.type,
231
241
  label: dim.label,
232
242
  groups: dim.groups,
@@ -245,7 +255,7 @@ export const convertTable = (adapterType, model, dbtMetrics, spotlightConfig, st
245
255
  let extraDimensions = {
246
256
  ...processIntervalDimension(dimension, undefined),
247
257
  };
248
- extraDimensions = Object.entries(column.meta.additional_dimensions || {}).reduce((acc, [subDimensionName, subDimension]) => {
258
+ extraDimensions = Object.entries(columnMeta.additional_dimensions || {}).reduce((acc, [subDimensionName, subDimension]) => {
249
259
  const additionalDim = convertDimension(index, adapterType, model, tableLabel, {
250
260
  ...column,
251
261
  name: subDimensionName,
@@ -260,7 +270,7 @@ export const convertTable = (adapterType, model, dbtMetrics, spotlightConfig, st
260
270
  ...processIntervalDimension(additionalDim, subDimension.time_intervals),
261
271
  };
262
272
  }, extraDimensions);
263
- const columnMetrics = Object.fromEntries(Object.entries(column.meta.metrics || {}).map(([name, metric]) => [
273
+ const columnMetrics = Object.fromEntries(Object.entries(columnMeta.metrics || {}).map(([name, metric]) => [
264
274
  name,
265
275
  convertColumnMetric({
266
276
  modelName: model.name,
@@ -272,10 +282,10 @@ export const convertTable = (adapterType, model, dbtMetrics, spotlightConfig, st
272
282
  requiredAttributes: dimension.requiredAttributes, // TODO Join dimension required_attributes with metric required_attributes
273
283
  spotlightConfig: {
274
284
  ...spotlightConfig,
275
- default_visibility: model.meta.spotlight?.visibility ??
285
+ default_visibility: meta.spotlight?.visibility ??
276
286
  spotlightConfig.default_visibility,
277
287
  },
278
- modelCategories: model.meta.spotlight?.categories,
288
+ modelCategories: meta.spotlight?.categories,
279
289
  }),
280
290
  ]));
281
291
  return [
@@ -287,7 +297,7 @@ export const convertTable = (adapterType, model, dbtMetrics, spotlightConfig, st
287
297
  { ...prevMetrics, ...columnMetrics },
288
298
  ];
289
299
  }, [{}, {}]);
290
- const modelMetrics = Object.fromEntries(Object.entries(model.meta.metrics || {}).map(([name, metric]) => [
300
+ const modelMetrics = Object.fromEntries(Object.entries(meta.metrics || {}).map(([name, metric]) => [
291
301
  name,
292
302
  convertModelMetric({
293
303
  modelName: model.name,
@@ -296,19 +306,19 @@ export const convertTable = (adapterType, model, dbtMetrics, spotlightConfig, st
296
306
  tableLabel,
297
307
  spotlightConfig: {
298
308
  ...spotlightConfig,
299
- default_visibility: model.meta.spotlight?.visibility ??
309
+ default_visibility: meta.spotlight?.visibility ??
300
310
  spotlightConfig.default_visibility,
301
311
  },
302
- modelCategories: model.meta.spotlight?.categories,
312
+ modelCategories: meta.spotlight?.categories,
303
313
  }),
304
314
  ]));
305
315
  const convertedDbtMetrics = Object.fromEntries(dbtMetrics.map((metric) => [
306
316
  metric.name,
307
317
  convertDbtMetricToLightdashMetric(metric, model.name, tableLabel, {
308
318
  ...spotlightConfig,
309
- default_visibility: model.meta.spotlight?.visibility ??
319
+ default_visibility: meta.spotlight?.visibility ??
310
320
  spotlightConfig.default_visibility,
311
- }, model.meta.spotlight?.categories),
321
+ }, meta.spotlight?.categories),
312
322
  ]));
313
323
  const allMetrics = Object.values({
314
324
  ...convertedDbtMetrics,
@@ -337,7 +347,7 @@ export const convertTable = (adapterType, model, dbtMetrics, spotlightConfig, st
337
347
  };
338
348
  });
339
349
  }
340
- const sqlTable = model.meta.sql_from || model.relation_name;
350
+ const sqlTable = meta.sql_from || model.relation_name;
341
351
  return {
342
352
  name: model.name,
343
353
  label: tableLabel,
@@ -402,7 +412,16 @@ const modelCanUseMetric = (metricName, modelName, metrics) => {
402
412
  export const convertExplores = async (models, loadSources, adapterType, metrics, warehouseSqlBuilder, lightdashProjectConfig) => {
403
413
  const tableLineage = translateDbtModelsToTableLineage(models);
404
414
  const [tables, exploreErrors] = models.reduce(([accTables, accErrors], model) => {
405
- const meta = model.config?.meta || model.meta; // Config block takes priority, then meta block
415
+ const meta = {
416
+ ...(model.meta || {}),
417
+ ...(model.config?.meta || {}), // Config block takes priority, then meta block
418
+ };
419
+ // model.config.tags has type string[] | string | undefined - normalise it to string[]
420
+ const configTags = typeof model.config?.tags === 'string'
421
+ ? [model.config.tags]
422
+ : model.config?.tags;
423
+ // model.config.tags takes priority over model.tags - if config tags is an empty list, we'll use model tags
424
+ const tags = configTags && configTags.length > 0 ? configTags : model.tags;
406
425
  // If there are any errors compiling the table return an ExploreError
407
426
  try {
408
427
  // base dimensions and metrics
@@ -423,7 +442,7 @@ export const convertExplores = async (models, loadSources, adapterType, metrics,
423
442
  const exploreError = {
424
443
  name: model.name,
425
444
  label: meta.label || friendlyName(model.name),
426
- tags: model.tags,
445
+ tags,
427
446
  groupLabel: meta.group_label,
428
447
  errors: [
429
448
  {
@@ -443,12 +462,19 @@ export const convertExplores = async (models, loadSources, adapterType, metrics,
443
462
  const validModels = models.filter((model) => tableLookup[model.name] !== undefined);
444
463
  const exploreCompiler = new ExploreCompiler(warehouseSqlBuilder);
445
464
  const explores = validModels.map((model) => {
446
- const meta = model.config?.meta || model.meta; // Config block takes priority, then meta block
465
+ const meta = {
466
+ ...(model.meta || {}),
467
+ ...(model.config?.meta || {}), // Config block takes priority, then meta block
468
+ };
469
+ const configTags = typeof model.config?.tags === 'string'
470
+ ? [model.config.tags]
471
+ : model.config?.tags;
472
+ const tags = configTags && configTags.length > 0 ? configTags : model.tags;
447
473
  try {
448
474
  return exploreCompiler.compileExplore({
449
475
  name: model.name,
450
476
  label: meta.label || friendlyName(model.name),
451
- tags: model.tags || [],
477
+ tags: tags || [],
452
478
  baseTable: model.name,
453
479
  groupLabel: meta.group_label,
454
480
  joinedTables: (meta?.joins || []).map((join) => ({