sf-decomposer
Version:
Split large Salesforce metadata files into version-control-friendly pieces and rebuild deployment-ready files.
58 lines • 2.03 kB
JavaScript
;
import { readFile } from 'node:fs/promises';
import { resolve } from 'node:path';
import { recomposeMetadataTypes } from '../core/recomposeMetadataTypes.js';
import { getRepoRoot } from '../service/core/getRepoRoot.js';
import { HOOK_CONFIG_JSON } from '../helpers/constants.js';
function buildRecomposeOptions(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,
postpurge: configFile.postPurge || false,
ignoreDirs,
manifest: manifest.trim() !== '' ? manifest.trim() : undefined,
log,
};
}
export const prerun = async function (options) {
if (!['project:deploy:validate', 'project:deploy:start'].includes(options.Command.id)) {
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 recomposeOptions = buildRecomposeOptions(configFile, (msg) => {
this.log(msg);
});
if (!recomposeOptions)
return;
await recomposeMetadataTypes(recomposeOptions);
};
//# sourceMappingURL=prerun.js.map