dojo-util
Version:
Dojo utilities including build system for optimizing JavaScript application performance, and DOH testing tool
65 lines (58 loc) • 1.67 kB
JavaScript
define([
"../buildControl",
"../fileUtils",
"../fs"
], function(bc, fileUtils, fs){
return function(resource, callback){
var
waitCount = 0,
errors = [],
onWriteComplete = function(err){
if(err){
errors.push(err);
}
if(--waitCount==0){
callback(resource, errors.length && errors);
}
},
doWrite = function(filename, text, encoding){
fileUtils.ensureDirectoryByFilename(filename);
waitCount++;
fs.writeFile(filename, bc.newlineFilter(text, resource, "writeCss"), encoding || "utf8", onWriteComplete);
// this must go *after* the async call
},
wroteExterns = 0;
try{
doWrite(resource.dest, resource.text);
if(resource.compactDest!=resource.dest){
doWrite(resource.compactDest, resource.compactText);
}
// only need to tranverse bc.destDirToExternSet once...
if(wroteExterns){
return callback;
}
wroteExterns = 1;
// bc.destDirToExternSet is a map from dest directory name to resourceSet;
// resourceSet is a map from src filename (complete with path) to dest filename (name only)
// bc.destDirToExternSet[dir][src]= dest implies copy filename src to dir + "/" + dest
var
destDirToExternSet = bc.destDirToExternSet,
dir, resourceSet, src;
for(dir in destDirToExternSet){
resourceSet = destDirToExternSet[dir];
for(src in resourceSet){
doWrite(dir + "/" + resourceSet[src], bc.resources[src].text, resource.encoding);
}
}
}catch(e){
if(waitCount){
// can't return the error since there are async processes already going
errors.push(e);
return 0;
}else{
return e;
}
}
return callback;
};
});