UNPKG

better-blockmap

Version:

Generate better blockmap files for electron-builder

63 lines (56 loc) 1.57 kB
#!/usr/bin/env node const { createReadStream } = require('fs'); const { open, writeFile } = require('fs/promises'); let { pipeline } = require('stream'); const { promisify } = require('util'); const yargs = require('yargs/yargs'); const { hideBin } = require('yargs/helpers'); const { BlockMap } = require('../'); pipeline = promisify(pipeline); const argv = yargs(hideBin(process.argv)) .option('i', { alias: 'input', describe: 'Input binary file', type: 'string', demandOption: true, }) .option('o', { alias: 'output', describe: 'Output blockmap file (if absent - append to input file)', type: 'string', }) .option('c', { alias: 'compression', describe: 'Compression', default: 'gzip', choices: [ 'gzip', 'deflate' ], }) .option('z', { alias: 'detect-zip-boundary', describe: 'Use zip file boundaries for splitting chunks', type: 'boolean', }) .parse(); async function main() { const input = createReadStream(argv.input); const blockMap = new BlockMap({ detectZipBoundary: argv.detectZipBoundary, }); await pipeline(input, blockMap); const output = blockMap.compress(argv.compression); if (argv.output) { await writeFile(argv.output, output); } else { const f = await open(argv.input, 'a'); const size = Buffer.alloc(4); size.writeUint32BE(output.length); await f.write(output); await f.write(size); await f.close(); } console.log(JSON.stringify(blockMap.stats)); } main().catch((error) => { console.error(error); process.exit(1); });