@salesforce/plugin-omnistudio-migration-tool 2.0.0-rc.6 → 2.0.0-rc.61
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 +165 -73
- package/lib/commands/omnistudio/migration/assess.d.ts +23 -15
- package/lib/commands/omnistudio/migration/assess.js +250 -89
- package/lib/commands/omnistudio/migration/assess.js.map +1 -1
- package/lib/commands/omnistudio/migration/clean.d.ts +13 -0
- package/lib/commands/omnistudio/migration/clean.js +162 -0
- package/lib/commands/omnistudio/migration/clean.js.map +1 -0
- package/lib/commands/omnistudio/migration/info.d.ts +10 -16
- package/lib/commands/omnistudio/migration/info.js +53 -35
- package/lib/commands/omnistudio/migration/info.js.map +1 -1
- package/lib/commands/omnistudio/migration/migrate.d.ts +78 -18
- package/lib/commands/omnistudio/migration/migrate.js +461 -175
- package/lib/commands/omnistudio/migration/migrate.js.map +1 -1
- package/lib/error/deploymentErrors.d.ts +15 -0
- package/lib/error/deploymentErrors.js +35 -0
- package/lib/error/deploymentErrors.js.map +1 -0
- package/lib/error/errorInterfaces.d.ts +5 -0
- package/lib/error/errorInterfaces.js +9 -1
- package/lib/error/errorInterfaces.js.map +1 -1
- package/lib/javascripts/reportGeneratorUtility.js +585 -22
- package/lib/migration/ApexNamespaceRegistry.d.ts +49 -0
- package/lib/migration/ApexNamespaceRegistry.js +130 -0
- package/lib/migration/ApexNamespaceRegistry.js.map +1 -0
- package/lib/migration/CustomCssRegistry.d.ts +117 -0
- package/lib/migration/CustomCssRegistry.js +234 -0
- package/lib/migration/CustomCssRegistry.js.map +1 -0
- package/lib/migration/NameMappingRegistry.d.ts +134 -0
- package/lib/migration/NameMappingRegistry.js +411 -0
- package/lib/migration/NameMappingRegistry.js.map +1 -0
- package/lib/migration/base.d.ts +8 -6
- package/lib/migration/base.js +25 -8
- package/lib/migration/base.js.map +1 -1
- package/lib/migration/customLabels.d.ts +70 -0
- package/lib/migration/customLabels.js +177 -0
- package/lib/migration/customLabels.js.map +1 -0
- package/lib/migration/dataraptor.d.ts +13 -0
- package/lib/migration/dataraptor.js +205 -80
- package/lib/migration/dataraptor.js.map +1 -1
- package/lib/migration/deployer.d.ts +14 -0
- package/lib/migration/deployer.js +105 -0
- package/lib/migration/deployer.js.map +1 -0
- package/lib/migration/flexcard.d.ts +256 -6
- package/lib/migration/flexcard.js +1808 -268
- package/lib/migration/flexcard.js.map +1 -1
- package/lib/migration/globalautonumber.d.ts +8 -8
- package/lib/migration/globalautonumber.js +49 -24
- package/lib/migration/globalautonumber.js.map +1 -1
- package/lib/migration/interfaces.d.ts +14 -0
- package/lib/migration/interfaces.js.map +1 -1
- package/lib/migration/metadataobjnamecheck.js.map +1 -1
- package/lib/migration/omniscript.d.ts +218 -4
- package/lib/migration/omniscript.js +1709 -247
- package/lib/migration/omniscript.js.map +1 -1
- package/lib/migration/omniscriptInstance.d.ts +90 -0
- package/lib/migration/omniscriptInstance.js +755 -0
- package/lib/migration/omniscriptInstance.js.map +1 -0
- package/lib/migration/postMigrate.d.ts +20 -4
- package/lib/migration/postMigrate.js +199 -12
- package/lib/migration/postMigrate.js.map +1 -1
- package/lib/migration/premigrate.d.ts +51 -0
- package/lib/migration/premigrate.js +325 -0
- package/lib/migration/premigrate.js.map +1 -0
- package/lib/migration/related/ApexMigration.d.ts +3 -0
- package/lib/migration/related/ApexMigration.js +222 -56
- package/lib/migration/related/ApexMigration.js.map +1 -1
- package/lib/migration/related/ExperienceSiteMigration.d.ts +30 -5
- package/lib/migration/related/ExperienceSiteMigration.js +263 -73
- package/lib/migration/related/ExperienceSiteMigration.js.map +1 -1
- package/lib/migration/related/FlexipageMigration.d.ts +5 -5
- package/lib/migration/related/FlexipageMigration.js +60 -38
- package/lib/migration/related/FlexipageMigration.js.map +1 -1
- package/lib/migration/related/LwcMigration.js +45 -26
- package/lib/migration/related/LwcMigration.js.map +1 -1
- package/lib/migration/related/OmnistudioRelatedObjectMigrationFacade.js +48 -32
- package/lib/migration/related/OmnistudioRelatedObjectMigrationFacade.js.map +1 -1
- package/lib/styles/reportGenerator.css +241 -16
- package/lib/templates/assessmentReport.template +78 -8
- package/lib/templates/dashboard.template +86 -57
- package/lib/templates/migrationReport.template +151 -0
- package/lib/utils/OmnistudioSettingsPrefManager.d.ts +14 -0
- package/lib/utils/OmnistudioSettingsPrefManager.js +112 -0
- package/lib/utils/OmnistudioSettingsPrefManager.js.map +1 -0
- package/lib/utils/XMLUtil.js +2 -1
- package/lib/utils/XMLUtil.js.map +1 -1
- package/lib/utils/apex/executor/AnonymousApexRunner.d.ts +1 -1
- package/lib/utils/apex/parser/apexparser.d.ts +8 -1
- package/lib/utils/apex/parser/apexparser.js +79 -13
- package/lib/utils/apex/parser/apexparser.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.d.ts +36 -0
- package/lib/utils/config/OmniStudioMetadataCleanupService.js +123 -0
- package/lib/utils/config/OmniStudioMetadataCleanupService.js.map +1 -0
- 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/documentRegistry.d.ts +9 -17
- package/lib/utils/constants/documentRegistry.js +9 -17
- package/lib/utils/constants/documentRegistry.js.map +1 -1
- package/lib/utils/constants/stringContants.d.ts +78 -0
- package/lib/utils/constants/stringContants.js +91 -4
- package/lib/utils/constants/stringContants.js.map +1 -1
- package/lib/utils/customLabels.d.ts +35 -0
- package/lib/utils/customLabels.js +100 -0
- package/lib/utils/customLabels.js.map +1 -0
- package/lib/utils/dataModelService.d.ts +18 -0
- package/lib/utils/dataModelService.js +72 -0
- package/lib/utils/dataModelService.js.map +1 -0
- package/lib/utils/file/fileUtil.d.ts +3 -1
- package/lib/utils/file/fileUtil.js +30 -13
- package/lib/utils/file/fileUtil.js.map +1 -1
- package/lib/utils/flexipage/flexiPageTransformer.js +119 -23
- package/lib/utils/flexipage/flexiPageTransformer.js.map +1 -1
- package/lib/utils/formula/FormulaUtil.d.ts +1 -1
- package/lib/utils/formula/FormulaUtil.js +17 -9
- package/lib/utils/formula/FormulaUtil.js.map +1 -1
- package/lib/utils/formula/Stack.js.map +1 -1
- package/lib/utils/generatePackageXml.d.ts +6 -2
- package/lib/utils/generatePackageXml.js +73 -33
- package/lib/utils/generatePackageXml.js.map +1 -1
- package/lib/utils/index.d.ts +1 -0
- package/lib/utils/index.js +1 -0
- package/lib/utils/index.js.map +1 -1
- package/lib/utils/interfaces.d.ts +69 -8
- package/lib/utils/json/jsonutil.js.map +1 -1
- package/lib/utils/logger/fileLogger.js +17 -7
- package/lib/utils/logger/fileLogger.js.map +1 -1
- package/lib/utils/logger.d.ts +3 -3
- package/lib/utils/logger.js +10 -6
- package/lib/utils/logger.js.map +1 -1
- package/lib/utils/logging/debugtimer.js.map +1 -1
- package/lib/utils/lwcparser/fileutils/FileDiffUtil.js +30 -22
- package/lib/utils/lwcparser/fileutils/FileDiffUtil.js.map +1 -1
- package/lib/utils/lwcparser/fileutils/FileProcessorFactory.js.map +1 -1
- package/lib/utils/lwcparser/fileutils/HtmlFileProcessor.js.map +1 -1
- package/lib/utils/lwcparser/fileutils/JavascriptFileProcessor.js.map +1 -1
- package/lib/utils/lwcparser/fileutils/XmlFileProcessor.js.map +1 -1
- package/lib/utils/lwcparser/htmlParser/HTMLParser.js +29 -10
- package/lib/utils/lwcparser/htmlParser/HTMLParser.js.map +1 -1
- package/lib/utils/lwcparser/jsParser/JavaScriptParser.js +29 -11
- package/lib/utils/lwcparser/jsParser/JavaScriptParser.js.map +1 -1
- package/lib/utils/lwcparser/xmlParser/XmlParser.js +19 -8
- package/lib/utils/lwcparser/xmlParser/XmlParser.js.map +1 -1
- package/lib/utils/net/index.d.ts +5 -0
- package/lib/utils/net/index.js +40 -2
- package/lib/utils/net/index.js.map +1 -1
- package/lib/utils/omniscriptPackageManager.d.ts +31 -0
- package/lib/utils/omniscriptPackageManager.js +215 -0
- package/lib/utils/omniscriptPackageManager.js.map +1 -0
- package/lib/utils/orgPreferences.d.ts +25 -0
- package/lib/utils/orgPreferences.js +124 -8
- package/lib/utils/orgPreferences.js.map +1 -1
- package/lib/utils/orgUtils/index.d.ts +12 -5
- package/lib/utils/orgUtils/index.js +52 -22
- package/lib/utils/orgUtils/index.js.map +1 -1
- package/lib/utils/projectPathUtil.d.ts +1 -1
- package/lib/utils/projectPathUtil.js +27 -10
- package/lib/utils/projectPathUtil.js.map +1 -1
- package/lib/utils/promptUtil.d.ts +11 -1
- package/lib/utils/promptUtil.js +92 -0
- package/lib/utils/promptUtil.js.map +1 -1
- package/lib/utils/query/index.d.ts +1 -0
- package/lib/utils/query/index.js +18 -1
- package/lib/utils/query/index.js.map +1 -1
- package/lib/utils/recordPrioritization.d.ts +44 -0
- package/lib/utils/recordPrioritization.js +69 -0
- package/lib/utils/recordPrioritization.js.map +1 -0
- package/lib/utils/reportGenerator/reportInterfaces.d.ts +12 -0
- package/lib/utils/reportGenerator/reportUtil.d.ts +6 -1
- package/lib/utils/reportGenerator/reportUtil.js +22 -7
- package/lib/utils/reportGenerator/reportUtil.js.map +1 -1
- package/lib/utils/resultsbuilder/ApexAssessmentReporter.d.ts +1 -0
- package/lib/utils/resultsbuilder/ApexAssessmentReporter.js +40 -17
- package/lib/utils/resultsbuilder/ApexAssessmentReporter.js.map +1 -1
- package/lib/utils/resultsbuilder/CustomLabelAssessmentReporter.d.ts +13 -0
- package/lib/utils/resultsbuilder/CustomLabelAssessmentReporter.js +179 -0
- package/lib/utils/resultsbuilder/CustomLabelAssessmentReporter.js.map +1 -0
- package/lib/utils/resultsbuilder/CustomLabelMigrationReporter.d.ts +27 -0
- package/lib/utils/resultsbuilder/CustomLabelMigrationReporter.js +262 -0
- package/lib/utils/resultsbuilder/CustomLabelMigrationReporter.js.map +1 -0
- package/lib/utils/resultsbuilder/DRAssessmentReporter.js +38 -70
- package/lib/utils/resultsbuilder/DRAssessmentReporter.js.map +1 -1
- package/lib/utils/resultsbuilder/ExperienceSiteAssessmentReporter.d.ts +14 -0
- package/lib/utils/resultsbuilder/ExperienceSiteAssessmentReporter.js +143 -0
- package/lib/utils/resultsbuilder/ExperienceSiteAssessmentReporter.js.map +1 -0
- package/lib/utils/resultsbuilder/FlexcardAssessmentReporter.js +46 -85
- package/lib/utils/resultsbuilder/FlexcardAssessmentReporter.js.map +1 -1
- package/lib/utils/resultsbuilder/FlexipageAssessmentReporter.d.ts +1 -0
- package/lib/utils/resultsbuilder/FlexipageAssessmentReporter.js +37 -19
- package/lib/utils/resultsbuilder/FlexipageAssessmentReporter.js.map +1 -1
- package/lib/utils/resultsbuilder/GlobalAutoNumberAssessmentReporter.js +22 -14
- package/lib/utils/resultsbuilder/GlobalAutoNumberAssessmentReporter.js.map +1 -1
- package/lib/utils/resultsbuilder/IPAssessmentReporter.js +38 -71
- package/lib/utils/resultsbuilder/IPAssessmentReporter.js.map +1 -1
- package/lib/utils/resultsbuilder/LWCAssessmentReporter.d.ts +14 -0
- package/lib/utils/resultsbuilder/LWCAssessmentReporter.js +143 -139
- package/lib/utils/resultsbuilder/LWCAssessmentReporter.js.map +1 -1
- package/lib/utils/resultsbuilder/OSAssessmentReporter.js +41 -88
- package/lib/utils/resultsbuilder/OSAssessmentReporter.js.map +1 -1
- package/lib/utils/resultsbuilder/SaveForLaterAssessmentReporter.d.ts +12 -0
- package/lib/utils/resultsbuilder/SaveForLaterAssessmentReporter.js +109 -0
- package/lib/utils/resultsbuilder/SaveForLaterAssessmentReporter.js.map +1 -0
- package/lib/utils/resultsbuilder/assessmentReporter.d.ts +16 -6
- package/lib/utils/resultsbuilder/assessmentReporter.js +96 -152
- package/lib/utils/resultsbuilder/assessmentReporter.js.map +1 -1
- package/lib/utils/resultsbuilder/helpers/AssessmentReportHelper.d.ts +104 -0
- package/lib/utils/resultsbuilder/helpers/AssessmentReportHelper.js +380 -0
- package/lib/utils/resultsbuilder/helpers/AssessmentReportHelper.js.map +1 -0
- package/lib/utils/resultsbuilder/index.d.ts +37 -1
- package/lib/utils/resultsbuilder/index.js +582 -151
- package/lib/utils/resultsbuilder/index.js.map +1 -1
- package/lib/utils/resultsbuilder/reportingHelper.d.ts +2 -7
- package/lib/utils/resultsbuilder/reportingHelper.js +0 -43
- package/lib/utils/resultsbuilder/reportingHelper.js.map +1 -1
- package/lib/utils/sfcli/project/sfProject.d.ts +29 -0
- package/lib/utils/sfcli/project/sfProject.js +220 -2
- package/lib/utils/sfcli/project/sfProject.js.map +1 -1
- package/lib/utils/shell/cli.js +20 -14
- package/lib/utils/shell/cli.js.map +1 -1
- package/lib/utils/storageUtil.d.ts +14 -1
- package/lib/utils/storageUtil.js +31 -1
- package/lib/utils/storageUtil.js.map +1 -1
- package/lib/utils/stringUtils.d.ts +24 -0
- package/lib/utils/stringUtils.js +76 -9
- package/lib/utils/stringUtils.js.map +1 -1
- package/lib/utils/templateParser/__tests__/test.js +1 -2
- package/lib/utils/templateParser/__tests__/test.js.map +1 -1
- package/lib/utils/templateParser/generate.d.ts +1 -1
- package/lib/utils/templateParser/generate.js.map +1 -1
- package/lib/utils/templateParser/model/elementNode.d.ts +2 -2
- package/lib/utils/templateParser/model/elementNode.js +11 -2
- package/lib/utils/templateParser/model/elementNode.js.map +1 -1
- package/lib/utils/templateParser/model/nodeTypes.js +1 -1
- package/lib/utils/templateParser/model/nodeTypes.js.map +1 -1
- package/lib/utils/templateParser/util.d.ts +2 -2
- package/lib/utils/templateParser/util.js.map +1 -1
- package/lib/utils/validatorService.d.ts +14 -0
- package/lib/utils/validatorService.js +136 -0
- package/lib/utils/validatorService.js.map +1 -0
- package/messages/assess.json +220 -103
- package/messages/clean.json +40 -0
- package/messages/info.json +2 -1
- package/messages/migrate.json +314 -102
- package/oclif.manifest.json +1 -1
- package/package.json +49 -13
- package/lib/commands/basecommand.d.ts +0 -8
- package/lib/commands/basecommand.js +0 -13
- package/lib/commands/basecommand.js.map +0 -1
- package/lib/utils/OmniGlobalAutoNumberPrefManager.d.ts +0 -40
- package/lib/utils/OmniGlobalAutoNumberPrefManager.js +0 -65
- package/lib/utils/OmniGlobalAutoNumberPrefManager.js.map +0 -1
|
@@ -0,0 +1,266 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ExistingRecordCleanupService = void 0;
|
|
4
|
+
const logger_1 = require("../logger");
|
|
5
|
+
const net_1 = require("../net");
|
|
6
|
+
const stringContants_1 = require("../constants/stringContants");
|
|
7
|
+
const base_1 = require("../../migration/base");
|
|
8
|
+
const BATCH_SIZE = 50;
|
|
9
|
+
// ── Module-level helpers ──────────────────────────────────────────────────────
|
|
10
|
+
function escapeSoql(value) {
|
|
11
|
+
return value.replace(/'/g, "\\'");
|
|
12
|
+
}
|
|
13
|
+
// Shared parser for OmniScript and IntegrationProcedure (same DeveloperName format)
|
|
14
|
+
function parseOmniProcessDeveloperName(developerName) {
|
|
15
|
+
const parts = developerName.split('_');
|
|
16
|
+
if (parts.length < 4)
|
|
17
|
+
return null;
|
|
18
|
+
const version = parseFloat(parts[3]);
|
|
19
|
+
if (isNaN(version))
|
|
20
|
+
return null;
|
|
21
|
+
return { mapKey: `${parts[0]}_${parts[1]}_${parts[2]}`, version };
|
|
22
|
+
}
|
|
23
|
+
function buildOmniProcessWhere(mapKey, versionsStr, isIP) {
|
|
24
|
+
const [type, subType, language] = mapKey.split('_');
|
|
25
|
+
const languageFilter = language === 'multiLanguage' ? "Language = 'Multi-Language'" : `Language = '${escapeSoql(language)}'`;
|
|
26
|
+
return (`IsIntegrationProcedure = ${isIP}` +
|
|
27
|
+
` AND Type = '${escapeSoql(type)}'` +
|
|
28
|
+
` AND SubType = '${escapeSoql(subType)}'` +
|
|
29
|
+
` AND ${languageFilter}` +
|
|
30
|
+
` AND VersionNumber IN (${versionsStr}) AND UniqueName = null`);
|
|
31
|
+
}
|
|
32
|
+
// ── Config-driven entity definitions (mirrors SpecialCharacterRecordRemover pattern) ─
|
|
33
|
+
const ENTITY_CONFIGS = [
|
|
34
|
+
{
|
|
35
|
+
configTable: stringContants_1.Constants.OmniScriptConfigTable,
|
|
36
|
+
entityName: stringContants_1.Constants.OmniScriptComponentName,
|
|
37
|
+
objectName: stringContants_1.Constants.OmniProcessObjectName,
|
|
38
|
+
selectFields: 'Type, SubType, Language, VersionNumber',
|
|
39
|
+
parseDeveloperName: parseOmniProcessDeveloperName,
|
|
40
|
+
buildSoqlWhere: (mapKey, versionsStr) => buildOmniProcessWhere(mapKey, versionsStr, false),
|
|
41
|
+
buildLabel: (r) => {
|
|
42
|
+
var _a, _b, _c, _d;
|
|
43
|
+
return `Type: ${(_a = r.Type) !== null && _a !== void 0 ? _a : ''}, SubType: ${(_b = r.SubType) !== null && _b !== void 0 ? _b : ''}, Language: ${(_c = r.Language) !== null && _c !== void 0 ? _c : ''}, Version: ${(_d = r.VersionNumber) !== null && _d !== void 0 ? _d : ''}`;
|
|
44
|
+
},
|
|
45
|
+
},
|
|
46
|
+
{
|
|
47
|
+
configTable: stringContants_1.Constants.OmniIntegrationProcConfigTable,
|
|
48
|
+
entityName: stringContants_1.Constants.IntegrationProcedureComponentName,
|
|
49
|
+
objectName: stringContants_1.Constants.OmniProcessObjectName,
|
|
50
|
+
selectFields: 'Type, SubType, Language, VersionNumber',
|
|
51
|
+
parseDeveloperName: parseOmniProcessDeveloperName,
|
|
52
|
+
buildSoqlWhere: (mapKey, versionsStr) => buildOmniProcessWhere(mapKey, versionsStr, true),
|
|
53
|
+
buildLabel: (r) => {
|
|
54
|
+
var _a, _b, _c, _d;
|
|
55
|
+
return `Type: ${(_a = r.Type) !== null && _a !== void 0 ? _a : ''}, SubType: ${(_b = r.SubType) !== null && _b !== void 0 ? _b : ''}, Language: ${(_c = r.Language) !== null && _c !== void 0 ? _c : ''}, Version: ${(_d = r.VersionNumber) !== null && _d !== void 0 ? _d : ''}`;
|
|
56
|
+
},
|
|
57
|
+
},
|
|
58
|
+
{
|
|
59
|
+
configTable: stringContants_1.Constants.OmniDataTransformConfigTable,
|
|
60
|
+
entityName: stringContants_1.Constants.DataMapperComponentName,
|
|
61
|
+
objectName: stringContants_1.Constants.OmniDataTransformObjectName,
|
|
62
|
+
selectFields: 'Name, VersionNumber',
|
|
63
|
+
parseDeveloperName: (developerName) => {
|
|
64
|
+
const lastUnderscore = developerName.lastIndexOf('_');
|
|
65
|
+
if (lastUnderscore <= 0 || lastUnderscore >= developerName.length - 1)
|
|
66
|
+
return null;
|
|
67
|
+
const version = parseFloat(developerName.substring(lastUnderscore + 1));
|
|
68
|
+
if (isNaN(version))
|
|
69
|
+
return null;
|
|
70
|
+
return { mapKey: developerName.substring(0, lastUnderscore), version };
|
|
71
|
+
},
|
|
72
|
+
buildSoqlWhere: (mapKey, versionsStr) => `Name = '${escapeSoql(mapKey)}' AND VersionNumber IN (${versionsStr}) AND UniqueName = null`,
|
|
73
|
+
buildLabel: (r) => { var _a, _b; return `Name: ${(_a = r.Name) !== null && _a !== void 0 ? _a : ''}, Version: ${(_b = r.VersionNumber) !== null && _b !== void 0 ? _b : ''}`; },
|
|
74
|
+
},
|
|
75
|
+
{
|
|
76
|
+
configTable: stringContants_1.Constants.OmniUiCardConfigTable,
|
|
77
|
+
entityName: stringContants_1.Constants.FlexCardComponentName,
|
|
78
|
+
objectName: stringContants_1.Constants.OmniUiCardObjectName,
|
|
79
|
+
selectFields: 'Name, AuthorName, VersionNumber',
|
|
80
|
+
parseDeveloperName: (developerName) => {
|
|
81
|
+
const parts = developerName.split('_');
|
|
82
|
+
if (parts.length < 3)
|
|
83
|
+
return null;
|
|
84
|
+
const version = parseFloat(parts[parts.length - 1]);
|
|
85
|
+
if (isNaN(version))
|
|
86
|
+
return null;
|
|
87
|
+
const authorName = parts[parts.length - 2];
|
|
88
|
+
const name = parts[0];
|
|
89
|
+
return { mapKey: `${name}_${authorName}`, version };
|
|
90
|
+
},
|
|
91
|
+
buildSoqlWhere: (mapKey, versionsStr) => {
|
|
92
|
+
const [name, authorName] = mapKey.split('_');
|
|
93
|
+
return (`Name = '${escapeSoql(name)}' AND AuthorName = '${escapeSoql(authorName)}'` +
|
|
94
|
+
` AND VersionNumber IN (${versionsStr}) AND UniqueName = null`);
|
|
95
|
+
},
|
|
96
|
+
buildLabel: (r) => { var _a, _b, _c; return `Name: ${(_a = r.Name) !== null && _a !== void 0 ? _a : ''}, AuthorName: ${(_b = r.AuthorName) !== null && _b !== void 0 ? _b : ''}, Version: ${(_c = r.VersionNumber) !== null && _c !== void 0 ? _c : ''}`; },
|
|
97
|
+
},
|
|
98
|
+
];
|
|
99
|
+
// ── Class ─────────────────────────────────────────────────────────────────────
|
|
100
|
+
class ExistingRecordCleanupService {
|
|
101
|
+
// ux is accepted for API consistency with the rest of the codebase but not used directly —
|
|
102
|
+
// createProgressBar renders to stdout independently of the Ux wrapper.
|
|
103
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
104
|
+
constructor(connection, messages, _ux) {
|
|
105
|
+
this.connection = connection;
|
|
106
|
+
this.messages = messages;
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* Returns all records that would be deactivated and deleted per entity, without making any changes.
|
|
110
|
+
* Keys are entity names (e.g. "OmniScript"). Values are the matching RecordRef objects.
|
|
111
|
+
*/
|
|
112
|
+
async assess() {
|
|
113
|
+
logger_1.Logger.log(this.messages.getMessage('assessNullUniqueNamePhaseStart'));
|
|
114
|
+
const result = new Map();
|
|
115
|
+
for (const config of ENTITY_CONFIGS) {
|
|
116
|
+
logger_1.Logger.log(this.messages.getMessage('assessScanningEntity', [config.entityName]));
|
|
117
|
+
try {
|
|
118
|
+
const records = await this.fetchMatchingRecords(config);
|
|
119
|
+
if (records.length > 0) {
|
|
120
|
+
logger_1.Logger.log(this.messages.getMessage('assessEntityFound', [records.length, config.entityName]));
|
|
121
|
+
}
|
|
122
|
+
else {
|
|
123
|
+
logger_1.Logger.log(this.messages.getMessage('assessEntityNone', [config.entityName]));
|
|
124
|
+
}
|
|
125
|
+
result.set(config.entityName, records);
|
|
126
|
+
}
|
|
127
|
+
catch (error) {
|
|
128
|
+
logger_1.Logger.error(this.messages.getMessage('errorAssessingNullUniqueNameRecords', [config.entityName, String(error)]));
|
|
129
|
+
result.set(config.entityName, []);
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
return result;
|
|
133
|
+
}
|
|
134
|
+
async cleanAll() {
|
|
135
|
+
logger_1.Logger.log(this.messages.getMessage('nullUniqueNameCleanupPhaseStart'));
|
|
136
|
+
for (const config of ENTITY_CONFIGS) {
|
|
137
|
+
logger_1.Logger.log(this.messages.getMessage('nullUniqueNameCleanupSectionStart', [config.entityName]));
|
|
138
|
+
try {
|
|
139
|
+
const records = await this.fetchMatchingRecords(config);
|
|
140
|
+
await this.deactivateAndDeleteRecords(config, records);
|
|
141
|
+
}
|
|
142
|
+
catch (error) {
|
|
143
|
+
logger_1.Logger.error(this.messages.getMessage('errorCleaningNullUniqueNameRecords', [config.entityName, String(error)]));
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
// ── Generic per-entity pipeline ──────────────────────────────────────────
|
|
148
|
+
async fetchMatchingRecords(config) {
|
|
149
|
+
const records = [];
|
|
150
|
+
let offset = 0;
|
|
151
|
+
let hasMore = true;
|
|
152
|
+
while (hasMore) {
|
|
153
|
+
const developerNames = await this.fetchConfigDeveloperNames(config.configTable, offset);
|
|
154
|
+
if (developerNames.length === 0)
|
|
155
|
+
break;
|
|
156
|
+
const versionMap = this.buildVersionMap(developerNames, config.parseDeveloperName);
|
|
157
|
+
if (versionMap.size > 0) {
|
|
158
|
+
const batch = await this.queryRecords(config, versionMap);
|
|
159
|
+
records.push(...batch);
|
|
160
|
+
}
|
|
161
|
+
offset += BATCH_SIZE;
|
|
162
|
+
if (developerNames.length < BATCH_SIZE)
|
|
163
|
+
hasMore = false;
|
|
164
|
+
}
|
|
165
|
+
return records;
|
|
166
|
+
}
|
|
167
|
+
async fetchConfigDeveloperNames(configTable, offset) {
|
|
168
|
+
const result = await this.connection.query(`SELECT DeveloperName FROM ${configTable} LIMIT ${BATCH_SIZE} OFFSET ${offset}`);
|
|
169
|
+
if (!(result === null || result === void 0 ? void 0 : result.records))
|
|
170
|
+
return [];
|
|
171
|
+
return result.records.map((r) => r.DeveloperName);
|
|
172
|
+
}
|
|
173
|
+
// Groups devNames into a Map<mapKey, Set<version>> using the entity-specific parser
|
|
174
|
+
buildVersionMap(developerNames, parseDeveloperName) {
|
|
175
|
+
var _a;
|
|
176
|
+
const versionMap = new Map();
|
|
177
|
+
for (const developerName of developerNames) {
|
|
178
|
+
const parsed = parseDeveloperName(developerName);
|
|
179
|
+
if (parsed) {
|
|
180
|
+
if (!versionMap.has(parsed.mapKey))
|
|
181
|
+
versionMap.set(parsed.mapKey, new Set());
|
|
182
|
+
(_a = versionMap.get(parsed.mapKey)) === null || _a === void 0 ? void 0 : _a.add(parsed.version);
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
return versionMap;
|
|
186
|
+
}
|
|
187
|
+
// Queries the main object for records with UniqueName = null matching all keys in a single
|
|
188
|
+
// batched query (OR conditions) instead of one query per key, to avoid hitting API governor limits.
|
|
189
|
+
// Each call receives at most BATCH_SIZE (50) keys so the OR clause stays well within SOQL limits.
|
|
190
|
+
async queryRecords(config, versionMap) {
|
|
191
|
+
if (versionMap.size === 0)
|
|
192
|
+
return [];
|
|
193
|
+
const conditions = Array.from(versionMap.entries()).map(([mapKey, versions]) => {
|
|
194
|
+
const versionsStr = Array.from(versions).join(', ');
|
|
195
|
+
return `(${config.buildSoqlWhere(mapKey, versionsStr)})`;
|
|
196
|
+
});
|
|
197
|
+
const soql = `SELECT Id, IsActive, ${config.selectFields} FROM ${config.objectName}` + ` WHERE ${conditions.join(' OR ')}`;
|
|
198
|
+
let result = await this.connection.query(soql);
|
|
199
|
+
if (!(result === null || result === void 0 ? void 0 : result.records))
|
|
200
|
+
return [];
|
|
201
|
+
const records = [...result.records];
|
|
202
|
+
while (result.nextRecordsUrl) {
|
|
203
|
+
result = await this.connection.queryMore(result.nextRecordsUrl);
|
|
204
|
+
if (!(result === null || result === void 0 ? void 0 : result.records))
|
|
205
|
+
break;
|
|
206
|
+
records.push(...result.records);
|
|
207
|
+
}
|
|
208
|
+
return records;
|
|
209
|
+
}
|
|
210
|
+
// ── Shared deactivate + delete ───────────────────────────────────────────
|
|
211
|
+
async deactivateAndDeleteRecords(config, records) {
|
|
212
|
+
var _a, _b;
|
|
213
|
+
if (records.length === 0) {
|
|
214
|
+
logger_1.Logger.log(this.messages.getMessage('noNullUniqueNameRecords', [config.entityName]));
|
|
215
|
+
return;
|
|
216
|
+
}
|
|
217
|
+
logger_1.Logger.log(this.messages.getMessage('foundNullUniqueNameRecords', [records.length, config.entityName]));
|
|
218
|
+
// Build label map once so both deactivation and deletion can report human-readable identifiers
|
|
219
|
+
const idToLabel = new Map(records.map((r) => [r.Id, config.buildLabel(r)]));
|
|
220
|
+
const activeIds = records.filter((r) => r.IsActive).map((r) => r.Id);
|
|
221
|
+
const failedDeactivateIds = new Set();
|
|
222
|
+
if (activeIds.length > 0) {
|
|
223
|
+
logger_1.Logger.log(this.messages.getMessage('deactivatingRecords', [activeIds.length, config.entityName]));
|
|
224
|
+
const deactivateBar = (0, base_1.createProgressBar)('Deactivating', config.entityName);
|
|
225
|
+
deactivateBar.start(activeIds.length, 0);
|
|
226
|
+
// Deactivate one at a time to avoid UNKNOWN_ERROR (matches existing migration pattern)
|
|
227
|
+
for (const id of activeIds) {
|
|
228
|
+
try {
|
|
229
|
+
await net_1.NetUtils.request(this.connection, `sobjects/${config.objectName}/${id}`, { IsActive: false }, net_1.RequestMethod.PATCH);
|
|
230
|
+
}
|
|
231
|
+
catch (error) {
|
|
232
|
+
const label = (_a = idToLabel.get(id)) !== null && _a !== void 0 ? _a : id;
|
|
233
|
+
logger_1.Logger.error(this.messages.getMessage('deactivationFailed', [config.entityName, label, String(error)]));
|
|
234
|
+
failedDeactivateIds.add(id);
|
|
235
|
+
}
|
|
236
|
+
deactivateBar.increment();
|
|
237
|
+
}
|
|
238
|
+
deactivateBar.stop();
|
|
239
|
+
logger_1.Logger.log(this.messages.getMessage('deactivatedRecords', [activeIds.length - failedDeactivateIds.size, config.entityName]));
|
|
240
|
+
await this.sleep();
|
|
241
|
+
}
|
|
242
|
+
const idsToDelete = records.map((r) => r.Id).filter((id) => !failedDeactivateIds.has(id));
|
|
243
|
+
logger_1.Logger.log(this.messages.getMessage('deletingRecords', [idsToDelete.length, config.entityName]));
|
|
244
|
+
const deleteBar = (0, base_1.createProgressBar)('Deleting', config.entityName);
|
|
245
|
+
deleteBar.start(idsToDelete.length, 0);
|
|
246
|
+
for (const id of idsToDelete) {
|
|
247
|
+
try {
|
|
248
|
+
await this.connection.sobject(config.objectName).delete(id);
|
|
249
|
+
}
|
|
250
|
+
catch (error) {
|
|
251
|
+
const label = (_b = idToLabel.get(id)) !== null && _b !== void 0 ? _b : id;
|
|
252
|
+
logger_1.Logger.error(this.messages.getMessage('deletionFailed', [config.entityName, label, String(error)]));
|
|
253
|
+
}
|
|
254
|
+
deleteBar.increment();
|
|
255
|
+
}
|
|
256
|
+
deleteBar.stop();
|
|
257
|
+
logger_1.Logger.log(this.messages.getMessage('deletedRecords', [idsToDelete.length, config.entityName]));
|
|
258
|
+
}
|
|
259
|
+
sleep() {
|
|
260
|
+
return new Promise((resolve) => {
|
|
261
|
+
setTimeout(resolve, 5000);
|
|
262
|
+
});
|
|
263
|
+
}
|
|
264
|
+
}
|
|
265
|
+
exports.ExistingRecordCleanupService = ExistingRecordCleanupService;
|
|
266
|
+
//# sourceMappingURL=ExistingRecordCleanupService.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ExistingRecordCleanupService.js","sourceRoot":"","sources":["../../../src/utils/config/ExistingRecordCleanupService.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { Connection, Messages } from '@salesforce/core';
|
|
2
|
+
/**
|
|
3
|
+
* OmniStudioMetadataCleanupService
|
|
4
|
+
*
|
|
5
|
+
* This service checks for records in four OmniStudio metadata tables and cleans them if found:
|
|
6
|
+
* - OmniUiCardConfig
|
|
7
|
+
* - OmniScriptConfig
|
|
8
|
+
* - OmniIntegrationProcConfig
|
|
9
|
+
* - OmniDataTransformConfig
|
|
10
|
+
*/
|
|
11
|
+
export declare class OmniStudioMetadataCleanupService {
|
|
12
|
+
private static readonly CONFIG_TABLES;
|
|
13
|
+
private static readonly FIELD_MAP;
|
|
14
|
+
private readonly connection;
|
|
15
|
+
private readonly messages;
|
|
16
|
+
constructor(connection: Connection, messages: Messages<string>);
|
|
17
|
+
/**
|
|
18
|
+
* Checks if all config tables are clean (have no records)
|
|
19
|
+
*
|
|
20
|
+
* @returns Promise<boolean> - true if all tables are empty, false if any table has records
|
|
21
|
+
*/
|
|
22
|
+
hasCleanOmniStudioMetadataTables(): Promise<boolean>;
|
|
23
|
+
/**
|
|
24
|
+
* Checks all config tables for records and cleans them if found
|
|
25
|
+
*
|
|
26
|
+
* @returns Promise<boolean> - true if cleanup was successful, false otherwise
|
|
27
|
+
*/
|
|
28
|
+
cleanupOmniStudioMetadataTables(): Promise<boolean>;
|
|
29
|
+
/**
|
|
30
|
+
* Checks a specific table for records and cleans them if found
|
|
31
|
+
*
|
|
32
|
+
* @param tableName - Name of the table to check and clean
|
|
33
|
+
* @returns Promise<{recordCount: number, statusCode?: string}> - recordCount: number of cleaned records (or -1 if failed), statusCode: optional error status code
|
|
34
|
+
*/
|
|
35
|
+
private cleanupOmniStudioMetadataTable;
|
|
36
|
+
}
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.OmniStudioMetadataCleanupService = void 0;
|
|
4
|
+
const logger_1 = require("../logger");
|
|
5
|
+
const query_1 = require("../query");
|
|
6
|
+
const net_1 = require("../net");
|
|
7
|
+
const stringUtils_1 = require("../stringUtils");
|
|
8
|
+
const dataModelService_1 = require("../dataModelService");
|
|
9
|
+
const stringContants_1 = require("../constants/stringContants");
|
|
10
|
+
/**
|
|
11
|
+
* OmniStudioMetadataCleanupService
|
|
12
|
+
*
|
|
13
|
+
* This service checks for records in four OmniStudio metadata tables and cleans them if found:
|
|
14
|
+
* - OmniUiCardConfig
|
|
15
|
+
* - OmniScriptConfig
|
|
16
|
+
* - OmniIntegrationProcConfig
|
|
17
|
+
* - OmniDataTransformConfig
|
|
18
|
+
*/
|
|
19
|
+
class OmniStudioMetadataCleanupService {
|
|
20
|
+
constructor(connection, messages) {
|
|
21
|
+
this.messages = messages;
|
|
22
|
+
this.connection = connection;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Checks if all config tables are clean (have no records)
|
|
26
|
+
*
|
|
27
|
+
* @returns Promise<boolean> - true if all tables are empty, false if any table has records
|
|
28
|
+
*/
|
|
29
|
+
async hasCleanOmniStudioMetadataTables() {
|
|
30
|
+
try {
|
|
31
|
+
for (const tableName of OmniStudioMetadataCleanupService.CONFIG_TABLES) {
|
|
32
|
+
const recordIds = await query_1.QueryTools.queryIds(this.connection, tableName);
|
|
33
|
+
if (recordIds.length > 0) {
|
|
34
|
+
return false;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
return true;
|
|
38
|
+
}
|
|
39
|
+
catch (error) {
|
|
40
|
+
logger_1.Logger.error(this.messages.getMessage('errorCheckingMetadataTables', [String(error)]));
|
|
41
|
+
return false;
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Checks all config tables for records and cleans them if found
|
|
46
|
+
*
|
|
47
|
+
* @returns Promise<boolean> - true if cleanup was successful, false otherwise
|
|
48
|
+
*/
|
|
49
|
+
async cleanupOmniStudioMetadataTables() {
|
|
50
|
+
try {
|
|
51
|
+
if ((0, dataModelService_1.isStandardDataModelWithMetadataAPIEnabled)()) {
|
|
52
|
+
// When on Standard data model with Metadata API enabled, the metadata tables should not be cleaned
|
|
53
|
+
return false;
|
|
54
|
+
}
|
|
55
|
+
logger_1.Logger.log(this.messages.getMessage('startingMetadataCleanup'));
|
|
56
|
+
let totalCleanedRecords = 0;
|
|
57
|
+
const failedTables = [];
|
|
58
|
+
const tablesWithFieldIntegrityExceptions = [];
|
|
59
|
+
const toDeactivate = [];
|
|
60
|
+
for (const tableName of OmniStudioMetadataCleanupService.CONFIG_TABLES) {
|
|
61
|
+
const result = await this.cleanupOmniStudioMetadataTable(tableName);
|
|
62
|
+
if (result.recordCount >= 0) {
|
|
63
|
+
totalCleanedRecords += result.recordCount;
|
|
64
|
+
}
|
|
65
|
+
else {
|
|
66
|
+
failedTables.push(tableName);
|
|
67
|
+
if (result.statusCode === 'FIELD_INTEGRITY_EXCEPTION') {
|
|
68
|
+
tablesWithFieldIntegrityExceptions.push(tableName);
|
|
69
|
+
toDeactivate.push(OmniStudioMetadataCleanupService.FIELD_MAP[tableName]);
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
if (tablesWithFieldIntegrityExceptions.length > 0) {
|
|
74
|
+
logger_1.Logger.error(this.messages.getMessage('fieldIntegrityExceptions', [
|
|
75
|
+
tablesWithFieldIntegrityExceptions.join(', '),
|
|
76
|
+
toDeactivate.join(', '),
|
|
77
|
+
]));
|
|
78
|
+
return false;
|
|
79
|
+
}
|
|
80
|
+
if (failedTables.length > 0) {
|
|
81
|
+
logger_1.Logger.error(this.messages.getMessage('failedToCleanTables', [failedTables.join(', ')]));
|
|
82
|
+
return false;
|
|
83
|
+
}
|
|
84
|
+
logger_1.Logger.log(this.messages.getMessage('metadataCleanupCompleted', [totalCleanedRecords]));
|
|
85
|
+
return true;
|
|
86
|
+
}
|
|
87
|
+
catch (error) {
|
|
88
|
+
logger_1.Logger.error(this.messages.getMessage('errorCheckingMetadataTables', [String(error)]));
|
|
89
|
+
return false;
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Checks a specific table for records and cleans them if found
|
|
94
|
+
*
|
|
95
|
+
* @param tableName - Name of the table to check and clean
|
|
96
|
+
* @returns Promise<{recordCount: number, statusCode?: string}> - recordCount: number of cleaned records (or -1 if failed), statusCode: optional error status code
|
|
97
|
+
*/
|
|
98
|
+
async cleanupOmniStudioMetadataTable(tableName) {
|
|
99
|
+
const recordIds = await query_1.QueryTools.queryIds(this.connection, tableName);
|
|
100
|
+
if (recordIds.length === 0) {
|
|
101
|
+
return { recordCount: 0 };
|
|
102
|
+
}
|
|
103
|
+
const deleteResult = await net_1.NetUtils.deleteWithFieldIntegrityException(this.connection, recordIds);
|
|
104
|
+
if (!deleteResult.success) {
|
|
105
|
+
return { recordCount: -1, statusCode: deleteResult.statusCode };
|
|
106
|
+
}
|
|
107
|
+
return { recordCount: recordIds.length };
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
exports.OmniStudioMetadataCleanupService = OmniStudioMetadataCleanupService;
|
|
111
|
+
OmniStudioMetadataCleanupService.CONFIG_TABLES = [
|
|
112
|
+
stringContants_1.Constants.OmniUiCardConfigTable,
|
|
113
|
+
stringContants_1.Constants.OmniScriptConfigTable,
|
|
114
|
+
stringContants_1.Constants.OmniIntegrationProcConfigTable,
|
|
115
|
+
stringContants_1.Constants.OmniDataTransformConfigTable,
|
|
116
|
+
];
|
|
117
|
+
OmniStudioMetadataCleanupService.FIELD_MAP = {
|
|
118
|
+
[stringContants_1.Constants.OmniUiCardConfigTable]: (0, stringUtils_1.getMigrationHeading)('Flexcard'),
|
|
119
|
+
[stringContants_1.Constants.OmniScriptConfigTable]: (0, stringUtils_1.getMigrationHeading)('OmniScript'),
|
|
120
|
+
[stringContants_1.Constants.OmniIntegrationProcConfigTable]: (0, stringUtils_1.getMigrationHeading)('Integration Procedure'),
|
|
121
|
+
[stringContants_1.Constants.OmniDataTransformConfigTable]: (0, stringUtils_1.getMigrationHeading)('Data Mapper'),
|
|
122
|
+
};
|
|
123
|
+
//# sourceMappingURL=OmniStudioMetadataCleanupService.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"OmniStudioMetadataCleanupService.js","sourceRoot":"","sources":["../../../src/utils/config/OmniStudioMetadataCleanupService.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { Connection, Messages } from '@salesforce/core';
|
|
2
|
+
import { Ux } from '@salesforce/sf-plugins-core';
|
|
3
|
+
export declare class SpecialCharacterRecordCleanupService {
|
|
4
|
+
private readonly connection;
|
|
5
|
+
private readonly messages;
|
|
6
|
+
constructor(connection: Connection, messages: Messages<string>, _ux: Ux);
|
|
7
|
+
/**
|
|
8
|
+
* Returns all records that would be deactivated and deleted per entity, without making any changes.
|
|
9
|
+
* Keys are entity names (e.g. "OmniScript"). Values are the raw records including all label fields.
|
|
10
|
+
*/
|
|
11
|
+
assess(): Promise<Map<string, Array<Record<string, unknown>>>>;
|
|
12
|
+
deactivateAndDelete(): Promise<void>;
|
|
13
|
+
private getRecordsWithSpecialCharacters;
|
|
14
|
+
private deactivateRecords;
|
|
15
|
+
private deleteRecords;
|
|
16
|
+
private sleep;
|
|
17
|
+
}
|