@acquis-consulting/asm 1.0.5

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 (203) hide show
  1. package/README.md +0 -0
  2. package/dist/apps/gitDiffReview/gitDiffParser.d.ts +6 -0
  3. package/dist/apps/gitDiffReview/gitDiffParser.js +1 -0
  4. package/dist/apps/gitDiffReview/packageXml.d.ts +8 -0
  5. package/dist/apps/gitDiffReview/packageXml.js +1 -0
  6. package/dist/apps/gitDiffReview/tools.d.ts +42 -0
  7. package/dist/apps/gitDiffReview/tools.js +1 -0
  8. package/dist/apps/gitDiffReview/types.d.ts +19 -0
  9. package/dist/apps/gitDiffReview/types.js +1 -0
  10. package/dist/index.d.ts +2 -0
  11. package/dist/index.js +193 -0
  12. package/dist/index.js.map +1 -0
  13. package/dist/metadata-diff.html +98 -0
  14. package/dist/tools/aggregateQuery.d.ts +85 -0
  15. package/dist/tools/aggregateQuery.js +110 -0
  16. package/dist/tools/aggregateQuery.js.map +1 -0
  17. package/dist/tools/bulkExportAbort.d.ts +37 -0
  18. package/dist/tools/bulkExportAbort.js +44 -0
  19. package/dist/tools/bulkExportAbort.js.map +1 -0
  20. package/dist/tools/bulkExportResults.d.ts +51 -0
  21. package/dist/tools/bulkExportResults.js +76 -0
  22. package/dist/tools/bulkExportResults.js.map +1 -0
  23. package/dist/tools/bulkExportStart.d.ts +61 -0
  24. package/dist/tools/bulkExportStart.js +68 -0
  25. package/dist/tools/bulkExportStart.js.map +1 -0
  26. package/dist/tools/bulkExportStatus.d.ts +37 -0
  27. package/dist/tools/bulkExportStatus.js +54 -0
  28. package/dist/tools/bulkExportStatus.js.map +1 -0
  29. package/dist/tools/crossObjectSearch.d.ts +155 -0
  30. package/dist/tools/crossObjectSearch.js +145 -0
  31. package/dist/tools/crossObjectSearch.js.map +1 -0
  32. package/dist/tools/debugLogs.d.ts +106 -0
  33. package/dist/tools/debugLogs.js +189 -0
  34. package/dist/tools/debugLogs.js.map +1 -0
  35. package/dist/tools/deployMetadata.d.ts +60 -0
  36. package/dist/tools/deployMetadata.js +106 -0
  37. package/dist/tools/deployMetadata.js.map +1 -0
  38. package/dist/tools/deployPackage.d.ts +49 -0
  39. package/dist/tools/deployPackage.js +1 -0
  40. package/dist/tools/dml.d.ts +70 -0
  41. package/dist/tools/dml.js +105 -0
  42. package/dist/tools/dml.js.map +1 -0
  43. package/dist/tools/dmlDelete.d.ts +51 -0
  44. package/dist/tools/dmlDelete.js +71 -0
  45. package/dist/tools/dmlDelete.js.map +1 -0
  46. package/dist/tools/executeAnonymous.d.ts +63 -0
  47. package/dist/tools/executeAnonymous.js +77 -0
  48. package/dist/tools/executeAnonymous.js.map +1 -0
  49. package/dist/tools/fieldManagement.d.ts +222 -0
  50. package/dist/tools/fieldManagement.js +234 -0
  51. package/dist/tools/fieldManagement.js.map +1 -0
  52. package/dist/tools/fieldPermissions.d.ts +94 -0
  53. package/dist/tools/fieldPermissions.js +191 -0
  54. package/dist/tools/fieldPermissions.js.map +1 -0
  55. package/dist/tools/getDependencies.d.ts +58 -0
  56. package/dist/tools/getDependencies.js +105 -0
  57. package/dist/tools/getDependencies.js.map +1 -0
  58. package/dist/tools/listUserPermissions.d.ts +36 -0
  59. package/dist/tools/listUserPermissions.js +59 -0
  60. package/dist/tools/listUserPermissions.js.map +1 -0
  61. package/dist/tools/metadataDescribe.d.ts +37 -0
  62. package/dist/tools/metadataDescribe.js +35 -0
  63. package/dist/tools/metadataDescribe.js.map +1 -0
  64. package/dist/tools/metadataDiff.d.ts +66 -0
  65. package/dist/tools/metadataDiff.js +215 -0
  66. package/dist/tools/metadataDiff.js.map +1 -0
  67. package/dist/tools/metadataDiffFileDetail.d.ts +44 -0
  68. package/dist/tools/metadataDiffFileDetail.js +84 -0
  69. package/dist/tools/metadataDiffFileDetail.js.map +1 -0
  70. package/dist/tools/metadataDiffFiles.d.ts +37 -0
  71. package/dist/tools/metadataDiffFiles.js +72 -0
  72. package/dist/tools/metadataDiffFiles.js.map +1 -0
  73. package/dist/tools/metadataDiffGeneratePackage.d.ts +73 -0
  74. package/dist/tools/metadataDiffGeneratePackage.js +122 -0
  75. package/dist/tools/metadataDiffGeneratePackage.js.map +1 -0
  76. package/dist/tools/metadataImport.d.ts +63 -0
  77. package/dist/tools/metadataImport.js +122 -0
  78. package/dist/tools/metadataImport.js.map +1 -0
  79. package/dist/tools/metadataJobStatus.d.ts +44 -0
  80. package/dist/tools/metadataJobStatus.js +101 -0
  81. package/dist/tools/metadataJobStatus.js.map +1 -0
  82. package/dist/tools/metadataList.d.ts +44 -0
  83. package/dist/tools/metadataList.js +49 -0
  84. package/dist/tools/metadataList.js.map +1 -0
  85. package/dist/tools/metadataRead.d.ts +47 -0
  86. package/dist/tools/metadataRead.js +52 -0
  87. package/dist/tools/metadataRead.js.map +1 -0
  88. package/dist/tools/metadataTypeSchema.d.ts +44 -0
  89. package/dist/tools/metadataTypeSchema.js +101 -0
  90. package/dist/tools/metadataTypeSchema.js.map +1 -0
  91. package/dist/tools/metadataWsdl.d.ts +19 -0
  92. package/dist/tools/metadataWsdl.js +1 -0
  93. package/dist/tools/objectManagement.d.ts +107 -0
  94. package/dist/tools/objectManagement.js +123 -0
  95. package/dist/tools/objectManagement.js.map +1 -0
  96. package/dist/tools/objectPermissions.d.ts +101 -0
  97. package/dist/tools/objectPermissions.js +157 -0
  98. package/dist/tools/objectPermissions.js.map +1 -0
  99. package/dist/tools/objectSchema.d.ts +37 -0
  100. package/dist/tools/objectSchema.js +66 -0
  101. package/dist/tools/objectSchema.js.map +1 -0
  102. package/dist/tools/objectSearch.d.ts +37 -0
  103. package/dist/tools/objectSearch.js +44 -0
  104. package/dist/tools/objectSearch.js.map +1 -0
  105. package/dist/tools/packageStatus.d.ts +24 -0
  106. package/dist/tools/packageStatus.js +1 -0
  107. package/dist/tools/permissionSetAssignment.d.ts +39 -0
  108. package/dist/tools/permissionSetAssignment.js +1 -0
  109. package/dist/tools/readApexClasses.d.ts +50 -0
  110. package/dist/tools/readApexClasses.js +83 -0
  111. package/dist/tools/readApexClasses.js.map +1 -0
  112. package/dist/tools/readApexTriggers.d.ts +50 -0
  113. package/dist/tools/readApexTriggers.js +82 -0
  114. package/dist/tools/readApexTriggers.js.map +1 -0
  115. package/dist/tools/recordPicker.d.ts +48 -0
  116. package/dist/tools/recordPicker.js +1 -0
  117. package/dist/tools/recordQuery.d.ts +68 -0
  118. package/dist/tools/recordQuery.js +131 -0
  119. package/dist/tools/recordQuery.js.map +1 -0
  120. package/dist/tools/retrieveJobStatus.d.ts +51 -0
  121. package/dist/tools/retrieveJobStatus.js +192 -0
  122. package/dist/tools/retrieveJobStatus.js.map +1 -0
  123. package/dist/tools/retrieveMetadata.d.ts +79 -0
  124. package/dist/tools/retrieveMetadata.js +225 -0
  125. package/dist/tools/retrieveMetadata.js.map +1 -0
  126. package/dist/tools/retrievePackage.d.ts +37 -0
  127. package/dist/tools/retrievePackage.js +1 -0
  128. package/dist/tools/salesforceLogin.d.ts +36 -0
  129. package/dist/tools/salesforceLogin.js +75 -0
  130. package/dist/tools/salesforceLogin.js.map +1 -0
  131. package/dist/tools/selectOrg.d.ts +25 -0
  132. package/dist/tools/selectOrg.js +91 -0
  133. package/dist/tools/selectOrg.js.map +1 -0
  134. package/dist/tools/toolingQuery.d.ts +37 -0
  135. package/dist/tools/toolingQuery.js +54 -0
  136. package/dist/tools/toolingQuery.js.map +1 -0
  137. package/dist/tools/userPermissions.d.ts +76 -0
  138. package/dist/tools/userPermissions.js +130 -0
  139. package/dist/tools/userPermissions.js.map +1 -0
  140. package/dist/tools/versionMetadataComplete.d.ts +45 -0
  141. package/dist/tools/versionMetadataComplete.js +1 -0
  142. package/dist/tools/versionMetadataStart.d.ts +25 -0
  143. package/dist/tools/versionMetadataStart.js +1 -0
  144. package/dist/tools/versionMetadataStatus.d.ts +25 -0
  145. package/dist/tools/versionMetadataStatus.js +1 -0
  146. package/dist/tools/writeApexClasses.d.ts +64 -0
  147. package/dist/tools/writeApexClasses.js +79 -0
  148. package/dist/tools/writeApexClasses.js.map +1 -0
  149. package/dist/tools/writeApexTriggers.d.ts +71 -0
  150. package/dist/tools/writeApexTriggers.js +96 -0
  151. package/dist/tools/writeApexTriggers.js.map +1 -0
  152. package/dist/types/connection.d.ts +20 -0
  153. package/dist/types/connection.js +9 -0
  154. package/dist/types/connection.js.map +1 -0
  155. package/dist/types/index.d.ts +3 -0
  156. package/dist/types/index.js +4 -0
  157. package/dist/types/index.js.map +1 -0
  158. package/dist/types/metadata.d.ts +44 -0
  159. package/dist/types/metadata.js +2 -0
  160. package/dist/types/metadata.js.map +1 -0
  161. package/dist/types/salesforce.d.ts +38 -0
  162. package/dist/types/salesforce.js +2 -0
  163. package/dist/types/salesforce.js.map +1 -0
  164. package/dist/utils/apexContainer.d.ts +18 -0
  165. package/dist/utils/apexContainer.js +79 -0
  166. package/dist/utils/apexContainer.js.map +1 -0
  167. package/dist/utils/connection.d.ts +3 -0
  168. package/dist/utils/connection.js +135 -0
  169. package/dist/utils/connection.js.map +1 -0
  170. package/dist/utils/decomposePermissions.d.ts +16 -0
  171. package/dist/utils/decomposePermissions.js +188 -0
  172. package/dist/utils/decomposePermissions.js.map +1 -0
  173. package/dist/utils/dxPathMapper.d.ts +16 -0
  174. package/dist/utils/dxPathMapper.js +217 -0
  175. package/dist/utils/dxPathMapper.js.map +1 -0
  176. package/dist/utils/errors.d.ts +8 -0
  177. package/dist/utils/errors.js +40 -0
  178. package/dist/utils/errors.js.map +1 -0
  179. package/dist/utils/index.d.ts +2 -0
  180. package/dist/utils/index.js +3 -0
  181. package/dist/utils/index.js.map +1 -0
  182. package/dist/utils/oauthWebFlow.d.ts +8 -0
  183. package/dist/utils/oauthWebFlow.js +172 -0
  184. package/dist/utils/oauthWebFlow.js.map +1 -0
  185. package/dist/utils/packageJobs.d.ts +17 -0
  186. package/dist/utils/packageJobs.js +1 -0
  187. package/dist/utils/packageXml.d.ts +18 -0
  188. package/dist/utils/packageXml.js +1 -0
  189. package/dist/utils/permissionSetResolver.d.ts +14 -0
  190. package/dist/utils/permissionSetResolver.js +1 -0
  191. package/dist/utils/preSelectMatcher.d.ts +18 -0
  192. package/dist/utils/preSelectMatcher.js +1 -0
  193. package/dist/utils/profileCleanup.d.ts +18 -0
  194. package/dist/utils/profileCleanup.js +1 -0
  195. package/dist/utils/retrieveStore.d.ts +12 -0
  196. package/dist/utils/retrieveStore.js +1 -0
  197. package/dist/utils/sfCli.d.ts +18 -0
  198. package/dist/utils/sfCli.js +130 -0
  199. package/dist/utils/sfCli.js.map +1 -0
  200. package/dist/utils/tokenBroker.d.ts +13 -0
  201. package/dist/utils/tokenBroker.js +73 -0
  202. package/dist/utils/tokenBroker.js.map +1 -0
  203. package/package.json +54 -0
