@ui5/task-adaptation
Version:
Custom task for ui5-builder which allows building UI5 Flexibility Adaptation Projects for SAP BTP, Cloud Foundry environment
129 lines • 4.67 kB
JavaScript
import * as Log from "@ui5/logger";
import * as fs from "fs";
import { fileURLToPath } from "url";
import { posix as path } from "path";
const __dirname = path.dirname(fileURLToPath(import.meta.url));
const log = Log.getLogger("rollup-plugin-ui5-resolve-task-adaptation");
export function dotToUnderscore(value) {
return value.replace(/\./g, "_");
}
export function validateObject(options, properties, message) {
for (const property of properties) {
if (!options[property]) {
throw new Error(`'${String(property)}' ${message}`);
}
}
}
export function escapeRegex(update) {
return update.replaceAll(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g, "\\$&");
}
export function renameResources(files, search, replacement) {
const replaces = getReplaceRegex(search, replacement);
const renamedFiles = new Map();
files.forEach((content, filepath) => {
renamedFiles.set(filepath, replaces.reduce((p, c) => p.replace(c.regexp, c.replacement), content));
});
return renamedFiles;
}
function getReplaceRegex(search, replacement) {
// The current regex works if the old Id is contained in the new Id, given
// that they do not have the same beginning.
// more complete alternative: /((?<!newIdStart)|(?!newIdEnd))oldId/g
let escapedSearch;
if (replacement.includes(search)) {
const [before] = replacement.split(search);
// Matches a position in the string that is not immediately preceded by
// the string "before". Since we won't replace anyway, we should also
// ignore one with the slashes.
const escapedBefore = escapeRegex(before).replaceAll("\\.", "[\\./]");
escapedSearch = `(?<!${escapedBefore})${escapeRegex(search)}`;
}
else {
escapedSearch = escapeRegex(search);
}
const dotToSlash = (update) => update.replaceAll(".", "\/");
return [
{
regexp: new RegExp(escapedSearch, "g"),
replacement
},
{
regexp: new RegExp(dotToSlash(escapedSearch), "g"),
replacement: dotToSlash(replacement)
}
];
}
export function rename(content, search, replacement) {
const replaces = getReplaceRegex(search, replacement);
return replaces.reduce((p, c) => p.replace(c.regexp, c.replacement), content);
}
export function insertInArray(array, index, insert) {
array.splice(index, 0, insert);
}
export function writeTempAnnotations({ writeTempFiles }, name, language, content) {
const TEMP_DIST_FOLDER = path.join(process.cwd(), "dist-debug", name);
if (writeTempFiles) {
if (!fs.existsSync(TEMP_DIST_FOLDER)) {
fs.mkdirSync(TEMP_DIST_FOLDER, { recursive: true });
}
if (language) {
name += "-" + language.i18n;
}
fs.writeFileSync(path.join(TEMP_DIST_FOLDER, name + ".xml"), content);
}
}
export function trimExtension(filePath) {
return filePath.replace(/\.[^/.]+$/, "");
}
export function traverse(json, paths, callback) {
if (!json) {
return;
}
for (const key of Object.keys(json)) {
const internPaths = [...paths];
internPaths.push(key);
if (typeof json[key] === "object") {
if (Array.isArray(json[key])) {
const array = json[key];
for (let i = 0; i < array.length; i++) {
if (typeof array[i] === "object") {
traverse(array[i], internPaths, callback);
}
else {
callback(array, i, internPaths);
}
}
}
else {
traverse(json[key], internPaths, callback);
}
}
else {
callback(json, key, internPaths);
}
}
}
export function logBuilderVersion() {
try {
const packageJson = fs.readFileSync(path.join(__dirname, "../../package.json"), { encoding: "utf-8" });
const packageJsonVersion = JSON.parse(packageJson).version;
log.info(`Running app-variant-bundler-build with version ${packageJsonVersion}`);
// eslint-disable-next-line @typescript-eslint/no-unused-vars
}
catch (e) {
// do nothing
}
}
export function logBetaUsage() {
log.info("Beta features enabled");
}
export function getUniqueName(existingNames, template) {
let suffix = -1;
let suffixString;
do {
suffixString = suffix === -1 ? "" : suffix;
suffix++;
} while (existingNames.includes(template + suffixString));
return template + suffixString;
}
//# sourceMappingURL=commonUtil.js.map