s3-ng6-upload
Version:
Allows you to upload angular 6 apps to S3 buckets.
90 lines (76 loc) • 2.43 kB
JavaScript
function TestHook(fileUtils,Q){
fileUtils = fileUtils || require( './file-utils.js');
Q = Q || require('q');
return function SyncedFile (path){
var del = Q.defer();
var upload = Q.defer();
var remoteHash = Q.defer();
var action = Q.defer();
function foundFile(){
resolveDelete(false);
}
function globDone(){
resolveDelete(true);
}
function foundRemote(hash){
remoteHash.resolve(hash);
}
function remoteDone(){
remoteHash.resolve(false);
}
function resolveDelete(_del){
del.resolve({'delete':_del,path:path});
}
function resolveUpload(_upload) {
upload.resolve({'upload':_upload,path:path});
}
function resolveAction(_action){
action.resolve({'action':_action,path:path});
}
Q.spread([del.promise,remoteHash.promise],function(del,remoteHash){
var exists = !del.delete;
if(exists && remoteHash){
fileUtils.getContentHash(path).then(
function(localHash){
if(localHash === remoteHash){
resolveUpload(false);
resolveAction('nothing');
}
else {
resolveUpload(true);
resolveAction('upload')
}
},
function(reason){
console.log(reason);
action.reject(reason);
throw reason;
}
)
}
else if(exists){
resolveUpload(true);
resolveAction('upload');
}
else if(remoteHash){
resolveUpload(false);
resolveAction('delete');
}
else {
console.log('THIS SHOULD NEVER HAPPEN - SyncedFile in impossible state');
action.reject('This should never happen');
throw new Error('this should never happen!');
}
}).done();
this.foundFile = foundFile;
this.foundRemote = foundRemote;
this.globDone = globDone;
this.remoteDone = remoteDone;
this.action = action.promise;
this.delete = del.promise;
this.upload = upload.promise;
};
}
var SyncedFile = TestHook();
SyncedFile.TestHook = TestHook;
module.exports = SyncedFile;