fix bugs, more tests
This commit is contained in:
parent
0a44f24813
commit
cc4952ac7c
11 changed files with 309 additions and 104 deletions
|
|
@ -53,6 +53,12 @@ function fillDefaults(config,callback) {
|
|||
if (config.assetSeperator === undefined) {
|
||||
config.assetSeperator = template.assetSeperator;
|
||||
}
|
||||
if (config.linkTargetSingleResult === undefined) {
|
||||
config.linkTargetSingleResult = template.linkTargetSingleResult;
|
||||
}
|
||||
if (config.downloadForce === undefined) {
|
||||
config.downloadForce = template.downloadForce;
|
||||
}
|
||||
callback(null,config);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -7,45 +7,61 @@ var factory = require('./factory');
|
|||
var config = require('./asset-assembler-config');
|
||||
|
||||
|
||||
function buildEnd(builder, targetFile, resultUriList, callback) {
|
||||
fs.appendFile(targetFile, builder.config.assetFooter, function (err) {
|
||||
function buildEnd(assembler, targetFile, resultUriList, callback) {
|
||||
fs.appendFile(targetFile, assembler.config.assetFooter, function (err) {
|
||||
if (err) {
|
||||
callback(err);
|
||||
} else {
|
||||
var buildTime = new Date().getTime() - builder.startTime,
|
||||
var buildTime = new Date().getTime() - assembler.startTime,
|
||||
buildResultSize = resultUriList.length,
|
||||
targetStats = fs.statSync(targetFile),
|
||||
targetSize = targetStats.size;
|
||||
|
||||
if (builder.config.linkTargetSingleResult) {
|
||||
resultUriList = [builder.config.linkTarget];
|
||||
if (assembler.config.linkTargetSingleResult) {
|
||||
resultUriList = [assembler.config.linkTarget];
|
||||
}
|
||||
builder.emit('file-write-post',targetFile);
|
||||
builder.emit('log','debug','target size: '+targetSize);
|
||||
builder.emit('log','info','build result size: '+resultUriList.length+' from: '+buildResultSize);
|
||||
builder.emit('log','info','build done in: '+buildTime+' ms.');
|
||||
builder.emit('result',resultUriList);
|
||||
builder.emit('end');
|
||||
assembler.emit('file-write-post',targetFile);
|
||||
assembler.emit('log','debug','target file: '+targetFile);
|
||||
assembler.emit('log','debug','target size: '+targetSize);
|
||||
assembler.emit('log','info','build result size: '+resultUriList.length+' from: '+buildResultSize);
|
||||
assembler.emit('log','info','build done in: '+buildTime+' ms.');
|
||||
assembler.emit('result',resultUriList);
|
||||
assembler.emit('end');
|
||||
callback();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
function downloadFile(builder, remoteUrl, localFile, callback) {
|
||||
builder.emit('file-download-pre',remoteUrl);
|
||||
builder.emit('log','debug','downloadFile: '+remoteUrl);
|
||||
function downloadFile(assembler, remoteUrl, localFile, callback) {
|
||||
assembler.emit('file-download-pre',remoteUrl);
|
||||
assembler.emit('log','debug','downloadFile: '+remoteUrl);
|
||||
fs.ensureFile(localFile, function(err) {
|
||||
if (err) {
|
||||
callback(err);
|
||||
} else {
|
||||
var stream = new fetch.FetchStream(remoteUrl);
|
||||
var streamCallbackErrorOnEnd = null;
|
||||
var streamCallback = function(err) {
|
||||
if (err) {
|
||||
streamCallbackErrorOnEnd = err;
|
||||
return;
|
||||
} else {
|
||||
callback(streamCallbackErrorOnEnd);
|
||||
}
|
||||
};
|
||||
stream.on('error', function(err) {
|
||||
callback(err);
|
||||
callback(err); // check !!
|
||||
//streamCallback(err);
|
||||
});
|
||||
stream.on('meta', function(meta) {
|
||||
if (meta.status !== 200) {
|
||||
streamCallback(new Error('Got status: '+meta.status));
|
||||
}
|
||||
});
|
||||
stream.on('end', function() {
|
||||
builder.emit('file-download-post',remoteUrl);
|
||||
callback();
|
||||
assembler.emit('file-download-post',remoteUrl);
|
||||
streamCallback();
|
||||
});
|
||||
stream.pipe(fs.createWriteStream(localFile));
|
||||
}
|
||||
|
|
@ -53,42 +69,42 @@ function downloadFile(builder, remoteUrl, localFile, callback) {
|
|||
}
|
||||
|
||||
|
||||
function downloadFileList(builder, downloadList, callback) {
|
||||
function downloadFileList(assembler, downloadList, callback) {
|
||||
if (downloadList.length === 0) {
|
||||
callback();
|
||||
return;
|
||||
}
|
||||
var download = downloadList.pop();
|
||||
downloadFile(builder, download.remoteUrl, download.localFile, function(err) {
|
||||
downloadFile(assembler, download.remoteUrl, download.localFile, function(err) {
|
||||
if (err) {
|
||||
callback(err);
|
||||
} else {
|
||||
downloadFileList(builder, downloadList, callback);
|
||||
downloadFileList(assembler, downloadList, callback);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
function aggregateFileList(builder, targetFile, aggregateList, readFile, callback) {
|
||||
function aggregateFileList(assembler, targetFile, aggregateList, readFile, callback) {
|
||||
if (aggregateList.length === 0) {
|
||||
callback();
|
||||
return;
|
||||
}
|
||||
var aggregateFile = aggregateList.pop();
|
||||
builder.emit('file-read-pre',aggregateFile);
|
||||
assembler.emit('file-read-pre',aggregateFile);
|
||||
readFile(aggregateFile, function(err, data) {
|
||||
if (err) {
|
||||
callback(err);
|
||||
} else {
|
||||
builder.emit('file-read-post',aggregateFile);
|
||||
builder.emit('log','debug','readFile: '+aggregateFile+' size: '+data.length);
|
||||
assembler.emit('file-read-post',aggregateFile);
|
||||
assembler.emit('log','debug','readFile: '+aggregateFile+' size: '+data.length);
|
||||
if (aggregateList.length > 0) {
|
||||
data = data + builder.config.assetSeperator;
|
||||
data = data + assembler.config.assetSeperator;
|
||||
}
|
||||
fs.appendFile(targetFile, data, function (err) {
|
||||
if (err) {
|
||||
callback(err);
|
||||
} else {
|
||||
aggregateFileList(builder, targetFile, aggregateList, readFile, callback);
|
||||
aggregateFileList(assembler, targetFile, aggregateList, readFile, callback);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
|
@ -114,9 +130,9 @@ function mapLocalFileSync(assembler, linkSource) {
|
|||
return linkSource;
|
||||
}
|
||||
|
||||
function buildAsset(builder, targetFile, readFile, callback) {
|
||||
var uriList = builder.config.linkSources;
|
||||
var localFileList = [];
|
||||
function buildAsset(assembler, targetFile, readFile, callback) {
|
||||
var uriList = assembler.config.linkSources;
|
||||
var readFileList = [];
|
||||
var resultUriList = [];
|
||||
var downloadList = [];
|
||||
|
||||
|
|
@ -134,11 +150,11 @@ function buildAsset(builder, targetFile, readFile, callback) {
|
|||
}
|
||||
assetItem = assetItem.substring(0,remoteIndex);
|
||||
}
|
||||
var localFile = mapLocalFileSync(builder, assetItem);
|
||||
var localFile = mapLocalFileSync(assembler, assetItem);
|
||||
|
||||
// override force on all files
|
||||
if (remoteForce===undefined && builder.config.downloadForce !== undefined) {
|
||||
remoteForce = builder.config.downloadForce;
|
||||
if (remoteForce===undefined && assembler.config.downloadForce !== undefined) {
|
||||
remoteForce = assembler.config.downloadForce;
|
||||
}
|
||||
|
||||
if (remoteUrl && (remoteForce || !fs.existsSync(localFile))) {
|
||||
|
|
@ -147,13 +163,16 @@ function buildAsset(builder, targetFile, readFile, callback) {
|
|||
localFile: localFile
|
||||
});
|
||||
}
|
||||
localFileList.push(localFile);
|
||||
readFileList.push(localFile);
|
||||
resultUriList.push(assetItem);
|
||||
}
|
||||
downloadList.reverse();
|
||||
localFileList.reverse();
|
||||
readFileList.reverse();
|
||||
|
||||
downloadFileList(builder, downloadList, function(err) {
|
||||
assembler.emit('log','debug','downloadList size: '+downloadList.length);
|
||||
assembler.emit('log','debug','readFileList size: '+readFileList.length);
|
||||
|
||||
downloadFileList(assembler, downloadList, function(err) {
|
||||
if (err) {
|
||||
callback(err);
|
||||
} else {
|
||||
|
|
@ -162,11 +181,11 @@ function buildAsset(builder, targetFile, readFile, callback) {
|
|||
// Log.warn("illegal entry: "+localFile);
|
||||
// continue;
|
||||
//}
|
||||
aggregateFileList(builder, targetFile, localFileList, readFile, function(err) {
|
||||
aggregateFileList(assembler, targetFile, readFileList, readFile, function(err) {
|
||||
if (err) {
|
||||
callback(err);
|
||||
} else {
|
||||
buildEnd(builder, targetFile, resultUriList, callback);
|
||||
buildEnd(assembler, targetFile, resultUriList, callback);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
|
@ -207,20 +226,10 @@ function runAssembler(assembler, readFile, callback) {
|
|||
}
|
||||
}
|
||||
|
||||
function runAssemblerSafe(assembler, readFile, callback) {
|
||||
runAssembler(assembler, readFile, function(err) {
|
||||
// send error
|
||||
if (err) {
|
||||
assembler.emit('error',err);
|
||||
}
|
||||
// finish callback
|
||||
if (callback !== undefined) {
|
||||
callback(err);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
function AssetAssembler(config, readFile) {
|
||||
if (config === undefined) {
|
||||
throw new Error('no config');
|
||||
}
|
||||
this.config = config;
|
||||
this.startTime = 0;
|
||||
this.readFile = readFile || factory.assembler.constructor.readFile();
|
||||
|
|
@ -242,7 +251,7 @@ AssetAssembler.prototype.run = function(callback) {
|
|||
if (err) {
|
||||
callback(err);
|
||||
} else {
|
||||
runAssemblerSafe(self, self.readFile, callback);
|
||||
runAssembler(self, self.readFile, callback);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
|
|
|||
|
|
@ -5,11 +5,13 @@ var async = require('async');
|
|||
var config = require('./assets-builder-config');
|
||||
|
||||
function buildStepAssemblerRun(builder, buildConfig, assembler, callback) {
|
||||
builder.emit('log','debug','runAssembler '+assembler.config.assetType);
|
||||
assembler.run(callback);
|
||||
}
|
||||
|
||||
function buildStepAssemblerFill(builder, buildConfig, assembler, callback) {
|
||||
var assemblerFill = buildConfig.assemblerFill || builder.config.assemblerFill;
|
||||
builder.emit('log','debug','assemblerFill: '+Object.keys(assemblerFill));
|
||||
assemblerFill(assembler, function(err) {
|
||||
if (err) {
|
||||
callback(err);
|
||||
|
|
@ -21,6 +23,7 @@ function buildStepAssemblerFill(builder, buildConfig, assembler, callback) {
|
|||
|
||||
function buildStepAssemblerCreate(builder, buildConfig, assemblerConfig, callback) {
|
||||
var assemblerCreate = buildConfig.assemblerCreate || builder.config.assemblerCreate;
|
||||
builder.emit('log','debug','assemblerCreate: '+Object.keys(assemblerCreate));
|
||||
assemblerCreate(assemblerConfig, function(err, assembler) {
|
||||
if (err) {
|
||||
callback(err);
|
||||
|
|
@ -36,7 +39,7 @@ function buildStepConfigFill(builder, buildConfig, assemblerConfig, callback) {
|
|||
if (assemblerConfig.assetType === undefined) {
|
||||
assemblerConfig.assetType = builder.currentAssetType;
|
||||
}
|
||||
|
||||
builder.emit('log','debug','configFill: '+Object.keys(configFill));
|
||||
configFill(assemblerConfig, function(err) {
|
||||
if (err) {
|
||||
callback(err);
|
||||
|
|
@ -48,6 +51,7 @@ function buildStepConfigFill(builder, buildConfig, assemblerConfig, callback) {
|
|||
|
||||
function buildStepConfigCreate(builder, buildConfig, callback) {
|
||||
var configCreate = buildConfig.configCreate || builder.config.configCreate;
|
||||
builder.emit('log','debug','configCreate: '+Object.keys(configCreate));
|
||||
configCreate(function(err, assemblerConfig) {
|
||||
if (err) {
|
||||
callback(err);
|
||||
|
|
@ -71,6 +75,7 @@ AssetsBuilder.prototype.__proto__ = events.EventEmitter.prototype;
|
|||
|
||||
AssetsBuilder.prototype.runAll = function(callback) {
|
||||
var self = this;
|
||||
self.emit('log','debug','runAll started.');
|
||||
config.checkConfig(self.config,function(err) {
|
||||
if (err) {
|
||||
callback(err);
|
||||
|
|
@ -93,10 +98,11 @@ AssetsBuilder.prototype.runAll = function(callback) {
|
|||
|
||||
AssetsBuilder.prototype.runAsset = function(name) {
|
||||
var self = this;
|
||||
if (name === undefined) {
|
||||
throw new Error('no name');
|
||||
}
|
||||
self.emit('log','debug','runAsset started for: '+name);
|
||||
return function(callback) {
|
||||
if (name === undefined) {
|
||||
throw new Error('no name');
|
||||
}
|
||||
if (callback === undefined) {
|
||||
throw new Error('no callback');
|
||||
}
|
||||
|
|
@ -106,7 +112,7 @@ AssetsBuilder.prototype.runAsset = function(name) {
|
|||
} else {
|
||||
var buildConfig = self.config.assets[name];
|
||||
if (buildConfig === undefined) {
|
||||
throw new Error('no asset config found');
|
||||
callback(new Error('no asset config found'));
|
||||
}
|
||||
self.currentAssetType = name;
|
||||
buildStepConfigCreate(self,buildConfig,callback);
|
||||
|
|
|
|||
|
|
@ -118,7 +118,11 @@ var builderAssemblerCreate = {
|
|||
};
|
||||
|
||||
var builderEmptyCallback = function () {
|
||||
return function () {};
|
||||
return function (object, callback) {
|
||||
if (callback !== undefined) {
|
||||
callback();
|
||||
}
|
||||
};
|
||||
};
|
||||
|
||||
module.exports = {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue