@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
JavaScript
;
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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