sf-decomposer
Version:
Split large Salesforce metadata files into version-control-friendly pieces and rebuild deployment-ready files.
63 lines • 2.3 kB
JavaScript
;
import { readFile } from 'node:fs/promises';
import { resolve } from 'node:path';
import { decomposeMetadataTypes } from '../core/decomposeMetadataTypes.js';
import { getRepoRoot } from '../service/core/getRepoRoot.js';
import { HOOK_CONFIG_JSON } from '../helpers/constants.js';
function buildDecomposeOptions(configFile, log) {
const metadataSuffixes = configFile.metadataSuffixes || '.';
const ignorePackageDirs = configFile.ignorePackageDirectories || '';
const manifest = configFile.manifest ?? '';
if (metadataSuffixes.trim() === '.' && manifest.trim() === '') {
return undefined;
}
const metadataTypes = metadataSuffixes.trim() !== '.'
? metadataSuffixes
.split(',')
.map((type) => type.replace(/,/g, '').trim())
.filter((type) => type.length > 0)
: undefined;
const ignoreDirs = ignorePackageDirs.trim() !== ''
? ignorePackageDirs
.split(',')
.map((dir) => dir.replace(/,/g, '').trim())
.filter((dir) => dir.length > 0)
: undefined;
return {
metadataTypes,
prepurge: configFile.prePurge || false,
postpurge: configFile.postPurge || false,
format: configFile.decomposedFormat || 'xml',
ignoreDirs,
strategy: configFile.strategy || 'unique-id',
decomposeNestedPerms: configFile.decomposeNestedPermissions || false,
manifest: manifest.trim() !== '' ? manifest.trim() : undefined,
overrides: configFile.overrides,
log,
};
}
export const scopedPostRetrieve = async function (options) {
if (!options.result?.retrieveResult.response.status) {
return;
}
const { repoRoot } = await getRepoRoot();
if (!repoRoot) {
return;
}
const configPath = resolve(repoRoot, HOOK_CONFIG_JSON);
let configFile;
try {
const jsonString = await readFile(configPath, 'utf-8');
configFile = JSON.parse(jsonString);
}
catch (error) {
return;
}
const decomposeOptions = buildDecomposeOptions(configFile, (msg) => {
this.log(msg);
});
if (!decomposeOptions)
return;
await decomposeMetadataTypes(decomposeOptions);
};
//# sourceMappingURL=scopedPostRetrieve.js.map