@salesforce/plugin-omnistudio-migration-tool 2.0.0-preview.29 → 2.0.0-preview.31
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/README.md +89 -0
- package/lib/commands/omnistudio/migration/clean.d.ts +13 -0
- package/lib/commands/omnistudio/migration/clean.js +160 -0
- package/lib/commands/omnistudio/migration/clean.js.map +1 -0
- package/lib/commands/omnistudio/migration/migrate.js +11 -1
- package/lib/commands/omnistudio/migration/migrate.js.map +1 -1
- package/lib/migration/postMigrate.js +2 -0
- package/lib/migration/postMigrate.js.map +1 -1
- package/lib/migration/premigrate.d.ts +2 -0
- package/lib/migration/premigrate.js +53 -7
- package/lib/migration/premigrate.js.map +1 -1
- package/lib/utils/config/ExistingRecordCleanupService.d.ts +30 -0
- package/lib/utils/config/ExistingRecordCleanupService.js +266 -0
- package/lib/utils/config/ExistingRecordCleanupService.js.map +1 -0
- package/lib/utils/config/OmniStudioMetadataCleanupService.js +9 -8
- package/lib/utils/config/OmniStudioMetadataCleanupService.js.map +1 -1
- package/lib/utils/config/SpecialCharacterRecordCleanupService.d.ts +17 -0
- package/lib/utils/config/SpecialCharacterRecordCleanupService.js +186 -0
- package/lib/utils/config/SpecialCharacterRecordCleanupService.js.map +1 -0
- package/lib/utils/constants/stringContants.d.ts +17 -0
- package/lib/utils/constants/stringContants.js +20 -1
- package/lib/utils/constants/stringContants.js.map +1 -1
- package/lib/utils/generatePackageXml.d.ts +2 -0
- package/lib/utils/generatePackageXml.js +40 -4
- package/lib/utils/generatePackageXml.js.map +1 -1
- package/lib/utils/resultsbuilder/index.d.ts +11 -2
- package/lib/utils/resultsbuilder/index.js +100 -86
- package/lib/utils/resultsbuilder/index.js.map +1 -1
- package/lib/utils/sfcli/project/sfProject.d.ts +1 -0
- package/lib/utils/sfcli/project/sfProject.js +4 -0
- package/lib/utils/sfcli/project/sfProject.js.map +1 -1
- package/messages/clean.json +40 -0
- package/messages/migrate.json +6 -0
- package/oclif.manifest.json +1 -1
- package/package.json +3 -3
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.Constants = void 0;
|
|
3
|
+
exports.Status = exports.Constants = void 0;
|
|
4
4
|
exports.Constants = {
|
|
5
5
|
// short form of the omni components
|
|
6
6
|
Omniscript: 'os',
|
|
@@ -67,5 +67,24 @@ exports.Constants = {
|
|
|
67
67
|
// Generic Constants
|
|
68
68
|
On: 'on',
|
|
69
69
|
Off: 'off',
|
|
70
|
+
// SObject API names
|
|
71
|
+
OmniProcessObjectName: 'OmniProcess',
|
|
72
|
+
OmniUiCardObjectName: 'OmniUiCard',
|
|
73
|
+
OmniDataTransformObjectName: 'OmniDataTransform',
|
|
74
|
+
// Config table names
|
|
75
|
+
OmniScriptConfigTable: 'OmniScriptConfig',
|
|
76
|
+
OmniIntegrationProcConfigTable: 'OmniIntegrationProcConfig',
|
|
77
|
+
OmniDataTransformConfigTable: 'OmniDataTransformConfig',
|
|
78
|
+
OmniUiCardConfigTable: 'OmniUiCardConfig',
|
|
79
|
+
};
|
|
80
|
+
exports.Status = {
|
|
81
|
+
SuccessfullyMigrated: 'Successfully migrated',
|
|
82
|
+
Failed: 'Failed',
|
|
83
|
+
Skipped: 'Skipped',
|
|
84
|
+
Complete: 'Complete',
|
|
85
|
+
ReadyForMigration: 'Ready for migration',
|
|
86
|
+
NeedsManualIntervention: 'Needs manual intervention',
|
|
87
|
+
ManualDeploymentNeeded: 'Manual deployment needed',
|
|
88
|
+
SuccessfullyCompleted: 'Successfully Completed',
|
|
70
89
|
};
|
|
71
90
|
//# sourceMappingURL=stringContants.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stringContants.js","sourceRoot":"","sources":["../../../src/utils/constants/stringContants.ts"],"names":[],"mappings":";;;AAAa,QAAA,SAAS,GAAG;IACvB,oCAAoC;IACpC,UAAU,EAAE,IAAI;IAChB,QAAQ,EAAE,IAAI;IACd,oBAAoB,EAAE,IAAI;IAC1B,UAAU,EAAE,IAAI;IAChB,gBAAgB,EAAE,YAAY;IAC9B,WAAW,EAAE,IAAI;IACjB,GAAG,EAAE,KAAK;IACV,IAAI,EAAE,MAAM;IACZ,SAAS,EAAE,WAAW;IACtB,QAAQ,EAAE,UAAU;IAEpB,mCAAmC;IACnC,uBAAuB,EAAE,YAAY;IACrC,oBAAoB,EAAE,aAAa;IACnC,qBAAqB,EAAE,UAAU;IACjC,kBAAkB,EAAE,WAAW;IAC/B,iCAAiC,EAAE,sBAAsB;IACzD,8BAA8B,EAAE,uBAAuB;IACvD,uBAAuB,EAAE,YAAY;IACrC,oBAAoB,EAAE,aAAa;IACnC,6BAA6B,EAAE,yBAAyB;IACxD,0BAA0B,EAAE,mBAAmB;IAC/C,uBAAuB,EAAE,YAAY;IACrC,gBAAgB,EAAE,yBAAyB;IAC3C,iBAAiB,EAAE,cAAc;IACjC,wBAAwB,EAAE,cAAc;IACxC,qBAAqB,EAAE,eAAe;IACtC,eAAe,EAAE,QAAQ;IACzB,iBAAiB,EAAE,UAAU;IAC7B,uBAAuB,EAAE,aAAa;IACtC,MAAM,EAAE,QAAQ;IAChB,SAAS,EAAE,WAAW;IACtB,gBAAgB,EAAE,kBAAkB;IACpC,SAAS,EAAE,WAAW;IACtB,UAAU,EAAE,aAAa;IACzB,UAAU,EAAE,YAAY;IACxB,UAAU,EAAE,YAAY;IAExB,2CAA2C;IAC3C,0BAA0B,EAAE,8BAA8B;IAC1D,qBAAqB,EAAE,yBAAyB;IAChD,yBAAyB,EAAE,6BAA6B;IACxD,oBAAoB,EAAE,wBAAwB;IAC9C,uBAAuB,EAAE,2BAA2B;IACpD,sBAAsB,EAAE,0BAA0B;IAClD,uBAAuB,EAAE,2BAA2B;IACpD,oBAAoB,EAAE,eAAe;IACrC,mBAAmB,EAAE,oBAAoB;IACzC,UAAU,EAAE,aAAa;IACzB,SAAS,EAAE,YAAY;IACvB,YAAY,EAAE,eAAe;IAC7B,WAAW,EAAE,MAAM;IACnB,2BAA2B,EAAE,gCAAgC;IAE7D,qCAAqC;IACrC,2BAA2B,EAAE,oBAAoB;IACjD,0BAA0B,EAAE,kBAAkB;IAE9C,0CAA0C;IAC1C,0BAA0B,EAAE,CAAC,OAAO,EAAE,WAAW,CAAC;IAClD,sBAAsB,EAAE,OAAO;IAC/B,0BAA0B,EAAE,WAAW;IACvC,2BAA2B,EAAE,YAAY;IAEzC,oBAAoB;IACpB,qBAAqB,EAAE,YAAY;IAEnC,oBAAoB;IACpB,EAAE,EAAE,IAAI;IACR,GAAG,EAAE,KAAK;
|
|
1
|
+
{"version":3,"file":"stringContants.js","sourceRoot":"","sources":["../../../src/utils/constants/stringContants.ts"],"names":[],"mappings":";;;AAAa,QAAA,SAAS,GAAG;IACvB,oCAAoC;IACpC,UAAU,EAAE,IAAI;IAChB,QAAQ,EAAE,IAAI;IACd,oBAAoB,EAAE,IAAI;IAC1B,UAAU,EAAE,IAAI;IAChB,gBAAgB,EAAE,YAAY;IAC9B,WAAW,EAAE,IAAI;IACjB,GAAG,EAAE,KAAK;IACV,IAAI,EAAE,MAAM;IACZ,SAAS,EAAE,WAAW;IACtB,QAAQ,EAAE,UAAU;IAEpB,mCAAmC;IACnC,uBAAuB,EAAE,YAAY;IACrC,oBAAoB,EAAE,aAAa;IACnC,qBAAqB,EAAE,UAAU;IACjC,kBAAkB,EAAE,WAAW;IAC/B,iCAAiC,EAAE,sBAAsB;IACzD,8BAA8B,EAAE,uBAAuB;IACvD,uBAAuB,EAAE,YAAY;IACrC,oBAAoB,EAAE,aAAa;IACnC,6BAA6B,EAAE,yBAAyB;IACxD,0BAA0B,EAAE,mBAAmB;IAC/C,uBAAuB,EAAE,YAAY;IACrC,gBAAgB,EAAE,yBAAyB;IAC3C,iBAAiB,EAAE,cAAc;IACjC,wBAAwB,EAAE,cAAc;IACxC,qBAAqB,EAAE,eAAe;IACtC,eAAe,EAAE,QAAQ;IACzB,iBAAiB,EAAE,UAAU;IAC7B,uBAAuB,EAAE,aAAa;IACtC,MAAM,EAAE,QAAQ;IAChB,SAAS,EAAE,WAAW;IACtB,gBAAgB,EAAE,kBAAkB;IACpC,SAAS,EAAE,WAAW;IACtB,UAAU,EAAE,aAAa;IACzB,UAAU,EAAE,YAAY;IACxB,UAAU,EAAE,YAAY;IAExB,2CAA2C;IAC3C,0BAA0B,EAAE,8BAA8B;IAC1D,qBAAqB,EAAE,yBAAyB;IAChD,yBAAyB,EAAE,6BAA6B;IACxD,oBAAoB,EAAE,wBAAwB;IAC9C,uBAAuB,EAAE,2BAA2B;IACpD,sBAAsB,EAAE,0BAA0B;IAClD,uBAAuB,EAAE,2BAA2B;IACpD,oBAAoB,EAAE,eAAe;IACrC,mBAAmB,EAAE,oBAAoB;IACzC,UAAU,EAAE,aAAa;IACzB,SAAS,EAAE,YAAY;IACvB,YAAY,EAAE,eAAe;IAC7B,WAAW,EAAE,MAAM;IACnB,2BAA2B,EAAE,gCAAgC;IAE7D,qCAAqC;IACrC,2BAA2B,EAAE,oBAAoB;IACjD,0BAA0B,EAAE,kBAAkB;IAE9C,0CAA0C;IAC1C,0BAA0B,EAAE,CAAC,OAAO,EAAE,WAAW,CAAC;IAClD,sBAAsB,EAAE,OAAO;IAC/B,0BAA0B,EAAE,WAAW;IACvC,2BAA2B,EAAE,YAAY;IAEzC,oBAAoB;IACpB,qBAAqB,EAAE,YAAY;IAEnC,oBAAoB;IACpB,EAAE,EAAE,IAAI;IACR,GAAG,EAAE,KAAK;IAEV,oBAAoB;IACpB,qBAAqB,EAAE,aAAa;IACpC,oBAAoB,EAAE,YAAY;IAClC,2BAA2B,EAAE,mBAAmB;IAEhD,qBAAqB;IACrB,qBAAqB,EAAE,kBAAkB;IACzC,8BAA8B,EAAE,2BAA2B;IAC3D,4BAA4B,EAAE,yBAAyB;IACvD,qBAAqB,EAAE,kBAAkB;CAC1C,CAAC;AAEW,QAAA,MAAM,GAAG;IACpB,oBAAoB,EAAE,uBAAuB;IAC7C,MAAM,EAAE,QAAQ;IAChB,OAAO,EAAE,SAAS;IAClB,QAAQ,EAAE,UAAU;IACpB,iBAAiB,EAAE,qBAAqB;IACxC,uBAAuB,EAAE,2BAA2B;IACpD,sBAAsB,EAAE,0BAA0B;IAClD,qBAAqB,EAAE,wBAAwB;CAChD,CAAC"}
|
|
@@ -2,7 +2,9 @@ import { Messages } from '@salesforce/core';
|
|
|
2
2
|
import { ApexAssessmentInfo, ExperienceSiteAssessmentInfo, FlexiPageAssessmentInfo, LWCAssessmentInfo } from './interfaces';
|
|
3
3
|
export declare class generatePackageXml {
|
|
4
4
|
static createChangeList(apexAssementInfos: ApexAssessmentInfo[], lwcAssessmentInfos: LWCAssessmentInfo[], experienceSiteAssessmentInfo: ExperienceSiteAssessmentInfo[], flexipageAssessmentInfos: FlexiPageAssessmentInfo[], version: string, messages: Messages<string>): void;
|
|
5
|
+
static createOmnistudioDeploymentXml(apexAssementInfos: ApexAssessmentInfo[], lwcAssessmentInfos: LWCAssessmentInfo[], experienceSiteAssessmentInfo: ExperienceSiteAssessmentInfo[], flexipageAssessmentInfos: FlexiPageAssessmentInfo[], version: string): void;
|
|
5
6
|
static backupChangeList(apexClasses: string[], lwcComponents: string[]): void;
|
|
7
|
+
private static getRelatedObjectsXml;
|
|
6
8
|
private static getXmlElementforMembers;
|
|
7
9
|
private static getExperienceSiteXml;
|
|
8
10
|
private static getFlexipageXml;
|
|
@@ -41,10 +41,7 @@ class generatePackageXml {
|
|
|
41
41
|
// Method to generate package.xml with additional types
|
|
42
42
|
static createChangeList(apexAssementInfos, lwcAssessmentInfos, experienceSiteAssessmentInfo, flexipageAssessmentInfos, version, messages) {
|
|
43
43
|
fs.rmSync(path.join(process.cwd(), 'package.xml'), { force: true });
|
|
44
|
-
const apexXml = generatePackageXml.
|
|
45
|
-
const lwcXml = generatePackageXml.getXmlElementforMembers(this.getLwcs(lwcAssessmentInfos), 'LightningComponentBundle');
|
|
46
|
-
const expsiteXml = generatePackageXml.getXmlElementforMembers(this.getExperienceSiteXml(experienceSiteAssessmentInfo), 'ExperienceBundle');
|
|
47
|
-
const flexipageXml = generatePackageXml.getXmlElementforMembers(this.getFlexipageXml(flexipageAssessmentInfos), 'FlexiPage');
|
|
44
|
+
const { apexXml, lwcXml, expsiteXml, flexipageXml } = generatePackageXml.getRelatedObjectsXml(apexAssementInfos, lwcAssessmentInfos, experienceSiteAssessmentInfo, flexipageAssessmentInfos);
|
|
48
45
|
if (!apexXml && !lwcXml && !expsiteXml && !flexipageXml) {
|
|
49
46
|
logger_1.Logger.warn(messages.getMessage('noMetadataToDeploy'));
|
|
50
47
|
return;
|
|
@@ -62,6 +59,37 @@ class generatePackageXml {
|
|
|
62
59
|
const filePath = path.join(process.cwd(), 'package.xml');
|
|
63
60
|
fs.writeFileSync(filePath, packageXmlContent.trim());
|
|
64
61
|
}
|
|
62
|
+
// Generates OmnistudioDeployment.xml containing OmniStudio components and related objects
|
|
63
|
+
static createOmnistudioDeploymentXml(apexAssementInfos, lwcAssessmentInfos, experienceSiteAssessmentInfo, flexipageAssessmentInfos, version) {
|
|
64
|
+
fs.rmSync(path.join(process.cwd(), 'OmnistudioDeployment.xml'), { force: true });
|
|
65
|
+
// Related objects XML
|
|
66
|
+
const { apexXml, lwcXml, expsiteXml, flexipageXml } = generatePackageXml.getRelatedObjectsXml(apexAssementInfos, lwcAssessmentInfos, experienceSiteAssessmentInfo, flexipageAssessmentInfos);
|
|
67
|
+
// OmniStudio components XML (always included)
|
|
68
|
+
const omniScriptXml = generatePackageXml.getXmlElementforMembers(['*'], 'OmniScript');
|
|
69
|
+
const omniUiCardXml = generatePackageXml.getXmlElementforMembers(['*'], 'OmniUiCard');
|
|
70
|
+
const omniDataTransformXml = generatePackageXml.getXmlElementforMembers(['*'], 'OmniDataTransform');
|
|
71
|
+
const omniIntegrationProcedureXml = generatePackageXml.getXmlElementforMembers(['*'], 'OmniIntegrationProcedure');
|
|
72
|
+
const customLabelsXml = generatePackageXml.getXmlElementforMembers(['*'], 'CustomLabels');
|
|
73
|
+
// Build array of non-empty XML sections to avoid blank lines and ensure proper spacing
|
|
74
|
+
const xmlSections = [
|
|
75
|
+
apexXml,
|
|
76
|
+
lwcXml,
|
|
77
|
+
expsiteXml,
|
|
78
|
+
flexipageXml,
|
|
79
|
+
omniScriptXml,
|
|
80
|
+
omniUiCardXml,
|
|
81
|
+
omniDataTransformXml,
|
|
82
|
+
omniIntegrationProcedureXml,
|
|
83
|
+
customLabelsXml,
|
|
84
|
+
].filter((xml) => xml && xml.trim().length > 0);
|
|
85
|
+
const packageXmlContent = `<?xml version="1.0" encoding="UTF-8"?>
|
|
86
|
+
<Package xmlns="http://soap.sforce.com/2006/04/metadata">
|
|
87
|
+
${xmlSections.join('\n ')}
|
|
88
|
+
<version>${version}</version>
|
|
89
|
+
</Package>`;
|
|
90
|
+
const filePath = path.join(process.cwd(), 'OmnistudioDeployment.xml');
|
|
91
|
+
fs.writeFileSync(filePath, packageXmlContent.trim());
|
|
92
|
+
}
|
|
65
93
|
// Backup method without additional types
|
|
66
94
|
static backupChangeList(apexClasses, lwcComponents) {
|
|
67
95
|
const apexXml = generatePackageXml.getXmlElementforMembers(apexClasses, 'ApexClass');
|
|
@@ -77,6 +105,14 @@ class generatePackageXml {
|
|
|
77
105
|
const filePath = path.join(__dirname, 'backup-package.xml');
|
|
78
106
|
fs.writeFileSync(filePath, packageXmlContent.trim());
|
|
79
107
|
}
|
|
108
|
+
// Helper method to generate XML for related objects
|
|
109
|
+
static getRelatedObjectsXml(apexAssementInfos, lwcAssessmentInfos, experienceSiteAssessmentInfo, flexipageAssessmentInfos) {
|
|
110
|
+
const apexXml = generatePackageXml.getXmlElementforMembers(this.getApexclasses(apexAssementInfos), 'ApexClass');
|
|
111
|
+
const lwcXml = generatePackageXml.getXmlElementforMembers(this.getLwcs(lwcAssessmentInfos), 'LightningComponentBundle');
|
|
112
|
+
const expsiteXml = generatePackageXml.getXmlElementforMembers(this.getExperienceSiteXml(experienceSiteAssessmentInfo), 'ExperienceBundle');
|
|
113
|
+
const flexipageXml = generatePackageXml.getXmlElementforMembers(this.getFlexipageXml(flexipageAssessmentInfos), 'FlexiPage');
|
|
114
|
+
return { apexXml, lwcXml, expsiteXml, flexipageXml };
|
|
115
|
+
}
|
|
80
116
|
static getXmlElementforMembers(members, type) {
|
|
81
117
|
if (!members || members.length === 0)
|
|
82
118
|
return '';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generatePackageXml.js","sourceRoot":"","sources":["../../src/utils/generatePackageXml.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,uCAAyB;AACzB,2CAA6B;AAQ7B,qCAAkC;AAElC,MAAa,kBAAkB;IAC7B,uDAAuD;IAChD,MAAM,CAAC,gBAAgB,CAC5B,iBAAuC,EACvC,kBAAuC,EACvC,4BAA4D,EAC5D,wBAAmD,EACnD,OAAe,EACf,QAA0B;QAE1B,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,aAAa,CAAC,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QACpE,MAAM,OAAO,GAAG,kBAAkB,CAAC,
|
|
1
|
+
{"version":3,"file":"generatePackageXml.js","sourceRoot":"","sources":["../../src/utils/generatePackageXml.ts"],"names":[],"mappings":"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"}
|
|
@@ -8,7 +8,9 @@ export declare class ResultsBuilder {
|
|
|
8
8
|
private static flexiPageFileSuffix;
|
|
9
9
|
private static successStatus;
|
|
10
10
|
private static errorStatus;
|
|
11
|
-
|
|
11
|
+
/** Set at report generation start; used to show "Manual deployment needed" when deployment failed */
|
|
12
|
+
private static deploymentFailed;
|
|
13
|
+
static generateReport(results: MigratedObject[], relatedObjectMigrationResult: RelatedObjectAssesmentInfo, instanceUrl: string, orgDetails: OmnistudioOrgDetails, messages: Messages<string>, actionItems: string[], objectsToProcess: string[], migrateOnly: string, deploymentFailed?: boolean): Promise<void>;
|
|
12
14
|
private static generateReportForResult;
|
|
13
15
|
private static getHeaderGroupsForReport;
|
|
14
16
|
private static getNameHeaders;
|
|
@@ -29,12 +31,19 @@ export declare class ResultsBuilder {
|
|
|
29
31
|
private static getDifferentStatusDataForResult;
|
|
30
32
|
private static getCustomLabelStatusData;
|
|
31
33
|
private static getDifferentStatusDataForApex;
|
|
34
|
+
private static buildStatusSummary;
|
|
35
|
+
private static countStatusesFromItems;
|
|
32
36
|
private static getDifferentStatusDataForFlexipage;
|
|
33
37
|
private static getDifferentStatusDataForLwc;
|
|
34
38
|
private static getDifferentStatusDataForExperienceSites;
|
|
35
39
|
private static getStatusFilterGroup;
|
|
36
40
|
private static getStatusFromErrors;
|
|
37
|
-
|
|
41
|
+
/** True when deployment failed but the component was successfully processed locally. */
|
|
42
|
+
private static isManualDeploymentNeeded;
|
|
43
|
+
/** Returns display status — "Manual deployment needed" when deployment failed, original status otherwise. */
|
|
44
|
+
private static resolveDisplayStatus;
|
|
45
|
+
/** Returns CSS class — error for manual deployment needed, success/error otherwise. */
|
|
46
|
+
private static resolveStatusClass;
|
|
38
47
|
private static getRowsForExperienceSites;
|
|
39
48
|
private static getRowDataForExperienceSites;
|
|
40
49
|
}
|
|
@@ -32,7 +32,8 @@ const apexFileName = 'apex.html';
|
|
|
32
32
|
const experienceSiteFileName = 'experienceSite.html';
|
|
33
33
|
const lwcFileName = 'lwc.html';
|
|
34
34
|
class ResultsBuilder {
|
|
35
|
-
static async generateReport(results, relatedObjectMigrationResult, instanceUrl, orgDetails, messages, actionItems, objectsToProcess, migrateOnly) {
|
|
35
|
+
static async generateReport(results, relatedObjectMigrationResult, instanceUrl, orgDetails, messages, actionItems, objectsToProcess, migrateOnly, deploymentFailed = false) {
|
|
36
|
+
ResultsBuilder.deploymentFailed = deploymentFailed;
|
|
36
37
|
fs_1.default.mkdirSync(resultsDir, { recursive: true });
|
|
37
38
|
logger_1.Logger.info(messages.getMessage('generatingComponentReports'));
|
|
38
39
|
for (const result of results) {
|
|
@@ -107,8 +108,8 @@ class ResultsBuilder {
|
|
|
107
108
|
(0, reportUtil_1.createRowDataParam)('migratedId', item.migratedId, false, 1, 1, true, `${instanceUrl}/${item.migratedId}`),
|
|
108
109
|
]),
|
|
109
110
|
(0, reportUtil_1.createRowDataParam)('migratedName', item.migratedName, false, 1, 1, false),
|
|
110
|
-
(0, reportUtil_1.createRowDataParam)('status', item.status, false, 1, 1, false, undefined, undefined, item.status ===
|
|
111
|
-
(0, reportUtil_1.createRowDataParam)('errors', item.errors ?
|
|
111
|
+
(0, reportUtil_1.createRowDataParam)('status', item.status, false, 1, 1, false, undefined, undefined, item.status === stringContants_1.Status.SuccessfullyMigrated ? 'text-success' : 'text-error'),
|
|
112
|
+
(0, reportUtil_1.createRowDataParam)('errors', item.errors ? stringContants_1.Status.Failed : 'Has No Errors', false, 1, 1, false, undefined, item.errors || []),
|
|
112
113
|
(0, reportUtil_1.createRowDataParam)('summary', item.warnings ? 'Warnings' : 'Has No Warnings', false, 1, 1, false, undefined, item.warnings || []),
|
|
113
114
|
],
|
|
114
115
|
})),
|
|
@@ -165,11 +166,11 @@ class ResultsBuilder {
|
|
|
165
166
|
result.data.forEach((record) => {
|
|
166
167
|
// Handle both old and new data formats
|
|
167
168
|
const labelName = record.name || record.labelName;
|
|
168
|
-
const cloneStatus = record.status ===
|
|
169
|
+
const cloneStatus = record.status === stringContants_1.Status.Complete
|
|
169
170
|
? 'created'
|
|
170
171
|
: record.status === 'Error'
|
|
171
172
|
? 'error'
|
|
172
|
-
: record.status ===
|
|
173
|
+
: record.status === stringContants_1.Status.Skipped
|
|
173
174
|
? 'duplicate'
|
|
174
175
|
: record.status || 'duplicate';
|
|
175
176
|
const message = record.message || '';
|
|
@@ -233,7 +234,7 @@ class ResultsBuilder {
|
|
|
233
234
|
assessmentDate: new Date().toLocaleString(),
|
|
234
235
|
total: result.length,
|
|
235
236
|
filterGroups: [
|
|
236
|
-
...this.getStatusFilterGroup(result.flatMap((item) => item.experienceSiteAssessmentPageInfos.map((page) => page.status))),
|
|
237
|
+
...this.getStatusFilterGroup(result.flatMap((item) => item.experienceSiteAssessmentPageInfos.map((page) => this.resolveDisplayStatus(page.status, messages)))),
|
|
237
238
|
],
|
|
238
239
|
headerGroups: [
|
|
239
240
|
{
|
|
@@ -271,7 +272,7 @@ class ResultsBuilder {
|
|
|
271
272
|
],
|
|
272
273
|
},
|
|
273
274
|
],
|
|
274
|
-
rows: this.getRowsForExperienceSites(result),
|
|
275
|
+
rows: this.getRowsForExperienceSites(result, messages),
|
|
275
276
|
props: JSON.stringify({
|
|
276
277
|
recordName: 'Pages',
|
|
277
278
|
rowBased: true,
|
|
@@ -296,7 +297,9 @@ class ResultsBuilder {
|
|
|
296
297
|
},
|
|
297
298
|
assessmentDate: new Date().toLocaleString(),
|
|
298
299
|
total: result.length,
|
|
299
|
-
filterGroups: [
|
|
300
|
+
filterGroups: [
|
|
301
|
+
...this.getStatusFilterGroup(result.map((item) => this.resolveDisplayStatus(item.status, messages))),
|
|
302
|
+
],
|
|
300
303
|
headerGroups: [
|
|
301
304
|
{
|
|
302
305
|
header: [
|
|
@@ -333,7 +336,7 @@ class ResultsBuilder {
|
|
|
333
336
|
data: [
|
|
334
337
|
(0, reportUtil_1.createRowDataParam)('name', item.name.substring(0, item.name.length - this.flexiPageFileSuffix.length), true, 1, 1, false),
|
|
335
338
|
(0, reportUtil_1.createRowDataParam)('path', item.name, false, 1, 1, true, item.path),
|
|
336
|
-
(0, reportUtil_1.createRowDataParam)('status', item.status, false, 1, 1, false, undefined, undefined, item.status
|
|
339
|
+
(0, reportUtil_1.createRowDataParam)('status', this.resolveDisplayStatus(item.status, messages), false, 1, 1, false, undefined, undefined, this.resolveStatusClass(item.status)),
|
|
337
340
|
(0, reportUtil_1.createRowDataParam)('diff', '', false, 1, 1, false, undefined, FileDiffUtil_1.FileDiffUtil.getDiffHTML(item.diff, item.name), 'diff-cell'),
|
|
338
341
|
(0, reportUtil_1.createRowDataParam)('error', 'error', false, 1, 1, false, undefined, item.errors),
|
|
339
342
|
],
|
|
@@ -356,7 +359,9 @@ class ResultsBuilder {
|
|
|
356
359
|
},
|
|
357
360
|
assessmentDate: new Date().toLocaleString(),
|
|
358
361
|
total: result.length,
|
|
359
|
-
filterGroups: [
|
|
362
|
+
filterGroups: [
|
|
363
|
+
(0, reportUtil_1.createFilterGroupParam)('Filter by Errors', 'warnings', [stringContants_1.Status.Failed, stringContants_1.Status.SuccessfullyCompleted]),
|
|
364
|
+
],
|
|
360
365
|
headerGroups: [
|
|
361
366
|
{
|
|
362
367
|
header: [
|
|
@@ -408,7 +413,7 @@ class ResultsBuilder {
|
|
|
408
413
|
...item.infos,
|
|
409
414
|
...item.warnings,
|
|
410
415
|
]),
|
|
411
|
-
(0, reportUtil_1.createRowDataParam)('warnings', item.errors.length > 0 ?
|
|
416
|
+
(0, reportUtil_1.createRowDataParam)('warnings', item.errors.length > 0 ? stringContants_1.Status.Failed : stringContants_1.Status.SuccessfullyCompleted, false, 1, 1, false, undefined, item.errors),
|
|
412
417
|
],
|
|
413
418
|
})),
|
|
414
419
|
};
|
|
@@ -430,7 +435,9 @@ class ResultsBuilder {
|
|
|
430
435
|
},
|
|
431
436
|
assessmentDate: new Date().toLocaleString(),
|
|
432
437
|
total: result.length,
|
|
433
|
-
filterGroups: [
|
|
438
|
+
filterGroups: [
|
|
439
|
+
...this.getStatusFilterGroup(result.flatMap((item) => this.resolveDisplayStatus(this.getStatusFromErrors(item.errors), messages))),
|
|
440
|
+
],
|
|
434
441
|
headerGroups: [
|
|
435
442
|
{
|
|
436
443
|
header: [
|
|
@@ -467,18 +474,21 @@ class ResultsBuilder {
|
|
|
467
474
|
],
|
|
468
475
|
},
|
|
469
476
|
],
|
|
470
|
-
rows: this.getLwcRowsForReport(result),
|
|
477
|
+
rows: this.getLwcRowsForReport(result, messages),
|
|
471
478
|
};
|
|
472
479
|
const reportTemplate = fs_1.default.readFileSync(reportTemplateFilePath, 'utf8');
|
|
473
480
|
const html = generate_1.TemplateParser.generate(reportTemplate, data, messages);
|
|
474
481
|
fs_1.default.writeFileSync(path_1.default.join(resultsDir, lwcFileName), html);
|
|
475
482
|
}
|
|
476
|
-
static getLwcRowsForReport(lwcAssessmentInfos) {
|
|
483
|
+
static getLwcRowsForReport(lwcAssessmentInfos, messages) {
|
|
477
484
|
const rows = [];
|
|
478
485
|
for (const lwcAssessmentInfo of lwcAssessmentInfos) {
|
|
479
486
|
let showCommon = true;
|
|
480
487
|
const rid = `${this.rowClass}${this.rowId++}`;
|
|
481
488
|
const commonRowSpan = Math.max(1, lwcAssessmentInfo.changeInfos.length);
|
|
489
|
+
const actualStatus = this.getStatusFromErrors(lwcAssessmentInfo.errors);
|
|
490
|
+
const displayStatus = this.resolveDisplayStatus(actualStatus, messages);
|
|
491
|
+
const statusClass = this.resolveStatusClass(actualStatus);
|
|
482
492
|
for (const fileChangeInfo of lwcAssessmentInfo.changeInfos) {
|
|
483
493
|
rows.push({
|
|
484
494
|
rowId: rid,
|
|
@@ -486,7 +496,7 @@ class ResultsBuilder {
|
|
|
486
496
|
...(showCommon
|
|
487
497
|
? [
|
|
488
498
|
(0, reportUtil_1.createRowDataParam)('name', lwcAssessmentInfo.name, true, commonRowSpan, 1, false),
|
|
489
|
-
(0, reportUtil_1.createRowDataParam)('status',
|
|
499
|
+
(0, reportUtil_1.createRowDataParam)('status', displayStatus, false, commonRowSpan, 1, false, undefined, undefined, statusClass),
|
|
490
500
|
]
|
|
491
501
|
: []),
|
|
492
502
|
(0, reportUtil_1.createRowDataParam)('fileReference', fileChangeInfo.name, false, 1, 1, true, fileChangeInfo.path, fileChangeInfo.name, 'normal-td-padding'),
|
|
@@ -494,8 +504,8 @@ class ResultsBuilder {
|
|
|
494
504
|
...(showCommon
|
|
495
505
|
? [
|
|
496
506
|
(0, reportUtil_1.createRowDataParam)('comments', lwcAssessmentInfo.warnings && lwcAssessmentInfo.warnings.length > 0
|
|
497
|
-
?
|
|
498
|
-
:
|
|
507
|
+
? stringContants_1.Status.Failed
|
|
508
|
+
: stringContants_1.Status.SuccessfullyCompleted, false, commonRowSpan, 1, false, undefined, lwcAssessmentInfo.warnings || []),
|
|
499
509
|
(0, reportUtil_1.createRowDataParam)('errors', lwcAssessmentInfo.errors ? lwcAssessmentInfo.errors.join(', ') : '', false, commonRowSpan, 1, false, undefined, lwcAssessmentInfo.errors || []),
|
|
500
510
|
]
|
|
501
511
|
: []),
|
|
@@ -647,17 +657,17 @@ class ResultsBuilder {
|
|
|
647
657
|
let error = 0;
|
|
648
658
|
let skip = 0;
|
|
649
659
|
data.forEach((item) => {
|
|
650
|
-
if (item.status ===
|
|
660
|
+
if (item.status === stringContants_1.Status.SuccessfullyMigrated)
|
|
651
661
|
complete++;
|
|
652
|
-
if (item.status ===
|
|
662
|
+
if (item.status === stringContants_1.Status.Failed)
|
|
653
663
|
error++;
|
|
654
|
-
if (item.status ===
|
|
664
|
+
if (item.status === stringContants_1.Status.Skipped)
|
|
655
665
|
skip++;
|
|
656
666
|
});
|
|
657
667
|
return [
|
|
658
|
-
{ name:
|
|
659
|
-
{ name:
|
|
660
|
-
{ name:
|
|
668
|
+
{ name: stringContants_1.Status.SuccessfullyMigrated, count: complete, cssClass: 'text-success' },
|
|
669
|
+
{ name: stringContants_1.Status.Skipped, count: skip, cssClass: 'text-error' },
|
|
670
|
+
{ name: stringContants_1.Status.Failed, count: error, cssClass: 'text-error' },
|
|
661
671
|
];
|
|
662
672
|
}
|
|
663
673
|
static getCustomLabelStatusData(data, totalCount) {
|
|
@@ -669,18 +679,18 @@ class ResultsBuilder {
|
|
|
669
679
|
data.forEach((item) => {
|
|
670
680
|
// Handle both old and new status formats
|
|
671
681
|
const status = item.status || item.cloneStatus;
|
|
672
|
-
if (status === 'error' || status === 'Error' || status ===
|
|
682
|
+
if (status === 'error' || status === 'Error' || status === stringContants_1.Status.Failed)
|
|
673
683
|
error++;
|
|
674
|
-
else if (status === 'duplicate' || status ===
|
|
684
|
+
else if (status === 'duplicate' || status === stringContants_1.Status.Skipped)
|
|
675
685
|
duplicate++;
|
|
676
686
|
});
|
|
677
687
|
// Use totalCount if provided, otherwise fall back to data length
|
|
678
688
|
const actualTotal = totalCount || data.length;
|
|
679
689
|
const successfullyMigrated = Math.max(0, actualTotal - error - duplicate);
|
|
680
690
|
return [
|
|
681
|
-
{ name:
|
|
682
|
-
{ name:
|
|
683
|
-
{ name:
|
|
691
|
+
{ name: stringContants_1.Status.SuccessfullyMigrated, count: successfullyMigrated, cssClass: 'text-success' },
|
|
692
|
+
{ name: stringContants_1.Status.Failed, count: error, cssClass: 'text-error' },
|
|
693
|
+
{ name: stringContants_1.Status.Skipped, count: duplicate, cssClass: 'text-warning' },
|
|
684
694
|
];
|
|
685
695
|
}
|
|
686
696
|
static getDifferentStatusDataForApex(data) {
|
|
@@ -693,63 +703,56 @@ class ResultsBuilder {
|
|
|
693
703
|
error++;
|
|
694
704
|
});
|
|
695
705
|
return [
|
|
696
|
-
{ name:
|
|
697
|
-
{ name:
|
|
698
|
-
{ name:
|
|
706
|
+
{ name: stringContants_1.Status.SuccessfullyMigrated, count: complete, cssClass: 'text-success' },
|
|
707
|
+
{ name: stringContants_1.Status.Skipped, count: 0, cssClass: 'text-error' },
|
|
708
|
+
{ name: stringContants_1.Status.Failed, count: error, cssClass: 'text-error' },
|
|
699
709
|
];
|
|
700
710
|
}
|
|
701
|
-
static
|
|
711
|
+
static buildStatusSummary(counts) {
|
|
712
|
+
const result = [
|
|
713
|
+
{ name: stringContants_1.Status.SuccessfullyMigrated, count: counts.completed, cssClass: 'text-success' },
|
|
714
|
+
];
|
|
715
|
+
if (counts.manualDeploymentNeeded > 0) {
|
|
716
|
+
result.push({
|
|
717
|
+
name: stringContants_1.Status.ManualDeploymentNeeded,
|
|
718
|
+
count: counts.manualDeploymentNeeded,
|
|
719
|
+
cssClass: 'text-error',
|
|
720
|
+
});
|
|
721
|
+
}
|
|
722
|
+
result.push({ name: stringContants_1.Status.Skipped, count: counts.skipped, cssClass: 'text-error' });
|
|
723
|
+
result.push({ name: stringContants_1.Status.Failed, count: counts.failed, cssClass: 'text-error' });
|
|
724
|
+
return result;
|
|
725
|
+
}
|
|
726
|
+
static countStatusesFromItems(statuses) {
|
|
702
727
|
let completed = 0;
|
|
728
|
+
let manualDeploymentNeeded = 0;
|
|
703
729
|
let skipped = 0;
|
|
704
730
|
let failed = 0;
|
|
705
|
-
|
|
706
|
-
if (
|
|
731
|
+
for (const status of statuses) {
|
|
732
|
+
if (this.isManualDeploymentNeeded(status)) {
|
|
733
|
+
manualDeploymentNeeded++;
|
|
734
|
+
}
|
|
735
|
+
else if (status === stringContants_1.Status.SuccessfullyMigrated) {
|
|
707
736
|
completed++;
|
|
708
|
-
|
|
737
|
+
}
|
|
738
|
+
else if (status === stringContants_1.Status.Skipped) {
|
|
709
739
|
skipped++;
|
|
710
|
-
|
|
740
|
+
}
|
|
741
|
+
else {
|
|
711
742
|
failed++;
|
|
712
|
-
|
|
713
|
-
|
|
714
|
-
|
|
715
|
-
|
|
716
|
-
|
|
717
|
-
|
|
743
|
+
}
|
|
744
|
+
}
|
|
745
|
+
return { completed, manualDeploymentNeeded, skipped, failed };
|
|
746
|
+
}
|
|
747
|
+
static getDifferentStatusDataForFlexipage(data) {
|
|
748
|
+
return this.buildStatusSummary(this.countStatusesFromItems(data.map((item) => item.status)));
|
|
718
749
|
}
|
|
719
750
|
static getDifferentStatusDataForLwc(data) {
|
|
720
|
-
|
|
721
|
-
let failed = 0;
|
|
722
|
-
data.forEach((item) => {
|
|
723
|
-
if (this.getStatusFromErrors(item.errors) === 'Successfully migrated')
|
|
724
|
-
completed++;
|
|
725
|
-
else
|
|
726
|
-
failed++;
|
|
727
|
-
});
|
|
728
|
-
return [
|
|
729
|
-
{ name: 'Successfully migrated', count: completed, cssClass: 'text-success' },
|
|
730
|
-
{ name: 'Skipped', count: 0, cssClass: 'text-error' },
|
|
731
|
-
{ name: 'Failed', count: failed, cssClass: 'text-error' },
|
|
732
|
-
];
|
|
751
|
+
return this.buildStatusSummary(this.countStatusesFromItems(data.map((item) => this.getStatusFromErrors(item.errors))));
|
|
733
752
|
}
|
|
734
753
|
static getDifferentStatusDataForExperienceSites(data) {
|
|
735
|
-
|
|
736
|
-
|
|
737
|
-
let failed = 0;
|
|
738
|
-
data
|
|
739
|
-
.flatMap((item) => item.experienceSiteAssessmentPageInfos)
|
|
740
|
-
.forEach((item) => {
|
|
741
|
-
if (item.status === 'Successfully migrated')
|
|
742
|
-
completed++;
|
|
743
|
-
else if (item.status === 'Skipped')
|
|
744
|
-
skipped++;
|
|
745
|
-
else
|
|
746
|
-
failed++;
|
|
747
|
-
});
|
|
748
|
-
return [
|
|
749
|
-
{ name: 'Successfully migrated', count: completed, cssClass: 'text-success' },
|
|
750
|
-
{ name: 'Skipped', count: skipped, cssClass: 'text-error' },
|
|
751
|
-
{ name: 'Failed', count: failed, cssClass: 'text-error' },
|
|
752
|
-
];
|
|
754
|
+
const statuses = data.flatMap((item) => item.experienceSiteAssessmentPageInfos.map((page) => page.status));
|
|
755
|
+
return this.buildStatusSummary(this.countStatusesFromItems(statuses));
|
|
753
756
|
}
|
|
754
757
|
static getStatusFilterGroup(statuses) {
|
|
755
758
|
const statusSet = new Set(statuses);
|
|
@@ -759,17 +762,24 @@ class ResultsBuilder {
|
|
|
759
762
|
}
|
|
760
763
|
static getStatusFromErrors(errors) {
|
|
761
764
|
if (errors && errors.length > 0)
|
|
762
|
-
return
|
|
763
|
-
return
|
|
765
|
+
return stringContants_1.Status.Failed;
|
|
766
|
+
return stringContants_1.Status.SuccessfullyMigrated;
|
|
764
767
|
}
|
|
765
|
-
|
|
766
|
-
|
|
768
|
+
/** True when deployment failed but the component was successfully processed locally. */
|
|
769
|
+
static isManualDeploymentNeeded(status) {
|
|
770
|
+
return this.deploymentFailed && status === stringContants_1.Status.SuccessfullyMigrated;
|
|
771
|
+
}
|
|
772
|
+
/** Returns display status — "Manual deployment needed" when deployment failed, original status otherwise. */
|
|
773
|
+
static resolveDisplayStatus(status, messages) {
|
|
774
|
+
return this.isManualDeploymentNeeded(status) ? messages.getMessage('manualDeploymentNeeded') : status;
|
|
775
|
+
}
|
|
776
|
+
/** Returns CSS class — error for manual deployment needed, success/error otherwise. */
|
|
777
|
+
static resolveStatusClass(status) {
|
|
778
|
+
if (this.isManualDeploymentNeeded(status))
|
|
767
779
|
return 'text-error';
|
|
768
|
-
|
|
769
|
-
return '';
|
|
770
|
-
return 'text-success';
|
|
780
|
+
return status === stringContants_1.Status.SuccessfullyMigrated ? 'text-success' : 'text-error';
|
|
771
781
|
}
|
|
772
|
-
static getRowsForExperienceSites(result) {
|
|
782
|
+
static getRowsForExperienceSites(result, messages) {
|
|
773
783
|
const rows = [];
|
|
774
784
|
result.forEach((item) => {
|
|
775
785
|
const rId = `${this.rowClass}${this.rowId++}`;
|
|
@@ -777,19 +787,21 @@ class ResultsBuilder {
|
|
|
777
787
|
item.experienceSiteAssessmentPageInfos.forEach((page) => {
|
|
778
788
|
rows.push({
|
|
779
789
|
rowId: rId,
|
|
780
|
-
data: this.getRowDataForExperienceSites(page, item, showBundleName),
|
|
790
|
+
data: this.getRowDataForExperienceSites(page, item, showBundleName, messages),
|
|
781
791
|
});
|
|
782
792
|
showBundleName = false;
|
|
783
793
|
});
|
|
784
794
|
});
|
|
785
795
|
return rows;
|
|
786
796
|
}
|
|
787
|
-
static getRowDataForExperienceSites(page, item, showBundleName) {
|
|
797
|
+
static getRowDataForExperienceSites(page, item, showBundleName, messages) {
|
|
798
|
+
const displayStatus = this.resolveDisplayStatus(page.status, messages);
|
|
799
|
+
const statusClass = this.resolveStatusClass(page.status);
|
|
788
800
|
return [
|
|
789
801
|
(0, reportUtil_1.createRowDataParam)('name', item.experienceBundleName, true, item.experienceSiteAssessmentPageInfos.length, 1, false, undefined, undefined, showBundleName ? '' : 'no-display'),
|
|
790
802
|
(0, reportUtil_1.createRowDataParam)('pageName', page.name, false, 1, 1, false, undefined, undefined),
|
|
791
803
|
(0, reportUtil_1.createRowDataParam)('path', page.name + this.experienceSiteFileSuffix, false, 1, 1, true, page.path),
|
|
792
|
-
(0, reportUtil_1.createRowDataParam)('status',
|
|
804
|
+
(0, reportUtil_1.createRowDataParam)('status', displayStatus, false, 1, 1, false, undefined, undefined, statusClass),
|
|
793
805
|
(0, reportUtil_1.createRowDataParam)('diff', page.name + 'diff', false, 1, 1, false, undefined, FileDiffUtil_1.FileDiffUtil.getDiffHTML(page.diff, page.name), 'diff-cell'),
|
|
794
806
|
(0, reportUtil_1.createRowDataParam)('errors', page.errors ? page.errors.join(', ') : '', false, 1, 1, false, undefined, [
|
|
795
807
|
...(page.errors || []),
|
|
@@ -803,6 +815,8 @@ ResultsBuilder.rowClass = 'data-row-';
|
|
|
803
815
|
ResultsBuilder.rowId = 0;
|
|
804
816
|
ResultsBuilder.experienceSiteFileSuffix = '.json';
|
|
805
817
|
ResultsBuilder.flexiPageFileSuffix = '.flexipage-meta.xml';
|
|
806
|
-
ResultsBuilder.successStatus = [
|
|
807
|
-
ResultsBuilder.errorStatus = [
|
|
818
|
+
ResultsBuilder.successStatus = [stringContants_1.Status.ReadyForMigration, stringContants_1.Status.Complete, stringContants_1.Status.SuccessfullyMigrated];
|
|
819
|
+
ResultsBuilder.errorStatus = [stringContants_1.Status.Failed, stringContants_1.Status.NeedsManualIntervention];
|
|
820
|
+
/** Set at report generation start; used to show "Manual deployment needed" when deployment failed */
|
|
821
|
+
ResultsBuilder.deploymentFailed = false;
|
|
808
822
|
//# sourceMappingURL=index.js.map
|