@flxbl-io/sfp
Version:
sfp is a CLI tool to help you manage your Salesforce projects in an artifact centric model
110 lines • 10 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 = __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 IsFeedEnabled = true AND EntityDefinitionId IN ';
class FTEnabler 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['isFTFieldFound'] &&
(sfpPackage.packageDescriptor.enableFT == undefined || sfpPackage.packageDescriptor.enableFT == 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['ftFields']).forEach((key) => {
objList.push(`'${key}'`);
sfpPackage['ftFields'][key].forEach((field) => fieldList.push(key + '.' + field));
});
//Now query all the fields for this object where FT is already enabled
sfp_logger_1.default.log(`Gathering fields which are already enabled with feed traking in the target org....`, sfp_logger_1.LoggerLevel.INFO, logger);
sfp_logger_1.default.log('FT QUERY: ' + `${QUERY_BODY + '(' + objList + ')'}`, sfp_logger_1.LoggerLevel.DEBUG);
let ftFieldsInOrg = await QueryHelper_1.default.query(QUERY_BODY + '(' + objList + ')', conn, true);
//Clear of the fields that alread has FT applied and keep a reduced filter
ftFieldsInOrg.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
for (const sourceComponent of fetchedCustomFields.components.getSourceComponents()) {
// 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('<trackFeedHistory>false</trackFeedHistory>', '<trackFeedHistory>true</trackFeedHistory>');
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 updates to Feed History tracking`, sfp_logger_1.LoggerLevel.INFO, logger);
}
getName() {
return 'Feed Tracking Enabler';
}
}
exports.default = FTEnabler;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRlRFbmFibGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2NvcmUvcGFja2FnZS9kZXBsb3ltZW50Q3VzdG9taXplcnMvRlRFbmFibGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxtRUFBc0U7QUFFdEUsNkNBQStCO0FBQy9CLGdGQUF3RDtBQUd4RCwyRkFBbUU7QUFDbkUsOERBQXNDO0FBQ3RDLGdEQUF3QjtBQUN4QixvRkFBNEQ7QUFFNUQsNERBQXVEO0FBQ3ZELGlGQUE2RTtBQUc3RSxNQUFNLFVBQVUsR0FDWix3SUFBd0ksQ0FBQztBQUU3SSxNQUFxQixTQUFVLFNBQVEsMERBQTJCO0lBQ3ZELEtBQUssQ0FBQyxTQUFTLENBQUMsVUFBc0IsRUFBRSxJQUF3QixFQUFFLE9BQWU7UUFDcEYsNkJBQTZCO1FBQzdCLE1BQU0sVUFBVSxHQUFHLE1BQU0sSUFBSSwyQkFBaUIsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUNuRixJQUFJLFVBQVUsQ0FBQyxZQUFZO1lBQUUsT0FBTyxLQUFLLENBQUM7UUFFMUMsSUFDSSxVQUFVLENBQUMsZ0JBQWdCLENBQUM7WUFDNUIsQ0FBQyxVQUFVLENBQUMsaUJBQWlCLENBQUMsUUFBUSxJQUFJLFNBQVMsSUFBSSxVQUFVLENBQUMsaUJBQWlCLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQyxFQUN2RyxDQUFDO1lBQ0MsT0FBTyxJQUFJLENBQUM7UUFDaEIsQ0FBQztJQUNMLENBQUM7SUFFTSxLQUFLLENBQUMsb0JBQW9CLENBQUUsVUFBa0IsRUFBRSxRQUFnQixFQUFFLFVBQWtCO1FBRXZGLE9BQU87WUFDSCxjQUFjLEVBQUMsSUFBSTtZQUNuQixRQUFRLEVBQUMsUUFBUTtZQUNqQixVQUFVLEVBQUMsVUFBVTtZQUNyQixTQUFTLEVBQUcsdUJBQVMsQ0FBQyxpQkFBaUI7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