sf-decomposer 7.3.2 → 7.3.4

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/CHANGELOG.md CHANGED
@@ -5,6 +5,20 @@
5
5
 
6
6
  All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines.
7
7
 
8
+ ## [7.3.4](https://github.com/mcarvin8/sf-decomposer/compare/v7.3.3...v7.3.4) (2026-09-03)
9
+
10
+
11
+ ### Bug Fixes
12
+
13
+ * **deps:** bump config-disassembler to 3.4.1 ([#591](https://github.com/mcarvin8/sf-decomposer/issues/591)) ([9b1ca2f](https://github.com/mcarvin8/sf-decomposer/commit/9b1ca2f8066f7171b3ac923040ad6e05de340ad2))
14
+
15
+ ## [7.3.3](https://github.com/mcarvin8/sf-decomposer/compare/v7.3.2...v7.3.3) (2026-09-02)
16
+
17
+
18
+ ### Bug Fixes
19
+
20
+ * **deps:** bump the dependencies group across 2 directories with 4 updates ([#589](https://github.com/mcarvin8/sf-decomposer/issues/589)) ([1ce31d1](https://github.com/mcarvin8/sf-decomposer/commit/1ce31d12bd76cf101c3a8a8d26d813ca50fcc50f))
21
+
8
22
  ## [7.3.2](https://github.com/mcarvin8/sf-decomposer/compare/v7.3.1...v7.3.2) (2026-08-25)
9
23
 
10
24
 
package/README.md CHANGED
@@ -220,7 +220,7 @@ EXAMPLES
220
220
  `sf decomposer decompose -x "manifest/package.xml" -m "flow"`
221
221
  ```
222
222
 
223
- _See code: [src/commands/decomposer/decompose.ts](https://github.com/mcarvin8/sf-decomposer/blob/v7.3.2/src/commands/decomposer/decompose.ts)_
223
+ _See code: [src/commands/decomposer/decompose.ts](https://github.com/mcarvin8/sf-decomposer/blob/v7.3.4/src/commands/decomposer/decompose.ts)_
224
224
 
225
225
  ## `sf decomposer recompose`
226
226
 
@@ -266,7 +266,7 @@ EXAMPLES
266
266
  `sf decomposer recompose -x "manifest/package.xml" -m "flow"`
267
267
  ```
268
268
 
269
- _See code: [src/commands/decomposer/recompose.ts](https://github.com/mcarvin8/sf-decomposer/blob/v7.3.2/src/commands/decomposer/recompose.ts)_
269
+ _See code: [src/commands/decomposer/recompose.ts](https://github.com/mcarvin8/sf-decomposer/blob/v7.3.4/src/commands/decomposer/recompose.ts)_
270
270
 
271
271
  ## `sf decomposer verify`
272
272
 
@@ -330,7 +330,7 @@ EXAMPLES
330
330
  `sf decomposer verify -x "manifest/package.xml" --config`
331
331
  ```
332
332
 
333
- _See code: [src/commands/decomposer/verify.ts](https://github.com/mcarvin8/sf-decomposer/blob/v7.3.2/src/commands/decomposer/verify.ts)_
333
+ _See code: [src/commands/decomposer/verify.ts](https://github.com/mcarvin8/sf-decomposer/blob/v7.3.4/src/commands/decomposer/verify.ts)_
334
334
  <!-- commandsstop -->
335
335
 
336
336
  ---
@@ -26,8 +26,8 @@ function getChildSuffixMap(registryAccess) {
26
26
  // is guaranteed (by the vendored registry's own invariants) to resolve to a real parentType
27
27
  // with a children.types entry for that key.
28
28
  const childEntry = parentType?.children?.types[childXmlNameLower];
29
- /* v8 ignore next -- defensive guard; SDR registry always provides a suffix for child types */
30
29
  // Stryker disable next-line ConditionalExpression, OptionalChaining -- same registry invariant.
30
+ /* v8 ignore next -- defensive guard; SDR registry always provides a suffix for child types */
31
31
  if (childEntry?.suffix) {
32
32
  childSuffixMap.set(childEntry.suffix, childEntry);
33
33
  }
@@ -1 +1 @@
1
- {"version":3,"file":"getRegistryValuesBySuffix.js","sourceRoot":"","sources":["../../src/metadata/getRegistryValuesBySuffix.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"getRegistryValuesBySuffix.js","sourceRoot":"","sources":["../../src/metadata/getRegistryValuesBySuffix.ts"],"names":[],"mappings":"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"}
@@ -47,10 +47,13 @@ export async function parseManifest(manifestPath, ignoreDirs, repoRootOverride)
47
47
  const { index: directoryPathsByName } = directoryIndex;
48
48
  const resolvedPerGroup = await Promise.all(groupedEntries.map(async ({ parentType, parentMembers, wildcard }) => {
49
49
  const suffix = parentType.suffix;
50
- /* istanbul ignore next -- @preserve: parent metadata types always declare a suffix in SDR's registry. */
51
50
  // Stryker disable next-line all
51
+ /* v8 ignore next -- @preserve: parent metadata types always declare a suffix in SDR's registry. */
52
52
  if (!suffix)
53
53
  return undefined;
54
+ /* v8 ignore next -- @preserve: `directoryNames` (built above from these same groups'
55
+ directoryName values) always seeds every key buildPackageDirectoryIndex returns, so
56
+ `.get()` here can never miss. */
54
57
  const typeDirs = directoryPathsByName.get(`${parentType.directoryName}`) ?? [];
55
58
  // Stryker disable next-line ConditionalExpression
56
59
  if (typeDirs.length === 0) {
@@ -83,8 +86,8 @@ export async function parseManifest(manifestPath, ignoreDirs, repoRootOverride)
83
86
  }));
84
87
  const unresolvedComponents = [];
85
88
  for (const entry of resolvedPerGroup) {
86
- /* istanbul ignore next -- @preserve: undefined only reachable via the suffix-less branch already ignored above. */
87
89
  // Stryker disable next-line ConditionalExpression
90
+ /* v8 ignore next -- @preserve: undefined only reachable via the suffix-less branch already ignored above. */
88
91
  if (!entry)
89
92
  continue;
90
93
  const { suffix, xmlPaths, unresolvedMembers } = entry;
@@ -93,8 +96,9 @@ export async function parseManifest(manifestPath, ignoreDirs, repoRootOverride)
93
96
  }
94
97
  if (xmlPaths.size === 0)
95
98
  continue;
96
- /* istanbul ignore else -- @preserve: multiple parent types sharing a suffix is not produced by SDR's registry. */
97
- // Stryker disable next-line ConditionalExpression
99
+ // Multiple distinct parent types can share the same suffix in SDR's registry (e.g.
100
+ // AppointmentAssignmentPolicy and AppointmentSchedulingPolicy both use `.policy`), so a later
101
+ // group's xmlPaths must merge into the suffix's existing Set rather than overwrite it.
98
102
  if (!parentXmlsBySuffix.has(suffix)) {
99
103
  parentXmlsBySuffix.set(suffix, xmlPaths);
100
104
  orderedSuffixes.push(suffix);
@@ -144,8 +148,8 @@ export async function resolveEffectiveMetadataTypes(metadataTypes, manifest, ign
144
148
  }
145
149
  async function resolveMemberXml(typeDir, parentType, member) {
146
150
  const { suffix, strictDirectoryName, folderType } = parentType;
147
- /* istanbul ignore next -- @preserve: types reaching this point always have a suffix. */
148
151
  // Stryker disable next-line all
152
+ /* v8 ignore next -- @preserve: types reaching this point always have a suffix. */
149
153
  if (!suffix)
150
154
  return undefined;
151
155
  // Labels type has a single file regardless of member name.
@@ -170,8 +174,8 @@ async function resolveMemberXml(typeDir, parentType, member) {
170
174
  }
171
175
  async function listParentXmlPaths(typeDir, parentType) {
172
176
  const { suffix, strictDirectoryName } = parentType;
173
- /* istanbul ignore next -- @preserve: types reaching this point always have a suffix. */
174
177
  // Stryker disable next-line all
178
+ /* v8 ignore next -- @preserve: types reaching this point always have a suffix. */
175
179
  if (!suffix)
176
180
  return [];
177
181
  const metaEnding = `.${suffix}-meta.xml`;
@@ -1 +1 @@
1
- {"version":3,"file":"parseManifest.js","sourceRoot":"","sources":["../../src/metadata/parseManifest.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"parseManifest.js","sourceRoot":"","sources":["../../src/metadata/parseManifest.ts"],"names":[],"mappings":"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"}
@@ -2,8 +2,9 @@
2
2
  import { readFileSync } from 'node:fs';
3
3
  import { fileURLToPath } from 'node:url';
4
4
  // Read (not statically imported) so the compiled lib/ output doesn't need the tsconfig's
5
- // "module" target bumped just for JSON import-attribute syntax; the wireit "compile" step
6
- // copies metadataRegistry.json next to this file's compiled output.
5
+ // "module" target bumped just for JSON import-attribute syntax; tsconfig.json's "include"
6
+ // (with resolveJsonModule) has tsc copy metadataRegistry.json next to this file's compiled
7
+ // output.
7
8
  // Stryker disable next-line StringLiteral -- mutating this path breaks module load for every
8
9
  // test in the suite (readFileSync/JSON.parse throws at import time), so it's exhaustively
9
10
  // exercised already; there's no meaningful assertion to write against a hardcoded sibling path.
@@ -26,8 +27,8 @@ export class RegistryAccess {
26
27
  // is guaranteed (by the vendored registry's own invariants) to resolve to a real parentType
27
28
  // with a children.types entry for that key.
28
29
  const childType = registry.types[parentTypeId]?.children?.types[lower];
29
- /* v8 ignore next -- defensive guard; the vendored registry is always internally consistent */
30
30
  // Stryker disable next-line ConditionalExpression -- same registry invariant as above.
31
+ /* v8 ignore next 3 -- defensive guard; the vendored registry is always internally consistent */
31
32
  if (!childType) {
32
33
  throw new Error(`Metadata registry has no child type definition for '${lower}' under '${parentTypeId}'.`);
33
34
  }
@@ -1 +1 @@
1
- {"version":3,"file":"registryAccess.js","sourceRoot":"","sources":["../../../src/metadata/registry/registryAccess.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;AAEb,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAGzC,yFAAyF;AACzF,0FAA0F;AAC1F,oEAAoE;AACpE,6FAA6F;AAC7F,0FAA0F;AAC1F,gGAAgG;AAChG,MAAM,YAAY,GAAG,aAAa,CAAC,IAAI,GAAG,CAAC,yBAAyB,EAAE,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AACxF,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,YAAY,EAAE,OAAO,CAAC,CAAyB,CAAC;AAEzF;;;;;;GAMG;AACH,MAAM,OAAO,cAAc;IAChB,UAAU,GAAqC,QAAQ,CAAC,UAAU,CAAC;IAE5E,aAAa,CAAC,IAAY;QACxB,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE,CAAC;QACxC,MAAM,YAAY,GAAG,QAAQ,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;QAChD,IAAI,YAAY,EAAE,CAAC;YACjB,yFAAyF;YACzF,4FAA4F;YAC5F,4CAA4C;YAC5C,MAAM,SAAS,GAAG,QAAQ,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,QAAQ,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;YACvE,8FAA8F;YAC9F,uFAAuF;YACvF,IAAI,CAAC,SAAS,EAAE,CAAC;gBACf,MAAM,IAAI,KAAK,CAAC,uDAAuD,KAAK,YAAY,YAAY,IAAI,CAAC,CAAC;YAC5G,CAAC;YACD,OAAO,SAAS,CAAC;QACnB,CAAC;QAED,MAAM,IAAI,GAAG,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACnC,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,MAAM,IAAI,KAAK,CAAC,iDAAiD,IAAI,GAAG,CAAC,CAAC;QAC5E,CAAC;QACD,OAAO,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAC9D,CAAC;IAED,eAAe,CAAC,MAAc;QAC5B,MAAM,MAAM,GAAG,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QACzC,OAAO,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IACzD,CAAC;IAED,aAAa,CAAC,SAAiB;QAC7B,MAAM,KAAK,GAAG,SAAS,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE,CAAC;QAC7C,MAAM,YAAY,GAAG,QAAQ,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;QAChD,OAAO,YAAY,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IACjE,CAAC;CACF"}
1
+ {"version":3,"file":"registryAccess.js","sourceRoot":"","sources":["../../../src/metadata/registry/registryAccess.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;AAEb,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAGzC,yFAAyF;AACzF,0FAA0F;AAC1F,2FAA2F;AAC3F,UAAU;AACV,6FAA6F;AAC7F,0FAA0F;AAC1F,gGAAgG;AAChG,MAAM,YAAY,GAAG,aAAa,CAAC,IAAI,GAAG,CAAC,yBAAyB,EAAE,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AACxF,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,YAAY,EAAE,OAAO,CAAC,CAAyB,CAAC;AAEzF;;;;;;GAMG;AACH,MAAM,OAAO,cAAc;IAChB,UAAU,GAAqC,QAAQ,CAAC,UAAU,CAAC;IAE5E,aAAa,CAAC,IAAY;QACxB,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE,CAAC;QACxC,MAAM,YAAY,GAAG,QAAQ,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;QAChD,IAAI,YAAY,EAAE,CAAC;YACjB,yFAAyF;YACzF,4FAA4F;YAC5F,4CAA4C;YAC5C,MAAM,SAAS,GAAG,QAAQ,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,QAAQ,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;YACvE,uFAAuF;YACvF,gGAAgG;YAChG,IAAI,CAAC,SAAS,EAAE,CAAC;gBACf,MAAM,IAAI,KAAK,CAAC,uDAAuD,KAAK,YAAY,YAAY,IAAI,CAAC,CAAC;YAC5G,CAAC;YACD,OAAO,SAAS,CAAC;QACnB,CAAC;QAED,MAAM,IAAI,GAAG,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACnC,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,MAAM,IAAI,KAAK,CAAC,iDAAiD,IAAI,GAAG,CAAC,CAAC;QAC5E,CAAC;QACD,OAAO,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAC9D,CAAC;IAED,eAAe,CAAC,MAAc;QAC5B,MAAM,MAAM,GAAG,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QACzC,OAAO,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IACzD,CAAC;IAED,aAAa,CAAC,SAAiB;QAC7B,MAAM,KAAK,GAAG,SAAS,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE,CAAC;QAC7C,MAAM,YAAY,GAAG,QAAQ,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;QAChD,OAAO,YAAY,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IACjE,CAAC;CACF"}
@@ -29,9 +29,9 @@ function isMemberNestedInFolder(fullName, type, parentType, members) {
29
29
  // Resolve the correct metadata type from metadata entries in a manifest. Parents of InFolder
30
30
  // types can be detected by looking for a trailing "/" character. Ported from SDR's ManifestResolver.
31
31
  function resolveType(fullName, type, members, parentType) {
32
- /* v8 ignore next 3 -- defensive guard; the only caller only invokes this once parentType and
33
- type.folderType are both already known truthy (parentType is derived from type.folderType) */
34
32
  // Stryker disable next-line ConditionalExpression, LogicalOperator
33
+ /* v8 ignore next 2 -- defensive guard; the only caller only invokes this once parentType and
34
+ type.folderType are both already known truthy (parentType is derived from type.folderType) */
35
35
  if (!parentType || !type.folderType) {
36
36
  return type;
37
37
  }
@@ -1 +1 @@
1
- {"version":3,"file":"resolveManifestComponents.js","sourceRoot":"","sources":["../../../src/metadata/registry/resolveManifestComponents.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;AAEb,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AASpD,0FAA0F;AAC1F,2EAA2E;AAC3E,SAAS,eAAe,CAAC,QAAgB,EAAE,UAAoC;IAC7E,OAAO,UAAU,EAAE,iBAAiB,IAAI,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;AACpG,CAAC;AAED,iEAAiE;AACjE,mEAAmE;AACnE,oCAAoC;AACpC,oEAAoE;AACpE,iFAAiF;AACjF,KAAK;AACL,gGAAgG;AAChG,oCAAoC;AACpC,yCAAyC;AACzC,iFAAiF;AACjF,sCAAsC;AACtC,SAAS,sBAAsB,CAC7B,QAAgB,EAChB,IAAkB,EAClB,UAAwB,EACxB,OAAiB;IAEjB,MAAM,cAAc,GAAG,IAAI,CAAC,QAAQ,CAAC;IACrC,MAAM,gBAAgB,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,QAAQ,GAAG,CAAC,CAAC,CAAC;IACpG,8FAA8F;IAC9F,0FAA0F;IAC1F,6FAA6F;IAC7F,oEAAoE;IACpE,MAAM,mBAAmB,GAAG,UAAU,CAAC,UAAU,KAAK,UAAU,CAAC,EAAE,CAAC;IACpE,OAAO,cAAc,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,mBAAmB,CAAC;AACjE,CAAC;AAED,6FAA6F;AAC7F,qGAAqG;AACrG,SAAS,WAAW,CAClB,QAAgB,EAChB,IAAkB,EAClB,OAAiB,EACjB,UAAoC;IAEpC;oGACgG;IAChG,mEAAmE;IACnE,IAAI,CAAC,UAAU,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;QACpC,OAAO,IAAI,CAAC;IACd,CAAC;IACD,IAAI,UAAU,CAAC,iBAAiB,IAAI,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QAC3D,OAAO,UAAU,CAAC;IACpB,CAAC;IACD,OAAO,sBAAsB,CAAC,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC;AACzF,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,yBAAyB,CAAC,gBAAwB,EAAE,QAAwB;IAC1F,MAAM,EAAE,KAAK,EAAE,GAAG,gBAAgB,CAAC,gBAAgB,CAAC,CAAC;IAErD,OAAO,KAAK,CAAC,OAAO,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE;QACzC,MAAM,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;QAC1C,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC,aAAa,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QAEzF,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;YAChC,QAAQ,EAAE,eAAe,CAAC,QAAQ,EAAE,UAAU,CAAC;YAC/C,IAAI,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,WAAW,CAAC,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,UAAU,CAAC;SAC5E,CAAC,CAAC,CAAC;IACN,CAAC,CAAC,CAAC;AACL,CAAC"}
1
+ {"version":3,"file":"resolveManifestComponents.js","sourceRoot":"","sources":["../../../src/metadata/registry/resolveManifestComponents.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;AAEb,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AASpD,0FAA0F;AAC1F,2EAA2E;AAC3E,SAAS,eAAe,CAAC,QAAgB,EAAE,UAAoC;IAC7E,OAAO,UAAU,EAAE,iBAAiB,IAAI,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;AACpG,CAAC;AAED,iEAAiE;AACjE,mEAAmE;AACnE,oCAAoC;AACpC,oEAAoE;AACpE,iFAAiF;AACjF,KAAK;AACL,gGAAgG;AAChG,oCAAoC;AACpC,yCAAyC;AACzC,iFAAiF;AACjF,sCAAsC;AACtC,SAAS,sBAAsB,CAC7B,QAAgB,EAChB,IAAkB,EAClB,UAAwB,EACxB,OAAiB;IAEjB,MAAM,cAAc,GAAG,IAAI,CAAC,QAAQ,CAAC;IACrC,MAAM,gBAAgB,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,QAAQ,GAAG,CAAC,CAAC,CAAC;IACpG,8FAA8F;IAC9F,0FAA0F;IAC1F,6FAA6F;IAC7F,oEAAoE;IACpE,MAAM,mBAAmB,GAAG,UAAU,CAAC,UAAU,KAAK,UAAU,CAAC,EAAE,CAAC;IACpE,OAAO,cAAc,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,mBAAmB,CAAC;AACjE,CAAC;AAED,6FAA6F;AAC7F,qGAAqG;AACrG,SAAS,WAAW,CAClB,QAAgB,EAChB,IAAkB,EAClB,OAAiB,EACjB,UAAoC;IAEpC,mEAAmE;IACnE;oGACgG;IAChG,IAAI,CAAC,UAAU,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;QACpC,OAAO,IAAI,CAAC;IACd,CAAC;IACD,IAAI,UAAU,CAAC,iBAAiB,IAAI,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QAC3D,OAAO,UAAU,CAAC;IACpB,CAAC;IACD,OAAO,sBAAsB,CAAC,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC;AACzF,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,yBAAyB,CAAC,gBAAwB,EAAE,QAAwB;IAC1F,MAAM,EAAE,KAAK,EAAE,GAAG,gBAAgB,CAAC,gBAAgB,CAAC,CAAC;IAErD,OAAO,KAAK,CAAC,OAAO,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE;QACzC,MAAM,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;QAC1C,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC,aAAa,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QAEzF,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;YAChC,QAAQ,EAAE,eAAe,CAAC,QAAQ,EAAE,UAAU,CAAC;YAC/C,IAAI,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,WAAW,CAAC,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,UAAU,CAAC;SAC5E,CAAC,CAAC,CAAC;IACN,CAAC,CAAC,CAAC;AACL,CAAC"}
@@ -364,5 +364,5 @@
364
364
  ]
365
365
  }
366
366
  },
367
- "version": "7.3.2"
367
+ "version": "7.3.4"
368
368
  }
package/package.json CHANGED
@@ -1,31 +1,31 @@
1
1
  {
2
2
  "name": "sf-decomposer",
3
3
  "description": "Decompose Salesforce metadata into granular, VCS-friendly files; recompose for deployment.",
4
- "version": "7.3.2",
4
+ "version": "7.3.4",
5
5
  "dependencies": {
6
- "@oclif/core": "4.14.0",
7
- "@salesforce/core": "9.1.5",
8
- "@salesforce/sf-plugins-core": "13.0.3",
9
- "config-disassembler": "3.3.0"
6
+ "@oclif/core": "5.0.0",
7
+ "@salesforce/core": "9.1.9",
8
+ "@salesforce/sf-plugins-core": "13.0.4",
9
+ "config-disassembler": "3.4.1"
10
10
  },
11
11
  "devDependencies": {
12
12
  "@actions/core": "3.0.1",
13
- "@biomejs/biome": "2.5.10",
13
+ "@biomejs/biome": "2.5.11",
14
14
  "@commitlint/cli": "21.2.2",
15
15
  "@commitlint/config-conventional": "21.2.2",
16
16
  "@salesforce/cli-plugins-testkit": "5.3.66",
17
17
  "@salesforce/dev-config": "4.3.3",
18
18
  "@stryker-mutator/core": "10.0.0",
19
19
  "@stryker-mutator/vitest-runner": "10.0.0",
20
- "@types/node": "26.2.0",
20
+ "@types/node": "26.4.0",
21
21
  "@vitest/coverage-v8": "4.1.11",
22
22
  "husky": "9.1.7",
23
- "knip": "6.32.2",
24
- "lint-staged": "17.3.0",
23
+ "knip": "6.34.0",
24
+ "lint-staged": "17.4.1",
25
25
  "ls-engines": "0.10.1",
26
- "oclif": "4.23.30",
26
+ "oclif": "5.0.0",
27
27
  "shx": "0.4.0",
28
- "tsx": "4.23.12",
28
+ "tsx": "4.23.13",
29
29
  "typescript": "7.0.2",
30
30
  "vitest": "4.1.11",
31
31
  "wireit": "0.14.13"
@@ -39,8 +39,7 @@
39
39
  "/messages",
40
40
  "/oclif.manifest.json",
41
41
  "/oclif.lock",
42
- "/CHANGELOG.md",
43
- "/HANDBOOK.md"
42
+ "/CHANGELOG.md"
44
43
  ],
45
44
  "keywords": [
46
45
  "salesforce",
@@ -150,7 +149,7 @@
150
149
  ]
151
150
  },
152
151
  "compile": {
153
- "command": "tsc -p . --pretty --incremental && shx mkdir -p lib/metadata/registry && shx cp src/metadata/registry/metadataRegistry.json lib/metadata/registry/metadataRegistry.json",
152
+ "command": "tsc -p . --pretty --incremental",
154
153
  "files": [
155
154
  "src/**/*.ts",
156
155
  "src/metadata/registry/metadataRegistry.json",
@@ -343,4 +342,4 @@
343
342
  "allowScripts": {
344
343
  "esbuild@0.28.1": true
345
344
  }
346
- }
345
+ }
package/HANDBOOK.md DELETED
@@ -1,344 +0,0 @@
1
- # Admin Handbook — Decomposing Tricky Salesforce Metadata
2
-
3
- This handbook collects ready-to-paste `.sfdecomposer.config.json` recipes for the metadata types where Salesforce's native source format either doesn't decompose at all or decomposes too coarsely to diff well in version control. Every recipe in this guide:
4
-
5
- - decomposes the original file into per-piece units that survive `git diff` cleanly,
6
- - recomposes back to a **byte-identical** XML deployable to any org,
7
- - is verified by `sf decomposer verify` before you commit it.
8
-
9
- If you want the underlying option grammar instead of recipes, see the [main README](./README.md#per-type--per-component-overrides).
10
-
11
- ## Contents
12
-
13
- - [Choosing a strategy](#choosing-a-strategy)
14
- - [Common pitfalls](#common-pitfalls)
15
- - [ExternalServiceRegistration (ESR / OpenAPI schema)](#externalserviceregistration-esr--openapi-schema)
16
- - [Bots (Agentforce and Einstein)](#bots-agentforce-and-einstein)
17
- - [Flexipages (Lightning App / Record / Home pages)](#flexipages-lightning-app--record--home-pages)
18
- - [Layouts (page layouts)](#layouts-page-layouts)
19
- - [Other deeply-nested types](#other-deeply-nested-types)
20
- - [The verification workflow](#the-verification-workflow)
21
-
22
- ## Choosing a strategy
23
-
24
- Three knobs cover almost every case:
25
-
26
- | Symptom of the source XML | Reach for |
27
- |-----------------------------------------------------------------------------------------------|----------------------------------------------------------------------------------------------------|
28
- | One repeating section at the top level (e.g. `<labels>` of a custom-labels file). | `strategy: unique-id` (default). |
29
- | Lots of small repeatable tags, you want one file per tag-name, not per-instance. | `strategy: grouped-by-tag`. |
30
- | `grouped-by-tag`, but a few specific tags (e.g. `objectPermissions`) need finer-grained diff. | Add `splitTags`. |
31
- | A deeply-nested repeatable block lives _inside_ another repeatable block (the bot pattern). | Add `multiLevel`. If there are several such nested blocks, pass them as an array — see Bots below. |
32
-
33
- Hard rules the plugin always enforces (so you don't have to):
34
-
35
- - `labels`, `loyaltyProgramSetup`, and `externalServiceRegistration` are always treated as `unique-id` regardless of any override.
36
- - `externalServiceRegistration` always applies sidecar extraction for the `<schema>` element (written to `<componentName>.yaml`). No config needed.
37
-
38
- Built-in `multiLevel` defaults — applied automatically when `strategy` is `unique-id` and you do not supply your own `multiLevel` for that type. You can replace any of them by setting an explicit `multiLevel` on the override.
39
-
40
- | Metadata type | Built-in `multiLevel` |
41
- |-----------------------|---------------------------------------------------------------------|
42
- | `bot` | `["botDialogs:botDialogs:developerName", "botSteps:botSteps:type"]` |
43
- | `loyaltyProgramSetup` | `"programProcesses:programProcesses:parameterName,ruleName"` |
44
-
45
- The full registry lives in [`src/metadata/multiLevelDefaults.ts`](./src/metadata/multiLevelDefaults.ts).
46
-
47
- Everything else in this handbook is opt-in.
48
-
49
- ## Common pitfalls
50
-
51
- **1. "I added two `multiLevel` rules but only one survived."**
52
- You probably ran two `decompose` invocations back-to-back, one rule each. Don't. The disassembler rewrites `.multi_level.json` on every run, so each call replaces the prior one. Pass every rule for a given component in **one** override entry, in array form.
53
-
54
- **2. "My `multiLevel` rule is correct but recompose produces a smaller file."**
55
- On `config-disassembler` Rust ≥ 0.5.0 / Node ≥ 1.3.0 this should not happen — sibling collisions are written to per-element SHA-256 shards and surfaced as a `WARN` (see pitfall #5), not silently overwritten. If you do see a shrunken recomposed file on a current build, treat it as a regression worth capturing as a fixture.
56
-
57
- **3. "Component-scope override fields look ignored."**
58
- Component-scope wins over type-scope, but only for fields **the component override explicitly sets**. Fields it leaves out fall through to the type-scope value, then to the run-wide default. If you set `decomposedFormat: "yaml"` on a type and `strategy: "grouped-by-tag"` on the component, the component still gets `decomposedFormat: "yaml"` from the type override.
59
-
60
- **4. "Reassembly removed my decomposed directory even though I didn't pass `postPurge`."**
61
- That's by design for `multiLevel` types only. Multi-level recompose has to clean up inner-level directories so the next level can merge their reassembled XML. If you want the decomposed tree preserved for inspection, copy it before running `recompose`.
62
-
63
- **5. "Decompose succeeded but my decomposed files all have hash names."**
64
- There are two distinct causes; run the decompose under `RUST_LOG=warn` to tell them apart:
65
-
66
- - **No `WARN` line.** Your `unique_id_elements` (or the rule's third part) didn't resolve to a non-empty value on those items. Check the source XML for the elements you listed — names are case-sensitive and live at the immediate child level of each repeating item. The plugin only walks one level deep when picking a UID.
67
- - **A `WARN` line of the form `uniqueIdElements collision: <parentTag> id "X" matched N sibling elements`.** The configured key is too narrow — multiple siblings legitimately share the same value, so the collision detector falls back to per-element SHA-256 hashes for that group rather than overwrite. Add a tiebreaker to `unique_id_elements` (e.g. a compound like `name+recordType`) and re-decompose with `prePurge: true`.
68
-
69
- ## ExternalServiceRegistration (ESR / OpenAPI schema)
70
-
71
- **Why this is hard.** An `ExternalServiceRegistration` embeds its full OpenAPI (or other) schema document as raw text inside a `<schema>` XML element. This block can be hundreds of lines of YAML or JSON. Storing it inline in the `.externalServiceRegistration-meta.xml` file produces large, noisy diffs whenever the schema changes.
72
-
73
- **What the plugin does automatically.** No config is needed. The plugin applies these rules to every ESR component:
74
-
75
- - **Forced `unique-id` strategy** — grouped-by-tag is a no-op for singleton-per-component types and is silently upgraded.
76
- - **Sidecar extraction** — the `<schema>` element's text content is extracted to `<componentName>.yaml` alongside the decomposed XML shards, and a `.sidecars.json` manifest is written to record the extraction.
77
- - **Auto-detect on recompose** — recompose reads `.sidecars.json` and reinserts the schema content into `<schema>` before writing the final XML. No recompose flag is needed.
78
-
79
- **On-disk layout** for `DropboxFileManagerHandler.externalServiceRegistration-meta.xml`:
80
-
81
- ```
82
- externalServiceRegistrations/
83
- └── DropboxFileManagerHandler/
84
- ├── DropboxFileManagerHandler.yaml ← extracted <schema> content
85
- ├── .sidecars.json ← sidecar manifest; do not hand-edit
86
- └── DropboxFileManagerHandler/ ← unique-id decomposed XML shards
87
- ├── description.externalServiceRegistration-meta.xml
88
- ├── label.externalServiceRegistration-meta.xml
89
- ├── schema.externalServiceRegistration-meta.xml ← placeholder (empty text)
90
- ├── status.externalServiceRegistration-meta.xml
91
- ├── operations/
92
- │ └── uploadFile.operations-meta.xml
93
- └── ...
94
- ```
95
-
96
- **Override example.** Only needed if you want a different extension for the schema file (e.g. `json`):
97
-
98
- ```json
99
- {
100
- "overrides": [
101
- {
102
- "metadataTypes": ["externalServiceRegistration"],
103
- "sidecarElements": "schema:json"
104
- }
105
- ]
106
- }
107
- ```
108
-
109
- > **Conflict with Salesforce native decomposition.** Salesforce CLI also decomposes `ExternalServiceRegistration` natively. Never use both on the same type in the same project. See [METADATA_SUPPORT.md](./METADATA_SUPPORT.md) for guidance.
110
-
111
- ## Bots (Agentforce and Einstein)
112
-
113
- **Why this is hard.** Agentforce and Einstein bots both ship as `.bot-meta.xml`, but their internals diverge:
114
-
115
- - The bot **header** (`Bot.bot-meta.xml`) is small — a few leaves, a few `botUserList` entries.
116
- - The bot **versions** (`vN.botVersion-meta.xml`) are the painful ones. A single `BotVersion` typically contains:
117
- - `botDialogGroups` (logical groupings),
118
- - `botDialogs` (the dialogs themselves), and inside each dialog,
119
- - `botSteps` (often nested 2–3 levels deep — message, collect, transfer, condition, ...),
120
- - `mlIntents`, `conversationVariables`, `botStepConditions`, ...
121
-
122
- A flat `unique-id` decomposition of a `BotVersion` produces one giant per-dialog file with hundreds of nested steps inside. That's only marginally easier to review than the original.
123
-
124
- **The two-rule recipe — applied by default.** Under `strategy: unique-id` (the default) the plugin automatically applies:
125
-
126
- ```json
127
- "multiLevel": ["botDialogs:botDialogs:developerName", "botSteps:botSteps:type"]
128
- ```
129
-
130
- to every `bot` you decompose. You don't need to add anything to `.sfdecomposer.config.json` for the canonical Bot layout — just run `sf decomposer decompose --metadata-type bot` and you get the structure documented below. Add an explicit `multiLevel` override only if you want a different layout (see "When to use a single rule instead" further down).
131
-
132
- What this produces on disk for `Sample_Chat_Bot/v1.botVersion-meta.xml` (an Einstein chat bot from the plugin's own fixtures):
133
-
134
- ```
135
- bots/
136
- └── Sample_Chat_Bot/
137
- ├── Sample_Chat_Bot.bot-meta.xml ← bot header (untouched)
138
- ├── v1/
139
- │ ├── nlpProviders/
140
- │ │ └── EinsteinAi.nlpProviders-meta.xml
141
- │ ├── botDialogs/ ← outer rule lands here
142
- │ │ ├── Welcome/ ← one directory per dialog (named by developerName)
143
- │ │ │ ├── Welcome.xml ← dialog leaf properties
144
- │ │ │ └── botSteps/ ← inner rule lands here
145
- │ │ │ ├── 853b6432/ ← step with nested content -> own subdir
146
- │ │ │ │ ├── 853b6432.xml ← step leaf properties
147
- │ │ │ │ └── botNavigation/ ← nested step content broken out
148
- │ │ │ │ └── Redirect.botNavigation-meta.xml
149
- │ │ │ └── dc35b789/
150
- │ │ │ ├── dc35b789.xml
151
- │ │ │ └── botMessages/
152
- │ │ │ └── dc35b789.botMessages-meta.xml
153
- │ │ ├── End_Chat/
154
- │ │ │ ├── End_Chat.xml
155
- │ │ │ └── botSteps/
156
- │ │ │ ├── 9d031e75.botSteps-meta.xml ← step with no nested content -> single leaf file
157
- │ │ │ └── a7afda99/ ← step with nested content -> subdir
158
- │ │ │ └── ...
159
- │ │ └── ...
160
- │ ├── .multi_level.json ← required for recompose; do not hand-edit
161
- │ └── v1.botVersion-meta.xml ← leaf-only outer wrapper
162
- └── ...
163
- ```
164
-
165
- A few things worth knowing before you commit this:
166
-
167
- - **Dialog folders are named by developerName**, the way the recipe asks for. So `Welcome`, `End_Chat`, etc. are stable and review-friendly across deploys.
168
- - **Step folders/files are content-hashed.** The inner rule's `:type` segment tells the disassembler what to look for, but each step's nested content is what determines the on-disk name (`853b6432`, `dc35b789`, ...). The hashes are stable across runs as long as the step content doesn't change, so they diff cleanly. Don't try to "rename them to something nicer" — they'll regenerate on the next decompose.
169
- - **Each step is one of two shapes**: a leaf `<hash>.botSteps-meta.xml` file when the step has no nested content (e.g. a `Wait` step), or a `<hash>/` directory containing `<hash>.xml` plus subdirectories for the nested content (e.g. a `Message` step with `<botMessages>`, a `Navigation` step with `<botNavigation>`, an Agentforce `Action` step with `<botFlowInvocation>`). Both shapes recompose back to identical `<botSteps>` XML.
170
- - **The two rules do different things.** The outer `botDialogs` rule is what gives you per-dialog folders — that's the headline win for review-ability. The inner `botSteps` rule additionally splits each step's nested content out of the per-dialog file into per-step subdirectories. For small Einstein bots with shallow steps you can drop the inner rule and still get the dialog-level split; for heavier Agentforce bots the inner rule is the difference between a 50-line per-step subtree and a 500-line per-dialog file.
171
-
172
- **When to use a single rule instead.** If your bots have shallow steps (most Einstein chat bots, or pre-Agentforce bots), you can override the default with a single outer rule:
173
-
174
- ```json
175
- {
176
- "overrides": [{ "metadataTypes": ["bot"], "multiLevel": ["botDialogs:botDialogs:developerName"] }]
177
- }
178
- ```
179
-
180
- Each dialog still gets its own folder, but steps live as flat `*.botSteps-meta.xml` files inside instead of per-type subdirectories. Recompose is byte-identical either way; the choice is purely about how granular you want the per-step diff to be. Your override fully replaces the built-in default — no merging.
181
-
182
- > **Per-bot precision.** When one bot in your repo wants a different layout than the rest, scope the override to a single component:
183
- >
184
- > ```json
185
- > {
186
- > "components": ["bot:Legacy_Chat_Bot"],
187
- > "multiLevel": ["botDialogs:botDialogs:developerName"]
188
- > }
189
- > ```
190
- >
191
- > The default still applies to every other bot.
192
-
193
- > **Agentforce vs Einstein.** Both share the `bot` suffix and are covered by a single override. Their structural differences (Agentforce: `botFlowInvocation`, `genAi*`; Einstein: `botNavigation`, `mlIntents`) are invisible to the recipe — `multiLevel` only targets the repeating sections that exist on each side.
194
- >
195
- > **Sibling order inside `botSteps`.** Recompose orders `<botSteps>` siblings alphabetically by on-disk filename, not by document position. Salesforce ignores step order at the XML level, so deploys are unaffected — but a freshly-recomposed file may show steps shuffled compared to the originally-retrieved source. The committed fixtures in this repo are baked from the recompose output for that reason; `sf decomposer verify` treats the baked output as the source of truth.
196
-
197
- ## Flexipages (Lightning App / Record / Home pages)
198
-
199
- **Why this is hard.** A non-trivial flexipage looks like:
200
-
201
- ```xml
202
- <FlexiPage>
203
- <flexiPageRegions>
204
- <itemInstances>
205
- <componentInstance>
206
- <componentInstanceProperties>...</componentInstanceProperties>
207
- <componentName>...</componentName>
208
- </componentInstance>
209
- </itemInstances>
210
- <itemInstances>...</itemInstances>
211
- ...
212
- </flexiPageRegions>
213
- <flexiPageRegions>...</flexiPageRegions>
214
- </FlexiPage>
215
- ```
216
-
217
- Two repeating layers (`flexiPageRegions → itemInstances`) and component identity is buried inside `componentInstance` — the surrounding wrappers don't have a stable name, so a naive `unique-id` pass produces hash-named files that churn whenever a component is reordered.
218
-
219
- **Recipe — flexiPageRegions out, then itemInstances per region.**
220
-
221
- ```json
222
- {
223
- "overrides": [
224
- {
225
- "metadataTypes": ["flexipage"],
226
- "strategy": "unique-id",
227
- "multiLevel": ["flexiPageRegions:flexiPageRegions:name", "itemInstances:itemInstances:componentName,facetId"]
228
- }
229
- ]
230
- }
231
- ```
232
-
233
- What you'll see on disk:
234
-
235
- ```
236
- flexipages/
237
- └── Account_Record_Page/
238
- ├── flexiPageRegions/
239
- │ ├── header.flexiPageRegions-meta.xml
240
- │ ├── main.flexiPageRegions-meta.xml
241
- │ └── main/
242
- │ └── itemInstances/
243
- │ ├── force_highlightsPanel.itemInstances-meta.xml
244
- │ ├── runtime_sales_activities__activitiesComponent.itemInstances-meta.xml
245
- │ └── ...
246
- └── Account_Record_Page.flexipage-meta.xml
247
- ```
248
-
249
- **When to adjust.**
250
-
251
- - Flexipages where regions are addressed by `regionId` instead of `name` — swap the first rule to `flexiPageRegions:flexiPageRegions:regionId,name`.
252
- - If the same `componentName` appears multiple times in one region (common for blank `force:emptySpace`), include `facetId` (already in the recipe) and, if needed, a stable property: `itemInstances:itemInstances:componentName,facetId,componentInstanceProperties.value`.
253
-
254
- ## Layouts (page layouts)
255
-
256
- **Why this is hard.** Layouts have three nested repeatables:
257
-
258
- ```xml
259
- <Layout>
260
- <layoutSections>
261
- <layoutColumns>
262
- <layoutItems>
263
- <field>...</field>
264
- </layoutItems>
265
- </layoutColumns>
266
- </layoutSections>
267
- </Layout>
268
- ```
269
-
270
- For a fat object (Account, Opportunity), this often runs to thousands of lines. Reviewing a "moved one field from column 1 to column 2" change in the raw XML is painful.
271
-
272
- **Recipe — section out, item per field.**
273
-
274
- ```json
275
- {
276
- "overrides": [
277
- {
278
- "metadataTypes": ["layout"],
279
- "strategy": "unique-id",
280
- "multiLevel": ["layoutSections:layoutSections:label", "layoutItems:layoutItems:field,customLink,emptySpace"]
281
- }
282
- ]
283
- }
284
- ```
285
-
286
- What you'll see on disk:
287
-
288
- ```
289
- layouts/
290
- └── Account-Account_Layout/
291
- ├── layoutSections/
292
- │ ├── Account_Information.layoutSections-meta.xml
293
- │ ├── Address_Information.layoutSections-meta.xml
294
- │ └── Account_Information/
295
- │ └── layoutItems/
296
- │ ├── Name.layoutItems-meta.xml
297
- │ ├── Type.layoutItems-meta.xml
298
- │ └── ...
299
- └── Account-Account_Layout.layout-meta.xml
300
- ```
301
-
302
- **Caveats.**
303
-
304
- - Empty-space layout items (`<emptySpace>true</emptySpace>` with no `field`) all collapse to the same key. The recipe above falls through to `customLink` and then `emptySpace`, but if you have many empty-space spacers per section you'll get hash-named tiebreakers. That's fine for diffs (they only churn when the layout changes), just be aware.
305
- - Sections with duplicate labels are unusual but legal (e.g. two "Custom Links" sections). If you hit collisions, add a stable secondary like `style`: `layoutSections:layoutSections:label,style`.
306
-
307
- ## Other deeply-nested types
308
-
309
- These follow the same pattern; pick the rules that match your repo's data. None of these are decomposed natively by Salesforce.
310
-
311
- | Metadata type | Suggested override |
312
- |--------------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
313
- | `flow` | `multiLevel: ["actionCalls:actionCalls:name", "decisions:decisions:name", "rules:rules:name"]` |
314
- | `globalValueSet` | `multiLevel: ["customValue:customValue:fullName"]` — handy when value sets have hundreds of picks. |
315
- | `field` (CustomField) | `multiLevel: "valueSet:valueSetDefinition:fullName"` — splits each picklist value into its own file. Only effective on fields that define picklist values inline; fields referencing a global value set or non-picklist fields are leaf-only and skipped. |
316
- | `marketingappextension` | `multiLevel: ["activityDefinitions:activityDefinitions:apiName"]` |
317
- | `cmsDeliveryChannel` (and other CMS types) | `strategy: grouped-by-tag` plus `splitTags` for any wide repeatable tag. |
318
- | `dashboard` | `multiLevel: ["components:components:title"]` — one file per dashboard widget. |
319
-
320
- If a metadata type has a single deeply-nested repeatable block, a one-rule `multiLevel` is enough. Reach for the array form only when you have **two or more** distinct nested sections you want addressable on disk.
321
-
322
- ## The verification workflow
323
-
324
- Always verify a new override before committing it:
325
-
326
- ```bash
327
- # 1. Stash any uncommitted source first.
328
- git stash --include-untracked
329
-
330
- # 2. Decompose with the new override.
331
- sf decomposer decompose -m "bot" --config
332
-
333
- # 3. Recompose back from the decomposed tree.
334
- sf decomposer recompose -m "bot"
335
-
336
- # 4. Check the round-trip didn't drift.
337
- sf decomposer verify -m "bot" --config
338
- ```
339
-
340
- `sf decomposer verify` is non-destructive: for each parent metadata XML file it disassembles and reassembles a copy in an isolated temp directory and compares the result to your committed source. If anything drifts (content, missing file, sibling reorder) it tells you exactly which paths broke. Treat any drift as a blocker — fix the override (or fall back to the previous one) before committing.
341
-
342
- ---
343
-
344
- When in doubt: write the override, run `verify`, read the diff. Every recipe in this handbook was derived that way.