@lightdash/cli 3.24.1 → 3.25.1
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.
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { AgentAsCode, ChartAsCode, DashboardAsCode, ExternalConnectionAsCode, type DataAppCode, type SpaceAsCode } from '@lightdash/common';
|
|
1
|
+
import { AgentAsCode, ApiChartAsCodeListResponse, ApiDashboardAsCodeListResponse, ApiSqlChartAsCodeListResponse, ChartAsCode, DashboardAsCode, ExternalConnectionAsCode, SqlChartAsCode, type DataAppCode, type SpaceAsCode } from '@lightdash/common';
|
|
2
2
|
import { type ContentAsCodeOutputVariant } from '../terminal/contentAsCodeOutput';
|
|
3
3
|
import { assertUniqueSpacePaths, downloadSpaces, getFlatSpaceFileNames, readSpaceFiles, readSpaceNames, shouldFallBackToEmbeddedSpaces, sortSpaceFilesParentFirst, upsertSpaces, validateSpaceIdentity, writeSpaceFiles } from './spacesAsCode';
|
|
4
4
|
export type DownloadHandlerOptions = {
|
|
@@ -67,15 +67,44 @@ export type DownloadHandlerOptions = {
|
|
|
67
67
|
organization: boolean;
|
|
68
68
|
sendInvites?: boolean;
|
|
69
69
|
};
|
|
70
|
+
type FolderScheme = 'flat' | 'nested';
|
|
70
71
|
declare const shouldDownloadAiAgents: ({ includeAll, includeAgents, agents, appsOnly, }: Pick<DownloadHandlerOptions, 'includeAll' | 'includeAgents' | 'agents' | 'appsOnly'>) => boolean;
|
|
71
72
|
declare const hasContentFilters: ({ spacesOnly, charts, dashboards, agents, alerts, googleSheets, scheduledDeliveries, virtualViews, externalConnections, documents, homepages, apps, chartTypes, skills, }: Pick<DownloadHandlerOptions, 'spacesOnly' | 'charts' | 'dashboards' | 'agents' | 'skills' | 'alerts' | 'googleSheets' | 'scheduledDeliveries' | 'virtualViews' | 'externalConnections' | 'documents' | 'homepages' | 'apps' | 'chartTypes'>) => boolean;
|
|
72
73
|
declare const parseContentFilters: (items: string[]) => string;
|
|
74
|
+
type ContentAsCodeType = {
|
|
75
|
+
type: 'chart';
|
|
76
|
+
content: ChartAsCode;
|
|
77
|
+
translationMap: object | undefined;
|
|
78
|
+
} | {
|
|
79
|
+
type: 'sqlChart';
|
|
80
|
+
content: SqlChartAsCode;
|
|
81
|
+
translationMap: object | undefined;
|
|
82
|
+
} | {
|
|
83
|
+
type: 'dashboard';
|
|
84
|
+
content: DashboardAsCode;
|
|
85
|
+
translationMap: object | undefined;
|
|
86
|
+
};
|
|
73
87
|
type MetadataEntry = {
|
|
74
88
|
slug: string;
|
|
75
89
|
type: 'charts' | 'dashboards';
|
|
76
90
|
downloadedAt: string;
|
|
77
91
|
};
|
|
78
92
|
declare const sanitizeChartForDownload: (chart: ChartAsCode, stripPivotSeries: boolean) => ChartAsCode;
|
|
93
|
+
declare const writeSpaceContent: <T extends ChartAsCode | DashboardAsCode | SqlChartAsCode>({ projectName, spaceSlug, folder, contentType, contentInSpace, contentAsCode, customPath, languageMap, folderScheme, stripPivotSeries, }: {
|
|
94
|
+
projectName: string;
|
|
95
|
+
spaceSlug: string;
|
|
96
|
+
folder: 'charts' | 'dashboards';
|
|
97
|
+
contentType: ContentAsCodeType['type'];
|
|
98
|
+
contentInSpace: Array<{
|
|
99
|
+
item: T;
|
|
100
|
+
index: number;
|
|
101
|
+
}>;
|
|
102
|
+
contentAsCode: ApiDashboardAsCodeListResponse['results'] | ApiChartAsCodeListResponse['results'] | ApiSqlChartAsCodeListResponse['results'];
|
|
103
|
+
customPath?: string;
|
|
104
|
+
languageMap: boolean;
|
|
105
|
+
folderScheme: FolderScheme;
|
|
106
|
+
stripPivotSeries: boolean;
|
|
107
|
+
}) => Promise<MetadataEntry[]>;
|
|
79
108
|
type DownloadContentType = 'charts' | 'dashboards' | 'sqlCharts';
|
|
80
109
|
declare const extractAppSlugsFromDashboards: (dashboards: DashboardAsCode[]) => string[];
|
|
81
110
|
/**
|
|
@@ -194,6 +223,7 @@ export declare const testHelpers: {
|
|
|
194
223
|
upsertSpaces: typeof upsertSpaces;
|
|
195
224
|
upsertVirtualViews: typeof upsertVirtualViews;
|
|
196
225
|
validateSpaceIdentity: typeof validateSpaceIdentity;
|
|
226
|
+
writeSpaceContent: typeof writeSpaceContent;
|
|
197
227
|
writeSpaceFiles: typeof writeSpaceFiles;
|
|
198
228
|
};
|
|
199
229
|
export {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"download.d.ts","sourceRoot":"","sources":["../../src/handlers/download.ts"],"names":[],"mappings":"AAEA,OAAO,EACH,WAAW,
|
|
1
|
+
{"version":3,"file":"download.d.ts","sourceRoot":"","sources":["../../src/handlers/download.ts"],"names":[],"mappings":"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"}
|
|
@@ -134,12 +134,34 @@ stripPivotSeries && chart.chartConfig.type === common_1.ChartType.CARTESIAN
|
|
|
134
134
|
chartConfig: (0, common_1.removePivotedSeriesValuesFromChartConfig)(chart.chartConfig),
|
|
135
135
|
}
|
|
136
136
|
: chart;
|
|
137
|
+
// NAME_MAX shared by ext4, APFS and NTFS; slugs are ASCII so bytes equal characters
|
|
138
|
+
const MAX_FILE_NAME_LENGTH = 255;
|
|
139
|
+
const getSlugTooLongWarning = (contentType, slug) => {
|
|
140
|
+
switch (contentType) {
|
|
141
|
+
case 'chart':
|
|
142
|
+
case 'dashboard':
|
|
143
|
+
return `Skipped ${contentType} "${slug}": the slug is too long to use as a file name. Shorten it with: lightdash slug-update --type ${contentType} --from "${slug}" --to <new-slug>`;
|
|
144
|
+
case 'sqlChart':
|
|
145
|
+
return `Skipped SQL chart "${slug}": the slug is too long to use as a file name.`;
|
|
146
|
+
default:
|
|
147
|
+
return (0, common_1.assertUnreachable)(contentType, 'getSlugTooLongWarning');
|
|
148
|
+
}
|
|
149
|
+
};
|
|
137
150
|
const writeContent = async (contentAsCode, outputDir, languageMap, stripPivotSeries = false) => {
|
|
138
151
|
const content = contentAsCode.type === 'chart'
|
|
139
152
|
? sanitizeChartForDownload(contentAsCode.content, stripPivotSeries)
|
|
140
153
|
: contentAsCode.content;
|
|
141
154
|
const extension = getFileExtension(contentAsCode.type);
|
|
142
|
-
const
|
|
155
|
+
const writesTranslationMap = contentAsCode.translationMap !== undefined && languageMap;
|
|
156
|
+
const fileNames = [
|
|
157
|
+
`${content.slug}${extension}`,
|
|
158
|
+
...(writesTranslationMap ? [`${content.slug}.language.map.yml`] : []),
|
|
159
|
+
];
|
|
160
|
+
if (fileNames.some((fileName) => Buffer.byteLength(fileName) > MAX_FILE_NAME_LENGTH)) {
|
|
161
|
+
console.info(styles.warning(getSlugTooLongWarning(contentAsCode.type, content.slug)));
|
|
162
|
+
return null;
|
|
163
|
+
}
|
|
164
|
+
const itemPath = path.join(outputDir, fileNames[0]);
|
|
143
165
|
// Strip timestamps — they go to .lightdash-metadata.json instead
|
|
144
166
|
const { updatedAt, downloadedAt, ...cleanContent } = content;
|
|
145
167
|
const chartYml = yaml.dump(cleanContent, {
|
|
@@ -147,7 +169,7 @@ const writeContent = async (contentAsCode, outputDir, languageMap, stripPivotSer
|
|
|
147
169
|
sortKeys: compareContentKeys,
|
|
148
170
|
});
|
|
149
171
|
await fs_1.promises.writeFile(itemPath, chartYml);
|
|
150
|
-
if (
|
|
172
|
+
if (writesTranslationMap) {
|
|
151
173
|
const translationPath = path.join(outputDir, `${content.slug}.language.map.yml`);
|
|
152
174
|
await fs_1.promises.writeFile(translationPath, yaml.dump(contentAsCode.translationMap, { sortKeys: true }));
|
|
153
175
|
}
|
|
@@ -351,7 +373,8 @@ const writeSpaceContent = async ({ projectName, spaceSlug, folder, contentType,
|
|
|
351
373
|
content: item,
|
|
352
374
|
translationMap,
|
|
353
375
|
}, outputDir, languageMap, stripPivotSeries);
|
|
354
|
-
|
|
376
|
+
if (entry)
|
|
377
|
+
entries.push(entry);
|
|
355
378
|
}
|
|
356
379
|
return entries;
|
|
357
380
|
};
|
|
@@ -1357,7 +1380,7 @@ const downloadHandler = async (options) => {
|
|
|
1357
1380
|
const { total: regularChartTotal, metadataEntries: regularChartMeta, chartTypeRefs: mainChartTypeRefs, } = await output.runItem({
|
|
1358
1381
|
label: 'Charts',
|
|
1359
1382
|
action: () => (0, exports.downloadContent)(options.charts, 'charts', projectId, projectName, options.path, options.languageMap, options.nested, skipEmbeddedSpaces, options.stripPivotSeries, options.rootSpaces, output.updateActive),
|
|
1360
|
-
detail: ({
|
|
1383
|
+
detail: ({ metadataEntries }) => `${metadataEntries.length} downloaded`,
|
|
1361
1384
|
});
|
|
1362
1385
|
allMetadataEntries = [
|
|
1363
1386
|
...allMetadataEntries,
|
|
@@ -1370,7 +1393,7 @@ const downloadHandler = async (options) => {
|
|
|
1370
1393
|
const { total: sqlChartTotal, metadataEntries: sqlChartMeta } = await output.runItem({
|
|
1371
1394
|
label: 'SQL charts',
|
|
1372
1395
|
action: () => (0, exports.downloadContent)(options.charts, 'sqlCharts', projectId, projectName, options.path, options.languageMap, options.nested, skipEmbeddedSpaces, false, options.rootSpaces, output.updateActive),
|
|
1373
|
-
detail: ({
|
|
1396
|
+
detail: ({ metadataEntries }) => `${metadataEntries.length} downloaded`,
|
|
1374
1397
|
});
|
|
1375
1398
|
allMetadataEntries = [...allMetadataEntries, ...sqlChartMeta];
|
|
1376
1399
|
counts.chartsNum = regularChartTotal + sqlChartTotal;
|
|
@@ -1393,7 +1416,7 @@ const downloadHandler = async (options) => {
|
|
|
1393
1416
|
} = await output.runItem({
|
|
1394
1417
|
label: 'Dashboards',
|
|
1395
1418
|
action: () => (0, exports.downloadContent)(options.dashboards, 'dashboards', projectId, projectName, options.path, options.languageMap, options.nested, skipEmbeddedSpaces, false, options.rootSpaces, output.updateActive),
|
|
1396
|
-
detail: ({
|
|
1419
|
+
detail: ({ metadataEntries }) => `${metadataEntries.length} downloaded`,
|
|
1397
1420
|
}));
|
|
1398
1421
|
allMetadataEntries = [...allMetadataEntries, ...dashMeta];
|
|
1399
1422
|
if (hasFilters &&
|
|
@@ -1401,7 +1424,7 @@ const downloadHandler = async (options) => {
|
|
|
1401
1424
|
!options.skipCharts) {
|
|
1402
1425
|
output.startItem('Linked charts');
|
|
1403
1426
|
output.updateActive(`${chartSlugs.length} dashboard dependencies`);
|
|
1404
|
-
const {
|
|
1427
|
+
const { chartTableNames: linkedChartTableNames, metadataEntries: linkedChartMeta, chartTypeRefs: linkedChartVizRefs, } = await (0, exports.downloadContent)(chartSlugs, 'charts', projectId, projectName, options.path, options.languageMap, options.nested, skipEmbeddedSpaces, options.stripPivotSeries, options.rootSpaces, output.updateActive);
|
|
1405
1428
|
allMetadataEntries = [
|
|
1406
1429
|
...allMetadataEntries,
|
|
1407
1430
|
...linkedChartMeta,
|
|
@@ -1410,12 +1433,12 @@ const downloadHandler = async (options) => {
|
|
|
1410
1433
|
...downloadedChartVizRefs,
|
|
1411
1434
|
...linkedChartVizRefs,
|
|
1412
1435
|
];
|
|
1413
|
-
const {
|
|
1436
|
+
const { metadataEntries: linkedSqlMeta } = await (0, exports.downloadContent)(chartSlugs, 'sqlCharts', projectId, projectName, options.path, options.languageMap, options.nested, skipEmbeddedSpaces, false, options.rootSpaces, output.updateActive);
|
|
1414
1437
|
allMetadataEntries = [
|
|
1415
1438
|
...allMetadataEntries,
|
|
1416
1439
|
...linkedSqlMeta,
|
|
1417
1440
|
];
|
|
1418
|
-
output.completeItem(`${
|
|
1441
|
+
output.completeItem(`${linkedChartMeta.length + linkedSqlMeta.length} downloaded`);
|
|
1419
1442
|
// Virtual views the linked charts are built on. Skipped
|
|
1420
1443
|
// when a broader step already downloaded every one.
|
|
1421
1444
|
if (linkedChartTableNames.length > 0 &&
|
|
@@ -3178,5 +3201,6 @@ exports.testHelpers = {
|
|
|
3178
3201
|
upsertSpaces: spacesAsCode_1.upsertSpaces,
|
|
3179
3202
|
upsertVirtualViews,
|
|
3180
3203
|
validateSpaceIdentity: spacesAsCode_1.validateSpaceIdentity,
|
|
3204
|
+
writeSpaceContent,
|
|
3181
3205
|
writeSpaceFiles: spacesAsCode_1.writeSpaceFiles,
|
|
3182
3206
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"slugUpdate.d.ts","sourceRoot":"","sources":["../../src/handlers/slugUpdate.ts"],"names":[],"mappings":"AAAA,OAAO,EAEH,WAAW,
|
|
1
|
+
{"version":3,"file":"slugUpdate.d.ts","sourceRoot":"","sources":["../../src/handlers/slugUpdate.ts"],"names":[],"mappings":"AAAA,OAAO,EAEH,WAAW,EAKX,KAAK,wBAAwB,EAChC,MAAM,mBAAmB,CAAC;AAa3B,KAAK,iBAAiB,GAAG;IACrB,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,OAAO,CAAC;IAChB,IAAI,EAAE,WAAW,CAAC,KAAK,GAAG,WAAW,CAAC,SAAS,CAAC;IAChD,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;CACd,CAAC;AAEF,KAAK,mBAAmB,GAAG;IACvB,WAAW,EAAE,KAAK,CAAC;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC1D,SAAS,EAAE,KAAK,CAAC;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACrD,QAAQ,EACF;QACI,IAAI,EAAE,MAAM,CAAC;QACb,YAAY,EAAE,WAAW,CAAC,KAAK,GAAG,WAAW,CAAC,SAAS,CAAC;QACxD,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;KACjC,GACD,SAAS,CAAC;IAChB,iBAAiB,EAAE,MAAM,CAAC;CAC7B,CAAC;AAIF,MAAM,MAAM,yBAAyB,GAAG;IACpC,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;CACnB,CAAC;AAyFF,eAAO,MAAM,mBAAmB,eAChB,MAAM,GAAG,SAAS,QACxB,MAAM,MACR,MAAM,iBACI,WAAW,CAAC,KAAK,GAAG,WAAW,CAAC,SAAS,KACxD,OAAO,CAAC,mBAAmB,CA2L7B,CAAC;AAEF,eAAO,MAAM,6BAA6B,SAChC,mBAAmB,cACb,MAAM,GAAG,SAAS,KAC/B,yBAAyB,EAuB3B,CAAC;AAuDF,eAAO,MAAM,oBAAoB,SACvB,mBAAmB,KAC1B,OAAO,CAAC,MAAM,OAAO,CAAC,IAAI,CAAC,CAuD7B,CAAC;AAEF,eAAO,MAAM,iBAAiB,gBACb,MAAM,WACV,wBAAwB,KAClC,OAAO,CAAC,IAAI,CAmBd,CAAC;AAEF,eAAO,MAAM,iBAAiB,gBACb,MAAM,cACP,MAAM,GAAG,SAAS,QACxB,MAAM,MACR,MAAM,iBACI,WAAW,CAAC,KAAK,GAAG,WAAW,CAAC,SAAS,KACxD,OAAO,CAAC,mBAAmB,CAuB7B,CAAC;AAEF,eAAO,MAAM,iBAAiB,YACjB,iBAAiB,KAC3B,OAAO,CAAC,IAAI,CAyDd,CAAC"}
|
|
@@ -80,11 +80,11 @@ const planLocalSlugUpdate = async (customPath, from, to, resourceType = common_1
|
|
|
80
80
|
const fileMoves = [];
|
|
81
81
|
let referencesUpdated = 0;
|
|
82
82
|
const languageMapKey = resourceType === common_1.ContentType.CHART ? 'chart' : 'dashboard';
|
|
83
|
-
if (!from
|
|
84
|
-
throw new common_1.ParameterError('The source slug must
|
|
83
|
+
if (!from) {
|
|
84
|
+
throw new common_1.ParameterError('The source slug must not be empty');
|
|
85
85
|
}
|
|
86
|
-
if (!to || to.length >
|
|
87
|
-
throw new common_1.ParameterError(
|
|
86
|
+
if (!to || to.length > common_1.MAX_CONTENT_SLUG_LENGTH || (0, common_1.generateSlug)(to) !== to) {
|
|
87
|
+
throw new common_1.ParameterError(`The target slug must contain between 1 and ${common_1.MAX_CONTENT_SLUG_LENGTH} lowercase letters, numbers, or hyphen-separated words`);
|
|
88
88
|
}
|
|
89
89
|
if (from === to) {
|
|
90
90
|
return {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@lightdash/cli",
|
|
3
|
-
"version": "3.
|
|
3
|
+
"version": "3.25.1",
|
|
4
4
|
"description": "Lightdash CLI tool",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"repository": {
|
|
@@ -22,8 +22,8 @@
|
|
|
22
22
|
"@actions/core": "1.11.1",
|
|
23
23
|
"@aws-sdk/credential-providers": "3.995.0",
|
|
24
24
|
"@casl/ability": "6.8.0",
|
|
25
|
-
"@lightdash/common": "3.
|
|
26
|
-
"@lightdash/warehouses": "3.
|
|
25
|
+
"@lightdash/common": "3.25.1",
|
|
26
|
+
"@lightdash/warehouses": "3.25.1",
|
|
27
27
|
"@sidvind/better-ajv-errors": "7.0.0",
|
|
28
28
|
"@types/columnify": "1.5.1",
|
|
29
29
|
"ajv": "8.18.0",
|