Skip to content

Commit 4402c7f

Browse files
author
naman-contentstack
committed
feat: improve error reporting with conditional success/warning messages
1 parent 4a0b162 commit 4402c7f

34 files changed

Lines changed: 136 additions & 90 deletions

.talismanrc

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,4 +3,8 @@ fileignoreconfig:
33
checksum: 41bc1d60449ab0682d9267172e54a5802c837869a1728b0560eea8052336c2fe
44
- filename: package-lock.json
55
checksum: 0514f96f07a6c2c5be811d8973a0b1197943303cfcf224c0b01745342699f545
6+
- filename: packages/contentstack-export/src/export/modules/environments.ts
7+
checksum: 5077c6d8418163d538b28252b62ce7679247c795af2387fd0d9535af974106e8
8+
- filename: packages/contentstack-import/src/import/modules/environments.ts
9+
checksum: d1d83112db63ed7e45de89f68b2e6873ef08c9035d9f7313c950fb8036f93761
610
version: "1.0"

packages/contentstack-export/src/export/modules/assets.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -120,8 +120,8 @@ export default class ExportAssets extends BaseClass {
120120
progress.completeProcess(PROCESS_NAMES.ASSET_DOWNLOADS, true);
121121
}
122122

123-
this.completeProgress(true);
124-
log.success(messageHandler.parse('ASSET_EXPORT_COMPLETE'), this.exportConfig.context);
123+
this.completeProgressWithMessage();
124+
125125
} catch (error) {
126126
this.completeProgress(false, error?.message || 'Asset export failed');
127127
}

packages/contentstack-export/src/export/modules/base-class.ts

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,13 @@ export type ApiOptions = {
1919
additionalInfo?: Record<any, any>;
2020
};
2121

