71 lines
1.4 KiB
JavaScript
71 lines
1.4 KiB
JavaScript
'use strict';
|
|
|
|
const
|
|
fs = require('fs'),
|
|
path = require('path'),
|
|
walk = require('walk'),
|
|
p = require('path');
|
|
|
|
fs.mkdirPSync = function(dirPath) {
|
|
try {
|
|
fs.mkdirSync(dirPath);
|
|
} catch(err) {
|
|
if(err.errno === -4058 || err.errno === -2) {
|
|
fs.mkdirPSync(path.dirname(dirPath));
|
|
fs.mkdirPSync(dirPath);
|
|
} else if(err.errno === -4075) {
|
|
return "EXIST";
|
|
} else {
|
|
return "NOT OK";
|
|
}
|
|
}
|
|
return "OK";
|
|
}
|
|
|
|
class Asar {
|
|
|
|
constructor(filePath) {
|
|
this.path = filePath;
|
|
this.files = [];
|
|
}
|
|
|
|
extract(statusCb, progressCb, cb) {
|
|
this.walker = walk.walk(this.path, { followLinks: false });
|
|
statusCb("Creating Directories");
|
|
this.walker.on('file', (root, stat, next) => {
|
|
this.files.push(`${root}/${stat.name}`);
|
|
try {
|
|
fs.statSync(root.replace("app.asar", "app"));
|
|
} catch(err) {
|
|
fs.mkdirPSync(root.replace("app.asar", "app"));
|
|
}
|
|
next();
|
|
});
|
|
|
|
this.walker.on('end', () => {
|
|
var self = this;
|
|
statusCb("Copying files");
|
|
var p = 1;
|
|
var filecount = this.files.length;
|
|
|
|
function copy(files, index) {
|
|
if(index >= filecount) {
|
|
statusCb("Finished extracting app package");
|
|
cb(null);
|
|
return;
|
|
}
|
|
setTimeout(() => { self.copyfile(files, index, copy) }, 1);
|
|
progressCb(index, filecount);
|
|
}
|
|
|
|
copy(this.files, 0);
|
|
});
|
|
}
|
|
|
|
copyfile(files, index, cb) {
|
|
fs.writeFileSync(files[index].replace("app.asar", "app"), fs.readFileSync(files[index]));
|
|
cb(files, index+1);
|
|
}
|
|
}
|
|
|
|
module.exports = Asar; |