UNPKG

@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
"use strict"; 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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