chdman
Version:
💿 chdman binaries and wrapper for Node.js.
67 lines • 2.55 kB
JavaScript
import util from 'node:util';
import fs from 'node:fs';
import ChdmanBin from './chdmanBin.js';
import ChdmanInfo from './chdmanInfo.js';
export default {
/**
* Create a CD CHD.
*/
async createCd(options) {
let existedBefore;
try {
await util.promisify(fs.stat)(options.outputFilename);
existedBefore = true;
}
catch {
existedBefore = false;
}
try {
await ChdmanBin.run([
'createcd',
'--output', options.outputFilename,
...(options.outputParentFilename ? ['--outputparent', String(options.outputParentFilename)] : []),
...(options.force === true ? ['--force'] : []),
'--input', options.inputFilename,
...(options.hunkSize === undefined ? [] : ['--hunksize', String(options.hunkSize)]),
...(options.compression === undefined
? []
: ['--compression', Array.isArray(options.compression) ? options.compression.join(',') : options.compression]),
...(options.numProcessors === undefined ? [] : ['--numprocessors', String(options.numProcessors)]),
], options);
}
catch (error) {
// chdman can leave cruft when it fails
if (!existedBefore) {
await util.promisify(fs.rm)(options.outputFilename, { force: true });
}
throw error;
}
// Test the created file
try {
await ChdmanInfo.info({
inputFilename: options.outputFilename,
});
}
catch (error) {
throw new Error(`created CHD is invalid: ${error}`);
}
},
/**
* Extract a CD CHD.
*
* For BIN/CUE discs, {@link options.outputFilename} should be the `.cue` file.
* For GDI/ISO/etc. discs, {@link options.outputFilename} should be the single file.
*/
async extractCd(options) {
await ChdmanBin.run([
'extractcd',
'--output', options.outputFilename,
...(options.outputBinFilename ? ['--outputbin', options.outputBinFilename] : []),
...(options.splitBin ? ['--splitbin'] : []),
...(options.force === true ? ['--force'] : []),
'--input', options.inputFilename,
...(options.inputParentFilename ? ['--inputparent', options.inputParentFilename] : []),
], options);
},
};
//# sourceMappingURL=chdmanCd.js.map