@oaklean/profiler-core
Version:
Part of the @oaklean suite. It provides all basic functions to work with the `.oak` file format. It allows parsing the `.oak` file format as well as tools for analyzing the measurement values. It also provides all necessary capabilities required for prec
169 lines • 11.8 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 () {
var ownKeys = function(o) {
ownKeys = Object.getOwnPropertyNames || function (o) {
var ar = [];
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
return ar;
};
return ownKeys(o);
};
return function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
__setModuleDefault(result, mod);
return result;
};
})();
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.PermissionHelper = void 0;
const child_process_1 = __importDefault(require("child_process"));
const fs = __importStar(require("fs"));
const path_1 = __importDefault(require("path"));
const os_1 = __importDefault(require("os"));
const env_1 = require("../constants/env");
/**
* Get a flat list of all directories that were created recursively
* @param {string} targetDir - Directory path to create recursively
* @returns {string[]} - List of directories
*/
function createDirectoriesRecursively(targetDir) {
const createdDirectories = [];
const segments = targetDir.split(path_1.default.sep);
// Start from the root or the current directory based on the path type
const isAbsoluteWindowsPath = /^[A-Za-z]:/.test(targetDir);
let windowsPrefix = '';
if (isAbsoluteWindowsPath) {
const matches = /^[A-Za-z]:/.exec(targetDir);
windowsPrefix = matches && (matches === null || matches === void 0 ? void 0 : matches.length) > 0 ? matches[0] : '';
if (windowsPrefix !== '' && segments.length > 0) {
segments.shift();
}
}
let currentPath = path_1.default.isAbsolute(targetDir)
? (isAbsoluteWindowsPath ? windowsPrefix : '') + path_1.default.sep
: '.';
for (const segment of segments) {
if (segment) {
currentPath = path_1.default.join(currentPath, segment);
if (!fs.existsSync(currentPath)) {
fs.mkdirSync(currentPath);
createdDirectories.push(currentPath);
}
}
}
return createdDirectories;
}
class PermissionHelper {
static changeFileOwnershipBackToUser(path) {
if (env_1.SUDO_USER) {
// change ownership from file back to the user who executed the code with sudo
const options = {};
if (process.platform === 'win32') {
options.shell = 'powershell.exe';
}
try {
child_process_1.default.execSync(`chown ${env_1.SUDO_USER} "${path}"`, options);
}
catch (_a) {
// do nothing
}
}
}
static changeFilePermission(path, permissions) {
if (process.platform === 'win32') {
return;
}
const options = {};
// if (process.platform === 'win32') {
// options.shell = 'powershell.exe'
// }
try {
child_process_1.default.execSync(`chmod ${permissions} "${path}"`, options);
}
catch (_a) {
// do nothing
}
}
static mkdirRecursivelyWithUserPermission(path) {
const createdDirs = createDirectoriesRecursively(path.toPlatformString());
for (const dir of createdDirs) {
PermissionHelper.changeFileOwnershipBackToUser(dir);
}
}
static writeFileWithStorageFunctionWithUserPermissionAsync(path, storeFunction) {
return __awaiter(this, void 0, void 0, function* () {
const dirPath = path.dirName();
if (!fs.existsSync(dirPath.toPlatformString())) {
PermissionHelper.mkdirRecursivelyWithUserPermission(dirPath);
}
yield storeFunction();
const filePath = path.toPlatformString();
PermissionHelper.changeFileOwnershipBackToUser(filePath);
});
}
static writeFileWithStorageFunctionWithUserPermission(path, storeFunction) {
const dirPath = path.dirName();
if (!fs.existsSync(dirPath.toPlatformString())) {
PermissionHelper.mkdirRecursivelyWithUserPermission(dirPath);
}
storeFunction();
const filePath = path.toPlatformString();
PermissionHelper.changeFileOwnershipBackToUser(filePath);
}
static writeFileWithUserPermission(path, data) {
PermissionHelper.writeFileWithStorageFunctionWithUserPermission(path, () => {
const filePath = path.toPlatformString();
fs.writeFileSync(filePath, data);
});
}
static checkWindowsAdminRights() {
return new Promise((resolve) => {
const platform = os_1.default.platform();
if (platform !== 'win32') {
resolve(false);
}
child_process_1.default.exec('fsutil dirty query ' + env_1.SYSTEM_DRIVE,
// eslint-disable-next-line @typescript-eslint/no-unused-vars
function (err, stdout, stderr) {
if (err) {
resolve(false);
}
else {
resolve(true);
}
});
});
}
}
exports.PermissionHelper = PermissionHelper;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUGVybWlzc2lvbkhlbHBlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9oZWxwZXIvUGVybWlzc2lvbkhlbHBlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxrRUFBNkQ7QUFDN0QsdUNBQXdCO0FBQ3hCLGdEQUF1QjtBQUN2Qiw0Q0FBbUI7QUFHbkIsMENBQTBEO0FBSTFEOzs7O0dBSUc7QUFDSCxTQUFTLDRCQUE0QixDQUFDLFNBQWlCO0lBQ3RELE1BQU0sa0JBQWtCLEdBQUcsRUFBRSxDQUFBO0lBQzdCLE1BQU0sUUFBUSxHQUFHLFNBQVMsQ0FBQyxLQUFLLENBQUMsY0FBSSxDQUFDLEdBQUcsQ0FBQyxDQUFBO0lBRTFDLHNFQUFzRTtJQUN0RSxNQUFNLHFCQUFxQixHQUFHLFlBQVksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUE7SUFDMUQsSUFBSSxhQUFhLEdBQUcsRUFBRSxDQUFBO0lBQ3RCLElBQUkscUJBQXFCLEVBQUUsQ0FBQztRQUMzQixNQUFNLE9BQU8sR0FBRyxZQUFZLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFBO1FBQzVDLGFBQWEsR0FBRyxPQUFPLElBQUksQ0FBQSxPQUFPLGFBQVAsT0FBTyx1QkFBUCxPQUFPLENBQUUsTUFBTSxJQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUE7UUFDaEUsSUFBSSxhQUFhLEtBQUssRUFBRSxJQUFJLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDakQsUUFBUSxDQUFDLEtBQUssRUFBRSxDQUFBO1FBQ2pCLENBQUM7SUFDRixDQUFDO0lBRUQsSUFBSSxXQUFXLEdBQUcsY0FBSSxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUM7UUFDM0MsQ0FBQyxDQUFDLENBQUMs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