@ui5/task-adaptation
Version:
Custom task for ui5-builder which allows building UI5 Flexibility Adaptation Projects for SAP BTP, Cloud Foundry environment
42 lines • 2.42 kB
JavaScript
import * as dotenv from "dotenv";
import { logBetaUsage, logBuilderVersion } from "./util/commonUtil.js";
import AppVariant from "./appVariantManager.js";
import BaseApp from "./baseAppManager.js";
import I18nMerger from "./util/i18nMerger.js";
import ResourceUtil from "./util/resourceUtil.js";
import { determineProcessor } from "./processors/processor.js";
/**
* Creates an appVariant bundle from the provided resources.
*/
export default ({ workspace, options, taskUtil }) => {
dotenv.config();
async function process(workspace, taskUtil) {
logBuilderVersion();
logBetaUsage();
const processor = determineProcessor(options.configuration);
const adaptationProject = await AppVariant.fromWorkspace(workspace, options.projectNamespace);
const appVariantIdHierarchy = await processor.getAppVariantIdHierarchy(adaptationProject.reference);
// appVariantIdHierarchy contains original application on bottom and the
// latest app variant on top. We reverse the list to process original
// application first and then app variants in chronological order.
const reversedHierarchy = appVariantIdHierarchy.toReversed();
const fetchFilesPromises = reversedHierarchy.map(({ repoName, cachebusterToken }) => processor.fetch(repoName, cachebusterToken));
fetchFilesPromises.push(Promise.resolve(adaptationProject.files));
const adapt = async (baseAppFiles, appVariantFiles) => {
const baseApp = BaseApp.fromFiles(baseAppFiles);
const appVariant = AppVariant.fromFiles(appVariantFiles);
const adaptedFiles = await baseApp.adapt(appVariant, processor);
return I18nMerger.merge(adaptedFiles, baseApp.i18nPath, appVariant);
};
let files = await fetchFilesPromises.reduce(async (previousFiles, currentFiles) => adapt(await previousFiles, await currentFiles), fetchFilesPromises.shift());
adaptationProject.omitDeletedResources(files, options.projectNamespace, taskUtil);
const writePromises = new Array();
files.forEach((content, filename) => {
const resource = ResourceUtil.createResource(filename, options.projectNamespace, content);
writePromises.push(workspace.write(resource));
});
await Promise.all(writePromises);
}
return process(workspace, taskUtil);
};
//# sourceMappingURL=index.js.map