sf-decomposer
Version:
Break down large Salesforce metadata files into smaller, more manageable files for version control and then recreate deployment-compatible files.
38 lines • 1.89 kB
JavaScript
;
/* eslint-disable no-await-in-loop */
import { existsSync } from 'node:fs';
import { join, dirname, basename } from 'node:path';
import { readdir, writeFile, rm } from 'node:fs/promises';
import { parseXML } from 'xml-disassembler';
import { transformAndCleanup } from '../../core/transformers.js';
import { stripRootAndDisassemble } from './stripRootAndDisassemble.js';
export async function handleNestedLoyaltyProgramSetupDecomposition(filePath, handler, format) {
const disassembledDir = filePath.replace(/\.xml$/, '');
const recursivelyDisassembleLoyaltyProgramSetup = async (dir) => {
const entries = await readdir(dir, { withFileTypes: true });
for (const entry of entries) {
const fullPath = join(dir, entry.name);
if (entry.isDirectory()) {
await recursivelyDisassembleLoyaltyProgramSetup(fullPath);
}
else if (entry.isFile() && fullPath.endsWith('.xml')) {
if (entry.name.includes('programProcesses-meta')) {
await stripRootAndDisassemble(fullPath, handler, format);
}
else if (dirname(fullPath) !== filePath && format !== 'xml') {
const xmlContent = await parseXML(fullPath);
const finalContent = await transformAndCleanup(xmlContent, format);
const baseName = basename(fullPath, '.xml');
const newDest = join(dirname(fullPath), `${baseName}.${format}`);
await writeFile(newDest, finalContent, 'utf-8');
// Remove the original .xml file
await rm(fullPath);
}
}
}
};
if (existsSync(disassembledDir)) {
await recursivelyDisassembleLoyaltyProgramSetup(disassembledDir);
}
}
//# sourceMappingURL=loyaltyProgramSetup.js.map