UNPKG

sf-decomposer

Version:

Break down large Salesforce metadata files into smaller, more manageable files for version control and then recreate deployment-compatible files.

48 lines 2.4 kB
'use strict'; /* 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 { disassembleAndGroupFieldPermissions } from './disassembleAndGroupFieldPermissions.js'; import { flattenNestedObjectPermissions } from './flattenNestedObjectPermissions.js'; export async function handleNestedPermissionSetDecomposition(filePath, uniqueIdElements, handler, format) { const disassembledDir = filePath.replace(/\.xml$/, ''); const recursivelyDisassembleObjectSettings = async (dir) => { const entries = await readdir(dir, { withFileTypes: true }); for (const entry of entries) { const fullPath = join(dir, entry.name); if (entry.isDirectory()) { await recursivelyDisassembleObjectSettings(fullPath); } else if (entry.isFile() && entry.name === 'objectPermissions.xml') { await handler.disassemble({ filePath: fullPath, uniqueIdElements, prePurge: false, postPurge: true, format: 'xml', strategy: 'unique-id', }); await flattenNestedObjectPermissions(dirname(fullPath), format); } else if (entry.isFile() && entry.name === 'fieldPermissions.xml') { await disassembleAndGroupFieldPermissions(fullPath, format); } else if (entry.isFile() && dirname(fullPath) !== filePath && fullPath.endsWith('.xml') && 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 recursivelyDisassembleObjectSettings(disassembledDir); } } //# sourceMappingURL=permSets.js.map