@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.
Files changed (252) hide show
  1. package/README.md +165 -73
  2. package/lib/commands/omnistudio/migration/assess.d.ts +23 -15
  3. package/lib/commands/omnistudio/migration/assess.js +250 -89
  4. package/lib/commands/omnistudio/migration/assess.js.map +1 -1
  5. package/lib/commands/omnistudio/migration/clean.d.ts +13 -0
  6. package/lib/commands/omnistudio/migration/clean.js +162 -0
  7. package/lib/commands/omnistudio/migration/clean.js.map +1 -0
  8. package/lib/commands/omnistudio/migration/info.d.ts +10 -16
  9. package/lib/commands/omnistudio/migration/info.js +53 -35
  10. package/lib/commands/omnistudio/migration/info.js.map +1 -1
  11. package/lib/commands/omnistudio/migration/migrate.d.ts +78 -18
  12. package/lib/commands/omnistudio/migration/migrate.js +461 -175
  13. package/lib/commands/omnistudio/migration/migrate.js.map +1 -1
  14. package/lib/error/deploymentErrors.d.ts +15 -0
  15. package/lib/error/deploymentErrors.js +35 -0
  16. package/lib/error/deploymentErrors.js.map +1 -0
  17. package/lib/error/errorInterfaces.d.ts +5 -0
  18. package/lib/error/errorInterfaces.js +9 -1
  19. package/lib/error/errorInterfaces.js.map +1 -1
  20. package/lib/javascripts/reportGeneratorUtility.js +585 -22
  21. package/lib/migration/ApexNamespaceRegistry.d.ts +49 -0
  22. package/lib/migration/ApexNamespaceRegistry.js +130 -0
  23. package/lib/migration/ApexNamespaceRegistry.js.map +1 -0
  24. package/lib/migration/CustomCssRegistry.d.ts +117 -0
  25. package/lib/migration/CustomCssRegistry.js +234 -0
  26. package/lib/migration/CustomCssRegistry.js.map +1 -0
  27. package/lib/migration/NameMappingRegistry.d.ts +134 -0
  28. package/lib/migration/NameMappingRegistry.js +411 -0
  29. package/lib/migration/NameMappingRegistry.js.map +1 -0
  30. package/lib/migration/base.d.ts +8 -6
  31. package/lib/migration/base.js +25 -8
  32. package/lib/migration/base.js.map +1 -1
  33. package/lib/migration/customLabels.d.ts +70 -0
  34. package/lib/migration/customLabels.js +177 -0
  35. package/lib/migration/customLabels.js.map +1 -0
  36. package/lib/migration/dataraptor.d.ts +13 -0
  37. package/lib/migration/dataraptor.js +205 -80
  38. package/lib/migration/dataraptor.js.map +1 -1
  39. package/lib/migration/deployer.d.ts +14 -0
  40. package/lib/migration/deployer.js +105 -0
  41. package/lib/migration/deployer.js.map +1 -0
  42. package/lib/migration/flexcard.d.ts +256 -6
  43. package/lib/migration/flexcard.js +1808 -268
  44. package/lib/migration/flexcard.js.map +1 -1
  45. package/lib/migration/globalautonumber.d.ts +8 -8
  46. package/lib/migration/globalautonumber.js +49 -24
  47. package/lib/migration/globalautonumber.js.map +1 -1
  48. package/lib/migration/interfaces.d.ts +14 -0
  49. package/lib/migration/interfaces.js.map +1 -1
  50. package/lib/migration/metadataobjnamecheck.js.map +1 -1
  51. package/lib/migration/omniscript.d.ts +218 -4
  52. package/lib/migration/omniscript.js +1709 -247
  53. package/lib/migration/omniscript.js.map +1 -1
  54. package/lib/migration/omniscriptInstance.d.ts +90 -0
  55. package/lib/migration/omniscriptInstance.js +755 -0
  56. package/lib/migration/omniscriptInstance.js.map +1 -0
  57. package/lib/migration/postMigrate.d.ts +20 -4
  58. package/lib/migration/postMigrate.js +199 -12
  59. package/lib/migration/postMigrate.js.map +1 -1
  60. package/lib/migration/premigrate.d.ts +51 -0
  61. package/lib/migration/premigrate.js +325 -0
  62. package/lib/migration/premigrate.js.map +1 -0
  63. package/lib/migration/related/ApexMigration.d.ts +3 -0
  64. package/lib/migration/related/ApexMigration.js +222 -56
  65. package/lib/migration/related/ApexMigration.js.map +1 -1
  66. package/lib/migration/related/ExperienceSiteMigration.d.ts +30 -5
  67. package/lib/migration/related/ExperienceSiteMigration.js +263 -73
  68. package/lib/migration/related/ExperienceSiteMigration.js.map +1 -1
  69. package/lib/migration/related/FlexipageMigration.d.ts +5 -5
  70. package/lib/migration/related/FlexipageMigration.js +60 -38
  71. package/lib/migration/related/FlexipageMigration.js.map +1 -1
  72. package/lib/migration/related/LwcMigration.js +45 -26
  73. package/lib/migration/related/LwcMigration.js.map +1 -1
  74. package/lib/migration/related/OmnistudioRelatedObjectMigrationFacade.js +48 -32
  75. package/lib/migration/related/OmnistudioRelatedObjectMigrationFacade.js.map +1 -1
  76. package/lib/styles/reportGenerator.css +241 -16
  77. package/lib/templates/assessmentReport.template +78 -8
  78. package/lib/templates/dashboard.template +86 -57
  79. package/lib/templates/migrationReport.template +151 -0
  80. package/lib/utils/OmnistudioSettingsPrefManager.d.ts +14 -0
  81. package/lib/utils/OmnistudioSettingsPrefManager.js +112 -0
  82. package/lib/utils/OmnistudioSettingsPrefManager.js.map +1 -0
  83. package/lib/utils/XMLUtil.js +2 -1
  84. package/lib/utils/XMLUtil.js.map +1 -1
  85. package/lib/utils/apex/executor/AnonymousApexRunner.d.ts +1 -1
  86. package/lib/utils/apex/parser/apexparser.d.ts +8 -1
  87. package/lib/utils/apex/parser/apexparser.js +79 -13
  88. package/lib/utils/apex/parser/apexparser.js.map +1 -1
  89. package/lib/utils/config/ExistingRecordCleanupService.d.ts +30 -0
  90. package/lib/utils/config/ExistingRecordCleanupService.js +266 -0
  91. package/lib/utils/config/ExistingRecordCleanupService.js.map +1 -0
  92. package/lib/utils/config/OmniStudioMetadataCleanupService.d.ts +36 -0
  93. package/lib/utils/config/OmniStudioMetadataCleanupService.js +123 -0
  94. package/lib/utils/config/OmniStudioMetadataCleanupService.js.map +1 -0
  95. package/lib/utils/config/SpecialCharacterRecordCleanupService.d.ts +17 -0
  96. package/lib/utils/config/SpecialCharacterRecordCleanupService.js +186 -0
  97. package/lib/utils/config/SpecialCharacterRecordCleanupService.js.map +1 -0
  98. package/lib/utils/constants/documentRegistry.d.ts +9 -17
  99. package/lib/utils/constants/documentRegistry.js +9 -17
  100. package/lib/utils/constants/documentRegistry.js.map +1 -1
  101. package/lib/utils/constants/stringContants.d.ts +78 -0
  102. package/lib/utils/constants/stringContants.js +91 -4
  103. package/lib/utils/constants/stringContants.js.map +1 -1
  104. package/lib/utils/customLabels.d.ts +35 -0
  105. package/lib/utils/customLabels.js +100 -0
  106. package/lib/utils/customLabels.js.map +1 -0
  107. package/lib/utils/dataModelService.d.ts +18 -0
  108. package/lib/utils/dataModelService.js +72 -0
  109. package/lib/utils/dataModelService.js.map +1 -0
  110. package/lib/utils/file/fileUtil.d.ts +3 -1
  111. package/lib/utils/file/fileUtil.js +30 -13
  112. package/lib/utils/file/fileUtil.js.map +1 -1
  113. package/lib/utils/flexipage/flexiPageTransformer.js +119 -23
  114. package/lib/utils/flexipage/flexiPageTransformer.js.map +1 -1
  115. package/lib/utils/formula/FormulaUtil.d.ts +1 -1
  116. package/lib/utils/formula/FormulaUtil.js +17 -9
  117. package/lib/utils/formula/FormulaUtil.js.map +1 -1
  118. package/lib/utils/formula/Stack.js.map +1 -1
  119. package/lib/utils/generatePackageXml.d.ts +6 -2
  120. package/lib/utils/generatePackageXml.js +73 -33
  121. package/lib/utils/generatePackageXml.js.map +1 -1
  122. package/lib/utils/index.d.ts +1 -0
  123. package/lib/utils/index.js +1 -0
  124. package/lib/utils/index.js.map +1 -1
  125. package/lib/utils/interfaces.d.ts +69 -8
  126. package/lib/utils/json/jsonutil.js.map +1 -1
  127. package/lib/utils/logger/fileLogger.js +17 -7
  128. package/lib/utils/logger/fileLogger.js.map +1 -1
  129. package/lib/utils/logger.d.ts +3 -3
  130. package/lib/utils/logger.js +10 -6
  131. package/lib/utils/logger.js.map +1 -1
  132. package/lib/utils/logging/debugtimer.js.map +1 -1
  133. package/lib/utils/lwcparser/fileutils/FileDiffUtil.js +30 -22
  134. package/lib/utils/lwcparser/fileutils/FileDiffUtil.js.map +1 -1
  135. package/lib/utils/lwcparser/fileutils/FileProcessorFactory.js.map +1 -1
  136. package/lib/utils/lwcparser/fileutils/HtmlFileProcessor.js.map +1 -1
  137. package/lib/utils/lwcparser/fileutils/JavascriptFileProcessor.js.map +1 -1
  138. package/lib/utils/lwcparser/fileutils/XmlFileProcessor.js.map +1 -1
  139. package/lib/utils/lwcparser/htmlParser/HTMLParser.js +29 -10
  140. package/lib/utils/lwcparser/htmlParser/HTMLParser.js.map +1 -1
  141. package/lib/utils/lwcparser/jsParser/JavaScriptParser.js +29 -11
  142. package/lib/utils/lwcparser/jsParser/JavaScriptParser.js.map +1 -1
  143. package/lib/utils/lwcparser/xmlParser/XmlParser.js +19 -8
  144. package/lib/utils/lwcparser/xmlParser/XmlParser.js.map +1 -1
  145. package/lib/utils/net/index.d.ts +5 -0
  146. package/lib/utils/net/index.js +40 -2
  147. package/lib/utils/net/index.js.map +1 -1
  148. package/lib/utils/omniscriptPackageManager.d.ts +31 -0
  149. package/lib/utils/omniscriptPackageManager.js +215 -0
  150. package/lib/utils/omniscriptPackageManager.js.map +1 -0
  151. package/lib/utils/orgPreferences.d.ts +25 -0
  152. package/lib/utils/orgPreferences.js +124 -8
  153. package/lib/utils/orgPreferences.js.map +1 -1
  154. package/lib/utils/orgUtils/index.d.ts +12 -5
  155. package/lib/utils/orgUtils/index.js +52 -22
  156. package/lib/utils/orgUtils/index.js.map +1 -1
  157. package/lib/utils/projectPathUtil.d.ts +1 -1
  158. package/lib/utils/projectPathUtil.js +27 -10
  159. package/lib/utils/projectPathUtil.js.map +1 -1
  160. package/lib/utils/promptUtil.d.ts +11 -1
  161. package/lib/utils/promptUtil.js +92 -0
  162. package/lib/utils/promptUtil.js.map +1 -1
  163. package/lib/utils/query/index.d.ts +1 -0
  164. package/lib/utils/query/index.js +18 -1
  165. package/lib/utils/query/index.js.map +1 -1
  166. package/lib/utils/recordPrioritization.d.ts +44 -0
  167. package/lib/utils/recordPrioritization.js +69 -0
  168. package/lib/utils/recordPrioritization.js.map +1 -0
  169. package/lib/utils/reportGenerator/reportInterfaces.d.ts +12 -0
  170. package/lib/utils/reportGenerator/reportUtil.d.ts +6 -1
  171. package/lib/utils/reportGenerator/reportUtil.js +22 -7
  172. package/lib/utils/reportGenerator/reportUtil.js.map +1 -1
  173. package/lib/utils/resultsbuilder/ApexAssessmentReporter.d.ts +1 -0
  174. package/lib/utils/resultsbuilder/ApexAssessmentReporter.js +40 -17
  175. package/lib/utils/resultsbuilder/ApexAssessmentReporter.js.map +1 -1
  176. package/lib/utils/resultsbuilder/CustomLabelAssessmentReporter.d.ts +13 -0
  177. package/lib/utils/resultsbuilder/CustomLabelAssessmentReporter.js +179 -0
  178. package/lib/utils/resultsbuilder/CustomLabelAssessmentReporter.js.map +1 -0
  179. package/lib/utils/resultsbuilder/CustomLabelMigrationReporter.d.ts +27 -0
  180. package/lib/utils/resultsbuilder/CustomLabelMigrationReporter.js +262 -0
  181. package/lib/utils/resultsbuilder/CustomLabelMigrationReporter.js.map +1 -0
  182. package/lib/utils/resultsbuilder/DRAssessmentReporter.js +38 -70
  183. package/lib/utils/resultsbuilder/DRAssessmentReporter.js.map +1 -1
  184. package/lib/utils/resultsbuilder/ExperienceSiteAssessmentReporter.d.ts +14 -0
  185. package/lib/utils/resultsbuilder/ExperienceSiteAssessmentReporter.js +143 -0
  186. package/lib/utils/resultsbuilder/ExperienceSiteAssessmentReporter.js.map +1 -0
  187. package/lib/utils/resultsbuilder/FlexcardAssessmentReporter.js +46 -85
  188. package/lib/utils/resultsbuilder/FlexcardAssessmentReporter.js.map +1 -1
  189. package/lib/utils/resultsbuilder/FlexipageAssessmentReporter.d.ts +1 -0
  190. package/lib/utils/resultsbuilder/FlexipageAssessmentReporter.js +37 -19
  191. package/lib/utils/resultsbuilder/FlexipageAssessmentReporter.js.map +1 -1
  192. package/lib/utils/resultsbuilder/GlobalAutoNumberAssessmentReporter.js +22 -14
  193. package/lib/utils/resultsbuilder/GlobalAutoNumberAssessmentReporter.js.map +1 -1
  194. package/lib/utils/resultsbuilder/IPAssessmentReporter.js +38 -71
  195. package/lib/utils/resultsbuilder/IPAssessmentReporter.js.map +1 -1
  196. package/lib/utils/resultsbuilder/LWCAssessmentReporter.d.ts +14 -0
  197. package/lib/utils/resultsbuilder/LWCAssessmentReporter.js +143 -139
  198. package/lib/utils/resultsbuilder/LWCAssessmentReporter.js.map +1 -1
  199. package/lib/utils/resultsbuilder/OSAssessmentReporter.js +41 -88
  200. package/lib/utils/resultsbuilder/OSAssessmentReporter.js.map +1 -1
  201. package/lib/utils/resultsbuilder/SaveForLaterAssessmentReporter.d.ts +12 -0
  202. package/lib/utils/resultsbuilder/SaveForLaterAssessmentReporter.js +109 -0
  203. package/lib/utils/resultsbuilder/SaveForLaterAssessmentReporter.js.map +1 -0
  204. package/lib/utils/resultsbuilder/assessmentReporter.d.ts +16 -6
  205. package/lib/utils/resultsbuilder/assessmentReporter.js +96 -152
  206. package/lib/utils/resultsbuilder/assessmentReporter.js.map +1 -1
  207. package/lib/utils/resultsbuilder/helpers/AssessmentReportHelper.d.ts +104 -0
  208. package/lib/utils/resultsbuilder/helpers/AssessmentReportHelper.js +380 -0
  209. package/lib/utils/resultsbuilder/helpers/AssessmentReportHelper.js.map +1 -0
  210. package/lib/utils/resultsbuilder/index.d.ts +37 -1
  211. package/lib/utils/resultsbuilder/index.js +582 -151
  212. package/lib/utils/resultsbuilder/index.js.map +1 -1
  213. package/lib/utils/resultsbuilder/reportingHelper.d.ts +2 -7
  214. package/lib/utils/resultsbuilder/reportingHelper.js +0 -43
  215. package/lib/utils/resultsbuilder/reportingHelper.js.map +1 -1
  216. package/lib/utils/sfcli/project/sfProject.d.ts +29 -0
  217. package/lib/utils/sfcli/project/sfProject.js +220 -2
  218. package/lib/utils/sfcli/project/sfProject.js.map +1 -1
  219. package/lib/utils/shell/cli.js +20 -14
  220. package/lib/utils/shell/cli.js.map +1 -1
  221. package/lib/utils/storageUtil.d.ts +14 -1
  222. package/lib/utils/storageUtil.js +31 -1
  223. package/lib/utils/storageUtil.js.map +1 -1
  224. package/lib/utils/stringUtils.d.ts +24 -0
  225. package/lib/utils/stringUtils.js +76 -9
  226. package/lib/utils/stringUtils.js.map +1 -1
  227. package/lib/utils/templateParser/__tests__/test.js +1 -2
  228. package/lib/utils/templateParser/__tests__/test.js.map +1 -1
  229. package/lib/utils/templateParser/generate.d.ts +1 -1
  230. package/lib/utils/templateParser/generate.js.map +1 -1
  231. package/lib/utils/templateParser/model/elementNode.d.ts +2 -2
  232. package/lib/utils/templateParser/model/elementNode.js +11 -2
  233. package/lib/utils/templateParser/model/elementNode.js.map +1 -1
  234. package/lib/utils/templateParser/model/nodeTypes.js +1 -1
  235. package/lib/utils/templateParser/model/nodeTypes.js.map +1 -1
  236. package/lib/utils/templateParser/util.d.ts +2 -2
  237. package/lib/utils/templateParser/util.js.map +1 -1
  238. package/lib/utils/validatorService.d.ts +14 -0
  239. package/lib/utils/validatorService.js +136 -0
  240. package/lib/utils/validatorService.js.map +1 -0
  241. package/messages/assess.json +220 -103
  242. package/messages/clean.json +40 -0
  243. package/messages/info.json +2 -1
  244. package/messages/migrate.json +314 -102
  245. package/oclif.manifest.json +1 -1
  246. package/package.json +49 -13
  247. package/lib/commands/basecommand.d.ts +0 -8
  248. package/lib/commands/basecommand.js +0 -13
  249. package/lib/commands/basecommand.js.map +0 -1
  250. package/lib/utils/OmniGlobalAutoNumberPrefManager.d.ts +0 -40
  251. package/lib/utils/OmniGlobalAutoNumberPrefManager.js +0 -65
  252. 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":";;;AAGA,sCAAmC;AACnC,gCAAiD;AACjD,gEAAwD;AACxD,+CAAyD;AAEzD,MAAM,UAAU,GAAG,EAAE,CAAC;AAiCtB,iFAAiF;AAEjF,SAAS,UAAU,CAAC,KAAa;IAC/B,OAAO,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;AACpC,CAAC;AAED,oFAAoF;AACpF,SAAS,6BAA6B,CAAC,aAAqB;IAC1D,MAAM,KAAK,GAAG,aAAa,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACvC,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC;QAAE,OAAO,IAAI,CAAC;IAClC,MAAM,OAAO,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IACrC,IAAI,KAAK,CAAC,OAAO,CAAC;QAAE,OAAO,IAAI,CAAC;IAChC,OAAO,EAAE,MAAM,EAAE,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,OAAO,EAAE,CAAC;AACpE,CAAC;AAED,SAAS,qBAAqB,CAAC,MAAc,EAAE,WAAmB,EAAE,IAAa;IAC/E,MAAM,CAAC,IAAI,EAAE,OAAO,EAAE,QAAQ,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACpD,MAAM,cAAc,GAClB,QAAQ,KAAK,eAAe,CAAC,CAAC,CAAC,6BAA6B,CAAC,CAAC,CAAC,eAAe,UAAU,CAAC,QAAQ,CAAC,GAAG,CAAC;IACxG,OAAO,CACL,4BAA4B,IAAI,EAAE;QAClC,gBAAgB,UAAU,CAAC,IAAI,CAAC,GAAG;QACnC,mBAAmB,UAAU,CAAC,OAAO,CAAC,GAAG;QACzC,QAAQ,cAAc,EAAE;QACxB,0BAA0B,WAAW,yBAAyB,CAC/D,CAAC;AACJ,CAAC;AAED,wFAAwF;AAExF,MAAM,cAAc,GAAmB;IACrC;QACE,WAAW,EAAE,0BAAS,CAAC,qBAAqB;QAC5C,UAAU,EAAE,0BAAS,CAAC,uBAAuB;QAC7C,UAAU,EAAE,0BAAS,CAAC,qBAAqB;QAC3C,YAAY,EAAE,wCAAwC;QACtD,kBAAkB,EAAE,6BAA6B;QACjD,cAAc,EAAE,CAAC,MAAM,EAAE,WAAW,EAAU,EAAE,CAAC,qBAAqB,CAAC,MAAM,EAAE,WAAW,EAAE,KAAK,CAAC;QAClG,UAAU,EAAE,CAAC,CAAC,EAAU,EAAE;;YACxB,OAAA,SAAS,MAAA,CAAC,CAAC,IAAI,mCAAI,EAAE,cAAc,MAAA,CAAC,CAAC,OAAO,mCAAI,EAAE,eAAe,MAAA,CAAC,CAAC,QAAQ,mCAAI,EAAE,cAC/E,MAAA,CAAC,CAAC,aAAa,mCAAI,EACrB,EAAE,CAAA;SAAA;KACL;IACD;QACE,WAAW,EAAE,0BAAS,CAAC,8BAA8B;QACrD,UAAU,EAAE,0BAAS,CAAC,iCAAiC;QACvD,UAAU,EAAE,0BAAS,CAAC,qBAAqB;QAC3C,YAAY,EAAE,wCAAwC;QACtD,kBAAkB,EAAE,6BAA6B;QACjD,cAAc,EAAE,CAAC,MAAM,EAAE,WAAW,EAAU,EAAE,CAAC,qBAAqB,CAAC,MAAM,EAAE,WAAW,EAAE,IAAI,CAAC;QACjG,UAAU,EAAE,CAAC,CAAC,EAAU,EAAE;;YACxB,OAAA,SAAS,MAAA,CAAC,CAAC,IAAI,mCAAI,EAAE,cAAc,MAAA,CAAC,CAAC,OAAO,mCAAI,EAAE,eAAe,MAAA,CAAC,CAAC,QAAQ,mCAAI,EAAE,cAC/E,MAAA,CAAC,CAAC,aAAa,mCAAI,EACrB,EAAE,CAAA;SAAA;KACL;IACD;QACE,WAAW,EAAE,0BAAS,CAAC,4BAA4B;QACnD,UAAU,EAAE,0BAAS,CAAC,uBAAuB;QAC7C,UAAU,EAAE,0BAAS,CAAC,2BAA2B;QACjD,YAAY,EAAE,qBAAqB;QACnC,kBAAkB,EAAE,CAAC,aAAa,EAA8C,EAAE;YAChF,MAAM,cAAc,GAAG,aAAa,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;YACtD,IAAI,cAAc,IAAI,CAAC,IAAI,cAAc,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC;gBAAE,OAAO,IAAI,CAAC;YACnF,MAAM,OAAO,GAAG,UAAU,CAAC,aAAa,CAAC,SAAS,CAAC,cAAc,GAAG,CAAC,CAAC,CAAC,CAAC;YACxE,IAAI,KAAK,CAAC,OAAO,CAAC;gBAAE,OAAO,IAAI,CAAC;YAChC,OAAO,EAAE,MAAM,EAAE,aAAa,CAAC,SAAS,CAAC,CAAC,EAAE,cAAc,CAAC,EAAE,OAAO,EAAE,CAAC;QACzE,CAAC;QACD,cAAc,EAAE,CAAC,MAAM,EAAE,WAAW,EAAU,EAAE,CAC9C,WAAW,UAAU,CAAC,MAAM,CAAC,2BAA2B,WAAW,yBAAyB;QAC9F,UAAU,EAAE,CAAC,CAAC,EAAU,EAAE,eAAC,OAAA,SAAS,MAAA,CAAC,CAAC,IAAI,mCAAI,EAAE,cAAc,MAAA,CAAC,CAAC,aAAa,mCAAI,EAAE,EAAE,CAAA,EAAA;KACtF;IACD;QACE,WAAW,EAAE,0BAAS,CAAC,qBAAqB;QAC5C,UAAU,EAAE,0BAAS,CAAC,qBAAqB;QAC3C,UAAU,EAAE,0BAAS,CAAC,oBAAoB;QAC1C,YAAY,EAAE,iCAAiC;QAC/C,kBAAkB,EAAE,CAAC,aAAa,EAA8C,EAAE;YAChF,MAAM,KAAK,GAAG,aAAa,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YACvC,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC;gBAAE,OAAO,IAAI,CAAC;YAClC,MAAM,OAAO,GAAG,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;YACpD,IAAI,KAAK,CAAC,OAAO,CAAC;gBAAE,OAAO,IAAI,CAAC;YAChC,MAAM,UAAU,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;YAC3C,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;YACtB,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,IAAI,UAAU,EAAE,EAAE,OAAO,EAAE,CAAC;QACtD,CAAC;QACD,cAAc,EAAE,CAAC,MAAM,EAAE,WAAW,EAAU,EAAE;YAC9C,MAAM,CAAC,IAAI,EAAE,UAAU,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YAC7C,OAAO,CACL,WAAW,UAAU,CAAC,IAAI,CAAC,uBAAuB,UAAU,CAAC,UAAU,CAAC,GAAG;gBAC3E,0BAA0B,WAAW,yBAAyB,CAC/D,CAAC;QACJ,CAAC;QACD,UAAU,EAAE,CAAC,CAAC,EAAU,EAAE,mBACxB,OAAA,SAAS,MAAA,CAAC,CAAC,IAAI,mCAAI,EAAE,iBAAiB,MAAA,CAAC,CAAC,UAAU,mCAAI,EAAE,cAAc,MAAA,CAAC,CAAC,aAAa,mCAAI,EAAE,EAAE,CAAA,EAAA;KAChG;CACF,CAAC;AAEF,iFAAiF;AAEjF,MAAa,4BAA4B;IAIvC,2FAA2F;IAC3F,uEAAuE;IACvE,6DAA6D;IAC7D,YAAmB,UAAsB,EAAE,QAA0B,EAAE,GAAO;QAC5E,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;QAC7B,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAC3B,CAAC;IAED;;;OAGG;IACI,KAAK,CAAC,MAAM;QACjB,eAAM,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,gCAAgC,CAAC,CAAC,CAAC;QACvE,MAAM,MAAM,GAAG,IAAI,GAAG,EAAuB,CAAC;QAC9C,KAAK,MAAM,MAAM,IAAI,cAAc,EAAE,CAAC;YACpC,eAAM,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,sBAAsB,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;YAClF,IAAI,CAAC;gBACH,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC;gBACxD,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBACvB,eAAM,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,mBAAmB,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;gBACjG,CAAC;qBAAM,CAAC;oBACN,eAAM,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,kBAAkB,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;gBAChF,CAAC;gBACD,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;YACzC,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,eAAM,CAAC,KAAK,CACV,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,qCAAqC,EAAE,CAAC,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CACpG,CAAC;gBACF,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;YACpC,CAAC;QACH,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IAEM,KAAK,CAAC,QAAQ;QACnB,eAAM,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,iCAAiC,CAAC,CAAC,CAAC;QACxE,KAAK,MAAM,MAAM,IAAI,cAAc,EAAE,CAAC;YACpC,eAAM,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,mCAAmC,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;YAC/F,IAAI,CAAC;gBACH,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC;gBACxD,MAAM,IAAI,CAAC,0BAA0B,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;YACzD,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,eAAM,CAAC,KAAK,CACV,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,oCAAoC,EAAE,CAAC,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CACnG,CAAC;YACJ,CAAC;QACH,CAAC;IACH,CAAC;IAED,4EAA4E;IAEpE,KAAK,CAAC,oBAAoB,CAAC,MAAoB;QACrD,MAAM,OAAO,GAAgB,EAAE,CAAC;QAChC,IAAI,MAAM,GAAG,CAAC,CAAC;QACf,IAAI,OAAO,GAAG,IAAI,CAAC;QACnB,OAAO,OAAO,EAAE,CAAC;YACf,MAAM,cAAc,GAAG,MAAM,IAAI,CAAC,yBAAyB,CAAC,MAAM,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;YACxF,IAAI,cAAc,CAAC,MAAM,KAAK,CAAC;gBAAE,MAAM;YAEvC,MAAM,UAAU,GAAG,IAAI,CAAC,eAAe,CAAC,cAAc,EAAE,MAAM,CAAC,kBAAkB,CAAC,CAAC;YACnF,IAAI,UAAU,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC;gBACxB,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;gBAC1D,OAAO,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,CAAC;YACzB,CAAC;YAED,MAAM,IAAI,UAAU,CAAC;YACrB,IAAI,cAAc,CAAC,MAAM,GAAG,UAAU;gBAAE,OAAO,GAAG,KAAK,CAAC;QAC1D,CAAC;QACD,OAAO,OAAO,CAAC;IACjB,CAAC;IAEO,KAAK,CAAC,yBAAyB,CAAC,WAAmB,EAAE,MAAc;QACzE,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,KAAK,CACxC,6BAA6B,WAAW,UAAU,UAAU,WAAW,MAAM,EAAE,CAChF,CAAC;QACF,IAAI,CAAC,CAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,OAAO,CAAA;YAAE,OAAO,EAAE,CAAC;QAChC,OAAO,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC;IACpD,CAAC;IAED,oFAAoF;IAC5E,eAAe,CACrB,cAAwB,EACxB,kBAAsD;;QAEtD,MAAM,UAAU,GAAG,IAAI,GAAG,EAAuB,CAAC;QAClD,KAAK,MAAM,aAAa,IAAI,cAAc,EAAE,CAAC;YAC3C,MAAM,MAAM,GAAG,kBAAkB,CAAC,aAAa,CAAC,CAAC;YACjD,IAAI,MAAM,EAAE,CAAC;gBACX,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC;oBAAE,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,GAAG,EAAE,CAAC,CAAC;gBAC7E,MAAA,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,0CAAE,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;YACrD,CAAC;QACH,CAAC;QACD,OAAO,UAAU,CAAC;IACpB,CAAC;IAED,2FAA2F;IAC3F,oGAAoG;IACpG,kGAAkG;IAC1F,KAAK,CAAC,YAAY,CAAC,MAAoB,EAAE,UAAoC;QACnF,IAAI,UAAU,CAAC,IAAI,KAAK,CAAC;YAAE,OAAO,EAAE,CAAC;QAErC,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,EAAE,QAAQ,CAAC,EAAE,EAAE;YAC7E,MAAM,WAAW,GAAG,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACpD,OAAO,IAAI,MAAM,CAAC,cAAc,CAAC,MAAM,EAAE,WAAW,CAAC,GAAG,CAAC;QAC3D,CAAC,CAAC,CAAC;QAEH,MAAM,IAAI,GACR,wBAAwB,MAAM,CAAC,YAAY,SAAS,MAAM,CAAC,UAAU,EAAE,GAAG,UAAU,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;QAEhH,IAAI,MAAM,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,KAAK,CAAY,IAAI,CAAC,CAAC;QAC1D,IAAI,CAAC,CAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,OAAO,CAAA;YAAE,OAAO,EAAE,CAAC;QAChC,MAAM,OAAO,GAAG,CAAC,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC;QAEpC,OAAO,MAAM,CAAC,cAAc,EAAE,CAAC;YAC7B,MAAM,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,SAAS,CAAY,MAAM,CAAC,cAAc,CAAC,CAAC;YAC3E,IAAI,CAAC,CAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,OAAO,CAAA;gBAAE,MAAM;YAC5B,OAAO,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC;QAClC,CAAC;QACD,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,4EAA4E;IAEpE,KAAK,CAAC,0BAA0B,CAAC,MAAoB,EAAE,OAAoB;;QACjF,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACzB,eAAM,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,yBAAyB,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;YACrF,OAAO;QACT,CAAC;QAED,eAAM,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,4BAA4B,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;QAExG,+FAA+F;QAC/F,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAE5E,MAAM,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QACrE,MAAM,mBAAmB,GAAG,IAAI,GAAG,EAAU,CAAC;QAE9C,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACzB,eAAM,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,qBAAqB,EAAE,CAAC,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;YAEnG,MAAM,aAAa,GAAG,IAAA,wBAAiB,EAAC,cAAc,EAAE,MAAM,CAAC,UAAiB,CAAC,CAAC;YAClF,aAAa,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;YAEzC,uFAAuF;YACvF,KAAK,MAAM,EAAE,IAAI,SAAS,EAAE,CAAC;gBAC3B,IAAI,CAAC;oBACH,MAAM,cAAQ,CAAC,OAAO,CACpB,IAAI,CAAC,UAAU,EACf,YAAY,MAAM,CAAC,UAAU,IAAI,EAAE,EAAE,EACrC,EAAE,QAAQ,EAAE,KAAK,EAAE,EACnB,mBAAa,CAAC,KAAK,CACpB,CAAC;gBACJ,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACf,MAAM,KAAK,GAAG,MAAA,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC,mCAAI,EAAE,CAAC;oBACtC,eAAM,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,oBAAoB,EAAE,CAAC,MAAM,CAAC,UAAU,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;oBACxG,mBAAmB,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;gBAC9B,CAAC;gBACD,aAAa,CAAC,SAAS,EAAE,CAAC;YAC5B,CAAC;YACD,aAAa,CAAC,IAAI,EAAE,CAAC;YAErB,eAAM,CAAC,GAAG,CACR,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,oBAAoB,EAAE,CAAC,SAAS,CAAC,MAAM,GAAG,mBAAmB,CAAC,IAAI,EAAE,MAAM,CAAC,UAAU,CAAC,CAAC,CACjH,CAAC;YACF,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC;QACrB,CAAC;QAED,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,mBAAmB,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;QAE1F,eAAM,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,iBAAiB,EAAE,CAAC,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;QAEjG,MAAM,SAAS,GAAG,IAAA,wBAAiB,EAAC,UAAU,EAAE,MAAM,CAAC,UAAiB,CAAC,CAAC;QAC1E,SAAS,CAAC,KAAK,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QAEvC,KAAK,MAAM,EAAE,IAAI,WAAW,EAAE,CAAC;YAC7B,IAAI,CAAC;gBACH,MAAM,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;YAC9D,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,MAAM,KAAK,GAAG,MAAA,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC,mCAAI,EAAE,CAAC;gBACtC,eAAM,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,gBAAgB,EAAE,CAAC,MAAM,CAAC,UAAU,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;YACtG,CAAC;YACD,SAAS,CAAC,SAAS,EAAE,CAAC;QACxB,CAAC;QACD,SAAS,CAAC,IAAI,EAAE,CAAC;QAEjB,eAAM,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,gBAAgB,EAAE,CAAC,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;IAClG,CAAC;IAEO,KAAK;QACX,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;YAC7B,UAAU,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;QAC5B,CAAC,CAAC,CAAC;IACL,CAAC;CACF;AAtMD,oEAsMC"}
@@ -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
+ }