penguins-eggs
Version:
A remaster system tool, compatible with Almalinux, Alpine, Arch, Debian, Devuan, Fedora, Manjaro, Opensuse, Ubuntu and derivatives
123 lines (122 loc) • 3.45 kB
JavaScript
/**
* ./src/classes/compressors.ts
* penguins-eggs v.25.11.x / ecmascript 2020
* author: Piero Proietti
* email: piero.proietti@gmail.com
* license: MIT
*/
import fs from 'fs';
import { execSync } from '../lib/utils.js'; // Assicurati che il path sia corretto
export default class Compressors {
dest = '/tmp/eggs-mksquash-dest';
isEnabled = {
error: false,
gzip: true,
lz4: false,
lzma: false,
lzo: false,
xz: false,
zstd: false
};
source = '/tmp/eggs-mksquash-test';
/**
* fast compression
*/
fast() {
let comp = 'gzip';
if (this.isEnabled.zstd) {
comp = 'zstd -b 1M -Xcompression-level 3';
}
else if (this.isEnabled.lz4) {
comp = 'lz4';
}
return comp;
}
/**
* max
*/
max() {
let filter = 'x86';
if (process.arch === 'arm64') {
filter = 'arm';
}
const options = '-b 1M -no-duplicates -no-recovery -always-use-fragments';
// if (process.arch === 'ia32') { options = '-b 1M' }
const comp = `xz -Xbcj ${filter} ${options}`;
return comp;
}
pendrive(level = '15') {
let comp = 'gzip';
if (this.isEnabled.zstd) {
comp = `zstd -b 1M -Xcompression-level ${level}`;
}
else if (this.isEnabled.lz4) {
comp = 'lz4';
}
return comp;
}
/**
* populate
* Manteniamo async per compatibilità con chi lo chiama,
* ma internamente ora è tutto sincrono e veloce.
*/
async populate() {
this.prepareCheck();
// Non serve await perché check ora è sincrono
this.isEnabled.error = this.check('error');
this.isEnabled.lzma = this.check('lzma');
this.isEnabled.lzo = this.check('lzo');
this.isEnabled.lz4 = this.check('lz4');
this.isEnabled.xz = this.check('xz');
this.isEnabled.zstd = this.check('zstd');
this.removeCheck();
}
/**
* standard
*/
standard() {
const comp = 'xz -b 1M';
return comp;
}
/**
* check mksquashfs exists and supports compressor
*/
check(compressor) {
let result = false;
try {
// ignore: true silenzia output (stdio='ignore')
// Se mksquashfs fallisce (exit code != 0), execSync lancia un errore
execSync(`mksquashfs ${this.source} ${this.dest} -comp ${compressor} -ef ${this.dest}`, { ignore: true });
result = true;
}
catch {
// Fallito (comando non trovato o compressore non supportato)
result = false;
}
return result;
}
/**
* prepareCheck: Usa FS nativo invece di shelljs
*/
prepareCheck() {
// rm -rf
if (fs.existsSync(this.source)) {
fs.rmSync(this.source, { force: true, recursive: true });
}
// mkdir -p
fs.mkdirSync(this.source, { recursive: true });
}
/**
* removeCheck: Usa FS nativo invece di shelljs
*/
removeCheck() {
// rm -rf source
if (fs.existsSync(this.source)) {
fs.rmSync(this.source, { force: true, recursive: true });
}
// rm -f dest
if (fs.existsSync(this.dest)) {
fs.rmSync(this.dest, { force: true, recursive: true });
}
}
}