UNPKG

chdman

Version:

💿 chdman binaries and wrapper for Node.js.

67 lines • 2.55 kB
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