@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.
- package/dist/cjs/compiler/translator.d.ts.map +1 -1
- package/dist/cjs/compiler/translator.js +72 -46
- package/dist/cjs/compiler/translator.js.map +1 -1
- package/dist/cjs/types/dbt.d.ts +4 -1
- package/dist/cjs/types/dbt.d.ts.map +1 -1
- package/dist/cjs/types/dbt.js.map +1 -1
- package/dist/cjs/utils/i18n/chartAsCode.d.ts +184 -80
- package/dist/cjs/utils/i18n/chartAsCode.d.ts.map +1 -1
- package/dist/cjs/utils/i18n/chartAsCode.js +13 -2
- package/dist/cjs/utils/i18n/chartAsCode.js.map +1 -1
- package/dist/cjs/utils/i18n/chartAsCode.test.d.ts +2 -0
- package/dist/cjs/utils/i18n/chartAsCode.test.d.ts.map +1 -0
- package/dist/cjs/utils/i18n/chartAsCode.test.js +351 -0
- package/dist/cjs/utils/i18n/chartAsCode.test.js.map +1 -0
- package/dist/esm/compiler/translator.d.ts.map +1 -1
- package/dist/esm/compiler/translator.js +72 -46
- package/dist/esm/compiler/translator.js.map +1 -1
- package/dist/esm/types/dbt.d.ts +4 -1
- package/dist/esm/types/dbt.d.ts.map +1 -1
- package/dist/esm/types/dbt.js.map +1 -1
- package/dist/esm/utils/i18n/chartAsCode.d.ts +184 -80
- package/dist/esm/utils/i18n/chartAsCode.d.ts.map +1 -1
- package/dist/esm/utils/i18n/chartAsCode.js +13 -2
- package/dist/esm/utils/i18n/chartAsCode.js.map +1 -1
- package/dist/esm/utils/i18n/chartAsCode.test.d.ts +2 -0
- package/dist/esm/utils/i18n/chartAsCode.test.d.ts.map +1 -0
- package/dist/esm/utils/i18n/chartAsCode.test.js +349 -0
- package/dist/esm/utils/i18n/chartAsCode.test.js.map +1 -0
- package/dist/tsconfig.types.tsbuildinfo +1 -1
- package/dist/types/compiler/translator.d.ts.map +1 -1
- package/dist/types/types/dbt.d.ts +4 -1
- package/dist/types/types/dbt.d.ts.map +1 -1
- package/dist/types/utils/i18n/chartAsCode.d.ts +184 -80
- package/dist/types/utils/i18n/chartAsCode.d.ts.map +1 -1
- package/dist/types/utils/i18n/chartAsCode.test.d.ts +2 -0
- package/dist/types/utils/i18n/chartAsCode.test.d.ts.map +1 -0
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chartAsCode.js","sourceRoot":"","sources":["../../../../src/utils/i18n/chartAsCode.ts"],"names":[],"mappings":";;;AAAA,6BAAwB;AAExB,yDAAoD;AACpD,yCAAmD;AACnD,mCAAwC;AAExC,MAAM,iBAAiB,GAAG,OAAC,CAAC,MAAM,CAAC;IAC/B,IAAI,EAAE,OAAC,CAAC,MAAM,EAAE;IAChB,WAAW,EAAE,OAAC;SACT,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,EAAE;SACV,SAAS,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,IAAI,SAAS,CAAC;IAEzC,WAAW,EAAE,OAAC,CAAC,KAAK,CAAC;QACjB,yBAAyB;QACzB,OAAC,CAAC,MAAM,CAAC;YACL,IAAI,EAAE,OAAC,CAAC,OAAO,CAAC,uBAAS,CAAC,SAAS,CAAC;YACpC,MAAM,EAAE,OAAC;iBACJ,MAAM,CAAC;gBACJ,aAAa,EAAE,OAAC,CAAC,MAAM,CAAC;oBACpB,KAAK,EAAE,OAAC;yBACH,KAAK,CACF,OAAC,CAAC,MAAM,CAAC;wBACL,IAAI,EAAE,OAAC,CAAC,MAAM,EAAE;
|
|
1
|
+
{"version":3,"file":"chartAsCode.js","sourceRoot":"","sources":["../../../../src/utils/i18n/chartAsCode.ts"],"names":[],"mappings":"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"}
|
|
@@ -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,
|
|
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,
|
|
42
|
-
|
|
43
|
-
((
|
|
44
|
-
|
|
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
|
-
|
|
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 =
|
|
52
|
-
let sql =
|
|
53
|
-
let label =
|
|
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,
|
|
60
|
+
const isIntervalBase = timeInterval === undefined && isInterval(type, meta.dimension);
|
|
58
61
|
let timeIntervalBaseDimensionName;
|
|
59
|
-
const groups = convertToGroups(
|
|
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(
|
|
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:
|
|
83
|
+
description: meta.dimension?.description || column.description,
|
|
81
84
|
source,
|
|
82
85
|
timeInterval,
|
|
83
86
|
timeIntervalBaseDimensionName,
|
|
84
|
-
hidden: !!
|
|
85
|
-
format:
|
|
86
|
-
round:
|
|
87
|
-
compact:
|
|
88
|
-
requiredAttributes:
|
|
89
|
-
colors:
|
|
90
|
-
...(
|
|
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
|
-
...(
|
|
97
|
+
...(meta.dimension && meta.dimension.tags
|
|
97
98
|
? {
|
|
98
|
-
tags: Array.isArray(
|
|
99
|
-
?
|
|
100
|
-
: [
|
|
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 =
|
|
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
|
-
|
|
208
|
-
Array.isArray(
|
|
209
|
-
intervals = validateTimeFrames(
|
|
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
|
-
...
|
|
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(
|
|
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(
|
|
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:
|
|
285
|
+
default_visibility: meta.spotlight?.visibility ??
|
|
276
286
|
spotlightConfig.default_visibility,
|
|
277
287
|
},
|
|
278
|
-
modelCategories:
|
|
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(
|
|
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:
|
|
309
|
+
default_visibility: meta.spotlight?.visibility ??
|
|
300
310
|
spotlightConfig.default_visibility,
|
|
301
311
|
},
|
|
302
|
-
modelCategories:
|
|
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:
|
|
319
|
+
default_visibility: meta.spotlight?.visibility ??
|
|
310
320
|
spotlightConfig.default_visibility,
|
|
311
|
-
},
|
|
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 =
|
|
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 =
|
|
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
|
|
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 =
|
|
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:
|
|
477
|
+
tags: tags || [],
|
|
452
478
|
baseTable: model.name,
|
|
453
479
|
groupLabel: meta.group_label,
|
|
454
480
|
joinedTables: (meta?.joins || []).map((join) => ({
|