vitis-engine-lib
Version:
Lib used on Vitis engines
184 lines • 6.34 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const fs_1 = __importDefault(require("fs"));
const path_1 = __importDefault(require("path"));
const archiver_1 = __importDefault(require("archiver"));
const decompress_1 = __importDefault(require("decompress"));
/**
* Classe permettant la gestion des fichiers en local
*/
class LocalFS {
constructor(properties, logger) {
this.properties_ = properties;
this.logger_ = logger;
}
zipDir(dirPath, zipName = null) {
return new Promise((resolve, reject) => {
let zipPath = `${dirPath}.zip`;
if (zipName && zipName.indexOf('.zip') > 0) {
const aPath = dirPath.split('/');
aPath.pop();
aPath.push(zipName);
zipPath = aPath.join('/');
}
const output = fs_1.default.createWriteStream(zipPath);
const archive = archiver_1.default('zip', {
zlib: {
level: 9,
},
});
output.on('close', () => {
// Supprime le dossier
this.deleteFolderRecursive_(dirPath);
setTimeout(() => {
// Retour
resolve(zipPath);
}, 0);
});
archive.on('error', (err) => {
throw err;
});
archive.pipe(output);
archive.directory(dirPath, false);
archive.finalize();
});
}
/**
* Dézippe un dossier
* @param zipPath
* @param unzipToDir
* @returns
*/
unzip(zipPath, unzipToDir) {
return decompress_1.default(zipPath, unzipToDir);
}
/**
* Supprime une dossier et son contenu
* @param {*} folderPath
*/
deleteFolder(folderPath) {
this.deleteFolderRecursive_(folderPath);
}
/**
* Donne tous les droits au dossier
* @param {*} folderPath
* @param {*} sRights
*/
changeFolderRights(folderPath, sRights) {
this.changeFolderRightsRecursive_(folderPath, sRights);
}
/**
* Donne tous les droits au dossier
* @param {*} folderPath
* @param {*} sOwner
*/
changeFolderOwner(folderPath, sOwner) {
if (process.platform !== "win32") {
const userid = require('userid');
const uid = userid.uid(sOwner);
const gid = userid.gid(sOwner);
if (Number.isInteger(uid) && Number.isInteger(gid)) {
this.changeFolderOwnerRecursive_(folderPath, uid, gid);
}
}
}
/**
* Supprime une dossier et son contenu
* @param {*} folderPath
*/
deleteFolderRecursive_(folderPath) {
if (fs_1.default.existsSync(folderPath)) {
fs_1.default.readdirSync(folderPath).forEach((file, index) => {
const curPath = path_1.default.join(folderPath, file);
if (fs_1.default.lstatSync(curPath).isDirectory()) {
// Récursive
this.deleteFolderRecursive_(curPath);
}
else {
// Suppression du fichier
fs_1.default.unlinkSync(curPath);
}
});
// Suppression du dossier
fs_1.default.rmdirSync(folderPath);
}
}
/**
* Donne tous les droits au dossier
* @param folderPath
*/
changeFolderRightsRecursive_(folderPath, sRights) {
if (fs_1.default.existsSync(folderPath)) {
fs_1.default.readdirSync(folderPath).forEach((file, index) => {
const curPath = path_1.default.join(folderPath, file);
if (fs_1.default.lstatSync(curPath).isDirectory()) {
// Récursive
this.changeFolderRightsRecursive_(curPath, sRights);
}
else {
// Modification du fichier
fs_1.default.chmodSync(curPath, sRights);
}
});
// Modification du dossier
fs_1.default.chmodSync(folderPath, sRights);
}
}
/**
* Change le propriétaire du dossier
* @param folderPath
*/
changeFolderOwnerRecursive_(folderPath, uid, gid) {
if (fs_1.default.existsSync(folderPath)) {
fs_1.default.readdirSync(folderPath).forEach((file, index) => {
const curPath = path_1.default.join(folderPath, file);
if (fs_1.default.lstatSync(curPath).isDirectory()) {
// Récursive
this.changeFolderOwnerRecursive_(curPath, uid, gid);
}
else {
// Modification du fichier
fs_1.default.chownSync(curPath, uid, gid);
}
});
// Modification du dossier
fs_1.default.chownSync(folderPath, uid, gid);
}
}
/**
*
* @param srcPath
* @param dstPath
* @returns
*/
copyDirRecursiveSync(srcPath, dstPath) {
// Vérifier si le dossier source existe
if (!fs_1.default.existsSync(srcPath)) {
return false;
}
// Créer le dossier de destination s'il n'existe pas
if (!fs_1.default.existsSync(dstPath)) {
fs_1.default.mkdirSync(dstPath, { recursive: true });
}
// Lister le contenu du dossier source
const files = fs_1.default.readdirSync(srcPath);
for (const file of files) {
const sourcePath = srcPath + '/' + file;
const destinationPath = dstPath + '/' + file;
if (fs_1.default.statSync(sourcePath).isDirectory()) {
// Si c'est un sous-dossier, copier récursivement
this.copyDirRecursiveSync(sourcePath, destinationPath);
}
else {
// Si c'est un fichier, le copier
fs_1.default.copyFileSync(sourcePath, destinationPath);
}
}
return true;
}
}
exports.default = LocalFS;
//# sourceMappingURL=local_fs.js.map