UNPKG

@flxbl-io/sfp

Version:

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

111 lines 10.2 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 = __importStar(require("@flxbl-io/sfp-logger")); const fs = __importStar(require("fs-extra")); const QueryHelper_1 = __importDefault(require("../../queryHelper/QueryHelper")); const CustomFieldFetcher_1 = __importDefault(require("../../metadata/CustomFieldFetcher")); const SFPOrg_1 = __importDefault(require("../../org/SFPOrg")); const path_1 = __importDefault(require("path")); const OrgDetailsFetcher_1 = __importDefault(require("../../org/OrgDetailsFetcher")); const TestOptions_1 = require("../../apextest/TestOptions"); const MetadataDeploymentCustomizer_1 = require("./MetadataDeploymentCustomizer"); const QUERY_BODY = 'SELECT QualifiedApiName, EntityDefinition.QualifiedApiName FROM FieldDefinition WHERE IsFieldHistoryTracked = true AND EntityDefinitionId IN '; class FHTEnabler extends MetadataDeploymentCustomizer_1.MetdataDeploymentCustomizer { async isEnabled(sfpPackage, conn, _logger) { //ignore if its a scratch org const orgDetails = await new OrgDetailsFetcher_1.default(conn.getUsername()).getOrgDetails(); if (orgDetails.isScratchOrg) return false; if (sfpPackage['isFHTFieldFound'] && (sfpPackage.packageDescriptor.enableFHT == undefined || sfpPackage.packageDescriptor.enableFHT == true)) { return true; } } async getDeploymentOptions(target_org, waitTime, apiVersion) { return { ignoreWarnings: true, waitTime: waitTime, apiVersion: apiVersion, testLevel: TestOptions_1.TestLevel.RunSpecifiedTests, specifiedTests: 'skip', rollBackOnError: true }; } async gatherComponentsToBeDeployed(sfpPackage, componentSet, conn, logger) { //First retrieve all objects/fields of interest from the package let objList = []; let fieldList = []; Object.keys(sfpPackage['fhtFields']).forEach((key) => { objList.push(`'${key}'`); sfpPackage['fhtFields'][key].forEach((field) => fieldList.push(key + '.' + field)); }); //Now query all the fields for this object where FHT is already enabled sfp_logger_1.default.log(`Gathering fields which are already enabled with trackHistory on target org....`, sfp_logger_1.LoggerLevel.INFO, logger); sfp_logger_1.default.log('FHT QUERY: ' + `${QUERY_BODY + '(' + objList + ')'}`, sfp_logger_1.LoggerLevel.DEBUG); let fhtFieldsInOrg = await QueryHelper_1.default.query(QUERY_BODY + '(' + objList + ')', conn, true); //Clear of the fields that alread has FHT applied and keep a reduced filter fhtFieldsInOrg.map((record) => { let field = record.EntityDefinition.QualifiedApiName + '.' + record.QualifiedApiName; const index = fieldList.indexOf(field); if (index > -1) { fieldList.splice(index, 1); } }); if (fieldList.length > 0) { //Now retrieve the fields from the org let customFieldFetcher = new CustomFieldFetcher_1.default(logger); let sfpOrg = await SFPOrg_1.default.create({ connection: conn }); let fetchedCustomFields = await customFieldFetcher.getCustomFields(sfpOrg, fieldList); //Modify the component set //Parsing is risky due to various encoding, so do an inplace replacement let sourceComponents = fetchedCustomFields.components.getSourceComponents().toArray(); for (const sourceComponent of sourceComponents) { // for each object for (const childComponent of sourceComponent.getChildren()) { // for each child metadata if (childComponent.type.name !== 'CustomField') { // skip if not a custom field continue; } let metadataOfComponent = fs.readFileSync(childComponent.xml).toString(); metadataOfComponent = metadataOfComponent.replace('<trackHistory>false</trackHistory>', '<trackHistory>true</trackHistory>'); fs.writeFileSync(path_1.default.join(childComponent.xml), metadataOfComponent); } } return { location: fetchedCustomFields.location, componentSet: fetchedCustomFields.components }; } else sfp_logger_1.default.log(`No fields are required to be updated, skipping update of Field History Tracking`, sfp_logger_1.LoggerLevel.INFO, logger); } getName() { return 'Field History Tracking Enabler'; } } exports.default = FHTEnabler; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRkhURW5hYmxlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb3JlL3BhY2thZ2UvZGVwbG95bWVudEN1c3RvbWl6ZXJzL0ZIVEVuYWJsZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLG1FQUFzRTtBQUV0RSw2Q0FBK0I7QUFDL0IsZ0ZBQXdEO0FBR3hELDJGQUFtRTtBQUNuRSw4REFBc0M7QUFDdEMsZ0RBQXdCO0FBQ3hCLG9GQUE0RDtBQUU1RCw0REFBdUQ7QUFDdkQsaUZBQTZFO0FBSTdFLE1BQU0sVUFBVSxHQUNaLGdKQUFnSixDQUFDO0FBRXJKLE1BQXFCLFVBQVcsU0FBUSwwREFBMkI7SUFFeEQsS0FBSyxDQUFDLFNBQVMsQ0FBQyxVQUFzQixFQUFFLElBQXdCLEVBQUUsT0FBZTtRQUNwRiw2QkFBNkI7UUFDN0IsTUFBTSxVQUFVLEdBQUcsTUFBTSxJQUFJLDJCQUFpQixDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQ25GLElBQUksVUFBVSxDQUFDLFlBQVk7WUFBRSxPQUFPLEtBQUssQ0FBQztRQUUxQyxJQUNJLFVBQVUsQ0FBQyxpQkFBaUIsQ0FBQztZQUM3QixDQUFDLFVBQVUsQ0FBQyxpQkFBaUIsQ0FBQyxTQUFTLElBQUksU0FBUyxJQUFJLFVBQVUsQ0FBQyxpQkFBaUIsQ0FBQyxTQUFTLElBQUksSUFBSSxDQUFDLEVBQ3pHLENBQUM7WUFDQyxPQUFPLElBQUksQ0FBQztRQUNoQixDQUFDO0lBQ0wsQ0FBQztJQUlNLEtBQUssQ0FBQyxvQkFBb0IsQ0FBRSxVQUFrQixFQUFFLFFBQWdCLEVBQUUsVUFBa0I7UUFFdkYsT0FBTztZQUNILGNBQWMsRUFBQyxJQUFJO1lBQ25CLFFBQVEsRUFBQyxRQUFRO1lBQ2pCLFVBQVUsRUFBQyxVQUFVO1lBQ3JCLFNBQVMsRUFBRyx1QkFBUyxDQUFDLGlCQUFpQjtZQUN2QyxjQUFjLEVBQUUsTUFBTTtZQUN0QixlQUFlLEVBQUMsSUFBSTtTQUN2QixDQUFBO0lBQ0wsQ0FBQztJQUVNLEtBQUssQ0FBQyw0QkFBNEIsQ0FDckMsVUFBc0IsRUFDdEIsWUFBMEIsRUFDMUIsSUFBZ0IsRUFDaEIsTUFBYztRQUVkLGlFQUFpRTtRQUNqRSxJQUFJLE9BQU8sR0FBYSxFQUFFLENBQUM7UUFDM0IsSUFBSSxTQUFTLEdBQWEsRUFBRSxDQUFDO1FBQzdCLE1BQU0sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUU7WUFDakQsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUM7WUFDekIsVUFBVSxDQUFDLFdBQVcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFDdkYsQ0FBQyxDQUFDLENBQUM7UUFDSCx1RUFBdUU7UUFDdkUsb0JBQVMsQ0FBQyxHQUFHLENBQ1QsZ0ZBQWdGLEVBQ2hGLHdCQUFXLENBQUMsSUFBSSxFQUNoQixNQUFNLENBQ1QsQ0FBQztRQUVGLG9CQUFTLENBQUMsR0FBRyxDQUFDLGFBQWEsR0FBQyxHQUFHLFVBQVUsR0FBRyxHQUFHLEdBQUcsT0FBTyxHQUFHLEdBQUcsRUFBRSxFQUFDLHdCQUFXLENBQUMsS0FBSyxDQUFDLENBQUE7UUFDcEYsSUFBSSxjQUFjLEdBQUcsTUFBTSxxQkFBVyxDQUFDLEtBQUssQ0FJekMsVUFBVSxHQUFHLEdBQUcsR0FBRyxPQUFPLEdBQUcsR0FBRyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztRQUVqRCwyRUFBMkU7UUFDM0UsY0FBYyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFO1lBQzFCLElBQUksS0FBSyxHQUFHLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxnQkFBZ0IsR0FBRyxHQUFHLEdBQUcsTUFBTSxDQUFDLGdCQUFnQixDQUFDO1lBQ3JGLE1BQU0sS0FBSyxHQUFHLFNBQVMsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDdkMsSUFBSSxLQUFLLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQztnQkFDYixTQUFTLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQztZQUMvQixDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7UUFFSCxJQUFJLFNBQVMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDdkIsc0NBQXNDO1lBQ3RDLElBQUksa0JBQWtCLEdBQXVCLElBQUksNEJBQWtCLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDNUUsSUFBSSxNQUFNLEdBQUcsTUFBTSxnQkFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1lBQ3ZELElBQUksbUJBQW1CLEdBQUcsTUFBTSxrQkFBa0IsQ0FBQyxlQUFlLENBQUMsTUFBTSxFQUFFLFNBQVMsQ0FBQyxDQUFDO1lBRXRGLDBCQUEwQjtZQUMxQix3RUFBd0U7WUFDeEUsSUFBSSxnQkFBZ0IsR0FBRyxtQkFBbUIsQ0FBQyxVQUFVLENBQUMsbUJBQW1CLEVBQUUsQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUN0RixLQUFLLE1BQU0sZUFBZSxJQUFJLGdCQUFnQixFQUFFLENBQUM7Z0JBQzdDLGtCQUFrQjtnQkFDbEIsS0FBSyxNQUFNLGNBQWMsSUFBSSxlQUFlLENBQUMsV0FBVyxFQUFFLEVBQUUsQ0FBQztvQkFDekQsMEJBQTBCO29CQUMxQixJQUFJLGNBQWMsQ0FBQyxJQUFJLENBQUMsSUFBSSxLQUFLLGFBQWEsRUFBRSxDQUFDO3dCQUM3Qyw2QkFBNkI7d0JBQzdCLFNBQVM7b0JBQ2IsQ0FBQztvQkFFRCxJQUFJLG1CQUFtQixHQUFHLEVBQUUsQ0FBQyxZQUFZLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDO29CQUV6RSxtQkFBbUIsR0FBRyxtQkFBbUIsQ0FBQyxPQUFPLENBQzdDLG9DQUFvQyxFQUNwQyxtQ0FBbUMsQ0FDdEMsQ0FBQztvQkFFRixFQUFFLENBQUMsYUFBYSxDQUFDLGNBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxFQUFFLG1CQUFtQixDQUFDLENBQUM7Z0JBQ3pFLENBQUM7WUFDTCxDQUFDO1lBRUQsT0FBTyxFQUFFLFFBQVEsRUFBRSxtQkFBbUIsQ0FBQyxRQUFRLEVBQUUsWUFBWSxFQUFFLG1CQUFtQixDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQ3BHLENBQUM7O1lBQU0sb0JBQVMsQ0FBQyxHQUFHLENBQUMsaUZBQWlGLEVBQUUsd0JBQVcsQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDdEksQ0FBQztJQUVNLE9BQU87UUFDVixPQUFPLGdDQUFnQyxDQUFDO0lBQzVDLENBQUM7Q0FDSjtBQXJHRCw2QkFxR0MifQ==