UNPKG

sf-decomposer

Version:

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

90 lines 3.92 kB
'use strict'; /* eslint-disable no-await-in-loop */ import { SfCommand, Flags } from '@salesforce/sf-plugins-core'; import { Messages } from '@salesforce/core'; import { LOG_FILE, DECOMPOSED_FILE_TYPES, DECOMPOSED_STRATEGIES } from '../../helpers/constants.js'; import { decomposeFileHandler } from '../../service/decomposeFileHandler.js'; import { getRegistryValuesBySuffix } from '../../metadata/getRegistryValuesBySuffix.js'; import { readOriginalLogFile, checkLogForErrors } from '../../service/checkLogforErrors.js'; Messages.importMessagesDirectoryFromMetaUrl(import.meta.url); const messages = Messages.loadMessages('sf-decomposer', 'decomposer.decompose'); export default class DecomposerDecompose extends SfCommand { static summary = messages.getMessage('summary'); static description = messages.getMessage('description'); static examples = messages.getMessages('examples'); static flags = { 'metadata-type': Flags.string({ summary: messages.getMessage('flags.metadata-type.summary'), char: 'm', multiple: true, required: true, }), prepurge: Flags.boolean({ summary: messages.getMessage('flags.prepurge.summary'), required: false, default: false, }), postpurge: Flags.boolean({ summary: messages.getMessage('flags.postpurge.summary'), required: false, default: false, }), debug: Flags.boolean({ summary: messages.getMessage('flags.debug.summary'), required: false, default: false, }), format: Flags.string({ summary: messages.getMessage('flags.format.summary'), char: 'f', required: true, multiple: false, default: 'xml', options: DECOMPOSED_FILE_TYPES, }), 'ignore-package-directory': Flags.directory({ summary: messages.getMessage('flags.ignore-package-directory.summary'), char: 'i', required: false, multiple: true, }), strategy: Flags.string({ summary: messages.getMessage('flags.strategy.summary'), char: 's', required: true, multiple: false, default: 'unique-id', options: DECOMPOSED_STRATEGIES, }), }; async run() { const { flags } = await this.parse(DecomposerDecompose); const metadataTypes = flags['metadata-type']; const prepurge = flags['prepurge']; const postpurge = flags['postpurge']; const debug = flags['debug']; const format = flags['format']; const ignoreDirs = flags['ignore-package-directory']; const strategy = flags['strategy']; for (const metadataType of metadataTypes) { const { metaAttributes, ignorePath } = await getRegistryValuesBySuffix(metadataType, 'decompose', ignoreDirs); if (metadataType === 'labels' && strategy === 'grouped-by-tag') { this.warn('You cannot decompose custom labels using the grouped-by-tag strategy. Please switch strategies and try again for labels.'); continue; } const currentLogFile = await readOriginalLogFile(LOG_FILE); await decomposeFileHandler(metaAttributes, prepurge, postpurge, debug, format, ignorePath, strategy); const decomposeErrors = await checkLogForErrors(LOG_FILE, currentLogFile); if (decomposeErrors.length > 0) { decomposeErrors.forEach((error) => { this.warn(error); }); } this.log(`All metadata files have been decomposed for the metadata type: ${metadataType}`); } return { metadata: metadataTypes, }; } } //# sourceMappingURL=decompose.js.map