sf-decomposer 6.37.0 → 6.38.0
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 +7 -0
- package/HANDBOOK.md +1 -1
- package/README.md +9 -6
- package/lib/commands/decomposer/decompose.js +7 -20
- package/lib/commands/decomposer/decompose.js.map +1 -1
- package/lib/commands/decomposer/recompose.js +7 -20
- package/lib/commands/decomposer/recompose.js.map +1 -1
- package/lib/commands/decomposer/verify.js +7 -20
- package/lib/commands/decomposer/verify.js.map +1 -1
- package/lib/core/decomposeMetadataTypes.js +2 -27
- package/lib/core/decomposeMetadataTypes.js.map +1 -1
- package/lib/core/recomposeMetadataTypes.js +2 -27
- package/lib/core/recomposeMetadataTypes.js.map +1 -1
- package/lib/core/verifyMetadataTypes.d.ts +12 -7
- package/lib/core/verifyMetadataTypes.js +111 -124
- package/lib/core/verifyMetadataTypes.js.map +1 -1
- package/lib/helpers/configOverrides.d.ts +13 -0
- package/lib/helpers/configOverrides.js +33 -2
- package/lib/helpers/configOverrides.js.map +1 -1
- package/lib/helpers/constants.d.ts +1 -0
- package/lib/helpers/constants.js +3 -0
- package/lib/helpers/constants.js.map +1 -1
- package/lib/metadata/getPackageDirectories.js +4 -0
- package/lib/metadata/getPackageDirectories.js.map +1 -1
- package/lib/metadata/getRegistryValuesBySuffix.js +2 -3
- package/lib/metadata/getRegistryValuesBySuffix.js.map +1 -1
- package/lib/metadata/listParentXmlFiles.d.ts +26 -0
- package/lib/metadata/listParentXmlFiles.js +116 -0
- package/lib/metadata/listParentXmlFiles.js.map +1 -0
- package/lib/metadata/parseManifest.d.ts +10 -0
- package/lib/metadata/parseManifest.js +35 -0
- package/lib/metadata/parseManifest.js.map +1 -1
- package/lib/service/decompose/decomposeFileHandler.js +4 -47
- package/lib/service/decompose/decomposeFileHandler.js.map +1 -1
- package/lib/service/decompose/resolveEffectiveDisassembleOptions.d.ts +21 -0
- package/lib/service/decompose/resolveEffectiveDisassembleOptions.js +57 -0
- package/lib/service/decompose/resolveEffectiveDisassembleOptions.js.map +1 -0
- package/lib/service/recompose/recomposeFileHandler.js +2 -1
- package/lib/service/recompose/recomposeFileHandler.js.map +1 -1
- package/messages/decomposer.verify.md +5 -5
- package/oclif.manifest.json +2 -2
- package/package.json +4 -3
- package/lib/service/verify/diffDirectories.d.ts +0 -34
- package/lib/service/verify/diffDirectories.js +0 -121
- package/lib/service/verify/diffDirectories.js.map +0 -1
package/CHANGELOG.md
CHANGED
|
@@ -5,6 +5,13 @@
|
|
|
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
|
+
## [6.38.0](https://github.com/mcarvin8/sf-decomposer/compare/v6.37.0...v6.38.0) (2026-07-07)
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
### Features
|
|
12
|
+
|
|
13
|
+
* **verify:** use config-disassembler's verifyXmlRoundtrip directly ([#517](https://github.com/mcarvin8/sf-decomposer/issues/517)) ([fb76c58](https://github.com/mcarvin8/sf-decomposer/commit/fb76c58d2f3986640dc5aeda41d8c63ddfc53a15))
|
|
14
|
+
|
|
8
15
|
## [6.37.0](https://github.com/mcarvin8/sf-decomposer/compare/v6.36.0...v6.37.0) (2026-07-01)
|
|
9
16
|
|
|
10
17
|
|
package/HANDBOOK.md
CHANGED
|
@@ -337,7 +337,7 @@ sf decomposer recompose -m "bot"
|
|
|
337
337
|
sf decomposer verify -m "bot" --config
|
|
338
338
|
```
|
|
339
339
|
|
|
340
|
-
`sf decomposer verify` is non-destructive: it
|
|
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
341
|
|
|
342
342
|
---
|
|
343
343
|
|
package/README.md
CHANGED
|
@@ -138,11 +138,11 @@ Pass `-x manifest/package.xml` to both `decompose` and `recompose` (and `deploy`
|
|
|
138
138
|
|
|
139
139
|
### Commands
|
|
140
140
|
|
|
141
|
-
| Command | Description
|
|
142
|
-
|
|
143
|
-
| `sf decomposer decompose` | Decompose metadata in package directories into smaller files.
|
|
144
|
-
| `sf decomposer recompose` | Recompose decomposed files back into deployment-ready metadata.
|
|
145
|
-
| `sf decomposer verify` | Round-trip check:
|
|
141
|
+
| Command | Description |
|
|
142
|
+
|---------------------------|-----------------------------------------------------------------------------------|
|
|
143
|
+
| `sf decomposer decompose` | Decompose metadata in package directories into smaller files. |
|
|
144
|
+
| `sf decomposer recompose` | Recompose decomposed files back into deployment-ready metadata. |
|
|
145
|
+
| `sf decomposer verify` | Round-trip check: disassemble + reassemble each parent XML in isolation and diff. |
|
|
146
146
|
|
|
147
147
|
#### sf decomposer decompose
|
|
148
148
|
|
|
@@ -230,7 +230,9 @@ sf decomposer recompose --config
|
|
|
230
230
|
|
|
231
231
|
#### sf decomposer verify
|
|
232
232
|
|
|
233
|
-
Non-destructive round-trip check:
|
|
233
|
+
Non-destructive round-trip check: disassembles and reassembles each parent metadata XML file in an isolated temp directory, then compares the reconstructed XML against the original using **structural XML equality** (sibling and attribute order are ignored). Exits non-zero on any drift; your working tree is never modified.
|
|
234
|
+
|
|
235
|
+
> RECOMMENDATION: Set `RUST_LOG=off` in your environment variables to remove rust crate noise on the verify command.
|
|
234
236
|
|
|
235
237
|
```
|
|
236
238
|
USAGE
|
|
@@ -643,6 +645,7 @@ The underlying Rust crate logs through [env_logger](https://docs.rs/env_logger).
|
|
|
643
645
|
|------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
|
|
644
646
|
| `RUST_LOG=error` | Default. Parse errors and skipped files (leaf-only XML — primitives only, nothing to decompose). |
|
|
645
647
|
| `RUST_LOG=warn` | Adds [sibling-collision fallback](#filename-safety-unique-id) signals — one line per colliding group (parent tag, collided id, sibling count). **Recommended in CI** when shipping overrides. |
|
|
648
|
+
| `RUST_LOG=off` | Disables rust crate logging. **Recommended** for the `sf decomposer verify` command. |
|
|
646
649
|
|
|
647
650
|
Example `WARN` (CustomApplication where four `actionOverrides` siblings shared the action name `View`):
|
|
648
651
|
|
|
@@ -1,12 +1,9 @@
|
|
|
1
1
|
'use strict';
|
|
2
|
-
import { access } from 'node:fs/promises';
|
|
3
|
-
import { resolve } from 'node:path';
|
|
4
2
|
import { Messages } from '@salesforce/core';
|
|
5
3
|
import { Flags, SfCommand } from '@salesforce/sf-plugins-core';
|
|
6
4
|
import { decomposeMetadataTypes } from '../../core/decomposeMetadataTypes.js';
|
|
7
|
-
import { loadConfigFile, parseConfigSuffixes, resolveDefaultConfigPath } from '../../helpers/configOverrides.js';
|
|
5
|
+
import { loadConfigFile, parseConfigSuffixes, resolveDefaultConfigPath, validateConfigManifest, } from '../../helpers/configOverrides.js';
|
|
8
6
|
import { DECOMPOSED_FILE_TYPES, DECOMPOSED_STRATEGIES } from '../../helpers/constants.js';
|
|
9
|
-
import { getRepoRoot } from '../../service/core/getRepoRoot.js';
|
|
10
7
|
Messages.importMessagesDirectoryFromMetaUrl(import.meta.url);
|
|
11
8
|
const messages = Messages.loadMessages('sf-decomposer', 'decomposer.decompose');
|
|
12
9
|
export default class DecomposerDecompose extends SfCommand {
|
|
@@ -108,22 +105,12 @@ export default class DecomposerDecompose extends SfCommand {
|
|
|
108
105
|
updateForceignore = flags['update-forceignore'] || (config.updateForceignore ?? false);
|
|
109
106
|
updateGitattributes = flags['update-gitattributes'] || (config.updateGitattributes ?? false);
|
|
110
107
|
overrides = config.overrides;
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
if (metadataTypes?.length) {
|
|
118
|
-
this.warn(`Config manifest "${configManifest}" not found on disk. Falling back to metadataSuffixes from config.`);
|
|
119
|
-
manifest = undefined;
|
|
120
|
-
}
|
|
121
|
-
else {
|
|
122
|
-
throw new Error(`Config manifest "${configManifest}" not found on disk and no metadataSuffixes are defined in the config. ` +
|
|
123
|
-
'Ensure the manifest exists before running this command, or add metadataSuffixes to the config as a fallback.', { cause: err });
|
|
124
|
-
}
|
|
125
|
-
}
|
|
126
|
-
}
|
|
108
|
+
manifest = await validateConfigManifest({
|
|
109
|
+
configManifest,
|
|
110
|
+
metadataTypes,
|
|
111
|
+
manifest,
|
|
112
|
+
warn: this.warn.bind(this),
|
|
113
|
+
});
|
|
127
114
|
}
|
|
128
115
|
if (!metadataTypes?.length && !manifest) {
|
|
129
116
|
throw messages.createError('error.missingMetadataOrManifest');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"decompose.js","sourceRoot":"","sources":["../../../src/commands/decomposer/decompose.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;AAEb,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"decompose.js","sourceRoot":"","sources":["../../../src/commands/decomposer/decompose.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,11 +1,8 @@
|
|
|
1
1
|
'use strict';
|
|
2
|
-
import { access } from 'node:fs/promises';
|
|
3
|
-
import { resolve } from 'node:path';
|
|
4
2
|
import { Messages } from '@salesforce/core';
|
|
5
3
|
import { Flags, SfCommand } from '@salesforce/sf-plugins-core';
|
|
6
4
|
import { recomposeMetadataTypes } from '../../core/recomposeMetadataTypes.js';
|
|
7
|
-
import { loadConfigFile, parseConfigSuffixes, resolveDefaultConfigPath } from '../../helpers/configOverrides.js';
|
|
8
|
-
import { getRepoRoot } from '../../service/core/getRepoRoot.js';
|
|
5
|
+
import { loadConfigFile, parseConfigSuffixes, resolveDefaultConfigPath, validateConfigManifest, } from '../../helpers/configOverrides.js';
|
|
9
6
|
Messages.importMessagesDirectoryFromMetaUrl(import.meta.url);
|
|
10
7
|
const messages = Messages.loadMessages('sf-decomposer', 'decomposer.recompose');
|
|
11
8
|
export default class DecomposerRecompose extends SfCommand {
|
|
@@ -56,22 +53,12 @@ export default class DecomposerRecompose extends SfCommand {
|
|
|
56
53
|
manifest ??= config.manifest;
|
|
57
54
|
ignoreDirs ??= parseConfigSuffixes(config.ignorePackageDirectories);
|
|
58
55
|
postpurge = flags['postpurge'] || (config.postPurge ?? false);
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
if (metadataTypes?.length) {
|
|
66
|
-
this.warn(`Config manifest "${configManifest}" not found on disk. Falling back to metadataSuffixes from config.`);
|
|
67
|
-
manifest = undefined;
|
|
68
|
-
}
|
|
69
|
-
else {
|
|
70
|
-
throw new Error(`Config manifest "${configManifest}" not found on disk and no metadataSuffixes are defined in the config. ` +
|
|
71
|
-
'Ensure the manifest exists before running this command, or add metadataSuffixes to the config as a fallback.', { cause: err });
|
|
72
|
-
}
|
|
73
|
-
}
|
|
74
|
-
}
|
|
56
|
+
manifest = await validateConfigManifest({
|
|
57
|
+
configManifest,
|
|
58
|
+
metadataTypes,
|
|
59
|
+
manifest,
|
|
60
|
+
warn: this.warn.bind(this),
|
|
61
|
+
});
|
|
75
62
|
}
|
|
76
63
|
if (!metadataTypes?.length && !manifest) {
|
|
77
64
|
throw messages.createError('error.missingMetadataOrManifest');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"recompose.js","sourceRoot":"","sources":["../../../src/commands/decomposer/recompose.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;AAEb,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"recompose.js","sourceRoot":"","sources":["../../../src/commands/decomposer/recompose.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,12 +1,9 @@
|
|
|
1
1
|
'use strict';
|
|
2
|
-
import { access } from 'node:fs/promises';
|
|
3
|
-
import { resolve } from 'node:path';
|
|
4
2
|
import { Messages } from '@salesforce/core';
|
|
5
3
|
import { Flags, SfCommand } from '@salesforce/sf-plugins-core';
|
|
6
4
|
import { verifyMetadataTypes } from '../../core/verifyMetadataTypes.js';
|
|
7
|
-
import { loadConfigFile, parseConfigSuffixes, resolveDefaultConfigPath } from '../../helpers/configOverrides.js';
|
|
5
|
+
import { loadConfigFile, parseConfigSuffixes, resolveDefaultConfigPath, validateConfigManifest, } from '../../helpers/configOverrides.js';
|
|
8
6
|
import { DECOMPOSED_FILE_TYPES, DECOMPOSED_STRATEGIES } from '../../helpers/constants.js';
|
|
9
|
-
import { getRepoRoot } from '../../service/core/getRepoRoot.js';
|
|
10
7
|
Messages.importMessagesDirectoryFromMetaUrl(import.meta.url);
|
|
11
8
|
const messages = Messages.loadMessages('sf-decomposer', 'decomposer.verify');
|
|
12
9
|
export default class DecomposerVerify extends SfCommand {
|
|
@@ -80,22 +77,12 @@ export default class DecomposerVerify extends SfCommand {
|
|
|
80
77
|
strategy = flags['strategy'] ?? config.strategy ?? 'unique-id';
|
|
81
78
|
decomposeNestedPerms = flags['decompose-nested-permissions'] || (config.decomposeNestedPermissions ?? false);
|
|
82
79
|
overrides = config.overrides;
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
if (metadataTypes?.length) {
|
|
90
|
-
this.warn(`Config manifest "${configManifest}" not found on disk. Falling back to metadataSuffixes from config.`);
|
|
91
|
-
manifest = undefined;
|
|
92
|
-
}
|
|
93
|
-
else {
|
|
94
|
-
throw new Error(`Config manifest "${configManifest}" not found on disk and no metadataSuffixes are defined in the config. ` +
|
|
95
|
-
'Ensure the manifest exists before running this command, or add metadataSuffixes to the config as a fallback.', { cause: err });
|
|
96
|
-
}
|
|
97
|
-
}
|
|
98
|
-
}
|
|
80
|
+
manifest = await validateConfigManifest({
|
|
81
|
+
configManifest,
|
|
82
|
+
metadataTypes,
|
|
83
|
+
manifest,
|
|
84
|
+
warn: this.warn.bind(this),
|
|
85
|
+
});
|
|
99
86
|
}
|
|
100
87
|
if (!metadataTypes?.length && !manifest) {
|
|
101
88
|
throw messages.createError('error.missingMetadataOrManifest');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"verify.js","sourceRoot":"","sources":["../../../src/commands/decomposer/verify.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;AAEb,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"verify.js","sourceRoot":"","sources":["../../../src/commands/decomposer/verify.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,38 +4,13 @@ import { resolveDecomposeOptionsForType } from '../helpers/configOverrides.js';
|
|
|
4
4
|
import { CONCURRENCY_LIMITS } from '../helpers/constants.js';
|
|
5
5
|
import { pLimit } from '../helpers/pLimit.js';
|
|
6
6
|
import { getRegistryValuesBySuffix } from '../metadata/getRegistryValuesBySuffix.js';
|
|
7
|
-
import {
|
|
7
|
+
import { resolveEffectiveMetadataTypes } from '../metadata/parseManifest.js';
|
|
8
8
|
import { updateForceignoreFile } from '../service/core/updateForceignore.js';
|
|
9
9
|
import { updateGitattributesFile } from '../service/core/updateGitattributes.js';
|
|
10
10
|
import { decomposeFileHandler } from '../service/decompose/decomposeFileHandler.js';
|
|
11
11
|
export async function decomposeMetadataTypes(options) {
|
|
12
12
|
const { metadataTypes, prepurge, postpurge, format, ignoreDirs, strategy, decomposeNestedPerms, manifest, overrides, updateForceignore, updateGitattributes, log, repoRoot, } = options;
|
|
13
|
-
|
|
14
|
-
let effectiveTypes;
|
|
15
|
-
if (manifest) {
|
|
16
|
-
manifestFilter = await parseManifest(manifest, ignoreDirs, repoRoot);
|
|
17
|
-
for (const { type, member } of manifestFilter.unresolvedComponents) {
|
|
18
|
-
log(`Warning: manifest component ${type}:${member} not found in local source; skipping.`);
|
|
19
|
-
}
|
|
20
|
-
// Stryker disable next-line ConditionalExpression, EqualityOperator
|
|
21
|
-
if (metadataTypes && metadataTypes.length > 0) {
|
|
22
|
-
const manifestTypes = new Set(manifestFilter.suffixes);
|
|
23
|
-
effectiveTypes = metadataTypes.filter((type) => manifestTypes.has(type));
|
|
24
|
-
}
|
|
25
|
-
else {
|
|
26
|
-
effectiveTypes = manifestFilter.suffixes;
|
|
27
|
-
}
|
|
28
|
-
}
|
|
29
|
-
else {
|
|
30
|
-
if (!metadataTypes || metadataTypes.length === 0) {
|
|
31
|
-
throw Error('Either --metadata-type or --manifest must be provided.');
|
|
32
|
-
}
|
|
33
|
-
effectiveTypes = metadataTypes;
|
|
34
|
-
}
|
|
35
|
-
if (effectiveTypes.some((t) => t === 'botVersion')) {
|
|
36
|
-
log('Warning: `botVersion` suffix is not supported; automatically using `bot` instead.');
|
|
37
|
-
effectiveTypes = [...new Set(effectiveTypes.map((t) => (t === 'botVersion' ? 'bot' : t)))];
|
|
38
|
-
}
|
|
13
|
+
const { manifestFilter, effectiveTypes } = await resolveEffectiveMetadataTypes(metadataTypes, manifest, ignoreDirs, repoRoot, log);
|
|
39
14
|
if (effectiveTypes.length === 0) {
|
|
40
15
|
log('No metadata types to decompose after applying the manifest filter.');
|
|
41
16
|
return { metadata: [] };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"decomposeMetadataTypes.js","sourceRoot":"","sources":["../../src/core/decomposeMetadataTypes.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;AAEb,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC9C,OAAO,EAAE,8BAA8B,EAAE,MAAM,+BAA+B,CAAC;AAC/E,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAE9C,OAAO,EAAE,yBAAyB,EAAE,MAAM,0CAA0C,CAAC;AACrF,OAAO,
|
|
1
|
+
{"version":3,"file":"decomposeMetadataTypes.js","sourceRoot":"","sources":["../../src/core/decomposeMetadataTypes.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,36 +2,11 @@
|
|
|
2
2
|
import { CONCURRENCY_LIMITS } from '../helpers/constants.js';
|
|
3
3
|
import { pLimit } from '../helpers/pLimit.js';
|
|
4
4
|
import { getRegistryValuesBySuffix } from '../metadata/getRegistryValuesBySuffix.js';
|
|
5
|
-
import {
|
|
5
|
+
import { resolveEffectiveMetadataTypes } from '../metadata/parseManifest.js';
|
|
6
6
|
import { recomposeFileHandler } from '../service/recompose/recomposeFileHandler.js';
|
|
7
7
|
export async function recomposeMetadataTypes(options) {
|
|
8
8
|
const { metadataTypes, postpurge, ignoreDirs, manifest, log, repoRoot } = options;
|
|
9
|
-
|
|
10
|
-
let effectiveTypes;
|
|
11
|
-
if (manifest) {
|
|
12
|
-
manifestFilter = await parseManifest(manifest, ignoreDirs, repoRoot);
|
|
13
|
-
for (const { type, member } of manifestFilter.unresolvedComponents) {
|
|
14
|
-
log(`Warning: manifest component ${type}:${member} not found in local source; skipping.`);
|
|
15
|
-
}
|
|
16
|
-
// Stryker disable next-line ConditionalExpression, EqualityOperator
|
|
17
|
-
if (metadataTypes && metadataTypes.length > 0) {
|
|
18
|
-
const manifestTypes = new Set(manifestFilter.suffixes);
|
|
19
|
-
effectiveTypes = metadataTypes.filter((type) => manifestTypes.has(type));
|
|
20
|
-
}
|
|
21
|
-
else {
|
|
22
|
-
effectiveTypes = manifestFilter.suffixes;
|
|
23
|
-
}
|
|
24
|
-
}
|
|
25
|
-
else {
|
|
26
|
-
if (!metadataTypes || metadataTypes.length === 0) {
|
|
27
|
-
throw Error('Either --metadata-type or --manifest must be provided.');
|
|
28
|
-
}
|
|
29
|
-
effectiveTypes = metadataTypes;
|
|
30
|
-
}
|
|
31
|
-
if (effectiveTypes.some((t) => t === 'botVersion')) {
|
|
32
|
-
log('Warning: `botVersion` suffix is not supported; automatically using `bot` instead.');
|
|
33
|
-
effectiveTypes = [...new Set(effectiveTypes.map((t) => (t === 'botVersion' ? 'bot' : t)))];
|
|
34
|
-
}
|
|
9
|
+
const { manifestFilter, effectiveTypes } = await resolveEffectiveMetadataTypes(metadataTypes, manifest, ignoreDirs, repoRoot, log);
|
|
35
10
|
if (effectiveTypes.length === 0) {
|
|
36
11
|
log('No metadata types to recompose after applying the manifest filter.');
|
|
37
12
|
return { metadata: [] };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"recomposeMetadataTypes.js","sourceRoot":"","sources":["../../src/core/recomposeMetadataTypes.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;AAEb,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAE9C,OAAO,EAAE,yBAAyB,EAAE,MAAM,0CAA0C,CAAC;AACrF,OAAO,
|
|
1
|
+
{"version":3,"file":"recomposeMetadataTypes.js","sourceRoot":"","sources":["../../src/core/recomposeMetadataTypes.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;AAEb,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAE9C,OAAO,EAAE,yBAAyB,EAAE,MAAM,0CAA0C,CAAC;AACrF,OAAO,EAAE,6BAA6B,EAAE,MAAM,8BAA8B,CAAC;AAC7E,OAAO,EAAE,oBAAoB,EAAE,MAAM,8CAA8C,CAAC;AAEpF,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAAC,OAAyB;IACpE,MAAM,EAAE,aAAa,EAAE,SAAS,EAAE,UAAU,EAAE,QAAQ,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC;IAElF,MAAM,EAAE,cAAc,EAAE,cAAc,EAAE,GAAG,MAAM,6BAA6B,CAC5E,aAAa,EACb,QAAQ,EACR,UAAU,EACV,QAAQ,EACR,GAAG,CACJ,CAAC;IAEF,IAAI,cAAc,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAChC,GAAG,CAAC,oEAAoE,CAAC,CAAC;QAC1E,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC;IAC1B,CAAC;IAED,4EAA4E;IAC5E,MAAM,KAAK,GAAG,MAAM,CAAC,kBAAkB,CAAC,cAAc,CAAC,CAAC;IAExD,MAAM,SAAS,GAAa,EAAE,CAAC;IAE/B,MAAM,KAAK,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC,YAAY,EAAE,EAAE,CAChD,KAAK,CAAC,KAAK,IAAI,EAAE;QACf,MAAM,gBAAgB,GAAG,cAAc,EAAE,kBAAkB,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;QAE9E,IAAI,cAAc,CAAC;QACnB,IAAI,CAAC;YACH,CAAC,EAAE,cAAc,EAAE,GAAG,MAAM,yBAAyB,CAAC,YAAY,EAAE,WAAW,EAAE,UAAU,EAAE,QAAQ,CAAC,CAAC,CAAC;QAC1G,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,uGAAuG;YACvG,IAAI,CAAC,cAAc;gBAAE,MAAM,GAAG,CAAC;YAC/B,gGAAgG;YAChG,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YACjE,GAAG,CAAC,YAAY,YAAY,KAAK,OAAO,EAAE,CAAC,CAAC;YAC5C,OAAO;QACT,CAAC;QAED,MAAM,oBAAoB,CAAC,cAAc,EAAE,SAAS,EAAE,gBAAgB,CAAC,CAAC;QACxE,SAAS,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QAC7B,GAAG,CAAC,kEAAkE,YAAY,EAAE,CAAC,CAAC;IACxF,CAAC,CAAC,CACH,CAAC;IAEF,MAAM,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IAEzB,OAAO;QACL,QAAQ,EAAE,SAAS;KACpB,CAAC;AACJ,CAAC"}
|
|
@@ -1,12 +1,17 @@
|
|
|
1
1
|
import { VerifyOptions, VerifyResult } from '../helpers/types.js';
|
|
2
2
|
/**
|
|
3
|
-
* Run a non-destructive round-trip check
|
|
4
|
-
*
|
|
5
|
-
*
|
|
3
|
+
* Run a non-destructive round-trip check directly against the user's repo. For every parent
|
|
4
|
+
* metadata XML file belonging to the requested (or manifest-filtered) metadata types, disassemble
|
|
5
|
+
* + reassemble it inside an isolated temp directory (via `verifyXmlRoundtrip`, which never touches
|
|
6
|
+
* the real file) and compare the reconstructed XML against the original.
|
|
6
7
|
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
8
|
+
* Unlike a real decompose/recompose run, this never writes to the user's working tree at all --
|
|
9
|
+
* `verifyXmlRoundtrip` owns its own temp-directory isolation per file, so there is no scratch
|
|
10
|
+
* project to build or clean up here.
|
|
11
|
+
*
|
|
12
|
+
* The returned `drift` array is empty when every parent XML would survive the round trip
|
|
13
|
+
* semantically; otherwise each entry names the offending file (relative to its package directory)
|
|
14
|
+
* and a short reason. `reordered` is informational only -- sibling/attribute order is not
|
|
15
|
+
* preserved by design, and Salesforce treats metadata as order-agnostic.
|
|
11
16
|
*/
|
|
12
17
|
export declare function verifyMetadataTypes(options: VerifyOptions): Promise<VerifyResult>;
|