@@ -0,0 +1,188 @@
1
+ /**
2
+ * Custom post-retrieve decomposition of Profile and PermissionSet XML files.
3
+ *
4
+ * Salesforce DX's built-in decompose flags (decomposeProfilesV2Beta / decomposePermissionSetBeta)
5
+ * are unreliable, so we replicate the decomposition ourselves after a successful retrieve.
6
+ *
7
+ * Each permission block in a monolithic .profile-meta.xml or .permissionset-meta.xml is written
8
+ * as its own file in a sub-directory, enabling cherry-picking in the metadata diff UI.
9
+ */
10
+ import { readFileSync, writeFileSync, mkdirSync, readdirSync, statSync } from 'fs';
11
+ import { join, dirname, basename } from 'path';
12
+ const PERMISSION_CONFIGS = {
13
+ fieldPermissions: { subDir: 'fieldPermissions', fileSuffix: 'fieldPermission', keyElement: 'field' },
14
+ objectPermissions: { subDir: 'objectPermissions', fileSuffix: 'objectPermission', keyElement: 'object' },
15
+ classAccesses: { subDir: 'classAccesses', fileSuffix: 'classAccess', keyElement: 'apexClass' },
16
+ pageAccesses: { subDir: 'pageAccesses', fileSuffix: 'pageAccess', keyElement: 'apexPage' },
17
+ recordTypeVisibilities: { subDir: 'recordTypeVisibilities', fileSuffix: 'recordTypeVisibility', keyElement: 'recordType' },
18
+ tabVisibilities: { subDir: 'tabVisibilities', fileSuffix: 'tabVisibility', keyElement: 'tab' },
19
+ userPermissions: { subDir: 'userPermissions', fileSuffix: 'userPermission', keyElement: 'name' },
20
+ applicationVisibilities: { subDir: 'applicationVisibilities', fileSuffix: 'applicationVisibility', keyElement: 'application' },
21
+ flowAccesses: { subDir: 'flowAccesses', fileSuffix: 'flowAccess', keyElement: 'flow' },
22
+ layoutAssignments: { subDir: 'layoutAssignments', fileSuffix: 'layoutAssignment', keyElement: 'layout' },
23
+ customPermissions: { subDir: 'customPermissions', fileSuffix: 'customPermission', keyElement: 'name' },
24
+ };
25
+ /**
26
+ * Extract all `<elementName>…</elementName>` top-level blocks from an XML string.
27
+ * Returns each block's raw XML content (including the wrapping tags).
28
+ */
29
+ function extractBlocks(xml, elementName) {
30
+ const blocks = [];
31
+ const openTag = `<${elementName}>`;
32
+ const closeTag = `</${elementName}>`;
33
+ let pos = 0;
34
+ while (pos < xml.length) {
35
+ const start = xml.indexOf(openTag, pos);
36
+ if (start === -1)
37
+ break;
38
+ const end = xml.indexOf(closeTag, start);
39
+ if (end === -1)
40
+ break;
41
+ blocks.push(xml.slice(start, end + closeTag.length));
42
+ pos = end + closeTag.length;
43
+ }
44
+ return blocks;
45
+ }
46
+ /**
47
+ * Extract the text content of a named child element from an XML block.
48
+ */
49
+ function extractChildValue(block, childName) {
50
+ const match = block.match(new RegExp(`<${childName}>([^<]+)<\/${childName}>`));
51
+ return match ? match[1].trim() : null;
52
+ }
53
+ /**
54
+ * Remove all occurrences of `<elementName>…</elementName>` blocks from an XML string.
55
+ */
56
+ function removeBlocks(xml, elementName) {
57
+ const openTag = `<${elementName}>`;
58
+ const closeTag = `</${elementName}>`;
59
+ let result = xml;
60
+ let start;
61
+ while ((start = result.indexOf(openTag)) !== -1) {
62
+ const end = result.indexOf(closeTag, start);
63
+ if (end === -1)
64
+ break;
65
+ // Also eat a trailing newline if present
66
+ const afterEnd = end + closeTag.length;
67
+ const hasTrailingNewline = result[afterEnd] === '\n';
68
+ result = result.slice(0, start) + result.slice(afterEnd + (hasTrailingNewline ? 1 : 0));
69
+ }
70
+ return result;
71
+ }
72
+ /**
73
+ * Decompose a single monolithic profile/permission-set XML file into sub-directory files.
74
+ * Rewrites the original file to keep only non-permission scalar fields.
75
+ *
76
+ * @returns number of permission files written
77
+ */
78
+ function decomposeFile(filePath) {
79
+ const xml = readFileSync(filePath, 'utf-8');
80
+ const parentDir = dirname(filePath);
81
+ // Derive the component name from the filename:
82
+ // "Admin.profile-meta.xml" → "Admin"
83
+ // "MyPermSet.permissionset-meta.xml" → "MyPermSet"
84
+ const fileBasename = basename(filePath);
85
+ const componentName = fileBasename
86
+ .replace(/\.profile-meta\.xml$/, '')
87
+ .replace(/\.permissionset-meta\.xml$/, '');
88
+ // Decomposed files go into profiles/<Name>/ or permissionsets/<Name>/
89
+ const componentDir = join(parentDir, componentName);
90
+ let filesWritten = 0;
91
+ let reducedXml = xml;
92
+ for (const [elementName, cfg] of Object.entries(PERMISSION_CONFIGS)) {
93
+ const blocks = extractBlocks(xml, elementName);
94
+ if (blocks.length === 0)
95
+ continue;
96
+ const subDirPath = join(componentDir, cfg.subDir);
97
+ mkdirSync(subDirPath, { recursive: true });
98
+ for (const block of blocks) {
99
+ const keyValue = extractChildValue(block, cfg.keyElement);
100
+ if (!keyValue)
101
+ continue;
102
+ // Sanitize: replace characters unsafe in filenames with underscore (/ is fine on Mac/Linux)
103
+ const safeName = keyValue.replace(/[<>:"|?*\\]/g, '_');
104
+ const fileName = `${safeName}.${cfg.fileSuffix}-meta.xml`;
105
+ const fileDest = join(subDirPath, fileName);
106
+ // Extract inner content of the block (without the wrapping element tags)
107
+ const innerStart = block.indexOf('>') + 1;
108
+ const innerEnd = block.lastIndexOf('<');
109
+ const innerContent = block.slice(innerStart, innerEnd);
110
+ const fileContent = `<?xml version="1.0" encoding="UTF-8"?>\n<${elementName}>\n${innerContent}\n</${elementName}>\n`;
111
+ writeFileSync(fileDest, fileContent, 'utf-8');
112
+ filesWritten++;
113
+ }
114
+ // Remove these blocks from the root file
115
+ reducedXml = removeBlocks(reducedXml, elementName);
116
+ }
117
+ if (filesWritten > 0) {
118
+ // Write reduced root file (scalar fields only)
119
+ writeFileSync(filePath, reducedXml, 'utf-8');
120
+ }
121
+ return filesWritten;
122
+ }
123
+ /**
124
+ * Walk a directory for monolithic .profile-meta.xml or .permissionset-meta.xml files.
125
+ * A file is "monolithic" when it lives directly in `profiles/` or `permissionsets/` (depth 1),
126
+ * not inside a named sub-folder (depth 2+).
127
+ */
128
+ function findMonolithicFiles(taggedDir) {
129
+ const result = [];
130
+ // SF CLI DX source format writes to main/default/ within the package dir.
131
+ // Also check taggedDir directly for tests / alternative layouts.
132
+ const searchRoots = [join(taggedDir, 'main', 'default'), taggedDir];
133
+ for (const root of searchRoots) {
134
+ for (const topDir of ['profiles', 'permissionsets']) {
135
+ const dir = join(root, topDir);
136
+ let entries;
137
+ try {
138
+ entries = readdirSync(dir);
139
+ }
140
+ catch {
141
+ continue; // directory doesn't exist — nothing to decompose
142
+ }
143
+ for (const entry of entries) {
144
+ const fullPath = join(dir, entry);
145
+ try {
146
+ const stat = statSync(fullPath);
147
+ if (stat.isFile() && (entry.endsWith('.profile-meta.xml') || entry.endsWith('.permissionset-meta.xml'))) {
148
+ result.push(fullPath);
149
+ }
150
+ // Sub-directories (already-decomposed profiles) are intentionally skipped
151
+ }
152
+ catch { /* ignore */ }
153
+ }
154
+ }
155
+ }
156
+ return result;
157
+ }
158
+ /**
159
+ * Walk a tagged retrieve directory, find all monolithic profile/permission-set XML files,
160
+ * and decompose each into sub-directory permission files.
161
+ *
162
+ * @returns Human-readable summary string
163
+ */
164
+ export function decomposeProfilesAndPermSets(taggedDir) {
165
+ const files = findMonolithicFiles(taggedDir);
166
+ if (files.length === 0)
167
+ return '';
168
+ let profileCount = 0;
169
+ let permSetCount = 0;
170
+ let totalFiles = 0;
171
+ for (const filePath of files) {
172
+ const written = decomposeFile(filePath);
173
+ totalFiles += written;
174
+ if (filePath.includes('/profiles/'))
175
+ profileCount++;
176
+ else if (filePath.includes('/permissionsets/'))
177
+ permSetCount++;
178
+ }
179
+ const parts = [];
180
+ if (profileCount > 0)
181
+ parts.push(`${profileCount} profile${profileCount > 1 ? 's' : ''}`);
182
+ if (permSetCount > 0)
183
+ parts.push(`${permSetCount} permission set${permSetCount > 1 ? 's' : ''}`);
184
+ if (parts.length === 0 || totalFiles === 0)
185
+ return '';
186
+ return `Decomposed ${parts.join(', ')} into ${totalFiles} individual permission files.`;
187
+ }
188
+ //# sourceMappingURL=decomposePermissions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"decomposePermissions.js","sourceRoot":"","sources":["../../src/utils/decomposePermissions.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,SAAS,EAAE,WAAW,EAAU,QAAQ,EAAE,MAAM,IAAI,CAAC;AAC3F,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,MAAM,CAAC;AAS/C,MAAM,kBAAkB,GAA+B;IACrD,gBAAgB,EAAU,EAAE,MAAM,EAAE,kBAAkB,EAAU,UAAU,EAAE,iBAAiB,EAAU,UAAU,EAAE,OAAO,EAAE;IAC5H,iBAAiB,EAAS,EAAE,MAAM,EAAE,mBAAmB,EAAS,UAAU,EAAE,kBAAkB,EAAS,UAAU,EAAE,QAAQ,EAAE;IAC7H,aAAa,EAAa,EAAE,MAAM,EAAE,eAAe,EAAa,UAAU,EAAE,aAAa,EAAc,UAAU,EAAE,WAAW,EAAE;IAChI,YAAY,EAAc,EAAE,MAAM,EAAE,cAAc,EAAc,UAAU,EAAE,YAAY,EAAe,UAAU,EAAE,UAAU,EAAE;IAC/H,sBAAsB,EAAI,EAAE,MAAM,EAAE,wBAAwB,EAAI,UAAU,EAAE,sBAAsB,EAAK,UAAU,EAAE,YAAY,EAAE;IACjI,eAAe,EAAW,EAAE,MAAM,EAAE,iBAAiB,EAAW,UAAU,EAAE,eAAe,EAAY,UAAU,EAAE,KAAK,EAAE;IAC1H,eAAe,EAAW,EAAE,MAAM,EAAE,iBAAiB,EAAW,UAAU,EAAE,gBAAgB,EAAW,UAAU,EAAE,MAAM,EAAE;IAC3H,uBAAuB,EAAG,EAAE,MAAM,EAAE,yBAAyB,EAAG,UAAU,EAAE,uBAAuB,EAAI,UAAU,EAAE,aAAa,EAAE;IAClI,YAAY,EAAc,EAAE,MAAM,EAAE,cAAc,EAAc,UAAU,EAAE,YAAY,EAAe,UAAU,EAAE,MAAM,EAAE;IAC3H,iBAAiB,EAAS,EAAE,MAAM,EAAE,mBAAmB,EAAS,UAAU,EAAE,kBAAkB,EAAS,UAAU,EAAE,QAAQ,EAAE;IAC7H,iBAAiB,EAAS,EAAE,MAAM,EAAE,mBAAmB,EAAS,UAAU,EAAE,kBAAkB,EAAS,UAAU,EAAE,MAAM,EAAE;CAC5H,CAAC;AAEF;;;GAGG;AACH,SAAS,aAAa,CAAC,GAAW,EAAE,WAAmB;IACrD,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,MAAM,OAAO,GAAG,IAAI,WAAW,GAAG,CAAC;IACnC,MAAM,QAAQ,GAAG,KAAK,WAAW,GAAG,CAAC;IACrC,IAAI,GAAG,GAAG,CAAC,CAAC;IACZ,OAAO,GAAG,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC;QACxB,MAAM,KAAK,GAAG,GAAG,CAAC,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;QACxC,IAAI,KAAK,KAAK,CAAC,CAAC;YAAE,MAAM;QACxB,MAAM,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;QACzC,IAAI,GAAG,KAAK,CAAC,CAAC;YAAE,MAAM;QACtB,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC;QACrD,GAAG,GAAG,GAAG,GAAG,QAAQ,CAAC,MAAM,CAAC;IAC9B,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;GAEG;AACH,SAAS,iBAAiB,CAAC,KAAa,EAAE,SAAiB;IACzD,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,IAAI,SAAS,cAAc,SAAS,GAAG,CAAC,CAAC,CAAC;IAC/E,OAAO,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;AACxC,CAAC;AAED;;GAEG;AACH,SAAS,YAAY,CAAC,GAAW,EAAE,WAAmB;IACpD,MAAM,OAAO,GAAG,IAAI,WAAW,GAAG,CAAC;IACnC,MAAM,QAAQ,GAAG,KAAK,WAAW,GAAG,CAAC;IACrC,IAAI,MAAM,GAAG,GAAG,CAAC;IACjB,IAAI,KAAa,CAAC;IAClB,OAAO,CAAC,KAAK,GAAG,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;QAChD,MAAM,GAAG,GAAG,MAAM,CAAC,OAAO,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;QAC5C,IAAI,GAAG,KAAK,CAAC,CAAC;YAAE,MAAM;QACtB,yCAAyC;QACzC,MAAM,QAAQ,GAAG,GAAG,GAAG,QAAQ,CAAC,MAAM,CAAC;QACvC,MAAM,kBAAkB,GAAG,MAAM,CAAC,QAAQ,CAAC,KAAK,IAAI,CAAC;QACrD,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,QAAQ,GAAG,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC1F,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;;;GAKG;AACH,SAAS,aAAa,CAAC,QAAgB;IACrC,MAAM,GAAG,GAAG,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IAC5C,MAAM,SAAS,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;IAEpC,+CAA+C;IAC/C,qCAAqC;IACrC,mDAAmD;IACnD,MAAM,YAAY,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAAC;IACxC,MAAM,aAAa,GAAG,YAAY;SAC/B,OAAO,CAAC,sBAAsB,EAAE,EAAE,CAAC;SACnC,OAAO,CAAC,4BAA4B,EAAE,EAAE,CAAC,CAAC;IAE7C,sEAAsE;IACtE,MAAM,YAAY,GAAG,IAAI,CAAC,SAAS,EAAE,aAAa,CAAC,CAAC;IAEpD,IAAI,YAAY,GAAG,CAAC,CAAC;IACrB,IAAI,UAAU,GAAG,GAAG,CAAC;IAErB,KAAK,MAAM,CAAC,WAAW,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,kBAAkB,CAAC,EAAE,CAAC;QACpE,MAAM,MAAM,GAAG,aAAa,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC;QAC/C,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;YAAE,SAAS;QAElC,MAAM,UAAU,GAAG,IAAI,CAAC,YAAY,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;QAClD,SAAS,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAE3C,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YAC3B,MAAM,QAAQ,GAAG,iBAAiB,CAAC,KAAK,EAAE,GAAG,CAAC,UAAU,CAAC,CAAC;YAC1D,IAAI,CAAC,QAAQ;gBAAE,SAAS;YAExB,4FAA4F;YAC5F,MAAM,QAAQ,GAAG,QAAQ,CAAC,OAAO,CAAC,cAAc,EAAE,GAAG,CAAC,CAAC;YACvD,MAAM,QAAQ,GAAG,GAAG,QAAQ,IAAI,GAAG,CAAC,UAAU,WAAW,CAAC;YAC1D,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;YAE5C,yEAAyE;YACzE,MAAM,UAAU,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YAC1C,MAAM,QAAQ,GAAG,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;YACxC,MAAM,YAAY,GAAG,KAAK,CAAC,KAAK,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;YAEvD,MAAM,WAAW,GAAG,4CAA4C,WAAW,MAAM,YAAY,OAAO,WAAW,KAAK,CAAC;YACrH,aAAa,CAAC,QAAQ,EAAE,WAAW,EAAE,OAAO,CAAC,CAAC;YAC9C,YAAY,EAAE,CAAC;QACjB,CAAC;QAED,yCAAyC;QACzC,UAAU,GAAG,YAAY,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC;IACrD,CAAC;IAED,IAAI,YAAY,GAAG,CAAC,EAAE,CAAC;QACrB,+CAA+C;QAC/C,aAAa,CAAC,QAAQ,EAAE,UAAU,EAAE,OAAO,CAAC,CAAC;IAC/C,CAAC;IAED,OAAO,YAAY,CAAC;AACtB,CAAC;AAED;;;;GAIG;AACH,SAAS,mBAAmB,CAAC,SAAiB;IAC5C,MAAM,MAAM,GAAa,EAAE,CAAC;IAE5B,0EAA0E;IAC1E,iEAAiE;IACjE,MAAM,WAAW,GAAG,CAAC,IAAI,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,SAAS,CAAC,CAAC;IAEpE,KAAK,MAAM,IAAI,IAAI,WAAW,EAAE,CAAC;QAC/B,KAAK,MAAM,MAAM,IAAI,CAAC,UAAU,EAAE,gBAAgB,CAAC,EAAE,CAAC;YACpD,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;YAC/B,IAAI,OAAiB,CAAC;YACtB,IAAI,CAAC;gBACH,OAAO,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC;YAC7B,CAAC;YAAC,MAAM,CAAC;gBACP,SAAS,CAAC,iDAAiD;YAC7D,CAAC;YAED,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;gBAC5B,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;gBAClC,IAAI,CAAC;oBACH,MAAM,IAAI,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAAC;oBAChC,IAAI,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,mBAAmB,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,yBAAyB,CAAC,CAAC,EAAE,CAAC;wBACxG,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;oBACxB,CAAC;oBACD,0EAA0E;gBAC5E,CAAC;gBAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC;YAC1B,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,4BAA4B,CAAC,SAAiB;IAC5D,MAAM,KAAK,GAAG,mBAAmB,CAAC,SAAS,CAAC,CAAC;IAC7C,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IAElC,IAAI,YAAY,GAAG,CAAC,CAAC;IACrB,IAAI,YAAY,GAAG,CAAC,CAAC;IACrB,IAAI,UAAU,GAAG,CAAC,CAAC;IAEnB,KAAK,MAAM,QAAQ,IAAI,KAAK,EAAE,CAAC;QAC7B,MAAM,OAAO,GAAG,aAAa,CAAC,QAAQ,CAAC,CAAC;QACxC,UAAU,IAAI,OAAO,CAAC;QACtB,IAAI,QAAQ,CAAC,QAAQ,CAAC,YAAY,CAAC;YAAE,YAAY,EAAE,CAAC;aAC/C,IAAI,QAAQ,CAAC,QAAQ,CAAC,kBAAkB,CAAC;YAAE,YAAY,EAAE,CAAC;IACjE,CAAC;IAED,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,IAAI,YAAY,GAAG,CAAC;QAAE,KAAK,CAAC,IAAI,CAAC,GAAG,YAAY,WAAW,YAAY,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAC1F,IAAI,YAAY,GAAG,CAAC;QAAE,KAAK,CAAC,IAAI,CAAC,GAAG,YAAY,kBAAkB,YAAY,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAEjG,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,UAAU,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IACtD,OAAO,cAAc,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,UAAU,+BAA+B,CAAC;AAC1F,CAAC"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Maps Salesforce DX source paths to metadata API type + component name.
3
+ * Used by metadataDiff to enrich git diff results with metadata context.
4
+ */
5
+ interface MetadataMapping {
6
+ metadataType: string;
7
+ componentName: string;
8
+ }
9
+ /**
10
+ * Maps a DX source file path to its metadata type and component name.
11
+ *
12
+ * @param filePath Relative path within the DX project (e.g. "classes/MyClass.cls")
13
+ * @returns Mapping or null if path is unrecognized
14
+ */
15
+ export declare function mapDxPathToMetadata(filePath: string): MetadataMapping | null;
16
+ export {};
@@ -0,0 +1,217 @@
1
+ /**
2
+ * Maps Salesforce DX source paths to metadata API type + component name.
3
+ * Used by metadataDiff to enrich git diff results with metadata context.
4
+ */
5
+ // Directory-based mappings: DX folder name → metadata API type
6
+ const SIMPLE_DIR_MAPPINGS = {
7
+ classes: 'ApexClass',
8
+ triggers: 'ApexTrigger',
9
+ pages: 'ApexPage',
10
+ components: 'ApexComponent',
11
+ flows: 'Flow',
12
+ layouts: 'Layout',
13
+ permissionsetgroups: 'PermissionSetGroup',
14
+ staticresources: 'StaticResource',
15
+ flexipages: 'FlexiPage',
16
+ tabs: 'CustomTab',
17
+ labels: 'CustomLabels',
18
+ email: 'EmailTemplate',
19
+ reports: 'Report',
20
+ dashboards: 'Dashboard',
21
+ documents: 'Document',
22
+ queues: 'Queue',
23
+ groups: 'Group',
24
+ roles: 'Role',
25
+ workflows: 'Workflow',
26
+ assignmentRules: 'AssignmentRule',
27
+ autoResponseRules: 'AutoResponseRule',
28
+ escalationRules: 'EscalationRule',
29
+ matchingRules: 'MatchingRule',
30
+ sharingRules: 'SharingRules',
31
+ approvalProcesses: 'ApprovalProcess',
32
+ globalValueSets: 'GlobalValueSet',
33
+ standardValueSets: 'StandardValueSet',
34
+ customMetadata: 'CustomMetadata',
35
+ platformEventChannelMembers: 'PlatformEventChannelMember',
36
+ connectedApps: 'ConnectedApp',
37
+ applications: 'CustomApplication',
38
+ contentassets: 'ContentAsset',
39
+ certs: 'Certificate',
40
+ cleanDataServices: 'CleanDataService',
41
+ customPermissions: 'CustomPermission',
42
+ dataSources: 'ExternalDataSource',
43
+ duplicateRules: 'DuplicateRule',
44
+ experiences: 'ExperienceBundle',
45
+ flowDefinitions: 'FlowDefinition',
46
+ homePageComponents: 'HomePageComponent',
47
+ homePageLayouts: 'HomePageLayout',
48
+ installedPackages: 'InstalledPackage',
49
+ letterhead: 'Letterhead',
50
+ namedCredentials: 'NamedCredential',
51
+ notificationtypes: 'CustomNotificationType',
52
+ objectTranslations: 'CustomObjectTranslation',
53
+ pathAssistants: 'PathAssistant',
54
+ quickActions: 'QuickAction',
55
+ remoteSiteSettings: 'RemoteSiteSetting',
56
+ settings: 'Settings',
57
+ siteDotComSites: 'SiteDotCom',
58
+ sites: 'CustomSite',
59
+ translations: 'Translations',
60
+ wave: 'WaveApplication',
61
+ };
62
+ // Sub-object directories: objects/<ObjName>/<subdir>/ → metadata type
63
+ const OBJECT_SUB_MAPPINGS = {
64
+ fields: 'CustomField',
65
+ validationRules: 'ValidationRule',
66
+ compactLayouts: 'CompactLayout',
67
+ recordTypes: 'RecordType',
68
+ listViews: 'ListView',
69
+ webLinks: 'WebLink',
70
+ businessProcesses: 'BusinessProcess',
71
+ fieldSets: 'FieldSet',
72
+ sharingReasons: 'SharingReason',
73
+ };
74
+ // Profile decomposed sub-directory mappings (from custom decomposeProfilesAndPermSets utility)
75
+ const PROFILE_SUB_MAPPINGS = {
76
+ fieldPermissions: 'ProfileFieldPermission',
77
+ objectPermissions: 'ProfileObjectPermission',
78
+ classAccesses: 'ProfileClassAccess',
79
+ pageAccesses: 'ProfilePageAccess',
80
+ recordTypeVisibilities: 'ProfileRecordTypeVisibility',
81
+ tabVisibilities: 'ProfileTabVisibility',
82
+ userPermissions: 'ProfileUserPermission',
83
+ applicationVisibilities: 'ProfileApplicationVisibility',
84
+ flowAccesses: 'ProfileFlowAccess',
85
+ layoutAssignments: 'ProfileLayoutAssignment',
86
+ customPermissions: 'ProfileCustomPermission',
87
+ };
88
+ // PermissionSet decomposed sub-directory mappings
89
+ const PERMSET_SUB_MAPPINGS = {
90
+ fieldPermissions: 'PermissionSetFieldPermission',
91
+ objectPermissions: 'PermissionSetObjectPermission',
92
+ classAccesses: 'PermissionSetClassAccess',
93
+ pageAccesses: 'PermissionSetPageAccess',
94
+ recordTypeVisibilities: 'PermissionSetRecordTypeVisibility',
95
+ tabVisibilities: 'PermissionSetTabVisibility',
96
+ userPermissions: 'PermissionSetUserPermission',
97
+ applicationVisibilities: 'PermissionSetApplicationVisibility',
98
+ flowAccesses: 'PermissionSetFlowAccess',
99
+ customPermissions: 'PermissionSetCustomPermission',
100
+ };
101
+ // Bundle directories: name is the directory name, not the file name
102
+ const BUNDLE_DIRS = new Set(['lwc', 'aura']);
103
+ /**
104
+ * Maps a DX source file path to its metadata type and component name.
105
+ *
106
+ * @param filePath Relative path within the DX project (e.g. "classes/MyClass.cls")
107
+ * @returns Mapping or null if path is unrecognized
108
+ */
109
+ export function mapDxPathToMetadata(filePath) {
110
+ // Normalize separators and strip leading slashes
111
+ const normalized = filePath.replace(/\\/g, '/').replace(/^\/+/, '');
112
+ // Split into segments
113
+ const segments = normalized.split('/');
114
+ // Find the meaningful start — skip common DX prefixes like "force-app/main/default/"
115
+ let startIdx = 0;
116
+ for (let i = 0; i < segments.length; i++) {
117
+ if (segments[i] === 'main' && i + 1 < segments.length && segments[i + 1] === 'default') {
118
+ startIdx = i + 2;
119
+ break;
120
+ }
121
+ }
122
+ const meaningful = segments.slice(startIdx);
123
+ if (meaningful.length === 0)
124
+ return null;
125
+ const dirName = meaningful[0];
126
+ // Bundle directories (lwc, aura)
127
+ if (BUNDLE_DIRS.has(dirName)) {
128
+ if (meaningful.length < 2)
129
+ return null;
130
+ const bundleName = meaningful[1];
131
+ const metadataType = dirName === 'lwc' ? 'LightningComponentBundle' : 'AuraDefinitionBundle';
132
+ return { metadataType, componentName: bundleName };
133
+ }
134
+ // Objects directory — handle sub-types
135
+ if (dirName === 'objects') {
136
+ if (meaningful.length < 2)
137
+ return null;
138
+ const objectName = meaningful[1];
139
+ // Root object meta file: objects/Account/Account.object-meta.xml
140
+ if (meaningful.length === 3 && meaningful[2].endsWith('.object-meta.xml')) {
141
+ return { metadataType: 'CustomObject', componentName: objectName };
142
+ }
143
+ // Sub-object files: objects/Account/fields/MyField__c.field-meta.xml
144
+ if (meaningful.length >= 4) {
145
+ const subDir = meaningful[2];
146
+ const subType = OBJECT_SUB_MAPPINGS[subDir];
147
+ if (subType) {
148
+ const fileName = meaningful[3];
149
+ const componentName = stripMetaSuffix(fileName);
150
+ return { metadataType: subType, componentName: `${objectName}.${componentName}` };
151
+ }
152
+ }
153
+ // Unknown object sub-path — still tag it as related to the object
154
+ return { metadataType: 'CustomObject', componentName: objectName };
155
+ }
156
+ // Decomposed profiles: profiles/<Name>/<subDir>/<file> or profiles/<Name>.profile-meta.xml
157
+ if (dirName === 'profiles') {
158
+ if (meaningful.length < 2)
159
+ return null;
160
+ const profileName = meaningful[1];
161
+ if (meaningful.length === 2)
162
+ return { metadataType: 'Profile', componentName: stripMetaSuffix(profileName) };
163
+ // Root file inside decomposed folder: profiles/<Name>/<Name>.profile-meta.xml
164
+ if (meaningful.length === 3)
165
+ return { metadataType: 'Profile', componentName: profileName };
166
+ // Sub-permission file: profiles/<Name>/<subDir>/<file>
167
+ const subType = PROFILE_SUB_MAPPINGS[meaningful[2]];
168
+ if (subType)
169
+ return { metadataType: subType, componentName: `${profileName}/${stripMetaSuffix(meaningful[3])}` };
170
+ return { metadataType: 'Profile', componentName: profileName };
171
+ }
172
+ // Decomposed permission sets: permissionsets/<Name>/<subDir>/<file> or flat file
173
+ if (dirName === 'permissionsets') {
174
+ if (meaningful.length < 2)
175
+ return null;
176
+ const permSetName = meaningful[1];
177
+ if (meaningful.length === 2)
178
+ return { metadataType: 'PermissionSet', componentName: stripMetaSuffix(permSetName) };
179
+ if (meaningful.length === 3)
180
+ return { metadataType: 'PermissionSet', componentName: permSetName };
181
+ const subType = PERMSET_SUB_MAPPINGS[meaningful[2]];
182
+ if (subType)
183
+ return { metadataType: subType, componentName: `${permSetName}/${stripMetaSuffix(meaningful[3])}` };
184
+ return { metadataType: 'PermissionSet', componentName: permSetName };
185
+ }
186
+ // Simple directory mappings
187
+ const simpleType = SIMPLE_DIR_MAPPINGS[dirName];
188
+ if (simpleType) {
189
+ if (meaningful.length < 2)
190
+ return null;
191
+ // For email templates and other folder-based types with subdirectories
192
+ if (meaningful.length > 2 && (dirName === 'email' || dirName === 'reports' || dirName === 'dashboards' || dirName === 'documents')) {
193
+ const folder = meaningful[1];
194
+ const fileName = meaningful[meaningful.length - 1];
195
+ return { metadataType: simpleType, componentName: `${folder}/${stripMetaSuffix(fileName)}` };
196
+ }
197
+ const fileName = meaningful[1];
198
+ return { metadataType: simpleType, componentName: stripMetaSuffix(fileName) };
199
+ }
200
+ // Fallback: use directory name as type and file name as component name
201
+ if (meaningful.length >= 2) {
202
+ const fallbackType = dirName.charAt(0).toUpperCase() + dirName.slice(1);
203
+ const fileName = meaningful[meaningful.length - 1];
204
+ return { metadataType: fallbackType, componentName: stripMetaSuffix(fileName) };
205
+ }
206
+ return null;
207
+ }
208
+ /**
209
+ * Strip common DX meta suffixes from file names to get the component name.
210
+ */
211
+ function stripMetaSuffix(fileName) {
212
+ return fileName
213
+ .replace(/\.(cls|trigger|page|component|resource|app|tab|flow|layout|profile|permissionset|permissionsetgroup|flexipage|labels|queue|group|role|workflow|object|field|validationRule|compactLayout|recordType|listView|webLink|businessProcess|fieldSet|sharingReason|fieldPermission|objectPermission|classAccess|pageAccess|recordTypeVisibility|tabVisibility|userPermission|applicationVisibility|flowAccess|layoutAssignment|customPermission)-meta\.xml$/i, '')
214
+ .replace(/-meta\.xml$/, '')
215
+ .replace(/\.(cls|trigger|page|component|resource|js|html|css|svg|xml|json)$/, '');
216
+ }
217
+ //# sourceMappingURL=dxPathMapper.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dxPathMapper.js","sourceRoot":"","sources":["../../src/utils/dxPathMapper.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ export declare function formatMetadataErrors(result: any): string;
2
+ export declare function toolResponse(text: string, isError?: boolean): {
3
+ content: {
4
+ type: "text";
5
+ text: string;
6
+ }[];
7
+ isError: boolean;
8
+ };
@@ -0,0 +1,40 @@
1
+ export function formatMetadataErrors(result) {
2
+ if (!result)
3
+ return 'Unknown error (no result returned)';
4
+ if (result.success)
5
+ return '';
6
+ const errors = [];
7
+ if (Array.isArray(result.errors)) {
8
+ for (const err of result.errors) {
9
+ if (typeof err === 'string') {
10
+ errors.push(err);
11
+ }
12
+ else if (err?.message) {
13
+ const fields = err.fields ? ` (fields: ${Array.isArray(err.fields) ? err.fields.join(', ') : err.fields})` : '';
14
+ const code = err.statusCode ? `[${err.statusCode}] ` : '';
15
+ errors.push(`${code}${err.message}${fields}`);
16
+ }
17
+ }
18
+ }
19
+ else if (result.errors?.message) {
20
+ errors.push(result.errors.message);
21
+ }
22
+ else if (typeof result.errors === 'string') {
23
+ errors.push(result.errors);
24
+ }
25
+ if (Array.isArray(result)) {
26
+ for (const item of result) {
27
+ const msg = formatMetadataErrors(item);
28
+ if (msg)
29
+ errors.push(msg);
30
+ }
31
+ }
32
+ return errors.length > 0 ? errors.join('\n') : 'Unknown error';
33
+ }
34
+ export function toolResponse(text, isError = false) {
35
+ return {
36
+ content: [{ type: 'text', text }],
37
+ isError,
38
+ };
39
+ }
40
+ //# sourceMappingURL=errors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/utils/errors.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,oBAAoB,CAAC,MAAW;IAC9C,IAAI,CAAC,MAAM;QAAE,OAAO,oCAAoC,CAAC;IAEzD,IAAI,MAAM,CAAC,OAAO;QAAE,OAAO,EAAE,CAAC;IAE9B,MAAM,MAAM,GAAa,EAAE,CAAC;IAE5B,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;QACjC,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;YAChC,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;gBAC5B,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACnB,CAAC;iBAAM,IAAI,GAAG,EAAE,OAAO,EAAE,CAAC;gBACxB,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,aAAa,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;gBAChH,MAAM,IAAI,GAAG,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,UAAU,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC1D,MAAM,CAAC,IAAI,CAAC,GAAG,IAAI,GAAG,GAAG,CAAC,OAAO,GAAG,MAAM,EAAE,CAAC,CAAC;YAChD,CAAC;QACH,CAAC;IACH,CAAC;SAAM,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,EAAE,CAAC;QAClC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IACrC,CAAC;SAAM,IAAI,OAAO,MAAM,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;QAC7C,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAC7B,CAAC;IAED,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QAC1B,KAAK,MAAM,IAAI,IAAI,MAAM,EAAE,CAAC;YAC1B,MAAM,GAAG,GAAG,oBAAoB,CAAC,IAAI,CAAC,CAAC;YACvC,IAAI,GAAG;gBAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC5B,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC;AACjE,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,IAAY,EAAE,OAAO,GAAG,KAAK;IACxD,OAAO;QACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,CAAC;QAC1C,OAAO;KACR,CAAC;AACJ,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { createConnection } from './connection.js';
2
+ export { formatMetadataErrors, toolResponse } from './errors.js';
@@ -0,0 +1,3 @@
1
+ export { createConnection } from './connection.js';
2
+ export { formatMetadataErrors, toolResponse } from './errors.js';
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACnD,OAAO,EAAE,oBAAoB,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC"}
@@ -0,0 +1,8 @@
1
+ export declare function getOAuthWebFlowToken(): {
2
+ accessToken: string;
3
+ instanceUrl: string;
4
+ } | null;
5
+ export declare function setOAuthWebFlowToken(accessToken: string, instanceUrl: string): void;
6
+ export declare function startOAuthWebFlow(loginUrl: string, clientId: string, callbackPort: number): Promise<{
7
+ instanceUrl: string;
8
+ }>;