cordova-app-loader
Version:
Cordova App Loader - remote update your cordova app
61 lines (55 loc) • 1.64 kB
JavaScript
var path = require('path');
var fs = require('fs');
var crypto = require('crypto');
function checksum(filename){
data = fs.readFileSync(filename, 'utf8');
return crypto.createHash('sha1').update(data).digest('hex');
}
var manifestFile = 'manifest.json';
var rootDir = process.cwd();
var args = process.argv.slice(-2);
args.forEach(function(arg){
if(arg.indexOf('.json') > -1) {
manifestFile = arg;
} else if(arg.indexOf('update-manifest') < 0){
rootDir = arg;
}
});
manifestFile = path.resolve(manifestFile);
rootDir = path.resolve(rootDir);
console.log('root='+rootDir);
console.log('manifest='+manifestFile);
var manifest;
try {
manifest = fs.readFileSync(manifestFile,'utf8');
manifest = JSON.parse(manifest);
if(typeof manifest !== "object") throw new Error('Manifest not an object!');
if(!manifest.files) throw new Error("Manifest has no files!");
} catch(e){
console.error('Invalid '+path.resolve(manifestFile),e,manifest);
process.exit(1);
}
var versionChecksum = "";
for(var key in manifest.files) {
try {
var filename = manifest.files[key].filename;
var version = checksum(path.resolve(rootDir,filename));
versionChecksum += version;
manifest.files[key].version = version;
} catch(e){
console.error('Could not hash file.',e);
}
}
if(typeof manifest.version === 'number'){
manifest.version++;
} else {
manifest.version = crypto.createHash('sha1').update(versionChecksum).digest('hex');
}
try {
fs.writeFileSync(
path.resolve(rootDir, manifestFile),
JSON.stringify(manifest,null,2)
);
} catch(e) {
console.error('Could not write manifest.json',e);
}