UNPKG

@flxbl-io/sfp

Version:

sfp is a CLI tool to help you manage your Salesforce projects in an artifact centric model

129 lines 11.4 kB
"use strict"; var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; var desc = Object.getOwnPropertyDescriptor(m, k); if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { desc = { enumerable: true, get: function() { return m[k]; } }; } Object.defineProperty(o, k2, desc); }) : (function(o, m, k, k2) { if (k2 === undefined) k2 = k; o[k2] = m[k]; })); var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { Object.defineProperty(o, "default", { enumerable: true, value: v }); }) : function(o, v) { o["default"] = v; }); var __importStar = (this && this.__importStar) || function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); __setModuleDefault(result, mod); return result; }; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); const sfp_logger_1 = __importDefault(require("@flxbl-io/sfp-logger")); const fs = __importStar(require("fs-extra")); const Delay_1 = require("../../utils/Delay"); const sfp_logger_2 = require("@flxbl-io/sfp-logger"); const adm_zip_1 = __importDefault(require("adm-zip")); const path_1 = __importDefault(require("path")); const tmp_1 = __importDefault(require("tmp")); const fast_xml_parser_1 = require("fast-xml-parser"); const lodash_1 = require("lodash"); class DeployDestructiveManifestToOrgImpl { constructor(sfpOrg, destructiveManifestPath) { this.sfpOrg = sfpOrg; this.destructiveManifestPath = destructiveManifestPath; } async exec() { //Connect to the org const conn = this.sfpOrg.getConnection(); const apiversion = await conn.retrieveMaxApiVersion(); let workingDirectory = this.generateCacheDirectory(); await this.copyAndValidateDestructiveManifest(this.destructiveManifestPath, workingDirectory); this.generateEmptyPackageXml(workingDirectory, apiversion); let zipFile = await this.generateDeploymentZipFile(workingDirectory); await this.deployDestructiveManifest(zipFile, conn); } generateCacheDirectory() { let tmpDirObj = tmp_1.default.dirSync({ unsafeCleanup: true }); let tempDir = tmpDirObj.name; let destructCacheDirectory = path_1.default.join(tempDir, 'destruct'); fs.mkdirSync(destructCacheDirectory); return destructCacheDirectory; } async copyAndValidateDestructiveManifest(existingManifestPath, workingDirectory) { let destructiveManifestFile = path_1.default.join(workingDirectory, 'destructiveChanges.xml'); //Copy Destructive Manifest File to Temporary Directory fs.copyFileSync(existingManifestPath, destructiveManifestFile); const parser = new fast_xml_parser_1.XMLParser(); let destructiveChanges = await parser.parse(fs.readFileSync(path_1.default.resolve(destructiveManifestFile))); if ((0, lodash_1.isEmpty)(destructiveChanges['Package']['types'])) { throw new Error('Invalid Destructive Change Definition encountered, please check'); } sfp_logger_1.default.log(destructiveChanges['Package']['types'], sfp_logger_2.LoggerLevel.TRACE); } generateEmptyPackageXml(workingDirectory, apiversion) { let packageXml = `<?xml version="1.0" encoding="UTF-8"?> <Package xmlns="http://soap.sforce.com/2006/04/metadata"> <types> <members>*</members> <name>CustomLabel</name> </types> <version>${apiversion}</version> </Package>`; let packageXmlPath = path_1.default.join(workingDirectory, 'package.xml'); fs.outputFileSync(packageXmlPath, packageXml); sfp_logger_1.default.log(`Empty Package.xml with ${apiversion} created at ${workingDirectory}`, sfp_logger_2.LoggerLevel.DEBUG); } async generateDeploymentZipFile(workingDirectory) { let zip = new adm_zip_1.default(); zip.addLocalFolder(workingDirectory); zip.writeZip(path_1.default.join(workingDirectory, 'package.zip')); return path_1.default.join(workingDirectory, 'package.zip'); } async deployDestructiveManifest(zipFile, conn) { //Deploy Package conn.metadata.pollTimeout = 300; const zipStream = fs.createReadStream(zipFile); let deployResult = await conn.metadata.deploy(zipStream, { rollbackOnError: true, singlePackage: true }); sfp_logger_1.default.log(`Deploying Destructive Changes with ID ${deployResult.id} to ${conn.getUsername()}`, sfp_logger_2.LoggerLevel.INFO); let deploymentStatus = await this.checkDeploymentStatus(conn, deployResult.id); if (deploymentStatus.success) { if (deploymentStatus.success) sfp_logger_1.default.log(`Deployed Destructive Changes in target org ${conn.getUsername()} succesfully`, sfp_logger_2.LoggerLevel.INFO); } else { let componentFailures = deploymentStatus.details.componentFailures; let errorResult = []; componentFailures.forEach((failure) => { errorResult.push({ componentType: failure.componentType, fullName: failure.fullName, problem: failure.problem, }); }); console; throw new Error('Unable to deploy the Destructive Changes: ' + JSON.stringify(errorResult)); } } async checkDeploymentStatus(conn, retrievedId) { while (true) { let result = await conn.metadata.checkDeployStatus(retrievedId, true); if (!result.done) { sfp_logger_1.default.log('Polling for Deployment Status', sfp_logger_2.LoggerLevel.INFO); await (0, Delay_1.delay)(5000); } else { return result; } } } } exports.default = DeployDestructiveManifestToOrgImpl; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRGVwbG95RGVzdHJ1Y3RpdmVNYW5pZmVzdFRvT3JnSW1wbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb3JlL3BhY2thZ2UvY29tcG9uZW50cy9EZXBsb3lEZXN0cnVjdGl2ZU1hbmlmZXN0VG9PcmdJbXBsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxzRUFBNkM7QUFFN0MsNkNBQStCO0FBQy9CLDZDQUEwQztBQUMxQyxxREFBbUQ7QUFFbkQsc0RBQTRCO0FBQzVCLGdEQUF3QjtBQUN4Qiw4Q0FBc0I7QUFDdEIscURBQTRDO0FBQzVDLG1DQUFpQztBQUVqQyxNQUFxQixrQ0FBa0M7SUFDbkQsWUFBMkIsTUFBYyxFQUFVLHVCQUErQjtRQUF2RCxXQUFNLEdBQU4sTUFBTSxDQUFRO1FBQVUsNEJBQXVCLEdBQXZCLHVCQUF1QixDQUFRO0lBQUksQ0FBQztJQUtoRixLQUFLLENBQUMsSUFBSTtRQUNiLG9CQUFvQjtRQUNwQixNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQ3pDLE1BQU0sVUFBVSxHQUFHLE1BQU0sSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUM7UUFDdEQsSUFBSSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztRQUNyRCxNQUFNLElBQUksQ0FBQyxrQ0FBa0MsQ0FBQyxJQUFJLENBQUMsdUJBQXVCLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQztRQUM5RixJQUFJLENBQUMsdUJBQXVCLENBQUMsZ0JBQWdCLEVBQUUsVUFBVSxDQUFDLENBQUM7UUFDM0QsSUFBSSxPQUFPLEdBQUcsTUFBTSxJQUFJLENBQUMseUJBQXlCLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUNyRSxNQUFNLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDeEQsQ0FB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