22+
export type CompleteProgressOptions = {
23+
moduleName?: string;
24+
customSuccessMessage?: string;
25+
customWarningMessage?: string;
26+
context?: Record<string, any>;
27+
};
28+
2229
export type EnvType = {
2330
module: string;
2431
totalCount: number;
@@ -95,6 +102,35 @@ export default abstract class BaseClass {
95102
this.progressManager = null;
96103
}
97104

105+
/**
106+
* Complete progress and log success/warning message based on errors
107+
* Checks the progress manager's failure count to determine if errors occurred
108+
* @param options - Options object containing:
109+
* - moduleName: The module name to generate the message (e.g., 'Assets', 'Entries')
110+
* If not provided, uses this.currentModuleName
111+
* - customSuccessMessage: Optional custom success message. If not provided, generates: "{moduleName} have been exported successfully!"
112+
* - customWarningMessage: Optional custom warning message. If not provided, generates: "{moduleName} have been exported with some errors. Please check the logs for details."
113+
* - context: Optional context for logging
114+
*/
115+
protected completeProgressWithMessage(options?: CompleteProgressOptions): void {
116+
const logContext = options?.context || this.exportConfig?.context || {};
117+
const failureCount = this.progressManager?.getFailureCount() || 0;
118+
const hasErrors = failureCount > 0;
119+
const name = options?.moduleName || this.currentModuleName || 'Module';
120+
121+
// Generate default messages if not provided
122+
const successMessage = options?.customSuccessMessage || `${name} have been exported successfully!`;
123+
const warningMessage = options?.customWarningMessage || `${name} have been exported with some errors. Please check the logs for details.`;
124+
125+
this.completeProgress(true);
126+
127+
if (hasErrors) {
128+
log.warn(warningMessage, logContext);
129+
} else {
130+
log.success(successMessage, logContext);
131+
}
132+
}
133+
98134
protected async withLoadingSpinner<T>(message: string, action: () => Promise<T>): Promise<T> {
99135
const logConfig = configHandler.get('log') || {};
100136
const showConsoleLogs = logConfig.showConsoleLogs ?? false;

packages/contentstack-export/src/export/modules/content-types.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -86,8 +86,8 @@ export default class ContentTypesExport extends BaseClass {
8686

8787
await this.writeContentTypes(this.contentTypes);
8888

89-
log.success(messageHandler.parse('CONTENT_TYPE_EXPORT_COMPLETE'), this.exportConfig.context);
90-
this.completeProgress(true);
89+
this.completeProgressWithMessage();
90+
9191
} catch (error) {
9292
handleAndLogError(error, { ...this.exportConfig.context });
9393
this.completeProgress(false, error?.message || 'Content types export failed');

packages/contentstack-export/src/export/modules/custom-roles.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -107,7 +107,8 @@ export default class ExportCustomRoles extends BaseClass {
107107
`Custom roles export completed. Total custom roles: ${Object.keys(this.customRoles || {}).length}`,
108108
this.exportConfig.context,
109109
);
110-
this.completeProgress(true);
110+
this.completeProgressWithMessage();
111+
111112
} catch (error) {
112113
handleAndLogError(error, { ...this.exportConfig.context });
113114
this.completeProgress(false, error?.message || 'Custom roles export failed');

packages/contentstack-export/src/export/modules/entries.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -162,8 +162,8 @@ export default class EntriesExport extends BaseClass {
162162
}
163163
}
164164

165-
this.completeProgress(true);
166-
log.success(messageHandler.parse('ENTRIES_EXPORT_SUCCESS'), this.exportConfig.context);
165+
this.completeProgressWithMessage();
166+
167167
} catch (error) {
168168
handleAndLogError(error, { ...this.exportConfig.context });
169169
this.completeProgress(false, error?.message || 'Entries export failed');

packages/contentstack-export/src/export/modules/environments.ts

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -65,12 +65,9 @@ export default class ExportEnvironments extends BaseClass {
6565
const environmentsFilePath = pResolve(this.environmentsFolderPath, this.environmentConfig.fileName);
6666
log.debug(`Writing environments to: ${environmentsFilePath}`, this.exportConfig.context);
6767
fsUtil.writeFile(environmentsFilePath, this.environments);
68-
log.success(
69-
messageHandler.parse('ENVIRONMENT_EXPORT_COMPLETE', Object.keys(this.environments || {}).length),
70-
this.exportConfig.context,
71-
);
7268
}
73-
this.completeProgress(true);
69+
this.completeProgressWithMessage();
70+
7471
} catch (error) {
7572
handleAndLogError(error, { ...this.exportConfig.context });
7673
this.completeProgress(false, error?.message || 'Environments export failed');

packages/contentstack-export/src/export/modules/extensions.ts

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -66,12 +66,10 @@ export default class ExportExtensions extends BaseClass {
6666
const extensionsFilePath = pResolve(this.extensionsFolderPath, this.extensionConfig.fileName);
6767
log.debug(`Writing extensions to: ${extensionsFilePath}`, this.exportConfig.context);
6868
fsUtil.writeFile(extensionsFilePath, this.extensions);
69-
log.success(
70-
messageHandler.parse('EXTENSION_EXPORT_COMPLETE', Object.keys(this.extensions || {}).length),
71-
this.exportConfig.context,
72-
);
69+
7370
}
74-
this.completeProgress(true);
71+
this.completeProgressWithMessage();
72+
7573
} catch (error) {
7674
handleAndLogError(error, { ...this.exportConfig.context });
7775
this.completeProgress(false, error?.message || 'Extensions export failed');

packages/contentstack-export/src/export/modules/global-fields.ts

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -81,12 +81,10 @@ export default class GlobalFieldsExport extends BaseClass {
8181
log.debug(`Writing global fields to: ${globalFieldsFilePath}`, this.exportConfig.context);
8282
fsUtil.writeFile(globalFieldsFilePath, this.globalFields);
8383

84-
log.success(
85-
messageHandler.parse('GLOBAL_FIELDS_EXPORT_COMPLETE', this.globalFields.length),
86-
this.exportConfig.context,
87-
);
84+
85+
86+
this.completeProgressWithMessage();
8887

89-
this.completeProgress(true);
9088
} catch (error) {
9189
log.debug('Error occurred during global fields export', this.exportConfig.context);
9290
handleAndLogError(error, { ...this.exportConfig.context });

packages/contentstack-export/src/export/modules/labels.ts

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -66,13 +66,11 @@ export default class ExportLabels extends BaseClass {
6666
const labelsFilePath = pResolve(this.labelsFolderPath, this.labelConfig.fileName);
6767
log.debug(`Writing labels to: ${labelsFilePath}`, this.exportConfig.context);
6868
fsUtil.writeFile(labelsFilePath, this.labels);
69-
log.success(
70-
messageHandler.parse('LABELS_EXPORT_COMPLETE', Object.keys(this.labels || {}).length),
71-
this.exportConfig.context,
72-
);
69+
7370
}
7471

75-
this.completeProgress(true);
72+
this.completeProgressWithMessage();
73+
7674
} catch (error) {
7775
handleAndLogError(error, { ...this.exportConfig.context });
7876
this.completeProgress(false, error?.message || 'Labels export failed');

0 commit comments

Comments
 (0)