OpenAsar/poly/yauzl.js

39 lines
1 KiB
JavaScript
Raw Normal View History

2022-01-15 11:29:22 +00:00
// Jank replacement for yauzl by just using unzip where it expects and skipping (speed++, size--, jank++)
const { execFile } = require('child_process');
2022-03-11 13:44:16 +00:00
const mkdirp = require('mkdirp');
2022-01-14 14:02:26 +00:00
2022-03-11 13:44:16 +00:00
exports.open = async (zipPath, _opts, callback) => {
const extractPath = `${global.moduleDataPath}/${zipPath.split('/').pop().split('.')[0].split('-')[0]}`;
2022-01-14 14:02:26 +00:00
const listeners = [];
const errorOut = (err) => {
listeners.error(err);
};
callback(null, {
on: (event, listener) => {
listeners[event] = listener;
},
2022-01-15 11:29:22 +00:00
readEntry: () => {}, // Stubs as not used
2022-01-14 14:02:26 +00:00
openReadStream: () => {},
close: () => {}
});
2022-03-11 13:44:16 +00:00
mkdirp.sync(extractPath);
2022-01-14 14:02:26 +00:00
2022-03-11 13:44:16 +00:00
const proc = execFile('unzip', ['-q', '-o', zipPath, '-d', extractPath]);
2022-01-14 14:02:26 +00:00
proc.stderr.on('data', errorOut);
2022-01-14 14:02:26 +00:00
proc.on('error', (err) => {
if (err.code === 'ENOENT') {
require('electron').dialog.showErrorBox('Failed Dependency', 'Please install "unzip", exiting');
process.exit(1); // Close now
}
2022-01-14 14:02:26 +00:00
errorOut(err);
});
2022-03-10 21:37:12 +00:00
proc.on('close', () => listeners.end());
2022-01-14 14:02:26 +00:00
};