@flxbl-io/sfp
Version:
sfp is a CLI tool to help you manage your Salesforce projects in an artifact centric model
154 lines • 12.6 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 });
exports.MergeResult = void 0;
const SfpPackage_1 = require("../SfpPackage");
const SfpPackageBuilder_1 = __importDefault(require("../SfpPackageBuilder"));
const tmp = require('tmp');
const fs = __importStar(require("fs-extra"));
const path = require('path');
const source_deploy_retrieve_1 = require("@salesforce/source-deploy-retrieve");
class PackageMergeManager {
constructor(sfpPackages, logger) {
this.sfpPackages = sfpPackages;
this.logger = logger;
}
async mergePackages(targetOrAlias) {
let mergeResult = new MergeResult();
mergeResult.skippedPackages = [];
mergeResult.unlockedPackages = [];
mergeResult.mergedPackages = [];
mergeResult.requestedMergeOrder = this.sfpPackages;
//Use the .sfp directory
let tmpDir = tmp.dirSync({ unsafeCleanup: true });
let locationOfCopiedDirectory = tmpDir.name;
//Create a temporary folder
let mergedProjectDir = path.join(locationOfCopiedDirectory, `${this.makefolderid(5)}_merged`);
mergeResult.mergedProjectDirectory = mergedProjectDir;
let mergedPackageDir = path.join(mergedProjectDir, 'force-app');
fs.mkdirpSync(mergedPackageDir);
//Create sfdx project.json
fs.writeJSONSync(path.join(mergedProjectDir, 'sfdx-project.json'), this.getMergedProjectManifest(), {
spaces: 4,
});
const converter = new source_deploy_retrieve_1.MetadataConverter();
for (const sfpPackage of this.sfpPackages) {
let componentSet;
if (sfpPackage.packageType == SfpPackage_1.PackageType.Data) {
mergeResult.skippedPackages.push(sfpPackage);
continue;
}
else if (sfpPackage.packageType == SfpPackage_1.PackageType.Unlocked) {
//Push for now
mergeResult.skippedPackages.push(sfpPackage);
mergeResult.unlockedPackages.push(sfpPackage);
continue;
}
else {
//handle alaisfy directory
if (sfpPackage.packageDescriptor.aliasfy) {
let aliasFolder = path.join(process.cwd(), sfpPackage.projectDirectory, sfpPackage.packageDirectory, targetOrAlias ? targetOrAlias : 'default');
if (fs.existsSync(aliasFolder)) {
componentSet = source_deploy_retrieve_1.ComponentSet.fromSource(aliasFolder);
}
else {
continue;
}
}
else {
componentSet = source_deploy_retrieve_1.ComponentSet.fromSource(path.join(process.cwd(), sfpPackage.projectDirectory, sfpPackage.packageDirectory));
}
fs.copyFileSync(path.join(sfpPackage.projectDirectory, 'forceignores', '.buildignore'), path.join(mergedProjectDir, '.forceignore'));
console.log('copied file');
//Merge
let results = await converter.convert(componentSet, 'source', {
type: 'merge',
mergeWith: source_deploy_retrieve_1.ComponentSet.fromSource(mergedPackageDir).getSourceComponents(),
defaultDirectory: mergedPackageDir,
forceIgnoredPaths: new Set([
path.join(process.cwd(), sfpPackage.projectDirectory, 'forceignores', '.buildignore'),
]),
});
for (const component of results.converted) {
if (this.isXmlFileSuffixDuped(component.xml)) {
this.dedupeXmlFileSuffix(component.xml);
}
}
mergeResult.mergedPackages.push(sfpPackage);
}
}
//Build SfpPackage
if (mergeResult.mergedPackages.length > 0) {
let mergedSfPPackage = await SfpPackageBuilder_1.default.buildPackageFromProjectDirectory(this.logger, mergeResult.mergedProjectDirectory, 'merged', {
branch: 'temp',
packageVersionNumber: '1.0.0.0',
sourceVersion: '00000000',
}, null);
mergeResult.mergedPackage = mergedSfPPackage;
}
tmpDir.removeCallback();
return mergeResult;
}
isXmlFileSuffixDuped(xmlFile) {
return xmlFile.match(/-meta\.xml/g)?.length === 2;
}
dedupeXmlFileSuffix(xmlFile) {
let deduped = xmlFile.replace(/-meta\.xml/, '');
fs.renameSync(xmlFile, deduped);
return deduped;
}
getMergedProjectManifest() {
let projectManifest = {
packageDirectories: [
{
path: 'force-app',
package: 'merged',
versionNumber: '2.0.0.0',
default: true,
},
],
namespace: '',
sourceApiVersion: '53.0',
};
return projectManifest;
}
makefolderid(length) {
let result = '';
let characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
let charactersLength = characters.length;
for (let i = 0; i < length; i++) {
result += characters.charAt(Math.floor(Math.random() * charactersLength));
}
return result;
}
}
exports.default = PackageMergeManager;
class MergeResult {
}
exports.MergeResult = MergeResult;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUGFja2FnZU1lcmdlTWFuYWdlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb3JlL3BhY2thZ2UvcGFja2FnZU1lcmdlci9QYWNrYWdlTWVyZ2VNYW5hZ2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsOENBQXdEO0FBQ3hELDZFQUFxRDtBQUNyRCxNQUFNLEdBQUcsR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDM0IsNkNBQStCO0FBQy9CLE1BQU0sSUFBSSxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUM3QiwrRUFBcUY7QUFHckYsTUFBcUIsbUJBQW1CO0lBQ3BDLFlBQTJCLFdBQXlCLEVBQVUsTUFBZTtRQUFsRCxnQkFBVyxHQUFYLFdBQVcsQ0FBYztRQUFVLFdBQU0sR0FBTixNQUFNLENBQVM7SUFBRyxDQUFDO0lBRTFFLEtBQUssQ0FBQyxhQUFhLENBQUMsYUFBc0I7UUFDN0MsSUFBSSxXQUFXLEdBQWdCLElBQUksV0FBVyxFQUFFLENBQUM7UUFDakQsV0FBVyxDQUFDLGVBQWUsR0FBRyxFQUFFLENBQUM7UUFDakMsV0FBVyxDQUFDLGdCQUFnQixHQUFHLEVBQUUsQ0FBQztRQUNsQyxXQUFXLENBQUMsY0FBYyxHQUFHLEVBQUUsQ0FBQztRQUVoQyxXQUFXLENBQUMsbUJBQW1CLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQztRQUVuRCx3QkFBd0I7UUFDeEIsSUFBSSxNQUFNLEdBQUcsR0FBRyxDQUFDLE9BQU8sQ0FBQyxFQUFFLGFBQWEsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQ2xELElBQUkseUJBQXlCLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQztRQUM1Qyw0QkFBNEI7UUFDNUIsSUFBSSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLHlCQUF5QixFQUFFLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FB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